6、软件工程 核心考点与学习笔记

【软考架构师】软件工程 核心考点与学习笔记(超详细解析+图解)

摘要:本文为软考高级系统架构设计师(第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. 系统维护、转换与遗留系统

  • 维护类型 :
    1. 正确性维护:修Bug(知错能改)。
    2. 适应性维护:外部环境变化(适者生存)。
    3. 完善性维护 :用户提新需求(锦上添花)------占比最大。
    4. 预防性维护:预防未来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. 总结

软件工程章节虽然内容庞杂,但在软考架构师考试中,重点极其突出:

  1. 概念选择题:死磕 CMMI、过程模型特点、内聚/耦合、UML图的分类、维护类型。
  2. 案例计算题 :必考 关键路径(PERT图) 和 挣值分析(EVM) 的计算。只要记住公式和"正推取最大,逆推取最小"的口诀,这部分就是送分题。

建议备考时,多画几遍网络图和挣值曲线图,对概念的记忆非常有用。祝各位考友逢考必过!


标签:#软考 #系统架构设计师 #软件工程 #学习笔记 #UML #项目管理 #挣值分析

相关推荐
qeen872 小时前
【Linux】磁盘读写文件原理及文件系统基本概念介绍
linux·运维·服务器·笔记·学习
ue星空2 小时前
学完老师的课程我能不能自己也开课?
学习
Rabitebla2 小时前
【Linux 底层原理】工具篇 (三):gcc/g++ 编译工具、动静态库与编译原理
linux·运维·服务器·笔记·学习
程序猿乐锅2 小时前
Streamlit 实现 AI 聊天 Agent:角色提示词、流式输出与会话管理
开发语言·前端·笔记·后端·python·学习
霖霖7142 小时前
【笔记】直流减速电机(GA25-370)调速
笔记·单片机·mcu
程序猿乐锅2 小时前
面向对象练习:图书借阅系统里的封装、抽象类与多态
开发语言·前端·数据库·后端·python·学习·1024程序员节
海绵宝宝的月光宝盒3 小时前
9-AutoCAD-移动、旋转、复制命令应用与案例实战
经验分享·笔记·职场和发展·课程设计·制造·学习方法·cad
LG.YDX3 小时前
基于中心的3D目标检测和探索追踪-笔记
笔记·算法·目标检测
dtq04243 小时前
嵌入式5 - GPIO工作模式2
单片机·嵌入式硬件·学习