本书采用“教学做”一体化模式编写,合理地组织学习单元,并将每个单元分解为核心知识、能力目标、任务驱动、实践环节4个模块。全书共10章,第1章是软件工程基本概念,第2~7章顺序介绍了软件生命周期各阶段任务、过程、结构化方法和工具,第8章讲述了面向对象方法学,第9章介绍了软件项目管理,第10章给出了经典的软件工程实验以及一个综合实例。书中实例侧重实用性和启发性,通俗易懂,使读者能够快速掌握软件工程的基础知识与项目管理技能,为适应实战应用打下坚实的基础。
本书适合作为高等院校“软件工程”课程的教材或教学参考书,也适合作为有一定经验的软件工作人员的参考用书。
前言
本书按照“教学做”一体化模式精编了软件工程的核心内容,以核心知识、能力目标、任务驱动和实践环节为模块组织本书的体系结构。核心知识体现最重要和实用的知识,是教师需要重点讲解的内容;能力目标提出学习核心知识后应具备的能力;任务驱动给出了教师和学生共同来完成的任务;实践环节给出了需要学生独立完成的实践活动。
全书共10章。第1章概括地介绍了软件工程基本概念,包括软件、软件危机、软件工程、软件生命周期与常用模型。第2~7章按软件生命周期的顺序讲解了各阶段的任务、过程、方法和工具。其中,第2章重点讲述了如何使用系统流程图和数据流图分别描绘系统的物理模型和逻辑模型;第3章是需求分析与建模的有关知识,包括需求分析过程、需求获取方法、结构化分析建模工具以及软件需求规格说明书的内容框架;第4章和第5章是有关软件设计的知识,详细地介绍了软件设计的原理、工具、方法和文档,包括模块化设计原理、软件结构及描绘它的图形工具、面向数据流的设计方法、面向数据结构的设计方法以及设计文档的内容框架;第6章是关于系统实现的知识,重点讲述了系统实现的原理、技术和方法,包括编码、单元测试、集成测试、白盒测试、黑盒测试以及JUnit单元测试工具;第7章是有关软件维护的知识,包括维护策略与方法。第8章系统地讲解了面向对象方法学的有关知识,包括面向对象的基本概念、面向对象分析建模的原理与方法、面向对象程序的设计模式以及设计模式的应用。第9章讲述了软件项目管理的概念、原理、方法与技术,包括成本管理、进度管理、配置管理、风险管理、过程管理以及管理工具MicrosoftProject的应用。第10章由实验和综合实例组成,其目的是训练学生综合运用知识的能力,巩固本书前9章所学知识,提高工程实践与管理的能力。
本书特别注重引导学生参与课堂教学活动,适合高等院校相关专业作为“教学做”一体化的教材,也可以供软件工程爱好者、从业者自学使用。
为了便于教学,本书配有教学课件和实践环节与课后习题参考答案,读者可从清华大学出版社网站免费下载。
由于编者水平有限,书中难免存在错误和疏漏之处,敬请广大读者给予批评指正。
编者
2017年5月
第1章软件工程基本概念
1.1软件危机与软件工程
1.1.1核心知识
1.1.2能力目标
1.1.3任务驱动
1.1.4实践环节
1.2软件生命周期
1.2.1核心知识
1.2.2能力目标
1.2.3任务驱动
1.2.4实践环节
1.3常用的软件开发模型
1.3.1核心知识
1.3.2能力目标
1.3.3任务驱动
1.3.4实践环节
1.4小结
习题1
第2章可行性研究
2.1可行性研究概述
2.1.1核心知识
2.1.2能力目标
2.1.3任务驱动
2.1.4实践环节
2.2可行性研究报告
2.2.1核心知识
2.2.2能力目标
2.2.3任务驱动
2.2.4实践环节
2.3系统流程图
2.3.1核心知识
2.3.2能力目标
2.3.3任务驱动
2.3.4实践环节
2.4数据流图及数据字典
2.4.1核心知识
2.4.2能力目标
2.4.3任务驱动
2.4.4实践环节
2.5成本/效益分析
2.5.1核心知识
2.5.2能力目标
2.5.3任务驱动
2.5.4实践环节
2.6小结
习题2
〖2〗〖4〗
软件工程
目录〖3〗
第3章需求分析
3.1需求分析概述
3.1.1核心知识
3.1.2能力目标
3.1.3任务驱动
3.1.4实践环节
3.2需求获取方法
3.2.1核心知识
3.2.2能力目标
3.2.3任务驱动
3.2.4实践环节
3.3需求分析与建模
3.3.1核心知识
3.3.2能力目标
3.3.3任务驱动
3.3.4实践环节
3.4软件需求规格说明
3.4.1核心知识
3.4.2能力目标
3.4.3任务驱动
3.4.4实践环节
3.5需求验证与管理
3.5.1核心知识
3.5.2能力目标
3.5.3任务驱动
3.5.4实践环节
3.6案例分析——图书管理系统需求分析
3.7小结
习题3
第4章概要设计
4.1设计概述
4.1.1核心知识
4.1.2能力目标
4.1.3任务驱动
4.1.4实践环节
4.2设计原理
4.2.1核心知识
4.2.2能力目标
4.2.3任务驱动
4.2.4实践环节
4.3设计工具
4.3.1核心知识
4.3.2能力目标
4.3.3任务驱动
4.3.4实践环节
4.4设计方法
4.4.1核心知识
4.4.2能力目标
4.4.3任务驱动
4.4.4实践环节
4.5设计文档
4.5.1核心知识
4.5.2能力目标
4.5.3任务驱动
4.5.4实践环节
4.6案例分析——图书管理系统概要设计
4.7小结
习题4
第5章详细设计
5.1设计概述
5.1.1核心知识
5.1.2能力目标
5.1.3任务驱动
5.1.4实践环节
5.2设计工具
5.2.1核心知识
5.2.2能力目标
5.2.3任务驱动
5.2.4实践环节
5.3设计方法
5.3.1核心知识
5.3.2能力目标
5.3.3任务驱动
5.3.4实践环节
5.4设计文档
5.4.1核心知识
5.4.2能力目标
5.4.3任务驱动
5.4.4实践环节
5.5McCabe方法
5.5.1核心知识
5.5.2能力目标
5.5.3任务驱动
5.5.4实践环节
5.6案例分析——图书管理系统详细设计
5.7小结
习题5
第6章编码与测试
6.1编码
6.1.1核心知识
6.1.2能力目标
6.1.3任务驱动
6.1.4实践环节
6.2测试概述
6.2.1核心知识
6.2.2能力目标
6.2.3任务驱动
6.2.4实践环节
6.3单元测试
6.3.1核心知识
6.3.2能力目标
6.3.3任务驱动
6.3.4实践环节
6.4集成测试
6.4.1核心知识
6.4.2能力目标
6.4.3任务驱动
6.4.4实践环节
6.5白盒测试技术
6.5.1核心知识
6.5.2能力目标
6.5.3任务驱动
6.5.4实践环节
6.6黑盒测试技术
6.6.1核心知识
6.6.2能力目标
6.6.3任务驱动
6.6.4实践环节
6.7JUnit单元测试
6.7.1核心知识
6.7.2能力目标
6.7.3任务驱动
6.7.4实践环节
6.8案例分析——图书管理系统测试
6.9小结
习题6
第7章维护
7.1维护概述
7.1.1核心知识
7.1.2能力目标
7.1.3任务驱动
7.1.4实践环节
7.2维护实施过程
7.2.1核心知识
7.2.2能力目标
7.2.3任务驱动
7.2.4实践环节
7.3软件的可维护性
7.3.1核心知识
7.3.2能力目标
7.3.3任务驱动
7.3.4实践环节
7.4小结
习题7
第8章面向对象方法学
8.1面向对象方法概述
8.1.1核心知识
8.1.2能力目标
8.1.3任务驱动
8.1.4实践环节
8.2面向对象分析建模
8.2.1核心知识
8.2.2能力目标
8.2.3任务驱动
8.2.4实践环节
8.3建立对象模型
8.3.1核心知识
8.3.2能力目标
8.3.3任务驱动
8.3.4实践环节
8.4建立动态模型
8.4.1核心知识
8.4.2能力目标
8.4.3任务驱动
8.4.4实践环节
8.5建立功能模型
8.5.1核心知识
8.5.2能力目标
8.5.3任务驱动
8.5.4实践环节
8.6设计模式简介
8.6.1核心知识
8.6.2能力目标
8.6.3任务驱动
8.6.4实践环节
8.7面向对象的程序设计与实现
8.7.1核心知识
8.7.2能力目标
8.7.3任务驱动
8.7.4实践环节
8.8案例分析——图书管理系统分析与设计
8.8.1图书管理系统分析
8.8.2图书管理系统设计
8.9小结
习题8
第9章软件项目管理
9.1软件项目管理概述
9.1.1核心知识
9.1.2能力目标
9.1.3任务驱动
9.1.4实践环节
9.2软件项目成本管理
9.2.1核心知识
9.2.2能力目标
9.2.3任务驱动
9.2.4实践环节
9.3软件项目进度管理
9.3.1核心知识
9.3.2能力目标
9.3.3任务驱动
9.3.4实践环节
9.4软件项目配置管理
9.4.1核心知识
9.4.2能力目标
9.4.3任务驱动
9.4.4实践环节
9.5软件项目风险管理
9.5.1核心知识
9.5.2能力目标
9.5.3任务驱动
9.5.4实践环节
9.6CMM与CMMI
9.6.1核心知识
9.6.2能力目标
9.6.3任务驱动
9.6.4实践环节
9.7项目管理工具MicrosoftProject及使用
9.7.1核心知识
9.7.2能力目标
9.7.3任务驱动
9.7.4实践环节
9.8小结
习题9
第10章软件工程实验
10.1结构化分析实验
10.1.1实验目的
10.1.2实验环境
10.1.3实验内容
10.1.4实验成果
10.2数据库概念结构设计实验
10.2.1实验目的
10.2.2实验环境
10.2.3实验内容
10.2.4实验成果
10.3结构化设计实验
10.3.1实验目的
10.3.2实验环境
10.3.3实验内容
10.3.4实验成果
10.4软件测试实验
10.4.1实验目的
10.4.2实验环境
10.4.3实验内容
10.4.4实验成果
10.5软件项目管理实验
10.5.1实验目的
10.5.2实验环境
10.5.3实验内容
10.5.4实验成果
10.6综合实例——网上书店系统
10.6.1问题定义
10.6.2系统需求分析
10.6.3软件设计
10.6.4系统测试
参考文献
第1章
软件工程基本概念
(1)软件危机与软件工程。
(2)软件生命周期。
(3)软件工程的常用模型。
随着计算机科学技术的迅速发展,如何更有效地开发软件产品越来越受到人们的重视。同时,由于软件复杂程度的不断增加,开发和维护的一系列严重问题(软件危机)随之产生。软件工程正是致力于解决软件危机,研究如何更有效地开发和维护计算机软件的一门新兴学科。
本章将介绍软件工程的基本概念,包括软件、软件危机、软件工程、软件生命周期与常用模型等。
1.1软件危机与软件工程
1.1.1核心知识
1.计算机软件的发展
随着计算机硬件性能的极大提高和计算机体系结构的不断更新,计算机软件系统更加成熟和更为复杂,从而促使计算机软件的角色发生了巨大的变化,其发展历史大致可以分为如下四个阶段。
第一阶段是20世纪50年代初期至60年代初期的十余年,是计算机系统开发的初期阶段。计算机软件实际上就是规模较小的程序,程序的编写者和使用者往往是同一个(或同一组)人。由于程序规模小,程序编写起来比较容易,也没有什么系统化的方法,对软件的开发过程更没有进行任何管理。这种个体化的软件开发环境使得软件设计往往只是在人们头脑中隐含进行的一个模糊过程,除了程序清单之外,没有其他文档资料。
第二阶段跨越了从20世纪60年代中期到70年代末期的十余年,多用户系统引入了人机交互的新概念,实时系统能够从多个源收集、分析和转换数据,从而使进程的控制和输出的产生以毫秒而不是分钟来运行,在线存储的发展产生了第一代数据库管理系统。
第三阶段是20世纪70年代中期至80年代末期,分布式系统极大地提高了计算机系统的复杂性,网络的发展对软件开发提出了更高的要求,特别是微处理器的出现和广泛应用,孕育了一系列智能产品。硬件的发展速度已经超过了人们对软件的需求速度,使硬件价格下降,软件的价格急剧上升,导致了软件危机的加剧,致使更多的科学家着手研究软件工程学的科学理论、方法和时限等一系列问题。软件开发技术的度量问题受到重视,最著名的有软件工作量估计COCOMO模型、软件过程改进模型CMM等。
第四阶段是从20世纪80年代末期开始的。这个阶段软件体系结构从集中式的主机模式转变为分布式的客户机/服务器模式(C/S)或浏览器/服务器模式(B/S),专家系统和人工智能软件从实验室走出来进入了实际应用,完善的系统软件、丰富的系统开发工具和商品化的应用程序的大量出现,以及通信技术和计算机网络的飞速发展,使计算机进入了一个大发展的阶段。
2.计算机软件的定义及特点
软件是计算机系统中与硬件相互依存的一部分,包括程序、数据及其说明文档。其中程序是能够完成特定功能的指令序列;数据是程序能正常操纵信息的数据结构;文档是与程序设计、开发及维护有关的各种图文资料。
软件同传统的工业产品相比,具有以下特点。
(1)软件是一种逻辑产品。软件产品是看不见、摸不着的,因而具有无形性。它是脑力劳动的结晶,是以程序和文档的形式出现的,保存在计算机存储器和光盘介质上,通过计算机的执行才能体现其功能和作用。
(2)软件产品的生产主要是研发,软件产品的成本主要体现在软件研发所需要的人力上。软件一旦研发成功,通过复制就能产生大量软件产品。
(3)软件在使用过程中,没有磨损、老化的问题。但在使用过程中为了适应硬件环境以及需求的变化需要进行修改。当修改的成本变得难以接受时,软件就被抛弃。
(4)软件的开发主要是脑力劳动。
(5)软件会越来越复杂。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识,这对软件工程师提出了很高的要求。
(6)软件的成本相当昂贵。软件研发需要投入大量、高强度的脑力劳动,成本非常高,风险也很大。
(7)软件工作牵涉很多社会因素。软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及人们的观念和心理等因素。
3.软件危机与软件工程
20世纪60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,致使软件危机爆发。事实上,软件危机几乎从计算机诞生的那一天起就出现了,只不过到了1968年,北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上才第一次提出了“软件危机”这个名词。
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这类问题绝不仅仅是“不能正常运行的软件”才具有的,几乎所有软件都不同程度地存在这类问题。概括来说,软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件产品。
具体地说,软件危机主要有下列典型表现。
(1)软件开发进度难以预测,软件开发成本难以控制。开发成本超出预算,实际进度比预订计划一再拖延。
(2)用户对产品功能难以满足。
(3)软件产品质量无法保证。
(4)软件产品难以维护。
(5)软件缺少适当的文档资料。
(6)软件的成本不断提高。
(7)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。
之所以出现软件危机,其主要原因一方面是与软件本身的特点有关;另一方面是与软件开发和维护的方法不正确。
为了消除软件危机,既要有技术措施,又要有组织管理措施。软件工程正是从技术和管理两方面研究如何更有效地开发和维护计算机软件的一门新兴学科。
1968年秋季,第一届NATO(北约)会议上第一次提出了软件工程这个概念。概括地说,软件工程是一门指导计算机软件开发和维护的学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把先进的、正确的管理理念和当前最好的技术结合起来,以最小经济代价开发出高质量的软件并维护它。
……