1.软件的概念
- 软件:计算机程序、数据以及各种相关文档的集合。软件=程序+数据+相关文档
2.软件危机
- 软件危机定义:在计算机软件的开发和维护过程中所遇到的一系列严重问题。
- 软件危机的典型表现:1、对软件开发成本和进度的估计常常很不准确 2、用户对“已完成的”软件系统不满意的现象经常发生 3、软件产品的质量往往靠不住。 4、软件常常是不可维护的。 5、软件通常没有适当的文档资料。 6、软件成本在计算机系统总成本中所占的比例逐年上升。 7、软件开发生产率提高的速度,远远跟不上计 算机应用迅速普及深入的趋势。
- 产生软件危机的原因:一。与软件本身特点有关——逻辑产品,退化,规模大,对用户要求没有完整准确的认识。二。与软件开发与维护的方法不正确有关。
- 消除软件危机的途径:按工程化的原则和方法组织软件开发工作。
3.软件工程
- 软件工程是指导计算机软件开发和维护的一门工程学科。
- 1968年,第一届NATO会议上,提出:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理
- 1993年,IEEE定义:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程。也就是把工程应用到软件;②研究①中的途径。
- 软件工程具有的本质特征:
- 软件工程关注于大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐的合作是开发软件的关键
- 软件必须有效地支持它的用户
- 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
- 软件工程基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的成员应该少而精
- 承认不断改进软件工程实践的必要性
- 软件工程方法学
- 传统方法学:也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技 术的运用。
- 特点:传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。 每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。
- 面向对象方法学:与传统方法相反,面向对象方法把数据和行为看成是同等重要的, 它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
- 四个要点:①把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。②把所有对象都划分成类。③按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。④对象彼此间仅能通过发送消息互相联系。
- 软件工程三要素:方法,工具,过程
4.软件生命周期
- 概念:软件也有一个孕育、诞生、成长、成熟和衰亡的生存过程
- 生命周期的划分原则:①各阶段的任务应尽可能相对独立。②同一阶段各项任务的性质尽可能相同
- 划分生命周期的优点:①有利于软件开发工程的组织和管理。②降低了整个软件开发过程的困难程度。③对每个阶段都可选用最优的管理方法。
- 软件生命周期由软件定义、软件开发和运行维护(或软件维护)3个时期组成,每个时期又分若干阶段
- 软件定义:①问题定义②可行性研究③需求分析
- 软件开发:①总体设计②详细设计③编码和单元测试④综合测试
- 软件维护:运行维护(成本占比最高)
5.软件过程
- 软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
- 瀑布模型(线性模型)
- 特点:①阶段间具有顺序性和依赖性②推迟实现的观点③质量保证观点
- 优点:①可强迫开发人员采用规范的方法②严格地规定了每个阶段必须提交的文档③ 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
- 缺点:由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况。瀑布模型只适用于项目开始时需求已确定的情况。
- 使用范围:①用户的需求非常清楚全面,且在开发过程中没有或很少变化②开发人员对软件的应用领域很熟悉③用户的使用环境非常稳定④开发工作对用户参与的要求很低
- 快速原型模型
- 概念:快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集(实现核心功能的工作机)。
- 优点:软件产品的开发基本上是线性顺序进行的
- 缺点:准确的原型设计比较困难
- 使用范围:①对所开发的领域比较熟悉而且有快速的原型开发工具②适用于进行产品移植或升级时,或对已有产品原型进行客户化工作时。
- 增量模型
- 概念:增量模型也称为渐增模型。使用增量模型开发软件时, 把软件产品作为一系列的增量构件来设计、编码、集成和测 试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
- 优点:能在较短时间内向用户提交可完成部分工作的产品;逐步增加产品功能可以使用户有充裕的时间学习和适用新产品,从而减少一个全新软件可能给客户组织带来的冲击。
- 缺点:采用增量模型比采用瀑布模型和快速原型更需要精心的设计;软件体系结构必须是开放的
- 使用范围:进行已有产品升级或新版本开发;对完成期限严格要求的产品
- 螺旋模型
- 概念:螺旋模型的基本思想是,使用原型及其他方法来尽量降低 风险。理解这种模型的一个简便方法,是把它看作在每个阶 段之前都增加了风险分析过程的快速原型模型。
- 优点:①设计上的灵活性,可以在项目的各个阶段进行变更②以小的分段来构建大型系统。使成本计算变的更加简单
- 缺点:过多的迭代次数会增加开发成本,延迟提交时间
- 使用范围:只适合于大规模的软件项目
- 喷泉模型
- 概念:“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。
- 优点:各个阶段没有明显得界限,开发人员可以同步进行开发。提高了项目开发效率,节省开发时间
- 缺点:需要大量开发人员,不利于项目的管理,要求严格管理文档,使得审核的难度加大
- 使用范围:面向对象的软件开发过程
- Rational统一过程(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整而且完美的软件过程。
- 最佳实践:
- 迭代式开发
- 管理需求
- 使用基于构件的体系结构
- 可视化建模
- 验证软件质量
- 控制软件变更
- 敏捷开发的价值观:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;响应变化胜过遵循计划