《软件工程导论》主要内容包括软件工程概述、可行性研究、需求分析、概要设计、详细设计、面向对象的分析与设计方法、编码、软件质量与质量保证、项目计划与管理、软件开发工具与环境概述、UML与Rose等。《软件工程导论》的特点是内容系统、注重应用、面向实践、语言精练、概念准确。《软件工程导论》可作为高等院校软件工程课程的教材,也可作为软件工程人员的参考书。
软件产业是创新的与充满活力的朝阳产业,需要大量的、不同层次的软件人才。计算机软件是软件产业的主要产品,并且计算机软件是逻辑产品、而不是物理产品。软件与硬件具有完全不同的特征。
计算机软件现已成为一种新的驱动力,是进行决策的引擎,是现代工程研究和解决问题的基础,在各种类型的应用系统中无所不在地广泛应用。
软件危机是指软件开发和维护过程中遇到的一系列严重问题,如如何开发软件、如何满足对软件的日益增长的需求、如何维护数量不断膨胀的已有软件等一系列问题。
为了克服与摆脱软件危机,诞生了软件工程学。从1969年提出软件工程概念以来,历经30多年的飞速发展,软件工程逐渐成熟,现已成为一门重要的学科。软件工程的目标是以保证软件生产的质量与效率为宗旨,研究一套科学的工程方法以及相应的方便的软件工具系统,用来指导和帮助软件的开发与研究工作,在软件的开发与研究中起到重要的技术保障与促进作用。
软件工程是研究开发大型软件应用系统的学科,软件工程不仅覆盖了构建软件系统的相关技术层面的问题,还包括指导开发团队、安排进度及预算等管理层面的问题。软件工程不仅包括编写程序代码所涉及的技术,还包括所有对软件开发能够造成影响的问题。不存在任何单一开发技术或管理技术能够解决软件工程所面临的所有问题。因而,软件工程是包括一系列概念、理论、模式、语言、方法及工具的综合性学科。软件工程技术可分为产品实现技术及开发管理技术,产品实现技术主要涉及软件系统开发的相关问题,为实现软件产品提供支持;开发管理技术通常不针对某个软件开发项目,而是为管理和改进软件,组织所有的业务活动提供技术支持。
软件开发工具是支持软件生存期中某一阶段的任务实现而使用的计算机程序。软件开发环境是一组相关的软件工具的集合,将它们集成在一起支持某种软件开发方法或某种软件开发模型。软件开发工具与环境是软件工程的重要组成部分,对于提高软件生产率,改进软件质量有越来越大的作用。
软件工程不是刻板的学科,需要丰富的想象力。软件工程是一门科学,它是有规律和步骤可循的。软件工程又是一个实践性极强的实用学科,在学习中,不仅要能掌握其理论原则与方法,更重要的是能熟练地应用。计算机科学与技术专业和相近专业的毕业生,有相当部分的同学要从事计算机软件开发和应用工作,通过软件工程的理论学习与实践,可以培养学生以软件工程的方法开发软件的习惯和素质,并在软件开发的工作中得以贯彻。因此,专业实践是软件工程本科教育的重要组成部分。
学习软件工程应注重计算思维能力、算法设计与分析能力、程序设计和实现能力、系统能力(系统的认知、设计、开发、应用)的培养,尤其是系统能力。系统能力包含两个层面上的含义:一方面是对一定规模的系统的全局掌控能力;另一方面是能够在构建系统时,系统地考虑问题的求解。
出版说明
前言
第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.3 软件生存周期与软件开发模型
1.3.1 软件生存周期
1.3.2 软件开发模型
1.4 小结
1.5 习题
第2章 可行性研究
2.1 可行性研究的任务
2.2 可行性研究的步骤
2.3 系统流程图
2.4 成本效益分析
2.4.1 成本估计
2.4.2 费用估计
2.4.3 度量效益的方法
2.5 小结
2.6 习题
第3章 需求工程
3.1 概述
3.1.1 软件需求定义
3.1.2 软件需求分类
3.1.3 需求规格说明
3.1.4 需求工程概念
3.1.5 需求工程过程
3.2 需求获取方法
3.3 需求分析的任务与原则
3.3.1 需求分析的任务
3.3.2 需求分析的原则
3.4 需求建模方法
3.4.1 结构化需求建模方法
3.4.2 数据流图
3.4.3 数据字典
3.5 需求图形工具
3.5.1 层次方框图
3.5.2 Warnier图
3.5.3 IP0图
3.6 需求验证
3.6.1 目的与任务
3.6.2 内容与方法
3.6.3 需求评审
3.7 需求管理
3.7.1 需求管理的目标
3.7.2 需求管理的原则
3.7.3 需求开发的管理
3.7.4 需求管理活动
3.8 小结
3.9 习题
第4章 概要设计
4.1 软件体系结构
4.1.1 概述
4.1.2 系统构成
4.1.3 控制模型
4.2 概要设计任务与步骤
4.2.1 概要设计任务
4.2.2 概要设计过程
4.3 软件设计的基本概念
4.3.1 模块化与模块独立性
4.3.2 抽象
4.3.3 结构设计原则
4.4 面向数据流的设计方法
4.4.1 基本概念
4.4.2 系统结构图的组成
4.4.3 变换分析
4.4.4 事务分析
4.4.5 设计优化
4.5 面向数据结构的分析设计方法
4.5.1 Jackson系统开发方法
4.5.2 Warnier方法
4.6 概要设计文档评审
4.7 小结
4.8 习题
第5章 详细设计
5.1 详细设计的任务与原则
5.1.1 详细设计的任务
5.1.2 详细设计的原则
5.2 详细设计工具
5.2.1 程序流程图
5.2.2 N-S图
5.2.3 PAD图
5.2.4 PDL
5.2.5 HIPO图
5.2.6 详细设计工具的选择
5.3 详细设计规格说明与复审
5.3.1 详细设计说明书
5.3.2 设计复审
5.4 小结
5.5 习题
第6章 面向对象设计
6.1 面向对象方法
6.1.1 面向对象方法概述
6.1.2 面向对象的软件工程
6.1.3 面向对象的基本概念和特征
6.2 面向对象的分析
6.2.1 面向对象分析基本过程及原则
6.2.2 确定对象与类
6.2.3 确定属性
6.2.4 定义服务
6.2.5 对象间通信
6.3 面向对象设计
6.3.1 面向对象设计的基本概念
6.3.2 面向对象设计的方法
6.4 实时软件设计
6.4.1 系统设计
6.4.2 数据采集系统
6.5 软件复用
6.5.1 软件复用概念
6.5.2 基于组件的开发
6.6 用户界面的设计
6.6.1 设计原则
6.6.2 用户交互
6.6.3 信息表示
6.6.4 用户支持
6.6.5 界面评价
6.7 小结
6.8 习题
第7章 编码
7.1 程序设计语言
7.1.1 程序设计语言分类
7.1.2 程序设计语言的特点
7.1.3 程序设计语言的选择
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.4.1 冗余程序设计
7.4.2 防错程序设计
7.5 面向对象程序设计步骤
7.6 编码优化
7.6.1 优化的内容与原则
7.6.2 程序结构优化
7.6.3 程序代码优化
7.7 小结
7.8 习题
第8章 软件质量与质量保证
8.1 软件质量的定义
……
第9章 项目计划与管理
第10章 软件开发工具与环境
第11章 UML与Rose
附录A 可行性研究报告规范
附录B 项目开发计划规范
附录C 需求规格说明书规范
附录D 概要设计说明书规范
附录E 详细设计说明书规范
附录F 测试计划
附录G 测试分析报告
附录H 项目开发总结报告规范
参考文献
软件是一种逻辑产品,也是开发和运行产品的载体。作为一种产品,它表达了由计算机硬件体现的计算潜能。不论它是驻留在设备中,还是在主机中,软件都是一个信息转换器,能够产生、管理、获取、修改、显示或转换信息。这些信息可以很简单,也可以很复杂,如多媒体信息。作为开发运行产品的载体,软件是计算机工作和信息通信的基础,也是创建和控制其他程序的基础。
信息是21世纪最重要的产品,软件充分体现了这一点。通过软件处理数据,凸显了数据的重要性;软件管理商业信息,增强了商业竞争力。软件不仅提供了通往全球信息网络的途径,而且也提供了获取信息的多种手段。
1.1.1软件发展
1.程序设计阶段计算机发展的早期阶段(20世纪50年代初期一20世纪60年代中期)为程序设计阶段。在这个阶段硬件已经通用化,而软件的生产却是个体化的。这时,由于程序规模小,几乎没有什么系统化的方法可遵循。对软件的开发没有任何管理方法,一旦计划推迟了或者成本提高了,程序员才开始弥补。在通用的硬件已经非常普遍的时候,软件产品还处在初级阶段,对每一类应用均需自行再设计,应用范围很有限。设计往往仅是人们头脑中的一种模糊想法,而文档根本不存在。2.程序系统阶段计算机系统发展的第二阶段(20世纪60年代中期~20世纪70年代末期)为程序系统阶段。多道程序设计、多用户系统引入了人机交互的新概念。交互技术打开了计算机应用的新世界,硬件和软件配合达到了一个新层次,出现了实时系统和第一代数据库管理系统。这个阶段的另一个特点就是软件产品的使用和“软件作坊”的出现。被开发的软件可以在较宽广的范围中应用。主机和微机上的程序能够有数百甚至上千的用户。
在软件的使用过程中,当发现错误时,当用户需求和硬件环境发生变化时都需要修改软件,这些活动统称为软件维护。在软件维护上的花费以惊人的速度增长。更为严重的是,许多程序的个体化特性使得它们根本不能维护。“软件危机”出现了。