目录
第一章 绪论
1.1软件和软件危机
1.2软件工程学的范畴
1.3软件工程的发展
1.4软件工程的应用
第二章 软件生存周期与软件过程
2.1软件生存周期
2.2传统的软件过程
2.3软件的演化模型
2.4形式化方法模型
2.5统一过程和敏捷过程
2.6软件可行性研究
第三章 结构化分析与设计
3.1概述
3.2结构化系统分析
3.3结构化系统设计
3.4模块设计
第四章 面向对象与UML
4.1面向对象概述
4.2UML简介
4.3静态建模
4.4动态建模
4.5物理架构建模
4.6UML工具
第五章 需求工程与需求分析
5.1软件需求工程
5.2需求分析与建模
5.3需求获取的常用方法
5.4需求建模
5.5软件需求描述
5.6需求管理
5.7需求建模示例
第六章 面向对象分析
6.1软件分析概述
6.2面向对象分析建模
6.3面向对象分析示例
第七章 面向对象设计
7.1软件设计概述
7.2面向对象设计建模
7.3系统架构设计
7.4系统元素设计
7.5面向对象设计示例
第八章 编码与测试
8.1编码概述
8.2编码语言与编码工具
8.3编码示例
8.4测试的基本概念
8.5黑盒测试与白盒测试
8.6测试用例设计
8.7多模块程序的测试策略
8.8面向对象系统的测试
第一章 绪论
1.1软件和软件危机
1.1.1软件的定义
软件=程序+文档
1.1.2软件的特征
1.软件成本很难估算,并占了产品成本的大部分
2.制造复杂,但成为产品后,制造就成了简单的复制
3.使用过程中维护比硬件更为复杂,维护过程可能会产生新的错误
1.1.3软件危机
软件规模增长,复杂度增加,开发难度上升,成本增加,但可靠性往往随规模的增长而下降,无法保证质量
从维护和生产角度看软件危机出现的原因:
①软件维护费用急剧上升,直接威胁计算机应用的扩大
②软件生产技术进步缓慢,是加剧软件危机的重要原因
1.2软件工程学的范畴

1.3软件工程的发展
1.3.1三种编程范型
1.过程式(面向过程)
程序=数据结构+算法
数据与操作是分离的
将大程序分解为若干大小适中的程序快,层层调用
缺点:错综复杂的调用使性能低下;程序难以维护和移植;通常只用于代码在50000以下
2.面向对象
程序=对象+消息
将数据和操作封装在对象中,对象之间通过消息相互联系
优点:降低软件复杂性,简化软件的开发
3.基于构件(标准化的对象类)技术的编程
把面向特定应用的编程拓展为面向整个领域
4.比较
过程式:着眼程序的过程和基本控制结构
面向对象:着眼于程序的对象
构件技术:着眼适合整个领域的类对象
1.3.2三代软件工程
1.传统软件工程
结构化分析→结构化设计→面向过程的编码→软件测试
2.面向对象软件工程
面向对象分析与对象抽取→对象详细设计→面向对象的编码与测试
3.基于构件的软件工程
领域分析和测试计划定制→领域设计→建立可复用构件库→按“构件集成模型”查找与集成构件
1.4软件工程的应用

第二章 软件生存周期与软件过程
2.1软件生存周期
2.1.1软件生存周期的主要活动
典型的软件生存周期:

前一阶段活动没有结束,下一阶段活动不能进行
2.2传统的软件过程
2.2.1瀑布模型
1.阶段间的顺序性和依赖性
顺序性:只有前一阶段工作完成,后一阶段工作才能开始
依赖性:前一阶段的输出文档是后一阶段的输入文档,只有保证前一阶段输出文档的正确,后一文档才能有正确的结果
2.推迟实现的观点
实践表明,对于大、中型软件,编码越早,开发时间越长
推迟实现就是把待开发软件的逻辑设计与物理实现清楚的区分开,在软件分析与软件设计阶段只考虑逻辑模型,等编码阶段时,再完成程序清单
3.保证质量的观点
①每一阶段必须完成规定的文档,完整的文档不仅是开发阶段软件人员相互通信的媒介,也是运行阶段对软件进行维护的重要依据
②每一阶段都要对完成的文档进行复审,趁早发现问题,消除隐患

4.问题
分析员不能做出准确需求分析,系统分析员对用户的专业也往往了解不深,因此很难在开发初始阶段彻底弄清软件需求
2.2.2快速原型模型
瀑布模型时需求分析在用户与系统分析员的反复讨论中产生
快速原型模型是先做出一个原型,让用户体验,以确定正确需求与改进
它只包括未来系统的主要功能和系统的重要接口,不包括细节
原型开发模型改变了“生存周期等同于过程模型”的惯性思维

2.3软件的演化模型
随着软件规模的不断增长,复杂软件开始采用渐增式或迭代式的开发方式
2.3.1增量模型
把软件看作一系列相互联系的增量

2.3.2螺旋模型

包含四种活动:计划、风险分析、建立原型、用户评审
顺时针旋转一周,迭代一次
利用快速原型作为降低风险的机制
特点:在项目的所有阶段都考虑各类风险,从而能在风险变成问题之前降低它的危害
缺点:难以使用户相信演化是可控的;增加开发成本和时间;成败很大程度上依赖风险评估
2.3.3构件集成模型
1.面向对象的基本概念
引入对象使之模拟客观实体
面向对象=对象+分类+继承+消息通信
2.什么是构件
数据和方法封装为对象,抽象成类。经过适当设计和实现的类可称为构件,具有通用性和复用性
3.构件集成模型的特征

2.4形式化方法模型
形式化:形式化的程序变化技术为主
非形式化:用软件工程生产出高质量软件产品
2.4.1转换模型
形式化软件开发和程序自动生成技术相结合
1.转化模型的软件开发过程
①确定形式化的需求规格说明书
②进行自动的程序变化
③对形式化开发记录进行测试

