。分析 软件生命周期的开发阶段以分析开始――主要目标是确定用户对所提出系统的需求。如果系统是一个在竞争的市场上销售的通用产品,这个分析将会包括一个广泛的调查来发现潜在用户的需要。但是,如果系统是为特殊用户设计的,那么这个过程就是一个更专业的调查。
当潜在用户的要求被确定之后,要将这些要求汇编成新系统必须满足的需求。这些需求是从应用的角度来表述,而不是用数据处理界的技术术语来表达。一种需求可能是对数据的存取必须限制在有权限的人员,另一种可能是当一个工作日结束时,数据必须反映目前的清单状态,或者可能是在计算机屏幕上的数据必须按照用户目前使用的格式来显示。
系统的需求被确定以后,它们就转化为更具技术性的说明书。例如,关于数据须限制在某些有权限的人的需求,就可能转化为一下规范――直到从键盘输入一个被认可的8位密码,系统才开始响应,或者除非经过只有授权的人才知道的例程预处理,否则数据将以加密的形式显示在屏幕上。
设计 分析关注这个系统应该做什么,而设计关注这个系统应该怎样来实现目标。正是通过设计建立了软件系统的结构。
大型软件系统最好的结构是模块化结构,这是一条被充分证实的原则。确实,正是借助模块化的分解方法,大型系统的实现才成为可能。没有这样的分解,在大型系统实现过程种所需求的技术细节可能会超过人的理解能力。然而,有了这种模块化设计,仅仅需要熟悉与在考虑中的模块相关的细节。同样,模块化设计对未来的维护是有益的,因为它允许对基本的模块进行修改。(如果要对每个雇员的医疗福利计算方法进行修改,那么仅仅需要考虑处理医疗福利模块。)
但是,有关模块的概念也是有差别的。如果一个人以传统的命令式语言范式的方法来进行设计工作,模块由不同程序组成,而模块化设计则以确定有待实现系统的不同任务的方式进行。相反地,如果一个人从面向对象地角度来完成设计工作,模块就被看成了对象,而设计过程变成了确定有待实现系统中地实体(对象)以及确定这些实体是如何工作地。
实现 实现包括程序的实际编写、数据文件的建立以及数据库的开发等过程。
测试 测试与实现紧密联系,因为系统中的每一个模块都要在实现的过程中进行测试。通过使用其他模块的简化版本――有时称为桩模块,来模拟目标模块和系统其他部分的交互,从而使设计良好的系统中的每一个模块都可以被独立地测试。当然,在各种模块都开发完成并且整合在一起之后,这个组件的测试将让路给整个系统的测试。
不幸的是,成功地进行系统的测试和调试是及其困难的。经验表明,大型的软件系统可能包含众多的错误,甚至是经过关键测试之后。许多这样的错误在软件的生命期中一直潜伏着,但是也有一些会导致关键性的错误。减少这样的错误是软件工程的一个目标。这些错误的普遍存在说明了在这方面还有许多的研究工作要做。