1.1.2 软件工程的目标及其一般开发过程
从狭义上说,软件工程的目标是生产出满足预算、按期交付、用户满意的无缺陷的软件,进而当用户需求改变时,所生产的软件必须易于修改。从广义上说,软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。
软件工程强调使用生存周期方法学,人类在解决复杂问题时,普遍采用的一个策略就是对问题进行分解,然后再分别解决各个子问题。软件工程采用的生存周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,最后逐步完成每个阶段的任务。一个软件产品从形成概念开始,经过开发、测试、使用和维护,直到最后退出使用的全过程称为软件生存周期。软件工程采用的生存周期方法,对软件产品的质量保障以及组织好软件开发工具有重要意义。首先,由于能够把整个开发工作明确地划分成若干个开发步骤,这样就能把复杂的问题按阶段分别加以解决,使得对问题的认识与分析、解决的方案与采用的方法以及如何具体实现等工作在各个阶段都有着明确的目标。其次,把软件开发划分成阶段,就为中间产品提供了检验的依据。一般软件生存周期包括问题的定义、软件开发、软件测试、软件使用与维护等几个阶段。
1. 问题的定义
问题的定义可分为软件系统的可行性研究和需求分析两个阶段,其基本任务是确定软件系统的工程需求。
可行性研究的任务是了解用户的要求及实现环境,从技术、经济和社会等几个方面研究并论证软件系统的可行性。参与软件系统开发的人员应在用户的配合下对用户的要求及系统的实现环境作详细的调查,并在调查研究的基础上撰写调查报告,然后根据调查报告及其他相关资料进行可行性论证。可行性论证一般包括技术可行性、操作可行性和经济可行性3个部分。在可行性论证的基础上制定初步的项目开发计划,大致确定软件系统开发所用的时间、资金和人力。
需求分析的任务是确定所要开发软件的功能需求、性能需求和运行环境约束,编制软件需求规格说明书、软件系统的确认测试准则。软件的功能需求应给出软件必须完成的功能,软件的性能需求包括软件的适应性、安全性、可靠性、可维护性、错误处理等,软件系统在运行环境方面的约束是指所开发的软件系统必须满足的运行环境方面的要求。软件需求不仅是软件开发的依据,也是软件验收的标准。因此,确定软件需求是软件开发的关键和难点,确定软件需求通常需要开发人员与用户多次反复沟通、讨论才能确认,完成需求分析工作是一项十分艰巨的任务。
2. 软件开发
软件开发是按照需求规格说明书的要求由抽象到具体、逐步完成软件开发的过程。软件开发一般由设计和实现等几个阶段组成,其中设计可分为概要设计和详细设计,主要是根据软件需求规格说明书建立软件系统的结构、算法、数据结构和各程序模块之间的接口信息,规定设计约束,为编写源代码提供必要的说明。实现也称为编码,就是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中,开发人员必须要制订统一、符合标准的编写规范,以保证程序的可读性和易维护性,提高程序的运行效率。
3. 软件测试
软件需经过严密的测试才能发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、集成测试、系统测试以及验收测试4个阶段进行。测试的方法主要有白盒测试和黑盒测试。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。大量统计表明,软件测试的工作量往往占软件开发总工作量的40%以上,有时软件测试的成本甚至可高达软件工程其他步骤成本总和的3~5倍。
4. 软件使用和维护
软件的使用是指在软件通过测试后,将软件安装在用户确定的运行环境中移交给用户使用。软件的维护是指对软件系统进行修改或对软件需求变化作出反映的过程。当发现软件中的潜伏错误,或用户对软件需求进行修改,或软件运行环境发生变化时,都需要对软件进行维护。软件维护的成功与否直接影响软件的应用效果和软件的生存周期。软件的可维护性与软件的设计密切相关,因此在软件开发过程中应该重视对软件可维护性的支持。
软件生存周期的最后一个阶段是终止对软件系统的支持,软件停止使用。