本贴为B站大连工业大学老师的网课笔记,教材为张海藩第6版,适用于考研和期末复习。
导图比较拥挤,看不清可以单独保存或者放大页面。
一.软件:
软件指的是计算机程序、文档运行程序必须的数据、方法与规则。
方法指的是软件开发所用到的方法,规则是开发软件时所遵循的规则。
程序在文档中说明,在规则中实现。
简化定义:程序+数据+文档
二.软件分类:
A.基于功能划分
1.系统软件:
与计算机硬件紧密配合使计算机各个部件与相关软件及数据协调、高效工作的软件。 如操作系统、编译程序等。
2.支撑软件:
协助用户开发软件的工具性软件。如各种集成开发环境IDE
3.应用软件:
(1)商业数据处理软件 :商业数据处理软件 管理信息系统(MIS) 企业资源计划(ERP)
(2)工程与科学计算软件 :CAD/CAM(计算机辅助设计/制造) 仿真模拟、天气预报。
(3)智能产品嵌入软件 :驻留在智能产品内存,控制产品工作的 软件。 数码相机、GPS等
(4) 人工智能软件:利用非数值算法去解决复杂问题的软件。 专家系统、模式识别软件、人工神经网络软件(具有某个领域专家的知识和经验,代替某个领域的专家来解决一系列问题)
(5) 个人计算机软件:文字处理系统、电子表格、游戏娱乐软件。
B.基于规模划分
三.软件发展阶段(软件工程本质上是因为软件危机诞生的学科 ):
1.程序设计阶段:软件生产个体化 ,规模小,编写者和使用者同一个人软件是设计者头脑中隐含过程 ,除程序清单外,无文档材料保存。
2.程序系统阶段:产品软件由专门软件开发组织开发——软件作坊,市面上流传诸多质量不高的软件。软件开发组织,沿用早期个体化软件开发方法。
软件危机:软件维护工作耗费大量资源软件工程 ,软件作坊有时甚至没有精力去开发新软件。
1968年,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程。(之所以称为作坊,在于描述其做工不精)
3.软件工程:软件危机得到缓解,打破软件生产个体化特征,工程化的设计原则、方法和标准新的挑战,出现微处理器和个人计算机、分布式处理系统 局域网、广域网、宽带数字通讯(并没有结束软件危机)
4.第四阶段:软件架构发生变化
(1)集中主机环境 :致命弱点在于无法实现数据共享
(2)客户机/服务器(二层) :应用程序放在客户端,数据存储放在服务器端——弱点在于客户端压力大,承担所有应用程序的工作
(3)客户机/服务器(三层) :数据存储仍然在数据库服务器端,而应用程序分为了人机交互和业务处理两大部分,人机交互放在客户端,而业务处理则在应用服务器端。该种软件架构方法和我们常说的"前端——后端——数据库"的理解类似,是一种流行的架构方式。(也和常说的C/S架构一致)
(4)浏览器/服务器:与前者同理,只不过不需要安装客户端软件。(即为通常说的B/S架构模式)
(5)新技术 :专家系统、人工智能、神经网络、并行计算 网格技术、高信度计算、云计算
注意:软件工程在软件发展的第二个阶段产生
四.软件危机:
(1)开发成本和进度估计不准、延迟交付、取消项目
(2)用户对已交付软件不满意,开发人员对用户信息交流不充分,产品不符合用户需求
(一个典型错误理解:开发语言不符合或者功能无法实现等错误,并不是软件危机,这只是个体所出现的一系列问题,并非整个行业面对的困难)
(3)软件产品质量靠不住 软件产品保证技术(审查、复审、测试)未坚持不懈应用软件开发全过程——维护花费大量精力,无法继续开发软件
(4)软件可维护性差,开发时未考虑,很多错误难以改正
(5)软件没有适当文档资料,文档资料应在软件开发过程中产生,保证最新
五.软件工程:
定义:把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程中,研究其实现途径。
1.软件工程技术:软件开发方法学 软件开发过程 软件工具和软件工程环境
2.软件工程管理:软件管理学 软件经济学 软件心理学
六.软件生存周期:
1.定义:软件从产生、发展到成熟、直至衰亡为止。
2.泛类划分:软件定义,软件开发 ,软件维护。
3.国标《计算机软件开发规范》:
- 可行性研究与计划
- 需求分析
- 总体设计
- 详细设计
- 实现(编码和单元测试)
- 集成测试
- 确认测试
- 使用和维护
4.可行性研究与计划
关键任务: 解决问题是什么?有行得通解决方法?粗略计划
问题定义报告: 问题性质、工程目标、工程规模。
可行性研究报告: 经济、技术、社会(操作)可行性。
项目开发计划: 粗略
(两个文档:问题定义报告,可行性研究报告)
5.需求分析(What):
关键任务:目标系统必须作什么?
可行性研究的需求分析是粗略、不准确;需求分析是完整、准确、清晰、具体。 (具体描述用户的全部需求)
需求规格说明书:目标系统需求。(最核心的文档,记载了以后软件需要实现什么样的功能)
6.总体设计(How):
关键任务: 怎样实现目标系统? 根据需求设计方案;分析推荐最佳方案;设计软件结构等。
总体设计说明书: 记录总体设计结果
7.详细设计:
关键任务: 该怎样具体实现系统? 设计每个模块的算法和数据结构。
详细设计说明书: 用适当表达工具表达算法和数据结构。
8.实现(编码和单元测试):
关键任务: 选择语言、工具翻译详细设计结果、测试模块。 (单元测试往往就是模块测试)
实现阶段文档: 程序清单、单元测试报告。
9.集成测试:
关键任务: 将经过单元测试模块组装起来进行测试, 通过测试使软件达到预定要求。
(单元测试有时测不出来的问题,会在集成测试中暴露,比如某些接口)
测试报告: 测试计划、测试方案、测试结果。
10.确认测试(验收测试):
关键任务: 由用户按需求规格说明书规定进行测试。
测试报告: 测试计划、测试方案、测试结果。
11.使用与维护
关键任务: 通过必要维护活动使系统持久满足用户要求。
维护类型:
- 改正性维护:软件运行过程中发现错误,进行维护。
- 适应性维护:软件运行软硬件环境变化,进行的维护。
- 完善性维护:用户要求改进或扩充软件,进行的维护。
- 预防性维护:为将来的维护作准备。
实际从事软件开发工作时,软件规模、类型、开发环境及技术方法等因素会影响到阶段划分,及各阶段的执行顺序,形成不同生存周期模型,又称过程模型。(各种阶段可以改变)
七.软件过程模型(又称为软件生存周期模型)
1.瀑布模型:使用最早应用最广,在之前软件开发模型处于比较混乱的状态
- 阶段具有顺序性和依赖性:前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
- 推迟实现观点:瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。(尽量让编码的过程靠后)
- 质量保证观点:瀑布模型每阶段坚持两个重要做法: 一是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。 二是每阶段结束前对文档评审。
瀑布模型是非常重视文档书写的一种模型,每个阶段必须有非常准确的文档。
而弱点在于,发现上一个阶段又问题时,无法回溯修改错误——因此,常见的瀑布模型均带有反馈环。
优点在于,提高软件质量,降低维护成本,缓解软件危机。
缺点在于,模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。此外,用户也无法以很快的速度想出全部的需求
2.快速原型模型:快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。(雏形法,用尽量少的时间)
优点: 确定需求上优于瀑布模型(通过原型与用户交互)——适用于需求并不明确的软件模型; 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用; 有的软件原型可以成为最终产品的一部分。
缺点: 快速建立的系统结构加连续修改可能导致产品质量低下;原型系统的内部结构可能不好。
3.增量模型(并行开发) :开发软件时将软件产品作一系列增量构件设计、编码、集成和测试——不同于前两者,而是分批向用户提交产品。
优点: 较短时间向用户提交可完成有用工作产品; 用户有充裕时间学习适应产品;软件结构必须开放,方便向现有产品加入新构件(缺点在于难以实现开放)。
4.风险更大的增量模型(更大程度上提高并行度):
前述增量模型在实现构件前完成总体的需求分析、规格说明和概要设计,相对来说风险较小。而风险更大增量模型是,确定用户需求后,各构件集并行构建。(需求分析结束后即开始并行)
虽然大幅提高了软件开发的效率,但是最后的集成难度将增大——仅适合工期非常着急的情况。
5.螺旋模型:加入风险分析,常指导大型软件项目。
风险:超期、超预算、行业竞争等
笛卡尔坐标四象限表达四方面活动:
制定计划:确定目标、选定方案、设定约束条件。
风险分析:评估方案,识别和消除风险。
实施工程:软件开发
客户评估:评价开发工作,计划下一阶段工作。
沿螺线自内向外每旋转一圈开发出更完善新版本。
(从内到外,逐渐扩大螺线圈)
直到无法通过风险分析这一过程,才把现有的软件产品发布出去。
优点: 大型软件开发项目有较好的风险控制;
缺点: 需要风险评估的经验——否则后果非常严重;契约开发通常需要事先指定过程模型和发布产品;普及不如前述模型,周期很长。
6.喷泉模型: 面向对象生命周期模型,体现迭代和无缝特性。
迭代: 求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
无缝: 分析、设计、编码各阶段间不存在明显边界。 (不像结构化的方法~)
圆环代表无边界,向下的箭头代表求精。
优点: 无缝,可同步开发,提高开发效率,节省开发时间, 适应面向对象软件
缺点: 可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。
7.Rational统一过程: 由Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增方式开发软件。 Rational统一过程是一个二维生命周期模型。(比较热门)
四个阶段周而复始,从而构建出一个较为完善的软件系统来~(每个阶段逐渐细化)
Rational统一过程有9个核心工作流,包括6个核心过程工作流(前6个)和3个核心支持工作流(后3个)。
Rational统一过程有4个连续阶段,每个阶段有明确目标,通过一次或多次迭代完成。
Rational统一过程优点: 不断的版本发布成为一种团队日常工作的真正驱动力; 将发现问题、制定方案和解决过程集成到下一次迭代; 迭代开发,降低风险; 更好地安排产品开发的辅助过程。(该公司推出了UML过程语言)
8.微软过程——生产实践中诞生:
微软过程的特点就是在每个阶段设置各自的里程碑
类似于螺旋模型~:
- 规划阶段 开展市场调查研究,结合公司战略形成产品的远景目标。
- 设计阶段 根据产品远景目标,完成软件功能规格说明和总体设计, 确定产品开发的主要进度。
- 开发阶段 完成产品中所有构件的开发工作。
- 稳定阶段 实行全面的内部和外部测试,最终形成可发布的RTM版本
- 发布阶段 确认产品质量符合发布标准后,发布产品及相关消息
递进式的开发策略:解决问题的及时性、不确定和变更因素可控性、缩短产品上市周期,好处在于可以及时解决问题。
在占领市场方面,该过程有助于先开发出小产品,再进一步推进,不断完善功能。