软件工程
基础知识
对应教程第 5 章 · 系统架构设计师备考精要
题型
单选题
分值占比
8 – 15 分
章节数
7 大模块
01
软件工程
SOFTWARE ENGINEERING · 过程模型与成熟度
软件危机
软件危机的六大表现 高频考点
- 软件开发进度难以预测
- 软件开发成本难以控制
- 软件功能难以满足用户期望
- 软件质量无法保证
- 软件维护困难
- 软件文档资料缺少或不规范
软件过程模型
软件过程模型也称为软件生命周期模型,用于描述软件开发各阶段的活动安排。
(1) 瀑布模型
缺点 必考
- 需求难以一次确定
- 变更的代价高
- 结果难以预见
- 各阶段工作不能并行
(2) 原型模型
- 解决了需求难以一次确定、结果难以预见的问题
- 分为原型开发和目标软件开发两部分
(3) 螺旋模型
- 在快速原型的基础上结合瀑布模型扩展而成
- 四大活动:目标设定 → 风险分析 → 开发和有效性验证 → 评审
- 适用于面向规格说明、面向过程和面向对象的开发方法
- 强调风险分析(核心特征,送分点)
(4) 敏捷模型
- 极限编程 XP:高效、低风险、测试先行(先写测试代码,再编写程序)
- 水晶系列方法:不同的项目,采取不同的策略
- 并列争球法 Scrum:侧重于项目管理
- 包括一系列实践和预定义决策的过程骨架
- 产品 Backlog 管理产品的需求
- 开发过程分为若干个短的迭代周期 Sprint
- 在 Sprint 中,从产品 Backlog 中挑选最高优先级的需求组成 Sprint Backlog
- 特征驱动开发方法
(5) 软件统一过程模型 RUP
RUP 三大特点 高频
- 用例驱动的
- 以架构为中心的
- 迭代和增量的
RUP 是一种重量级过程模型,包含 9 个核心工作流:
4+1 视图模型:RUP 用于描述架构的视图,后被 UML 吸收采纳。包含 逻辑视图、实现视图、进程视图、部署视图、用例视图。
软件能力成熟度模型
CMM
软件能力成熟度模型,是一个概念模型,模型框架和表示是刚性的,不能随意改变。
CMMI
软件能力成熟度模型集成。
CMMI 的 5 个成熟度等级
① 初始级
→
② 已管理级
→
③ 已定义级
→
④ 量化管理级
→
⑤ 优化级
02
需求工程
REQUIREMENTS ENGINEERING · 需求的获取与管理
软件需求的层次
三个层次 必考
- 业务需求:组织机构或客户对系统、产品高层次的目标要求
- 用户需求:用户使用产品必须要完成的任务,是用户对该软件产品的期望
- 业务需求 + 用户需求 = 用户原始需求文档
- 功能需求:从系统操作角度定义了开发人员必须实现的软件功能,用以满足业务需求和用户需求
需求工程定义
- 定义:应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束
- 5 个阶段:
需求获取 → 需求分析 → 形成需求规格 → 需求确认与验证 → 需求管理
- 软件需求规格说明书 SRS 包括:功能需求、非功能需求、设计约束、过程约束
需求获取
步骤(6 步)
- 开发高层的业务模型
- 定义项目范围和高层需求
- 识别用户角色和用户代表
- 获取具体的需求
- 确定目标系统的业务工作流
- 需求整理与总结
常用方法
需求变更与 CCB
需求变更过程
问题分析和变更描述
→
变更分析和成本计算
→
变更实现
变更控制委员会 CCB 过程
制定决策
→
交流情况
→
重新协商约定
需求跟踪
- 两种方式:正向跟踪、逆向跟踪
- 工具:需求跟踪矩阵
03
系统分析与设计
SYSTEM ANALYSIS & DESIGN · 结构化与面向对象
结构化方法 SASD
① 结构化分析 SA
利用图形表达用户需求中的功能需求,常用工具:
② 结构化设计 SD
一种面向数据流的设计方法,以数据流图和数据字典等文档为基础,自顶向下、逐步求精、模块化的过程。
- 分为概要设计和详细设计两个阶段
- 模块是实现功能的基本单位,具有 功能、逻辑、状态 三个基本属性
- 模块分解应遵循 高内聚、低耦合 的设计原则
- 概要设计使用 系统结构图 SC
模块耦合程度(由低到高,送分题):
非直接耦合 → 数据耦合 → 标记耦合 → 控制耦合 → 通信耦合 → 公共耦合 → 内容耦合
内聚表示模块内部代码联系的紧密程度。
③ 结构化编程 SP
- SP 通过顺序、分支、循环三种基本的控制结构
- SP 强调:自顶向下、逐步细化;清晰第一、效率第二;基本结构,组合而成
④ 数据库设计
通常采用 ER 图 来表示。
面向对象方法
① 面向对象分析 OOA
5 个层次
- 主题层
- 对象类层
- 结构层
- 属性层
- 服务层
5 个活动
- 标识对象类
- 标识结构
- 定义主题
- 定义属性
- 定义服务
9 大基本原则
② 面向对象设计 OOD
- 数据结构和在数据结构上定义的操作算法封装在一个对象之中
- 类的分类:实体类、控制类、边界类
③ 面向对象编程 OOP
④ 数据持久化和数据库
- 把对象持久化到关系数据库中
- 常见框架:
Hibernate、iBatis、Mybatis、JDO (Java Data Object)
04
软件测试
SOFTWARE TESTING · 测试目的与分类
测试目的
保证软件的质量、确认软件以正确的方式做了用户所期望的事情。
测试分类
按程序执行状态 分类1
- 静态测试
- 动态测试
按是否关注实现 分类2
- 黑盒测试
- 白盒测试
- 灰盒测试
按程序执行方式 分类3
- 人工测试
- 自动化测试
按阶段 分类4
- 单元测试
- 集成测试
- 系统测试
- 性能测试
- 验收测试
05
净室软件工程 CSE
CLEAN-ROOM SOFTWARE ENGINEERING
净室软件工程(CSE) 是一种在软件开发过程中强调在软件中建立正确性的需要的方法。
理论基础
技术手段(4 项)
- 统计过程控制下的增量式开发
- 基于函数的规范和设计
- 正确性验证
- 统计测试和软件认证
核心要点:强调将正确性验证作为发现和消除错误的主要机制。
06
基于构件的软件工程 CBSE
COMPONENT-BASED SOFTWARE ENGINEERING
CBSE:一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。
5 大特征
构件模型
主流模型 必考
- Web Services 模型
- Sun 公司的 EJB 模型
- 微软的 .Net 模型
模型要素
- 接口
- 使用信息
- 部署信息
通用服务
- 平台服务
- 支持服务
CBSE 过程
- 系统需求概览
- 识别候选构件
- 根据发现的构件修改需求
- 体系结构设计
- 构件定制与适配
- 组装构件,创建系统
CBSE 与传统软件开发的区别
- 早期需要完整的需求,以便尽可能多地识别出可复用的构件
- 早期阶段根据可利用的构件来细化和修改需求以匹配 CBSE
- 架构设计完成后,可能需要修改构件以适合功能和架构的需求
- 开发过程就是组装构件的过程,有时需要开发适配器
- CBSE 中的架构设计阶段特别重要,决定和限制了可选构件的范围
构件组装方式
顺序组装
·
层次组装
·
叠加组装
07
软件项目管理
SOFTWARE PROJECT MANAGEMENT · 进度·配置·质量·风险
软件进度管理
六大活动
- 工作分解结构(WBS 树):用于任务的拆解
- 任务活动图:项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式展示和管理项目活动
软件配置管理
版本控制
对软件开发过程中各种文件变更的管理。
变更控制
对变更进行管理,确保变更有序进行。
- 来自外部的变更需求
- 来自内部的变更需求
软件质量管理
软件质量保证 SQA
主要目标 高频
建立一套有计划、有系统的方法,向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
- 事前预防工作
- 尽量在刚刚引入缺陷时将其捕获
- 作用于过程而不是最终产品
- 贯穿于所有活动中
主要任务
- SQA 审计与评审
- SQA 报告
- 处理不符合问题
软件质量认证
软件风险管理
软件项目风险:指在软件开发过程中遇到的预算和进度等方面的问题,以及这些问题对软件项目的影响。
风险管理的主要目标是预防风险,及应对发生的风险。
Boehm 风险管理体系 人名
- 风险估计
- 风险控制
Charette 风险管理体系 人名
- 风险分成分析
- 风险管理