4.1 软件过程
过程是软件工程的一个基本要素
过程:是一组将输入转化为输出的相互关联或相互作用的活动。
过程方法:系统地识别和管理组织内所使用的过程,保证更有效地获得期望的结果。
通常过程包括实现过程、管理过程和支持过程三种类型
实现过程:提供有价值产品或服务的关键性活动,这些活动负责把输入转化为输出
支持过程:负责提供所需要的资源和能力,从而使关键性的实现活动能够顺利进行
管理过程:衡量和评价实现过程和支持过程效能,建立起组织的质量管理体系
软件过程是为了获得高质量软件而实施的一系列活动,包括以下一系列软件开发的实现活动
问题定义:人们通过开展技术探索和市场调查等活动,研究系统的可行性和可能的 解决方案,确定待开发系统的总体目标和范围。
需求开发:在可行性研究之后,分析、整理和提炼所收集到的用户需求,建立完整的 需求分析模型,编写软件需求规格说明。
软件设计:根据需求规格说明,确定软件体系结构,进一步设计每个系统部件的实现 算法、数据结构及其接口等。
软件构造:概括地说是将软件设计转换成程序代码,这是一个复杂而迭代的过程,要求 根据设计模型进行程序设计以及正确而高效地编写和测试代码。
软件测试:检查和验证所开发的系统是否符合客户期望,主要包括单元测试、子系统 测试、集成测试和验收测试等活动。
软件维护:系统投入使用后对其进行改进,以适应不断变化的需求。完全从头开发的 系统很少,将软件系统的开发和维护看成是一个连续过程更有意义。
软件开发管理
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、 人员、进度、质量和风险进行控制和管理的活动。
软件配置管理是通过执行版本控制、变更控制的规程,并且使用合适的配置管理软件, 来保证所有产品配置项的完整性和可跟踪性。
4.2 软件过程模型
软件过程模型是对软件过程的抽象描述
常见的软件开发模型包括:瀑布模型、原型化模型、迭代式开发模型、可转换模型
瀑布模型
将基本的开发活动看成是一系列界限分明的独立阶段,这是 一种计划驱动的软件过程,有利于规范软件开发活动。以预测性为原则 、以文档驱动开发过程 、以过程控制为核心。
它把软件的生命周期划分为:需求定义与分析、软件设计、软件构造、软件测试、软件运行与维护等若干基本活动,并规定了这些活动自上而下相互衔接的固定次序如同瀑布流水一般。
在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果实施完成所需的工作内容,当前活动的工作结果再进行严验证,如果验证通过,就把这个结果作为下一项活动的输入继续进行下一项活动,否则返回修改。
缺点:
瀑布模型只有到测试阶段才能真正地验证和确认软件的功能和性能,但这个时候所以的代码都已经开发完成,很难返回去纠正需求的问题和设计的缺陷,缺少了对变化的适应
各个阶段的划分完全固定,阶段之间产生大量的文档,增加了开发工作量,由于开发过程是线性的用户只有在整个过程结束时才能看到开发成果,开发过程中间很难相应用户的变更要求,早期的错误也要等到后期的测试阶段才能发现。
因此瀑布模型仅适用于软件需求在开发初期就可以被完全确定的项目,而且用户使用的环境也要很稳定。
原型化模型
原型化模型需要迅速建造一个可运行的软件原型使用户和开发人员对系统的相关方面进行检查以决定是否合适和恰当。
原型化开发既可以是可操作的软件界面,也可以是纸上原型。
迭代式开发模型
迭代式的开发使得软件系统能够逐步的进行交付,开发人员在完成一部分功能之后形成一个产品版本,然后将其发布给用户使用当用户使用第一个版本的时候,开发人员继续开发下一个版本,如此迭代循环。
迭代开发具有以下特点
更快速地发布产品
追求产品创新
需求不确定性高
需要快速响应用户的变化
关注用户行为
增量模型:在每一个新的发布中逐步增加功能直到构造全部功能。
迭代模型:一开始提交一个完整系统,在后续发布中补充完善各子系统功能。
可转换模型
利用自动化的手段,通过一系列转换将需求规格说明转化为 一个可交付使用的系统。
由于数学方法具有严密性和准确性,形式化方法所交付 的系统具有较少的缺陷和较高的安全性。 •
特别适合于那些对安全性、可靠性和保密性要求极高的 软件系统,这些系统需要在投入运行前进行验证。
局限性:建立形式化的数学描述是一个比较困难的工作,目前这种方法主要还是应用于有限状态的嵌入式系统中。