一、软件开发过程(是一组将输入转化为输出的相互关联或相互作用的活动。)
过程方法:系统地识别和管理组织内所使用的过程,保证更有效地获得期望的结果。
问题定义:人们通过开展技术探索和市场调查等活动,研究系统的可行性和可能的 解决方案,确定待开发系统的总体目标和范围。
需求开发:在可行性研究之后,分析、整理和提炼所收集到的用户需求,建立完整的 需求分析模型,编写软件需求规格说明。
软件设计:根据需求规格说明,确定软件体系结构,进一步设计每个系统部件的实现 算法、数据结构及其接口等
软件构造:将软件设计转换成程序代码,是一个复杂而迭代的过程,要求根据设计模型进行程序设计以及正确而高效地编写和测试代码。
软件测试:检查和验证所开发的系统是否符合客户期望,主要包括单元测试、子系统 测试、集成测试和验收测试等活动。
软件维护:系统投入使用后对其进行改进,以适应不断变化的需求。完全从头开发的 系统很少,将软件系统的开发和维护看成是一个连续过程更有意义。
二、软件项目管理
为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、 人员、进度、质量和风险进行控制和管理的活动。
软件配置管理是通过执行版本控制、变更控制的规程,并且使用合适的配置管理软件, 来保证所有产品配置项的完整性和可跟踪性。
三、4类常见软件过程模型:软件过程模型是对软件过程的抽象描述。
1、瀑布模型是在1970年提出的,直到20世纪80年代早期,它一直是唯一被广泛采用的软件开发模型。它把软件的生命周期划分为:需求定义与分析、软件设计、软件构造 、软件测试、和运行维护等若干基本活动,并且规定了这些活动自上而下相互衔接的固定次序,如同瀑布流水一般。在瀑布模型中,软件开发的各项活动,严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容,当前活动的工作结果,再进行验证,如果验证通过,就把这个结果,作为下一项活动的输入,继续进行下一项活动,否则返回修改。
特点:瀑布模型强调软件文档的作用,要求每个阶段都要仔细地进行验证。
缺点:因为软件的行为只有在运行过程中,才能显现出来。瀑布模型只有到测试阶段,才能真正地验证和确认软件的功能和性能,但这时候,所有的代码都已经开发完成,很难返回去纠正需求的问题和设计的缺陷。因此这种模型虽然对各个阶段进行严格控制,但却缺少了对变化的适应,看似美丽,却不现实。目前已经很少在业界使用。
主要问题:各个阶段的划分完全固定,阶段之间产生大量的文档,增加了开发工作量;由于开发过程是线性的,用户只有在整个过程结束时,才能看到开发成果,开发过程中间,很难响应用户的变更要求。
早期的错误,也要等到开发后期的测试阶段,才能发现,这样会产生严重的后果,因此,瀑布模型仅适用于软件需求,在开发初期,就可以被完整地确定,这样的软件项目;而且用户使用的环境也要很稳定;
2、原型化模型 :原型是一个部分开发的产品,用于加强对系统的理解,有助 于明确需求和选择可行的设计策略。
纸面原型化模型:http://v.youku.com/v_show/id_XMjcyMTM1OTI=.html
3、迭代式开发 :将描述、开发和验证等不同活动交织在一起,在开发过程中建立一系列版本,将系统一部分一部分地逐步交付。
特点:更快速地发布产品 ; 追求产品创新 ;需求不确定性高;需要快速响应用户的变化;关注用户行为。
常用的两种形式:1)增量模型:一次开发出产品的部分成熟功能,在每一个新的发布中逐步增加功能直到构造全部功能。 2)迭代模型:一开始提交一个完整系统(功能未必尽善成熟),在后续发布中补充完善各子系统功能。
4、可转换模型:利用自动化的手段,通过一系列转换将需求规格说明转化为 一个可交付使用的系统。
特别适合于那些对安全性、可靠性和保密性要求极高的 软件系统,这些系统需要在投入运行前进行验证。
四、案例:
ABS:适合嵌入型控制系统,安全性和可靠性要求极高,需要在投入运行前进行验证 ,适合采用可转换模型 ;
网课网站系统:需求会经常变化,业务模式存在不确定性, 系统应该易于维护和修改, 适合采用迭代式模型。