1.3.2 软件工程定义

软件工程是把系统的、有序的、可量化的方法应用于软件的开发、运营和维护的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。软件工程和下列学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户界面设计。

“软件工程”一词于1968年北大西洋公约组织(NATO)在德国召开的一次会议上首次被提出。它的主要思想是:把软件当成一种产品,并要求采用工程化的原理与方法对软件进行计划、开发和维护。

著名软件工程专家B. Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的7条基本原理:用分阶段的生命周期计划进行严格的管理,坚持进行阶段评审,实行严格的产品控制,采用现代程序设计技术,软件工程结果应能清楚地审查,开发小组的人员应该少而精,承认不断改进软件工程实践的必要性。

软件工程的定义(IEEE610.12—1990)为:①应用系统、规范、可量化的方法来开发、运行和维护软件,即将工程应用到软件;②对①中各种方法的研究。

因此,软件工程是一种工程活动,具有解决实际问题的动机,应用科学知识指导工程活动,并以成本效益比有效为基本条件,构建机器或事物,以服务人类为最终目的。

为何要以工程的方式进行软件的开发维护?这是因为:软件需求日益复杂,需要满足不同类型用户的多种需求,并且能长时间提供稳定可靠的服务;软件系统太复杂,可能包含数以百万计的代码行;人们的生命、财产依赖于软件,因此软件的责任重大,尤其是在如今“软件定义一切”的时代。

“工程”在各种行业都有,通常包括构想、分析、建设、交付、运行这几大阶段。工程具有系统性、规范性、可度量性,因而软件工程也以科学性、实践性、工艺性并重:计算机科学建立了软件生产的知识基础,例如软件开发的理论、方法、技术、模型等;给出了多种实践方法(配置管理、风险控制、需求管理等)与原则(模块化、信息隐藏、OO设计等);工艺性则体现在个人的直觉和非理性能力上,尤其在软件分析与设计活动中。

在现实世界中,软件危机、焦油坑比比皆是,但遗憾的是“没有银弹”;且要解决的实际问题范围广泛,没有行业和领域限制,需要客户和用户的紧密合作;另外,要解决的实际问题通常模糊不清,用户通常有很多疑问:为什么软件需要如此长的开发时间?为什么开发成本居高不下?为什么在将软件交付顾客使用之前无法找到所有的错误?为什么维护已有的程序要花费如此多的时间和人工?为什么软件开发和维护的进度仍旧难以度量?

为达到软件“优质高产”这个目标,人们从技术到管理都做了大量的努力,逐渐形成了“软件工程学”这一新学科。软件工程学的主要组成成分包括软件工程方法学、软件工程环境以及软件工程管理的基本内容和作用,既包括了计算机科学家的研究成果,也总结了广大软件工作者的实践经验。软件开发技术可涵盖形式化方法与非形式化方法两大分支。前者以形式化的程序变化和验证为主要内容,目的在于达到程序设计的自动化,多用于计算机应用人员。后者主要讨论的是工程化的软件开发技术,包括软件开发方法、软件工具、软件工程环境、软件工程管理学等多个方面,这也是本书重点介绍的内容。

1.软件开发方法

软件工程的方法提供了构建软件在技术上需要“如何做”,涵盖了一系列的任务——需求分析、设计、编程、测试和维护。这是在20世纪60年代后期逐步形成的一种软件开发方法,在不同的软件开发阶段对应有不同的方法。

例如,在软件的设计阶段,有结构化分析与设计方法以及面向对象的程序设计方法等。在面向对象的程序设计方法中,数据和数据的操作被封闭在一个称为对象(Object)的统一体中,对象之间则通过消息(message)进行沟通。软件所描述的系统与客观世界的系统在结构上十分相似,不仅提高了软件的可修改性与可维护性,也提高了软件的可重用性,这是工程多年来所追求的目标。从结构化程序设计到面向对象程序设计是程序设计方法的又一次飞跃。

在软件测试阶段,有黑盒与白盒测试技术。其中黑盒强调功能测试,在接口层面上工作包括等价类划分、边界值分析、决策表、因果图等技术;白盒强调结构测试,在源代码基础上工作,包括语句覆盖、分支覆盖、条件覆盖、基本路径覆盖等技术。

2.软件工具

为了提高软件设计的质量和生产效率,目前已经实现了许多帮助开发和维护软件的软件,即工具。在不同的开发时期,要用到不同的软件开发工具。

例如,我们要用某种语言来开发一个应用软件,就要涉及编辑程序、编译程序、连接程序等;另外,在软件测试阶段还要用到测试数据产生器、排错程序、跟踪程序、静态分析工具和覆盖监视工具等。软件工具发展迅速,许多用于软件分析和设计的工具正在建立,其目标就是要实现软件生产的自动化。

软件方法和工具是软件开发的两大支柱,它们之间密切相关。软件方法提出了明确的工作步骤和标准的文档格式,这是设计软件工具的基础;而软件工具的实现又将促进软件方法的推广和发展。

3.软件工程环境

“环境”一词对不同用户有着不同的含义。

对最终用户(end user)而言,环境是他们运行程序所使用的计算机系统。这类用户对环境的要求主要是运行可靠、操作方便、容易学习和使用。

对软件开发人员(developer)来说,环境是他们进行软件开发活动的舞台,例如集成开发环境(IDE)的界面采用菜单来完成各种功能。目前生产数据库管理软件的环境有大型数据库软件Sybase、能帮助进行程序设计的PB软件等。

4.软件工程管理学

对于一个企业来说,如果只有先进的设备和技术,而没有完善的管理,是不可能获得应有的经济效益的。软件生产也一样,如果管理不善,是不可能高质量、按时完成任务的。软件工程管理就是对软件工程生命周期内的各阶段的活动进行管理。软件工程管理的目的是能按预期的时间和费用,成功地完成软件的开发和维护任务。

软件工程管理学的内容包括软件费用管理、人员组织、工程计划管理、软件配置管理等各项内容。软件工程管理也可借助计算机来实现,估算成本、指定进度、生成报告的管理工具已经在许多公司得到了使用。一个理想的软件工程环境,应该同时具备支持开发和支持管理的工具。