4.软件工程基础知识【★★★】
4.1.软件工程基础(★★)
4.1.1.能力成熟度模型
▲能力成熟度模型(CMM)五级
初始级:
可重复级:
已定义级:
已管理级:
优化级:
重点:初始,可重复,已定义,已管理,优化(定、理、优)
▲能力成熟度集成(CMMI)五级
初始级:
已管理级:
已定义级:
已量化级:
优化级:
重点:初始,已管理,已定义,已量化,优化。(已、量、化)
4.2.软件开发
4.2.1.软件开发方法
▲软件开发方法的种类
结构化开发方法:自顶向下,逐步分解(求解),开发周期长;文档、设计说明繁琐,工作效率低
原型法开发方法:适用于需求不明确的开发,有抛弃型原型、进化型原型
面向对象方法:仿真领域,与客观实体相对应,符合人们的思维习惯
面向服务的方法:粗粒度、松散耦合为核心,强调标准化和构件化,加强了灵活性、可复用性和可演化性
▲面向对象开发方法的三种形式的模型:
对象模型(描述系统数据结构)、动态模型(描述系统控制结构)、功能模型(描述系统功能)。
重点:对象、动态、功能
4.2.2.软件过程模型(★★★)
▲软件过程模型的类型
瀑布模型:结构化方法。需求明确、文档齐。
原型模型:迭代方法。分原型开发与目标软件开发。针对需求不明确,快速构造功能模型
螺旋模型:迭代方法。瀑布与原型的结合体。针对需求不明确,增加风险分析,适合大型项目
喷泉模型:面向对象。基于构件的开发模型,可复用性,节约成本、时间
增量模型:先开发核心功能
敏捷模型:以人为核心、迭代、循序渐进,适用小团队小项目,小步快跑的思想
统一过程模型 :又名RUP/UP,用例驱动、架构为中心、迭代、增量。
V 模型:测试与开发结合(单元对编码,集成对详细,系统对概要,验收对需求)
快速应用:(RAD) 基于构件的开发方法。用户参与、开发或复用构件、模块化要求高,不适用新技术。
变换模型:适用于形式化开发。
构件组装模型:利用已有的软件构件(或“类”)来构造应用程序的模型
▲瀑布模型的4个阶段
需求分析、设计、编码、运行与维护
重点:需求分析、设计、编码、运行与维护
▲螺旋模型的四个阶段 (强调风险分析)
制定计划、风险分析、实施工程、客户评估
重点:制定计划、风险分析、实施工程、客户评估
▲敏捷模型的主要开发方法
极限编程(XP): 先测试,再编程。测试先行,近螺旋开发方法
水晶系列法: 与XP一样,不同项目采用不同策略
并列争球法(Scrum): 又名敏捷,侧重项目管理,迭代增量
功能驱动开发方法(FDD): 首席程序员,类程序员
重点:极限编程(测试先行)、 水晶系列法、 并列争球法(侧重项目管理)、功能驱动法(首席、类)
▲极限编程(XP) 的四大价组成部分
价值观、 原则、 实践、行为
重点:价值观、 原则、 实践、行为
▲极限编程(XP)的四大价值观
沟通、简单、反馈、勇气
重点:沟通、简单、反馈、勇气
▲统一过程模型(RUP) 的每个循环的四个阶段
起始阶段: 定义产品,确定范围
细化阶段: 设计及确定架构,制定工作计划
构建阶段: 构造产品
移交阶段: 交付产品
重点:起始、细化、构建、移交
▲统一过程(RUP) 的特点
用例驱动
以架构为中心
▲统一过程模型(RUP) 九个核心工作流
业务建模,需求,分析与设计,实现,测试,部署,配置与变更管理,项目管理,环境
重点:业务建模,需求,分析与设计,实现,测试,部署,配置与变更管理,项目管理,环境
▲统一过程模型(RUP) 4+1
逻辑视图: 对最终用户,功能需求
实现视图: 对程序员,包图 组件图
进程视图: 对系统集成人员,非功能需求
部署视图: 对系统工程师,软件到硬件
用例视图: 对其他视图指导
重点:逻辑、实现、进程、部署、用例
4.2.3.逆向工程
▲逆向工程的四个级别
实现级:包括程序的抽象语法树,符号表
结构级:程序分量之间的依赖关系,如调用图,结构图,数据结构
功能能:反应程序功能,如数据、控制模型
领域级:反应程序与应用领域之间对应关系信息,如ER模型
(领域级,抽象级别最高,完备性最低)
重点:实现级,结构级,功能能,领域级
▲逆向工程相关的概念
重构:同一抽象级别上转换系统描述形式
设计恢复:借助工具,抽象出有关的数据设计、总体结构设计等信息
再工程:在逆向工程的基础上,修改或重构已有系统
正向工程:不仅从现在系统中,恢复设计信息,而且去改变或重构现在系统
▲再工程重新开发过程的三个步骤,包括
逆向工程、新需求的考虑过程、正向工程
重点:逆向工程、新需求的考虑过程、正向工程
4.3.需求工程(★★★)
4.3.1.软件需求
▲需求层次分类
业务需求:企业或客户高层次目标要求
用户需求:用户的具体目标,要求系统必须能完成的任务
系统需求:系统的角度来说明软件的需求,包括功能需求、非功能需求和设计约束等。
重点:业务需求,用户需求,系统需求
▲系统需求包括
功能需求:也称为行为需求,必须在系统中实现的软件功能
性能需求:也称非功能需求,系统必须具备的属性或品质,又可细分为软件质量属性和其他非功能需求。
设计约束:也称为限制条件或补充规约,通常是对系统的一些约束说明。
重点:系统需求包括功能需求,性能需求,设计约束
▲需求的QFD分类
质量功能部署QFD是一种将用户要求转化成软件需求的技术,目的是最大限度地提升用户满意度。
▲QFD将软件需求分为三类
常规需求(基本需求):用户认为应该有的功能或性能。
期望需求:用户想当然认为的功能或性能。
兴奋需求(意外需求):用户没要求的功能或性能,不实现也不影响。
重点:常规需求,期望需求,兴奋需求
▲需求开发的四个阶段,包括
需求获取、需求分析、需求定义、需求验证
4.3.2.需求获取
▲需求获取的方法
用户访谈、问卷调查、采样、情节串联板、联合需求计划、需求记录技术
4.3.3.需求分析
▲结构化需求分析
结构化的特点:自顶向下,逐步分解,面向数据
▲结构化需求分析的三大模型
功能模型(数据流图DFD)、行为模型(状态转换图STD)、数据模型(ER图)以及数据字典
▲结构化分析中数据流图(DFD)的元素
外部实体: □ (方框)
数据流 : → (箭头)
加工 : 〇 ( 圆或椭圆)
数据存储 :〓 或 匚(双杠)
▲结构化分析中数据流图(DFD)中常见的错误
黑洞:加工块有输入,没输出
奇迹:加工块有输出,没输入
灰洞:加工块有输入输出,输入得不到目前的输出。缺少处理步骤或数据流
▲结构化分析中数据流图(DFD)的作用
可视化表达 :图形方式展示系统中数据流动、存储和处理的过程
明确系统边界:界定系统边界,确认外部识别、输入、处理、存储
支持需求分析:分析师更好地理解用户需求
支持设计过程:指导开发人员如何构建系统,理解系统的整体结构和数据流动
▲结构化分析 数据字典(DD)的作用
定义数据元素: 提供数据元素详细的定义和描述
支持 数据一致性:确保系统中的数据元素保持一致性
支持 数据完整性:定义数据元素的完整性和准确性要求
支持 数据交换:帮助理解 数据元素的含义和格式
支持 文档编写:编写文档时,描述数据元素之间的关系
4.3.4.需求定义
▲需求定义的阶段的产物
软件需求规格说明书(SRS)
4.3.5.需求验证
▲对需求规格说明书(SAS)进步评审和测试,包括两个步骤
需求评审
需求测试
4.3.6.需求管理
▲定义需求基线
通过评审的需求说明书就是需求基线
▲需求变更的过程
识别问题:问题识别
分析问题:问题分析和变更描述
分析变更:变更分析与成本计算
实现变更:实现变更
修改后的需求
▲需求跟踪
正向跟踪
逆向跟踪
▲需求管理包括哪些活动
变更控制、版本控制、需求跟踪等活动
4.3.7.系统设计
▲流程表示工具
程序流程图(PFD):
IPO 图:
N-S图:
O-PAD图:
▲业务流程重组(BPR)
BPR基本原则:以客户为中心,以人为本,以客户为导向
BPR系统规划:战略规划、流程规划、数据规划、功能规划、系统实施
BPR步骤:项目启动,拟定变革计划,建立团队,分析目标流程,重新设计目标流程,实施新的设计,持续改进
▲业务流程管理(BPM)
流程管理包含:规范流程,优化流程,再造流程
▲系统设计方法
有结构化设计方法、面向对象设计方法
▲面向对象设计(OOP)原则
单一 :仅一个引起它变化
开闭:增加开放,修改关闭
依赖倒置:抽象不依赖细节,细节应依赖抽象
接口分离:依赖于抽象,不依赖于具体(面向接口)
里氏替换:子类必须能替换他们的基类(父类)
▲面向构件编程 (COP)的基本支持包括
多态 (可替代性)
封装 (隐藏性 )
绑定和装载(独立部署)
安全性
▲系统设计包括
概要设计,详细设计
▲系统设计的基本原理
抽象化
自顶向下,逐步求精
信息隐藏
模块独立
系统设计原则
模块大小适中
减少调用深度
多扇入,少扇出
▲模块内各部各代码之间的紧密程度(高内聚,高到低)
功能:(★) 模块内部各个部分全部属于一个整体
顺序:前一处理动作的输出,是后一处理动作的输入
通讯:都使用同一数据或产生同一输出。
过程:虽然没有关系,但必须按特定的次序执行
时间:必须在同一时间内执行
逻辑:有相似的处理,但功能上无关
偶然:没有或非常松散的关系
▲耦合:模块之间的关联程度(低耦合,低到高)
非直接:(★) 没有直接关系
数据:通过 ==数据参数==交换信息
标记:通过 ==参数表== 传递记录信息
控制:通过 ==控制信息==
通讯(外部):通过 ==全局简单变量==
公共:通过 ==公共数据区域==
内容:涉及另一模块的内部信息
▲人机界面三大原则
置于用户控制之下,减少用户的记忆负担,保持界面的一致性
4.4.软件测试(★★★)
4.4.1.测试分类
按运行状态 :静态测试,动态测试
静态测试:又分:桌前检查,代码审查,代码走查
动态测试:又分黑盒,白盒,灰盒(灰盒,即有黑,又有白)
按程序执行方式 :人工,自动化
按阶段上划分 :单元测试,集成测试,确认测试,验收测试,配置项测试,回归测试
4.4.2.黑盒测试用例设计
等价类化分、边界值划分、错误推测
4.4.3.白盒测试覆盖级别(从低到高)
语句覆盖(SC):每条语句至少执行一次。
判定覆盖(DC): 每个判定至少都获得一次“真值”或“假值”
条件覆盖(CC):每一判定语句中,每个逻辑条件,获得一次“真值”或“假值”
条件判定组合覆盖(CDC):每个条件的所有可能(真/假)至少出现一次
多条件覆盖(MCC):每个判定中条件的各种可能组合都至少出现一次。
路径覆盖:所有可能路径至少被执行一次。
▲软件开发环境(SDE)
环境信息库:用存储与系统开发有关的信息,支持信息的交流与共享
过程控制与消息服务器: 实现过程集成和控制集成的基础。
环境用户界面: 实行统一控制的各环境部件及工具的界面
▲软件性能测试的类型
负载测试: 测试各种工作负载下,系统的性能
压力测试: 超负荷环境中程序是否能够承担
强度测试: 资源低的情况下,测试系统极限运行情况;
容量测试: 又名并发测试,测试系统同时处理的在线最大用户数量
▲软件度量McCabe度量法:
有向边数m, 节点数n 环路复杂度 m-n+2
4.5.系统运行与维护
4.5.1.遗留系统的4种处理方法
低水平,低价值:淘汰
低水平,高价值:继承
高水平,低价值:集成
高水平,高价值:改造
4.5.2.新老系统的3种系统转换计划,有
直接转换
并行转换
分段转换
4.5.3.数据转换与迁移的3种方式,有
切换前:工具迁移
切换前:采用手工录入
切换后:通过新系统生成
4.5.4.软件维护类型有
正确性维护:发现bug,而修改
适应性维护:外部环境变化,修改和升级
完善性维护:主动对软件提出更多需求
预防性维护:对未来可能 发生的bug进行预防性修改
4.6.净室软件工程
净室即无尘室、洁净室。也就是一个受控污染级别的环境。
使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
使用统计的测试来获取认证被交付的软件的可靠性所必需的出错率信息。
4.7.基于构件的软件工程
▲基于构建的软件工程应的特征
独立、标准、可组装、可部署、文档化
▲基于构件的软件开发中,构件分类方法
关键字分类法:从抽象到具体,分解树型或有向无回路图
刻面分类法:构件执行的功能、数据、语境
超文本方法:全文检索,按人烦的联想思维
▲常见的3种构建组装
顺序组装
层次组装
叠加组装
▲构建组装面临接口不兼容的问题
参数不兼容
操作不兼容
操作不完备