根据瀑布模型可以把软件工程的制定计划、需求分析、设计、编码、测试、维护等六个步骤归为三个阶段,如图
一、定义阶段
(一)知识理解
定义阶段分为两个模块:制定计划和需求分析。
制定计划,即确定要开发软件系统的总目标,给出功能、性能可靠性以及接口等方面的要求,进行可行性研究。需要通过获取需求、观察分析等实现物理模型到处逻辑模型的过程。
需求分析,它的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型。
制定计划,又分为两类,问题定义和可行性研究。经过定义问题、分析问题、提出解法的反复过程,最终提出一个符合系统目标的高层次的逻辑模型,然后根据系统的这个逻辑模型设想各种可能的物理系统,并且从技术、经济、操作、法律、社会效益等各方面分析这些物力系统的可行性。最后提出一个推荐的行动方针,提交用户和客户组织负责人审查批准。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决,这是每个软件开发的前提。
需求分析,是对逻辑模型进行实例化,对每一个任务都提出完整、准确、具体的要求,准确的回答“系统必须做什么”。需求分析的第一步是进一步了解用户所面临的问题和对目标系统的基本要求,接下来与用户深入交流,得出对目标系统的完整、准确和具体的需求,分析系统的数据要求,导出系统的逻辑模型。
(二)图解概括
二、开发阶段
开发阶段分为三大部分:设计——编码——测试
——设计——
(一)知识理解
经过需求分析阶段的工作,系统做什么已经清楚了,现在是决定怎么做的时候了。设计的基本目的就是回答系统应该如何实现。设计阶段又分为概要设计和详细设计。
概要设计,顾名思义,系统总体上如何做,也就是建立模块并分析。
设计的原则:a、模块化:采用模块化管理可以是软件结构清晰,因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,只需要改动涉及的少数几个模块,有助于软件开发工程的组织管理。
b、抽象:人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在者某些相似的方面,把这些共性集中和概括起来,暂时忽略他们之间的差异,这就是抽象。
c、自顶下下,逐步求精
d、信息隐藏和局部化:信息隐藏,隐藏的不是有关模块的一切信息,而是模块的实现细节。局部化是指把一些关系密切的软件元素物力的放的彼此靠近。
e、模块独立:模块独立是模块化、抽象、信息隐藏和局部化的直接结果。独立程度可以由两个定性标准度量,即内聚和耦合。耦合衡量不同模块彼此间互相依赖的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。设计时,尽量做到低耦合高内聚,从而获得较高的模块独立性。
设计原则并不是各个独立,而是相辅相成,相互补充的。抽象的思想是模块化的主要方法,抽象又是一种通过信息隐藏和局部化实现逐步求精的方法。
详细设计,主要是将概要设计产生的模块和层次关系具体化,描述模块内部的数据结构以及模块和模块之间的接口,设计出程序的“蓝图”,以后程序员将根据该蓝图写出实际的程序代码。因此,详细设计的结果基本上决定了最终的程序代码的质量。
(二)图解概括
——编码——
(一)知识理解
所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。作为软件攻错的一个阶段,编码是对设计的进一步具体化,因此,程序的质量主要取决于软件设计的质量。但是,所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、可测试性和可维护性产生影响。
(二)图解概括
——测试——
(一)知识理解
无论怎样强调软件测试的重要性和他对软件可靠性的影响都不为过,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上还有同样大的开发工作量需要完成。
软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它做必要的测试(称为单元测试)。在这个阶段结束后,对软件系统还要进行各种综合测试,这是软件生命周期的一个独立阶段。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。怎么达到测试的目标呢?我们要遵循以下几个测试准则:①所有测试都追溯到用户需求②早在测试前制定测试计划③小规模—大规模④程序员避免检查自己的程序。
测试任何产品都有两种方法:黑盒测试和白盒测试。黑盒测试是已知产品应具有的功能,通过测试来检验是否每个功能都能正常使用。白盒测试是已知产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
测试策略有a、单元测试:通常单元测试和编码属于一个阶段。
b、组装测试:是测试和组装软件的系统化技术。(也成为集成测试)
c、确认测试:也称验收测试,目标是验证软件的有效性。
d、系统测试:α测试和β测试
发现软件中的错误不是最终目的,因此,还必须诊断并改正错误,这就是调试的目的。调试时测试阶段最困难的工作。
(二)图解概括
三、维护阶段
在软件产品被开发出来并交付用户使用之后可,就进入了软件的运行维护阶段。维护是软件生命周期的最后一个阶段,也是持续时间最长、代价最大的一个阶段。软件工程学的主要目的就是提高软件的可维护性,降低维护的代价。