实用软件工程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 软件工程的内容与方法

本章导读

本章首先对软件、软件工程、软件工程学科体系、软件工程课程进行了定义与解释,然后提出“面向过程方法、面向对象方法、面向元数据方法、形式化方法”的软件工程方法论,以及“面向流程分析、面向元数据设计、面向对象实现、面向功能测试、面向过程管理”的“五个面向”软件工程实践论,该方法论与实践论不但适用于信息系统的开发,也适用于其他软件系统的开发。本章最后简要介绍了ISO 9001、CMMI、软件企业文化、信息系统的定义与案例分析。因此,本章是软件工程课程的绪论。表1-1列出了读者在本章学习中要了解、理解和关注的主要内容。

表1-1 本章对读者的要求

1.1 软件的定义

1.计算机硬件与软件

计算机(Computer)由硬件(Hardware)和软件(Software)组成,硬件是看得见、摸得着的电子机械设备,如机箱、主板、硬盘、光盘、U盘、电源、显示器、键盘、鼠标、打印机、电缆等。软件是依附在硬件上面的程序、数据和文档的集合,是指挥控制计算机系统(包括硬件系统和软件系统)工作的神经中枢。如果将硬件比作人的身体,那么软件就相当于人的神经中枢和知识才能。软件的分类比较复杂。分类方法不同,内容也不同。表1-2从5个不同角度对软件进行了分类。

表1-2 软件的分类

计算机工程(Computer Engineering)由硬件工程(Hardware Engineering)和软件工程(Software Engineering)组成。硬件工程是研究硬件生产和硬件管理的工程学科,其内容包括计算机及网络硬件的分析、设计、生产、采购、验收、安装、培训、维护。软件工程是研究软件生产和软件管理的工程学科,其内容包括市场调研、正式立项、需求分析、项目策划、概要设计、详细设计、编程、测试、试运行、产品发布、用户培训、产品复制、实施、系统维护、版本升级。由于软件的生产和管理比硬件复杂,积累的经验不如硬件那么丰富,所以软件工程的研究成为一个长期的热点。

【例1-1】 请读者根据自身环境,规划、设计、安装一个校园网。这是一个硬件工程,其中要完成的工作内容包括:制定设计方案,网络设备的选型、配置、采购、验货、布线、安装、调试、运行和交付。在安装和调试中,又要安装和调试许多软件,如网络操作系统、数据库管理系统、教学软件系统、办公自动化系统、防火墙及杀毒软件等。

由于有这么多软件也需要选型、配置、采购、安装、调试,所以在今天,除了生产硬件的厂商之外,纯粹的“硬件工程”几乎不存在,大多数硬件工程都与软件有关,于是就出现了一个新名词“网络工程”,它是介于硬件工程和软件工程之间的系统工程,人们有时也称它为“系统集成工程”。

2.软件定义

为了弄清软件工程的概念,首先要了解程序和软件的概念。一般认为,程序是计算机为完成特定任务而执行的指令的有序集合。站在应用的角度可以更通俗地理解为

面向过程的程序 = 算法 + 数据结构

面向对象的程序 = 对象 + 消息

面向构件的程序 = 构件 + 构架

通常,软件有以下定义:

软件 = 程序 + 数据 + 文档

这里的“程序”,是对计算机任务的处理对象和处理规则的描述;这里的“文档”,是为了理解程序所需的详细描述性资料;这里的“数据”,主要是软件系统赖以运行的初始化数据。

上述定义看起来很简单,实际上却来之不易。表1-3列出了美国人对软件定义的认识过程。直到今天,仍然有少数人认为:“软件就等于程序”。这些人在软件开发过程中,上来就写程序,而不是写文档。软件工程大师Roger S Pressman对这些人提出了尖锐的批评:“越早开始写代码的人,就是越迟完成代码的人”。

表1-3 美国人对软件定义的认识过程

至于对管理文档的全面认识,那就更晚了。直到1974年,美国人才开始认识到软件需要管理。1984年,美国人开始认识到软件管理是一个过程管理,或是一个管理过程。1991年,出现了软件过程能力成熟度模型CMM(Capability Maturity Model for Software)1.0版,人们研究了软件过程管理的具体内容与方法,并将软件开发和管理中产生的各种文档叫做“软件工作产品”,而将最后交付给用户使用的软件工作产品叫做“软件产品”。1996年,出现了统一建模语言UML 0.9版,称软件管理文档为“管理制品”,称软件开发文档为“技术制品”,两者合称为“制品(Artifact)”。

3.文档的重要性

文档在软件工程中特别重要,文档是否规范与齐全,是衡量软件企业是否成熟的重要标志之一。软件文档分为开发文档和管理文档两大类。开发文档主要由项目组书写,用于指导软件开发与维护;管理文档主要由软件工程管理部门书写,用于指导软件管理和决策。两类文档的标准、规范和编制模板,全公司范围内要统一,这一工作由软件工程管理部门完成。开发文档是指导软件开发与维护的文档,开发与维护中所有的程序,都是按照开发文档的要求编写与实现的。软件工程规定:文档必须指挥程序,而决不允许程序指挥文档;文档与程序必须保持高度一致,而决不允许程序脱离开文档。

开发文档本身具有严格的层次关系和依赖关系,这种关系反映在如下的覆盖关系之中,即有

(1)《目标程序》覆盖《源程序》;

(2)《源程序》覆盖《详细设计说明书》;

(3)《详细设计说明书》覆盖《概要设计说明书》;

(4)《概要设计说明书》覆盖《需求分析规格说明书》;

(5)《需求分析规格说明书》覆盖《用户需求报告》;

(6)《用户需求报告》覆盖《软件合同》/《软件任务书》。

管理文档本身具有严格的时序关系,这种时序关系反映在如下的软件过程之中,而过程由一系列的时间序列所组成:

(1)需求分析过程管理文档;

(2)软件策划过程管理文档;

(3)软件设计过程管理文档;

(4)软件实现过程管理文档;

(5)软件测试过程管理文档;

(6)软件维护过程管理文档;

(7)软件过程改进管理文档。

成熟的软件企业,都有一套自己的开发文档和管理文档编写标准或编写模板,在企业内部严格执行。

4.软件的最新定义

软件 = 知识+程序+数据+文档

定义中增加了“知识”。对这一定义的讨论正在进行。正方认为:因为软件是知识在网络上的体现,所以这个定义非常好。反方认为:程序、数据、文档本身就是知识的载体与表现,所以这个定义有些画蛇添足的意味。