第一章
一、软件
1. 定义:使计算机运行所需的程序、数据和有关文档的总和。
2. 软件危机:开发软件所需高成本和产品的低质量之间有着尖锐的矛盾。
3. 软件危机的主要表现和原因:
(1)主要表现:开发成本和进度难以预测、用户不满足、产品质量无法保证、产品难以维护、缺少适当文档资料、成本逐年提高、生产率提高的速度远不及计算机应用技术的迅速普及。
(2)原因:硬件生产率大幅提高、软件生产随规模增大复杂度增大、软件生产率很低、硬软件供需失衡、矛盾引发“软件危机”
4. 三个基本要素:方法、工具、过程
5. 三个阶段:定义、开发、运行和维护
二、软件生命周期
定义:软件生命周期是从设计软件产品开始到产品不能使用为止的时间周期。软件产品从问题定义开始,经过开发、使用和维护,直到最后被淘汰的整个过程就是软件生命周期。
1问题定义→2可行性分析→3需求分析→4概要设计→5详细设计→6软件实现→7综合测试→8运行维护
(1~3计划阶段、4~7开发阶段、8运行阶段)
三、软件开发模型
1. 瀑布模型
(1)特点:
①软件生命周期的顺序性和依赖性
②尽可能推迟软件的编码
③保证质量,强调文档、复审
(2)应用范围:
适合于在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合下使用。
(3)缺点:
①不适合需求模糊或需求经常变动的系统
②不希望存在早期阶段的反馈
③无法预测一个新系统引入一个机构的影响
④用户可能需要较长等待时间来获得一个可供使用的系统
⑤最终产品往往反应用户的初始需求而不是最终需求
2. 快速原型模型
(1)三种原型:
①渐增式的原型
②用于验证软件需求的原型
③用于验证设计方案的原型
(2)应用范围:
适合预先不能确切定义需求的软件系统的开发(克服瀑布模型的缺点)
(3)缺点:
①所选用的开发技术和工具不一定符合主流发展
②快速建立的系统结构和连续修改可能导致产品质量低下
③一定程度上限制创新
(4)特点:
①用户一直参与,不断改进,系统边做边改
3. 增量模型
(1)特点:
①把瀑布模型的顺序特征与快速原型法的迭代特征相结合
②将软件看作一系列相互联系的增量,在各次迭代中,每次完成其中一个增量
(2)优点:
①分批提交,能在较短时间内提交可完成部分工作的产品
②逐步增加产品功能
③不同构件可以并行开发
(3)困难:
可能冒构件无法集成到一起的风险
4. 喷泉模型
5. 螺旋模型
(1)特点:
①强调风险分析
(2)应用范围:
①适用于有一定技术风险的大型软件系统的开发
6. Rational统一过程
(1)特点:
①综合了瀑布模型、增量模型、螺旋模型、快速原型模型优点的混合模型
②它的开发使用UML
第二章
一、可行性研究
1. 可行性研究的目的
(1)用最小的代价在尽可能短的时间内确定问题是否能够解决
(2)不是解决问题,而是确定问题是否值得去解决
2.可行性研究的内容
技术可行性、经济可行性、社会因素可行性
二、需求分析
1. 任务:明确用户对系统的确切要求
2. 依据:可行性研究阶段产生的文档
3. 结果:软件需求规格说明书
4. 确定目标系统的具体要求:
(1)确定系统的运行环境要求
(2)系统的性能要求
(3)系统功能
(4)接口需求
5. 传统结构化分析方法需要建立的需求模型:
- 数据模型
- 功能模型
- 动态模型
6. 面向对象分析需要建立:
(1)用例模型
(2)每个用例的详细描述
(3)术语表
(4)补充规约
三、数据流图
1. 基本组成成分
(1)数据流
(2)加工
(3)数据存储
(4)外部实体
2. 图形表示方法、元素
此外,“*”表示与关系,同时存在;“+”表示或关系;“⊕”表示从几个数据流选一个(互斥)。
3. 例:
第三章
一、软件设计步骤
1. 概要设计的步骤:
(1)确定设计方案
(2)软件结构设计
(3)数据文件设计
(4)制订测试计划
(5)书写概要设计文档
2. 详细设计的基本任务
(1)数据结构设计和数据库设计
(2)接口设计
(3)过程设计
(4)代码设计、输入输出设计和网络设计等
(5)编写详细设计说明书、软件系统的操作手册等文档
(6)复审
3. 软件设计的基本原理:
软件的模块化、模块独立性、抽象、逐步求精、信息隐藏、局部化
4. 模块的独立性评价标准:模块大小、藕合、内聚、信息隐藏程度
5. 软件详细设计表示法:
(1)程序流程图、N-S图、判定表、PAD图的绘制
(2)流程图的基本结构
二、流程图
1. 定义:对某一个问题的定义、分析或解法的图形表示,图中用各种符号表示操作、数据、流向及装置等。
2. 主要缺点:
(1)不利于逐步求精设计
(2)图中箭头可随意将控制进行转移,不符合程序设计精神
(3)不易表示系统中所含的数据结构
第四章
一、软件测试的目的和重要性
1. 目的:为了发现和改正错误
2. 为了发现程序中的错误而执行程序的过程
3. 好的测试方案使测试很可能发现尚未发现的错误
4. 成功的测试是发现了未发现的错误的测试
二、软件测试方法分为2种
1. 静态分析
2. 动态测试
三、动态测试方法分为:
白盒法:分析程序的内部逻辑结构,注意选择适当的覆盖标准。
黑盒法:不考虑程序内部结构与特性,只根据功能或程序的外部特性设计
四、软件测试的步骤
单元测试→集成测试→确认测试→系统测试
第五章
一、软件维护
1.维护种类
(1)改正性维护
(2)适应性维护
(3)完善性维护
(4)预防性维护
2. 副作用
(1)代码副作用
(2)数据副作用
(3)文档副作用
3. 可维护性的度量
(1)可理解性
(2)可测试性
(3)可修改性
(4)可移植性
第六章
一、面向对象(OO)
目的是有效地描述和刻画问题领域的信息和行为,以全局的观点来考虑系统中各种对象的联系,考虑系统的完整性和一致性,是对问题域的完整、直接的映射。
二、面向对象的分析(OOA)
通常建立三个模型:对象模型、动态模型、功能模型
三、面向对象方法学的要素和优点
1. 四个要素:
(1)对象
(2)类
(3)继承
(4)消息传递
Ps:实例:有某个特定的类所描述的一个具体对象。
消息:对象发出的服务请求。
封装:把对象的属性和方法结合成一个独立的单位,尽可能隐蔽对象的内部细节。
2. 面向对象=对象+类+继承+用消息通信
3. 优点:
(1)与人类习惯的思维方式一致
(2)稳定性好
(3)可重用性好
(4)较易开发大型软件产品
(5)可维护性好
四、统一建模语言(UML)
1. 定义:是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,从需求分析到规格,再到构造和配置。
2. UML语言中的关系
(1)关联关系
是一种结构化关系,指一种事物与另一种事物有联系。在UML图中用一条实线表示,在关联的两端可以标注关联双方的角色和多重性标记。其中有一对一、一对多和多对多关系。
(2)聚合关系
也称为聚集关系,是一种特殊关联关系,描述元素之间部分和整体之间的关系。
(3)组合关系
表示类之间整体和部分的关系,一种特殊的聚合关系。组合关系中部分和整体具有统一生存期,部分对象只能作为组合对象的一部分与组合对象同时存在。
(4)依赖关系
两个事物之间的语义关系。如事物A、B,A变化引起B变化,则称B依赖于A。在UML中用一条带有箭头的虚线表示。
(5)泛化关系
表示一般与特殊的关系。用一条带空心三角箭头的实线表示。
(6)实现关系
一个元素实现另一个元素。如类实现接口。带空心三角的虚线。
3. UML图有用例图、类图、对象图、状态图、顺序图、活动图、协作图、构件图、部署图9种。
Ps:动态建模只有顺序图、状态图和活动图。
五、用例图
1. 用例代表某些用户可见的功能,用于实现一个具体的用户目标。定义了系统的功能需求。用例图只写出谁做了什么。
2. 用例关系
(1)关联关系
(2)扩展关系:扩展用例是基础用例的一个相对独立且可选的用例。
(3)包含关系:如果两个以上的有大量一致的功能;一个用例的功能太多时,可以使用包含关系建立若干个更小的用例;执行基用例时,每次都必须调用被包含用例。
(4)泛化关系:一个或多个用例是某个一般用例的特殊化时使用泛化。
3. 用例图包含:
(1)参与者(actor)/执行者/角色:系统功能的使用者和维护者、其他系统、硬件设备、甚至是时钟。可以用泛化关系来描述多个参与者之间的公共行为。用一个小人表示。
(2)用例(use case):必须是由某一个参与者触发而产生的活动,即每个用例至少涉及一个参与者。每个参与者必须至少涉及一个用例。用椭圆表示。
(3)通信联系:执行者和用例之间交换信息。用线段连接。
4. 表示:
(1)关联(参与者和用例之间),实线箭头。
(2)包含(用例与用例之间),虚线箭头,上面写“《include》”,包含指向被包含。(必须)
(3)扩展(用例与用例之间),虚线箭头,上面写“《extend》”,扩展指向被扩展。(可以有)
(4)泛化(参与者之间),实线箭头,表示发出的事物“is a”被指向的事物。
六、类图
1. 描述类与类之间的静态关系。类图表示系统或领域中的实体及实体之间的关联,由表示类的类框和表示类之间如何关联的连线所组成。包的作用是把各种相关的建模元素组织在一起,形成一个整体。
2. 属性的可见性就是可访问性,分为:
(1)公有的(publiic):用+表示
(2)私有的(private):用-表示
(3)保护的(protected):用#表示
3. 类的相互关系
(1)聚合关系:整体和部分的关系。部分对象可同时参与多个整体对象的构成,称为共享聚集。关键词:“包含”、“组成”、“分为”。且在整体类旁边画空心菱形,用实线连接部分类。
(2)组合关系:整体和部分的关系,部分和整体具有统一生存期。如果部分类完全隶属于整体类,部分与整体共存亡,则称该聚聚为符合聚集,简称组成。用实心菱形(在整体这边画)。
(3)泛化关系(继承):表示一般与特殊的关系。空心箭头的实线,从子类指向父类。
七、对象图
1. 对象是类的实例(类可以实例化,接口不行;接口可以多继承,没有定义),因此对象图可以看做类图的实例,能帮助人们理解比较复杂的类图。
八、状态图
1. 建立类或对象的动态行为模型。状态图重点在于描述状态的控制流。
2. 状态图画的是某一个对象的状态,不是整个的。
3. 状态转换是指两个状态之间的关系,它描述了对象从一个状态进入另一个状态的情况,并执行了所包含的动作。
4. 符号及表示:
(1)椭圆或圆角矩形:状态
(2)箭头:状态转移
(3)事件(写在箭头旁边):引起状态转换的原因
(4)条件(跟在事件后面括号):状态转换的条件
(5)实心圆:初始状态
(6)内部实心的同心圆:最终状态
九、交互图的两种形式:顺序图(时序图)和协作图
1. 顺序图:
(1)描述对象之间动态交互的情况,着重表示对象间消息传递的时间顺序。
(2)对象用矩形框表示,框内标对象名。顺序图方向有从上到下和水平方向两种。箭头上写事件。
(3)横轴表示参与交互的对象,纵轴表示时间。
对象:行为的执行者,而不是类象。
生命线:是一个时间线,表示对象存在的时间段
2. 协作图:
(1)描述组成系统的各个成分之间如何协作来实现系统的交互行为。
(2)强调发送和接收消息的对象之间的组织。
(3)包含对象、链、消息。
Ps:区别在于前者描述时间顺序,后者描述对象之间的关系。两者语义等价,可以转换形式且不丢失任何信息。
十、活动图
1. 建模用例的工作流,理解业务处理过程、描述复杂过程的算法。
2. 活动,动作,转移、决策、同步条、业务对象、起始状态、终止状态
3. 是状态图的一种特殊情况。不需指明任何事件,只要动作被执行,活动图中的状态就自动开始转换。
4. 泳道:活动图中的区域划分。每一个泳道代表一个责任区域,一个泳道中包括一组相关活动。
十一、构件图
- 描述软件构件之间的相互依赖关系。
- 构件的类型:
- 源构件:实现类的源代码文件
- 二进制构件:一个对象代码文件、一个静态库文件或一个动态库文件
- 可执行构件:一个可执行的程序文件,是链接所有二进制构件所得到的结果
- 构件之间才有依赖、提供关系,节点间只有关联关系。
- 实线表示服务的提供,虚线表示服务的依赖。接口:从代表构件的大矩形边框画出一条线,另一端为小空心圆,接口名字写在空心圆旁边。接口表示构建对外提供的服务。
- 包含元素:组件、接口、关系
Ps:先写名称后写类型,不要被名字迷惑。如ServerHostMachine中,ServerHost是名字,Machine是类型。
十二、部署图(配置图)
- 用来描述系统所需的处理器和设备的拓扑结构
- 包含元素:节点、组件、关系。
- 一般一个系统只有一个部署图。
第七章
一、面向对象分析过程
1. 由哪三部分组成:
(1)面向对象分析(OOA)
(2)面向对象设计(OOD)
(3)面向对象测试/编程(OOP)
第八章
一、Rational Rose
1.由美国的rational公司出品的面向对象建模工具,是基于UML的可视化工具。
2.软件系统进行面向对象分析和设计的强大的可视化工具。
3.产生文件后缀名是mdl
4.四个视图
(1)用例视图:只关注系统的功能。参与者、用例、用例图。部分顺序图或协作图。
(2)逻辑视图:只关注逻辑结构,对系统的详细描述。类、类图、交互图(顺序和协作)、状态图
(3)构建视图:构件、构件图、包
(4)部署视图:进程、处理器、设备
5. 文件结构(扩展名):ACX、CAT、CNT、EBS等
第九章
一、软件工程管理
1. 软件项目管理为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析的管理的活动。
2. 估算软件规模:代码行技术、功能点技术、COCOMO 2模型
3. 进度管理:软件开发项目管理的核心内容,直接决定着开发团队的生存质量。
4. 软件配置管理四项任务:标识变更、控制变更、配置审计、配置状态报告。
5. 软件开发风险管理主要目标:预防风险、避免风险。