1.1 软件危机
软件危机:计算机软件在开发和维护的过程中所遇到的一系列严重问题;
-
软件危机的7项典型表现:
a. 对软件开发成本和进度的估计常常很不准确;
b. 用户对“已完成的”的软件系统不满意的现象经常发生;
c. 软件产品的质量往往靠不住;
d. 软件常常是不可维护的;
e. 软件通常没有适当的文档资料;
f. 软件成本在计算机系统成本中所占的比例逐年上升;
g. 软件开发生产率提高的速度,往往跟不上计算机应用迅速普及深入的趋势。
软件生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,要经历的一个漫长时期。
为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好的开发和维护计算机软件的一门新兴学科。
1.2 软件工程
软件工程是:①把系统的、可规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。
-
软件工程的7条基本原理:
a. 用分阶段的生命周期计划严格管理;
b. 坚持进行阶段评审;
c. 实行严格的产品控制;
d. 采用现代程序设计技术;
e. 结果应能清楚地审查;
f. 开发小组的人员应该少而精;
g. 承认不断改进软件工程实践的必要性。
-
软件工程方法学:
a. 软件生命周期学(传统方法学);
b. 面对对象方法学。
1.3 软件生命周期
1.4 软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,规定了完成各项任务的工作步骤。(软件过程必须科学有效)
生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此也称为过程模型。
-
瀑布模型:应用最广泛的过程模型,有下述几个特点
a. 阶段间具有顺序性和依赖性;(前一阶段的输出文档就是后一阶段的输入文档)
b. 推迟实现的观点;(清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现)
c. 质量保证的观点。(每个阶段都必须完成规定的文档并在结束前对文档进行评审)
-
快速原型模型:快速原型是快速建立起来的可以在计算机上运行的程序,用户试用原型系统后提出意见,开发人员快速修改,重复直到完成开发。
a. 不带反馈环,基本上做到线性顺序开发;
b. 本质是快速,软件产品一旦交付给用户使用之后,维护便开始了。
-
增量模型:也称为渐增模型,把软件产品作为一系列的增量构件来设计、编码、集成和测试。
a. 第一个增量构件往往实现软件的基本需求,提供最核心的功能;
b. 软件产品分解成增量构件时唯一必须遵守的约束条件是,当把新构件集成到现有软件中时,所形成的产品必须是可测试的;
c. 优点1是能在较短的时间内向用户提交可完成部分工作的产品,优点2是逐步增加产品功能可以使用户有较充裕的时间学习的适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。
d. 困难是,每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
-
螺旋模型:基本思想是使用原型及其他方法来尽量降低风险。(可以看作在每个阶段前都增加了风险分析过程的快速原型模型)
a. 螺旋模型有许多优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
b. 主要适用于内部开发的大规模软件项目。(风险过大时方便中止项目)
c. 主要优势在于它是风险驱动的,也是一个弱点,需要开发人员有丰富的风险评估经验。
6.喷泉模型:是典型的面向对象的软件过程模型之一,体现了面向对象软件开发过程迭代和无缝的特性。
Rational 统一过程:(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整而且完美的软件过程。
-
RUP 总结的6条最有效的软件开发经验(最佳实践)
a. 迭代式开发;
b. 管理需求;
c. 使用基于构件的体系结构;
d. 可视化建模;
e. 验证软件质量;
f. 控制软件变更
RUP 软件开发生命周期:核心工作流、工作阶段、RUP迭代式开发。
-
敏捷过程与极限编程
a. 敏捷软件开发宣言:个体的交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;响应变化胜过遵循计划。
b. 极限编程(eXtreme Programming,XP)是敏捷过程中最富盛名的一个,其中“极限”是指把好的开发实践运用到极致。
微软过程:作为一种适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式,微软综合了 Rational 统一过程和敏捷过程的许多优点,但在方法、工具和产品等方面的论述不如RUP和敏捷过程全面。