软件工程复习
第一章 软件工程学概述
软件危机
-
软件危机的内容:
- 如何开发软件,以满足对软件日益增长的需求
- 如何维护数量不断膨胀的已有软件
-
软件危机的典型表现:
- 对软件开发成本和进度的估计常常很不准确
- 用户对“已完成的”软件系统不满意的现象经常发生
- 软件产品的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本种所占的比例逐年上升
- 软件开发生产率的提高的速度,远远跟不上计算机应用迅速普及深入的趋势
-
产生软件维护的原因:
- 管理和控制软件的过程相当困难
- 软件维护通常意味着改正或修改原来的设计,客观上使得软件较难维护
- 相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误地方法和技术
- 对用户要求没有完整的定义
-
程序编写完毕完成之后还需要经过大量的测试工作(需要的工作量通常占软件开发全部的40%~50%)才能最终交付使用。所以,编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,编写软件所需的工作量只占软件开发全部工作量的10%~20%。
-
软件开发在不同的阶段进行修改需要付出的代价是很不相同的:
- 早期引入变动,涉及到的面少,代价比较低
- 中期,软件配置的许多成分已经完成,引入一个变动要对已经完成的配置部分作出相应的修改,所以代价剧增
- 后期引入变动所需要的代价是早期的2~3个数量级
-
软件的定义:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。
-
消除软件危机的途径:既要有技术措施,又要有必要的组织管理措施
- 首先应该对计算机软件有一个正确的认识
- 必须成分认识到软件开发不是某种个体劳动的神秘技巧,而更因该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
- 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法
- 应该开发和使用更好的软件工具
软件工程
-
软件工程的定义:采用工程的概念、原理、技术和方法来开发与维护软件,把经过事件考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
-
软件工程具有下述的特征:
-
软件工程专注于大型程序的构造
-
软件工程的中心课题是控制复杂性
-
软件经常变化
-
开发软件的效率非常重要
-
和谐地合作是开发软件地关键
-
软件必须有效地支持它的用户
-
在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
-
软件工程的七条基本原理:
-
用分阶段的生命周期计划严格管理
-
坚持进行阶段评审
-
实行严格的产品控制
-
采用现代化程序设计技术
-
结果应能清楚地审查
-
开发小组地人员应该少而精
-
承认不断改进软件工程地必要性
-
软件生命周期:主要由软件定义、软件开发、运行维护三个时期组成
-
软件定义时期:
- 问题定义:定义具体解决的问题是什么
- 可行性研究:对上层问题进行分析和设计,研究问题的范围,探索这个问题是否值得去解,是否由可行的解决方法
- 需求分析:确定目标系统必须具备哪些功能
-
软件开发时期:
- 总体设计:怎样实现目标系统,给出很多种方案分析成本或者优缺点这种,另一个任务就是确定程序由哪些模块组成以及模块间的关系
关键: 模块化 模块的组织=设计体系结构 - 详细设计:详细设计每个模块
关键:确定每个模块功能所需要的算法和数据结构,算法和数据结构一定在详细设计 - 编码和单元测试
- 综合测试
- 总体设计:怎样实现目标系统,给出很多种方案分析成本或者优缺点这种,另一个任务就是确定程序由哪些模块组成以及模块间的关系
-
软件维护时期:使软件持久地满足用户的需要
-
软件过程模型 ⭐
-
瀑布模型 应用最广泛
- 是一种文档驱动的模型
- 反馈环——后面阶段发现前面阶段的错误需要沿反馈线反馈给前面的阶段,修正前面阶段的产品之后再回来继续完成之后的任务。
- 特点:1.阶段间具有顺序性和依赖性 2.推迟实现的观点 3.质量保证的观点
- 几乎完全依赖于书面的规格说明,很可能导致最终开发的软件产品不能真的满足用户需要
- 缺点:
- 开发过程一般不能逆转,否则代价太大。
- 规格说明很难理解:“我知道这是按我的要求做的,但不是我想要的样子。”
- 软件的实际情况必须到项目开发的后期客户才能看到。
-
快速原型模型
- 快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终能完成的产品的一个子集。
- 不带反馈环—软件开发基本是线性顺序
- 原型系统的内部结构并不重要,重要的是,必须迅速地构建原型然后根据用户意见迅速地修改原型。
-
增量模型
- 把软件作为一系列地增量构建来设计、编码、集成和测试。每个构件由多个相互作用地模块构成,并能够完成特定地功能。
- 第一个增量构件提供基本的文件管理、编辑和文档生成功能。
- 第二个增量构件提供更完善地编辑和文档生成功能
- 第三个增量构件实现拼写和语法检查功能
- 第四个增量构件完成高级的页面排版功能
- 优点:能在较短的时间内向用户提交可完成部分工作的产品,逐步增加产品功能可以使用户由较充裕的时间学习和适应产品,从而减少一个全新的软件可能给客户组织带来的冲击
- 限制:软件体系结构必须是开放的(开放的软件体系结构可维护性优于封闭的软件)
- 风险大的一种增量模型:并行规格说明,设计等可能会导致冒构件无法集成到一起的风险,除有可能整个工程毁于一旦。
-
螺旋模型
- 使用原型及其他方法来尽量降低风险。可以把它看作每个阶段之前都增加了风险分析的过程的快速原型模型
- 优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;维护只维护一