【软考架构师】软件工程 核心考点与学习笔记(超详细解析+图解)
摘要:本文为软考高级系统架构设计师(第5章:软件工程)的学习笔记。内容涵盖软件过程模型、需求工程、系统分析与设计(结构化与面向对象)、软件测试、系统维护以及项目管理(进度、成本计算)等核心知识点。针对易混淆的概念,本文利用 Mermaid 语法绘制了图表,助你快速记忆,顺利通过软考!
目录
- [1. 软件工程概述与成熟度模型](#1. 软件工程概述与成熟度模型)
- [2. 软件过程模型(⭐⭐⭐)](#2. 软件过程模型(⭐⭐⭐))
- [3. 需求工程](#3. 需求工程)
- [4. 系统分析与设计](#4. 系统分析与设计)
- [4.1 结构化分析与设计](#4.1 结构化分析与设计)
- [4.2 面向对象分析与设计(UML)](#4.2 面向对象分析与设计(UML))
- [5. 软件测试](#5. 软件测试)
- [6. 系统维护、转换与遗留系统](#6. 系统维护、转换与遗留系统)
- [7. 项目管理(核心计算题)](#7. 项目管理(核心计算题))
- [7.1 进度管理(关键路径法)](#7.1 进度管理(关键路径法))
- [7.2 成本管理(挣值分析)](#7.2 成本管理(挣值分析))
- [8. 总结](#8. 总结)
1. 软件工程概述与成熟度模型
软件工程的核心是将系统化、规范化的方法应用于软件的开发与维护。在考试中,CMM(能力成熟度模型) 和 CMMI(能力成熟度模型集成) 是高频考点。
- CMM 五个等级:初始级(杂乱无章) -> 可重复级(项目级管理) -> 已定义级(组织级标准) -> 已管理级(定量控制) -> 优化级(持续改进)。
- CMMI 关注点:已管理级(过程为项目服务)、已定义级(过程为组织服务)、定量管理级(定量控制)、优化级(过程改进)。
💡 记忆技巧 :CMMI中,"需求管理、项目计划"属于已管理级 ;"技术解决方案、需求开发"属于已定义级。
2. 软件过程模型
这一节是选择题和案例分析的常客。不同的模型适用于不同的项目场景。
2.1 核心模型对比
| 模型名称 | 核心特点 | 适用场景/优缺点 |
|---|---|---|
| 瀑布模型 | 线性、按阶段划分 | 需求明确、很少变更。缺点:风险大,后期才能见到成果。 |
| 原型模型 | 快速构建、反复修改 | 需求不明确。分为抛弃型、演化型、水平型、垂直型。 |
| 螺旋模型 | 瀑布+演化,强调风险分析 | 大型复杂项目。由目标设定、风险分析、开发验证、评审组成。 |
| V模型 | 测试贯穿始终,测试分段 | 强调测试先行。左侧开发,右侧测试(单元、集成、系统、验收)。 |
| 敏捷方法 | 适应性、以人为本、迭代增量 | 适用于需求变化快的项目。如 XP(极限编程)、Scrum。 |
| RUP | 用例驱动、以架构为中心、迭代增量 | 分为初始、细化、构建、移交四个阶段。 |
2.2 过程模型图解(以 V模型 与 螺旋模型为例)
V模型结构直观地展示了开发阶段与测试阶段的对应关系:
#mermaid-svg-UbqKrR349Ci11ywx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UbqKrR349Ci11ywx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UbqKrR349Ci11ywx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UbqKrR349Ci11ywx .error-icon{fill:#552222;}#mermaid-svg-UbqKrR349Ci11ywx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UbqKrR349Ci11ywx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UbqKrR349Ci11ywx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UbqKrR349Ci11ywx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UbqKrR349Ci11ywx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UbqKrR349Ci11ywx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UbqKrR349Ci11ywx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UbqKrR349Ci11ywx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UbqKrR349Ci11ywx .marker.cross{stroke:#333333;}#mermaid-svg-UbqKrR349Ci11ywx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UbqKrR349Ci11ywx p{margin:0;}#mermaid-svg-UbqKrR349Ci11ywx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UbqKrR349Ci11ywx .cluster-label text{fill:#333;}#mermaid-svg-UbqKrR349Ci11ywx .cluster-label span{color:#333;}#mermaid-svg-UbqKrR349Ci11ywx .cluster-label span p{background-color:transparent;}#mermaid-svg-UbqKrR349Ci11ywx .label text,#mermaid-svg-UbqKrR349Ci11ywx span{fill:#333;color:#333;}#mermaid-svg-UbqKrR349Ci11ywx .node rect,#mermaid-svg-UbqKrR349Ci11ywx .node circle,#mermaid-svg-UbqKrR349Ci11ywx .node ellipse,#mermaid-svg-UbqKrR349Ci11ywx .node polygon,#mermaid-svg-UbqKrR349Ci11ywx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UbqKrR349Ci11ywx .rough-node .label text,#mermaid-svg-UbqKrR349Ci11ywx .node .label text,#mermaid-svg-UbqKrR349Ci11ywx .image-shape .label,#mermaid-svg-UbqKrR349Ci11ywx .icon-shape .label{text-anchor:middle;}#mermaid-svg-UbqKrR349Ci11ywx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UbqKrR349Ci11ywx .rough-node .label,#mermaid-svg-UbqKrR349Ci11ywx .node .label,#mermaid-svg-UbqKrR349Ci11ywx .image-shape .label,#mermaid-svg-UbqKrR349Ci11ywx .icon-shape .label{text-align:center;}#mermaid-svg-UbqKrR349Ci11ywx .node.clickable{cursor:pointer;}#mermaid-svg-UbqKrR349Ci11ywx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UbqKrR349Ci11ywx .arrowheadPath{fill:#333333;}#mermaid-svg-UbqKrR349Ci11ywx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UbqKrR349Ci11ywx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UbqKrR349Ci11ywx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbqKrR349Ci11ywx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UbqKrR349Ci11ywx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbqKrR349Ci11ywx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UbqKrR349Ci11ywx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UbqKrR349Ci11ywx .cluster text{fill:#333;}#mermaid-svg-UbqKrR349Ci11ywx .cluster span{color:#333;}#mermaid-svg-UbqKrR349Ci11ywx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UbqKrR349Ci11ywx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UbqKrR349Ci11ywx rect.text{fill:none;stroke-width:0;}#mermaid-svg-UbqKrR349Ci11ywx .icon-shape,#mermaid-svg-UbqKrR349Ci11ywx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbqKrR349Ci11ywx .icon-shape p,#mermaid-svg-UbqKrR349Ci11ywx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UbqKrR349Ci11ywx .icon-shape .label rect,#mermaid-svg-UbqKrR349Ci11ywx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbqKrR349Ci11ywx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UbqKrR349Ci11ywx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UbqKrR349Ci11ywx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 需求分析
概要设计
详细设计
编码
单元测试
集成测试
系统测试
验收测试
📌 V模型特点:测试计划先行(在需求阶段写验收测试计划,在概要设计阶段写系统测试计划),测试贯穿始终。
3. 需求工程
需求工程分为需求开发 和需求管理两部分。
- 需求开发:需求获取 -> 需求分析 -> 需求定义(形成SRS《软件需求规格说明书》) -> 需求验证。
- 需求分类 :
- 业务需求(宏观、整体)
- 用户需求(具体用户操作)
- 系统需求(功能、性能、设计约束)
- 需求管理 :需求变更控制、版本控制、需求跟踪(正向跟踪、逆向跟踪,形成需求跟踪矩阵)。
需求变更流程:
#mermaid-svg-NXyoitY7QvgBsP1q{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NXyoitY7QvgBsP1q .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NXyoitY7QvgBsP1q .error-icon{fill:#552222;}#mermaid-svg-NXyoitY7QvgBsP1q .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NXyoitY7QvgBsP1q .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NXyoitY7QvgBsP1q .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NXyoitY7QvgBsP1q .marker.cross{stroke:#333333;}#mermaid-svg-NXyoitY7QvgBsP1q svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NXyoitY7QvgBsP1q p{margin:0;}#mermaid-svg-NXyoitY7QvgBsP1q .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NXyoitY7QvgBsP1q .cluster-label text{fill:#333;}#mermaid-svg-NXyoitY7QvgBsP1q .cluster-label span{color:#333;}#mermaid-svg-NXyoitY7QvgBsP1q .cluster-label span p{background-color:transparent;}#mermaid-svg-NXyoitY7QvgBsP1q .label text,#mermaid-svg-NXyoitY7QvgBsP1q span{fill:#333;color:#333;}#mermaid-svg-NXyoitY7QvgBsP1q .node rect,#mermaid-svg-NXyoitY7QvgBsP1q .node circle,#mermaid-svg-NXyoitY7QvgBsP1q .node ellipse,#mermaid-svg-NXyoitY7QvgBsP1q .node polygon,#mermaid-svg-NXyoitY7QvgBsP1q .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NXyoitY7QvgBsP1q .rough-node .label text,#mermaid-svg-NXyoitY7QvgBsP1q .node .label text,#mermaid-svg-NXyoitY7QvgBsP1q .image-shape .label,#mermaid-svg-NXyoitY7QvgBsP1q .icon-shape .label{text-anchor:middle;}#mermaid-svg-NXyoitY7QvgBsP1q .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NXyoitY7QvgBsP1q .rough-node .label,#mermaid-svg-NXyoitY7QvgBsP1q .node .label,#mermaid-svg-NXyoitY7QvgBsP1q .image-shape .label,#mermaid-svg-NXyoitY7QvgBsP1q .icon-shape .label{text-align:center;}#mermaid-svg-NXyoitY7QvgBsP1q .node.clickable{cursor:pointer;}#mermaid-svg-NXyoitY7QvgBsP1q .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NXyoitY7QvgBsP1q .arrowheadPath{fill:#333333;}#mermaid-svg-NXyoitY7QvgBsP1q .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NXyoitY7QvgBsP1q .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NXyoitY7QvgBsP1q .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXyoitY7QvgBsP1q .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NXyoitY7QvgBsP1q .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXyoitY7QvgBsP1q .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NXyoitY7QvgBsP1q .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NXyoitY7QvgBsP1q .cluster text{fill:#333;}#mermaid-svg-NXyoitY7QvgBsP1q .cluster span{color:#333;}#mermaid-svg-NXyoitY7QvgBsP1q div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NXyoitY7QvgBsP1q .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NXyoitY7QvgBsP1q rect.text{fill:none;stroke-width:0;}#mermaid-svg-NXyoitY7QvgBsP1q .icon-shape,#mermaid-svg-NXyoitY7QvgBsP1q .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXyoitY7QvgBsP1q .icon-shape p,#mermaid-svg-NXyoitY7QvgBsP1q .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NXyoitY7QvgBsP1q .icon-shape .label rect,#mermaid-svg-NXyoitY7QvgBsP1q .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXyoitY7QvgBsP1q .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NXyoitY7QvgBsP1q .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NXyoitY7QvgBsP1q :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 识别出问题
问题分析和变更描述
变更分析和成本计算
变更实现
修改后的需求
4. 系统分析与设计
4.1 结构化分析与设计
- 结构化分析(SA) :核心工具是 数据流图(DFD) 和 数据字典(DD) 。
- DFD 元素:数据流、加工、数据存储、外部实体。
- 典型错误:黑洞(有输入无输出)、奇迹(有输出无输入)、灰洞(输入不足以产生输出)。
- 结构化设计(SD) :目标是高内聚、低耦合 。
- 内聚(从高到低):功能内聚 > 顺序内聚 > 通信内聚 > 过程内聚 > 时间内聚 > 逻辑内聚 > 偶然内聚。
- 耦合(从低到高):非直接耦合 < 数据耦合 < 标记耦合 < 控制耦合 < 外部耦合 < 公共耦合 < 内容耦合。
4.2 面向对象分析与设计(UML)
UML图是必考项,分为静态图(结构图)和动态图(行为图)。
- 静态图:类图、对象图、构件图、部署图、包图。
- 动态图:用例图、顺序图(序列图)、通信图、状态图、活动图。
UML类图关系:
#mermaid-svg-hCIiu3CMctsD0oFR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hCIiu3CMctsD0oFR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hCIiu3CMctsD0oFR .error-icon{fill:#552222;}#mermaid-svg-hCIiu3CMctsD0oFR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hCIiu3CMctsD0oFR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hCIiu3CMctsD0oFR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hCIiu3CMctsD0oFR .marker.cross{stroke:#333333;}#mermaid-svg-hCIiu3CMctsD0oFR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hCIiu3CMctsD0oFR p{margin:0;}#mermaid-svg-hCIiu3CMctsD0oFR g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-hCIiu3CMctsD0oFR g.classGroup text .title{font-weight:bolder;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster-label text{fill:#333;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster-label span{color:#333;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster-label span p{background-color:transparent;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster text{fill:#333;}#mermaid-svg-hCIiu3CMctsD0oFR .cluster span{color:#333;}#mermaid-svg-hCIiu3CMctsD0oFR .nodeLabel,#mermaid-svg-hCIiu3CMctsD0oFR .edgeLabel{color:#131300;}#mermaid-svg-hCIiu3CMctsD0oFR .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-hCIiu3CMctsD0oFR .label text{fill:#131300;}#mermaid-svg-hCIiu3CMctsD0oFR .labelBkg{background:#ECECFF;}#mermaid-svg-hCIiu3CMctsD0oFR .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-hCIiu3CMctsD0oFR .classTitle{font-weight:bolder;}#mermaid-svg-hCIiu3CMctsD0oFR .node rect,#mermaid-svg-hCIiu3CMctsD0oFR .node circle,#mermaid-svg-hCIiu3CMctsD0oFR .node ellipse,#mermaid-svg-hCIiu3CMctsD0oFR .node polygon,#mermaid-svg-hCIiu3CMctsD0oFR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hCIiu3CMctsD0oFR .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR g.clickable{cursor:pointer;}#mermaid-svg-hCIiu3CMctsD0oFR g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-hCIiu3CMctsD0oFR g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-hCIiu3CMctsD0oFR .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-hCIiu3CMctsD0oFR .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-hCIiu3CMctsD0oFR .dashed-line{stroke-dasharray:3;}#mermaid-svg-hCIiu3CMctsD0oFR .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-hCIiu3CMctsD0oFR #compositionStart,#mermaid-svg-hCIiu3CMctsD0oFR .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #compositionEnd,#mermaid-svg-hCIiu3CMctsD0oFR .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #dependencyStart,#mermaid-svg-hCIiu3CMctsD0oFR .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #dependencyStart,#mermaid-svg-hCIiu3CMctsD0oFR .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #extensionStart,#mermaid-svg-hCIiu3CMctsD0oFR .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #extensionEnd,#mermaid-svg-hCIiu3CMctsD0oFR .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #aggregationStart,#mermaid-svg-hCIiu3CMctsD0oFR .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #aggregationEnd,#mermaid-svg-hCIiu3CMctsD0oFR .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #lollipopStart,#mermaid-svg-hCIiu3CMctsD0oFR .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR #lollipopEnd,#mermaid-svg-hCIiu3CMctsD0oFR .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-hCIiu3CMctsD0oFR .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-hCIiu3CMctsD0oFR .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hCIiu3CMctsD0oFR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hCIiu3CMctsD0oFR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hCIiu3CMctsD0oFR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 组合(强依赖,同生共死)
聚合(弱依赖,生命周期独立)
泛化(继承)
实现
整体类
部分类
父类
子类
接口
实现类
- 用例关系 :包含(
<<include>>,必须执行)、扩展(<<extend>>,特定条件下执行)、泛化。 - 设计原则:单一职责、开闭原则(对扩展开放,对修改关闭)、里氏替换、依赖倒置(针对接口编程)、接口隔离、合成复用、迪米特法则(最少知识原则)。
5. 软件测试
- 静态测试:代码审查、代码走查、桌前检查(不运行程序)。
- 动态测试 :
- 黑盒测试:等价类划分、边界值分析、错误推测、因果图。
- 白盒测试 :逻辑覆盖(语句、判定、条件、条件/判定、条件组合、路径覆盖)。路径覆盖发现错误能力最强。
- 测试阶段 :
- 单元测试:白盒为主,需驱动模块(主程序)和桩模块(子模块)。
- 集成测试:黑盒为主,分为一次性组装和增量式组装。
- 确认测试:验证是否满足需求(Alpha、Beta测试)。
- 系统测试:包含性能测试(压力测试 测上限、容量测试 测最大用户数、强度测试测资源极低情况)。
6. 系统维护、转换与遗留系统
- 维护类型 :
- 正确性维护:修Bug(知错能改)。
- 适应性维护:外部环境变化(适者生存)。
- 完善性维护 :用户提新需求(锦上添花)------占比最大。
- 预防性维护:预防未来Bug(未雨绸缪)。
- 遗留系统处置策略 (根据技术水平和业务价值矩阵决定):
- 高水平、低价值 -> 集成
- 高水平、高价值 -> 改造
- 低水平、高价值 -> 继承
- 低水平、低价值 -> 淘汰
7. 项目管理(核心计算题)
7.1 进度管理(关键路径法)
- 关键路径 :项目从开始到结束耗时最长的路径。关键路径上的活动总时差和自由时差均为0。
- 计算公式 :
最早完成时间 (EF) = 最早开始时间 (ES) + 工期最迟开始时间 (LS) = 最迟完成时间 (LF) - 工期总时差 (TF) = LS - ES = LF - EF(不影响总工期的机动时间)自由时差 (FF) = 紧后活动的最早开始时间 (ES) 的最小值 - 本活动的 EF(不影响紧后活动的机动时间)
单代号网络图演示(正推求ES/EF,逆推求LS/LF):
#mermaid-svg-UwyoH8MZXk8Pc478{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UwyoH8MZXk8Pc478 .error-icon{fill:#552222;}#mermaid-svg-UwyoH8MZXk8Pc478 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UwyoH8MZXk8Pc478 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UwyoH8MZXk8Pc478 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UwyoH8MZXk8Pc478 .marker.cross{stroke:#333333;}#mermaid-svg-UwyoH8MZXk8Pc478 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UwyoH8MZXk8Pc478 p{margin:0;}#mermaid-svg-UwyoH8MZXk8Pc478 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster-label text{fill:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster-label span{color:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster-label span p{background-color:transparent;}#mermaid-svg-UwyoH8MZXk8Pc478 .label text,#mermaid-svg-UwyoH8MZXk8Pc478 span{fill:#333;color:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 .node rect,#mermaid-svg-UwyoH8MZXk8Pc478 .node circle,#mermaid-svg-UwyoH8MZXk8Pc478 .node ellipse,#mermaid-svg-UwyoH8MZXk8Pc478 .node polygon,#mermaid-svg-UwyoH8MZXk8Pc478 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UwyoH8MZXk8Pc478 .rough-node .label text,#mermaid-svg-UwyoH8MZXk8Pc478 .node .label text,#mermaid-svg-UwyoH8MZXk8Pc478 .image-shape .label,#mermaid-svg-UwyoH8MZXk8Pc478 .icon-shape .label{text-anchor:middle;}#mermaid-svg-UwyoH8MZXk8Pc478 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UwyoH8MZXk8Pc478 .rough-node .label,#mermaid-svg-UwyoH8MZXk8Pc478 .node .label,#mermaid-svg-UwyoH8MZXk8Pc478 .image-shape .label,#mermaid-svg-UwyoH8MZXk8Pc478 .icon-shape .label{text-align:center;}#mermaid-svg-UwyoH8MZXk8Pc478 .node.clickable{cursor:pointer;}#mermaid-svg-UwyoH8MZXk8Pc478 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UwyoH8MZXk8Pc478 .arrowheadPath{fill:#333333;}#mermaid-svg-UwyoH8MZXk8Pc478 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UwyoH8MZXk8Pc478 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UwyoH8MZXk8Pc478 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UwyoH8MZXk8Pc478 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UwyoH8MZXk8Pc478 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UwyoH8MZXk8Pc478 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster text{fill:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 .cluster span{color:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UwyoH8MZXk8Pc478 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UwyoH8MZXk8Pc478 rect.text{fill:none;stroke-width:0;}#mermaid-svg-UwyoH8MZXk8Pc478 .icon-shape,#mermaid-svg-UwyoH8MZXk8Pc478 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UwyoH8MZXk8Pc478 .icon-shape p,#mermaid-svg-UwyoH8MZXk8Pc478 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UwyoH8MZXk8Pc478 .icon-shape .label rect,#mermaid-svg-UwyoH8MZXk8Pc478 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UwyoH8MZXk8Pc478 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UwyoH8MZXk8Pc478 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UwyoH8MZXk8Pc478 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 活动A: 2天
活动B: 4天
活动C: 5天
活动D: 4天
活动E: 3天
活动F: 3天
假设上图推导:关键路径为 A-C-D-F,总工期 2+5+4+3 = 14天。
7.2 成本管理(挣值分析)
- PV (计划价值):计划完成工作的预算。
- EV (挣值):实际完成工作的预算。
- AC (实际成本):实际完成工作的实际花费。
- 偏差分析 :
进度偏差 SV = EV - PV(<0 进度落后,>0 进度提前)成本偏差 CV = EV - AC(<0 成本超支,>0 成本节约)进度绩效指数 SPI = EV / PV(<1 落后)成本绩效指数 CPI = EV / AC(<1 超支)
- 完工估算 EAC :
- 非典型偏差 (以后按计划进行):
EAC = AC + (BAC - EV) - 典型偏差 (以后继续保持当前绩效):
EAC = BAC / CPI
- 非典型偏差 (以后按计划进行):
⚠️ 注意 :在挣值分析中,大于等于1或大于0 在正常情况下都是好事(进度提前,成本节约)。但也有例外,比如"测试发现缺陷数量"就是越少越好。
8. 总结
软件工程章节虽然内容庞杂,但在软考架构师考试中,重点极其突出:
- 概念选择题:死磕 CMMI、过程模型特点、内聚/耦合、UML图的分类、维护类型。
- 案例计算题 :必考 关键路径(PERT图) 和 挣值分析(EVM) 的计算。只要记住公式和"正推取最大,逆推取最小"的口诀,这部分就是送分题。
建议备考时,多画几遍网络图和挣值曲线图,对概念的记忆非常有用。祝各位考友逢考必过!
标签:#软考 #系统架构设计师 #软件工程 #学习笔记 #UML #项目管理 #挣值分析