软件设计师软考备战:第五篇 软件工程与项目管理

作者:软考和人工智能学堂日期:10/1/2025

1 软件工程概述

1.1 软件工程基本概念

​软件工程​​是应用系统化、规范化、可量化的方法开发、运行和维护软件的学科。其目标是提高软件质量、降低开发成本、保证开发进度。

​软件危机​​的表现:

  • 项目超出预算
  • 项目超过计划完成时间
  • 软件质量低下
  • 软件通常不满足需求
  • 项目无法管理,代码难以维护

1.2 软件生命周期

​传统软件生命周期阶段​​:

  1. 问题定义与规划
  2. 需求分析
  3. 系统设计
  4. 详细设计
  5. 编码实现
  6. 软件测试
  7. 运行维护

​现代软件过程模型​​:

  • 瀑布模型:线性顺序,阶段间有明确界限
  • 快速原型模型:快速构建原型,获取用户反馈
  • 增量模型:分批次交付产品功能
  • 螺旋模型:结合瀑布和原型,强调风险分析
  • 敏捷开发:迭代式,强调人员协作和快速响应变化

2 软件开发过程

2.1 需求工程

​需求层次​​:

  • 业务需求:组织的高层目标
  • 用户需求:用户使用产品要完成的任务
  • 功能需求:软件必须实现的功能
  • 非功能需求:性能、安全性、可靠性等质量属性

​需求获取技术​​:

  • 访谈:结构化、非结构化
  • 问卷调查:大范围需求收集
  • 观察:现场观察用户工作流程
  • 原型法:通过原型引导需求

​需求规格说明书(SRS)​​:

  • 完整性:包含所有需求
  • 一致性:需求间无矛盾
  • 可验证性:需求可被测试
  • 可修改性:易于维护和更新

2.2 软件设计

​设计原则​​:

  • 模块化:将系统分解为高内聚、低耦合的模块
  • 抽象化:忽略细节,关注本质特征
  • 信息隐藏:隐藏模块实现细节
  • 功能独立:模块只完成特定功能

​体系结构风格​​:

  • 分层架构:如OSI七层模型
  • 客户端-服务器架构:客户端请求,服务器响应
  • 管道-过滤器架构:数据流经一系列处理单元
  • 面向服务架构(SOA):通过服务契约松散耦合

​设计模式​​(23种经典模式):

  • 创建型模式:单例、工厂、建造者
  • 结构型模式:适配器、装饰器、代理
  • 行为型模式:观察者、策略、模板方法

2.3 软件实现

​编程规范​​:

  • 命名规范:变量、函数、类命名规则
  • 注释规范:文件头、函数、行注释要求
  • 格式规范:缩进、空格、换行规则

​代码审查​​:

  • 走查:作者讲解,团队审查
  • 轮查:团队成员轮流审查
  • inspection:正式的审查会议

2.4 软件测试

​测试级别​​:

  • 单元测试:测试单个模块或函数
  • 集成测试:测试模块间接口
  • 系统测试:测试整个系统功能
  • 验收测试:用户验证系统是否满足需求

​测试类型​​:

  • 黑盒测试:关注功能,不关注内部实现
  • 白盒测试:关注内部逻辑和结构
  • 灰盒测试:结合黑盒和白盒特性

​测试用例设计​​:

  • 等价类划分:将输入域划分为等价类
  • 边界值分析:测试边界附近的取值
  • 因果图法:分析输入条件的组合关系
  • 正交实验法:用最少的测试用例覆盖最多的组合

3 软件项目管理

3.1 项目估算技术

​功能点估算(FP)​​:

  • 基于软件功能数量估算
  • 计算未调整功能点(UFP)
  • 考虑技术复杂度因子(TCF)
  • FP = UFP × TCF

​COCOMO模型​​:

  • 基本COCOMO:基于代码行数的估算
  • 中级COCOMO:考虑成本驱动因子
  • 详细COCOMO:考虑各个开发阶段

​PERT技术​​:

  • 乐观时间(a)
  • 最可能时间(m)
  • 悲观时间(b)
  • 期望时间 = (a + 4m + b) / 6

3.2 项目进度管理

​甘特图​​:显示任务持续时间和发展关系

​网络计划图​​:

  • 前导图法(PDM):节点表示活动
  • 箭线图法(ADM):箭头表示活动

​关键路径法(CPM)​​:

  • 确定项目最长路径
  • 计算最早开始时间(ES)、最早结束时间(EF)
  • 计算最晚开始时间(LS)、最晚结束时间(LF)
  • 计算时差:LS-ES 或 LF-EF

3.3 软件质量保证

​质量特性​​(ISO 9126):

  • 功能性:满足明确和隐含要求的功能
  • 可靠性:在指定条件下维持特定性能水平的能力
  • 易用性:易于理解、学习、使用
  • 效率:性能与资源消耗的比率
  • 可维护性:可被修改的能力
  • 可移植性:从一个环境转移到另一个环境的能力

​质量保证活动​​:

  • 技术评审:正式的技术审查
  • 软件测试:发现和修复缺陷
  • 过程检查:确保遵循开发过程
  • 质量审计:独立的质量评估

4 软件配置管理

4.1 配置管理过程

​配置项识别​​:确定需要受控的软件项

​版本控制​​:管理配置项的不同版本

​变更控制​​:控制配置项的变更

​配置审计​​:验证配置项的完整性和一致性

​状态报告​​:记录和报告配置项状态

4.2 版本控制工具

​集中式版本控制​​:SVN、CVS

​分布式版本控制​​:Git、Mercurial

​Git基本工作流​​:

# 克隆仓库
git clone <repository>

# 创建分支
git branch <branch-name>

# 切换分支
git checkout <branch-name>

# 添加文件到暂存区
git add <file>

# 提交更改
git commit -m "message"

# 推送到远程仓库
git push origin <branch-name>

# 合并分支
git merge <branch-name>

5 软件开发方法

5.1 结构化方法

​特点​​:

  • 自顶向下逐步求精
  • 数据流导向
  • 强调文档化

​主要工具​​:

  • 数据流图(DFD)
  • 数据字典(DD)
  • 状态转换图(STD)
  • 实体关系图(ERD)

5.2 面向对象方法

​基本概念​​:

  • 类与对象
  • 封装
  • 继承
  • 多态

​U建模语言​​:

  • 用例图:描述系统功能
  • 类图:描述静态结构
  • 序列图:描述对象交互时序
  • 状态图:描述对象状态转换
  • 活动图:描述业务流程

5.3 敏捷开发

​敏捷宣言​​:

  • 个体和互动高于流程和工具
  • 可工作的软件高于详尽的文档
  • 客户合作高于合同谈判
  • 响应变化高于遵循计划

​Scrum框架​​:

  • 产品待办列表(Product Backlog)
  • 冲刺待办列表(Sprint Backlog)
  • 每日站会(Daily Scrum)
  • 冲刺评审(Sprint Review)
  • 冲刺回顾(Sprint Retrospective)

​极限编程(XP)​​实践:

  • 测试驱动开发(TDD)
  • 持续集成(CI)
  • 重构(Refactoring)
  • 结对编程(Pair Programming)

6 软件度量与评价

6.1 产品度量

​规模度量​​:

  • 代码行数(LOC)
  • 功能点(FP)
  • 对象点(OP)

​复杂度度量​​:

  • 圈复杂度:McCabe复杂度度量
  • Halstead度量:基于运算符和操作数数量

​缺陷密度​​:缺陷数 / 规模度量

6.2 过程度量

​生产率​​:规模 / 工作量

​质量​​:缺陷数 / 规模

​进度偏差​​:(实际进度 - 计划进度) / 计划进度

7 真题解析与实战演练

7.1 2022年真题

​题目​​:某项目有6个活动,其前后关系及持续时间如下表,求项目的关键路径和总工期。

活动前导活动持续时间(天)
A-5
B-3
CA4
DA6
EB,C2
FD3

​解析​​:

  1. 绘制网络图,计算各活动的最早开始和最晚开始时间
  2. 找出所有路径:A-C-E(11天), A-D-F(14天), B-E(5天)
  3. 关键路径:A-D-F,总工期14天

​答案​​:关键路径A-D-F,总工期14天

7.2 2021年真题

​题目​​:比较白盒测试和黑盒测试的区别,各举两种测试用例设计方法。

​解析​​:

​白盒测试​​:

  • 关注内部逻辑结构
  • 需要了解代码实现
  • 设计方法:语句覆盖、判定覆盖、条件覆盖、路径覆盖
  • 适用于单元测试

​黑盒测试​​:

  • 关注输入输出功能
  • 不需要了解内部实现
  • 设计方法:等价类划分、边界值分析、因果图法、正交实验法
  • 适用于系统测试和验收测试

​答案​​:白盒测试关注内部结构,使用语句覆盖、路径覆盖等方法;黑盒测试关注外部功能,使用等价类划分、边界值分析等方法。

8 备考策略与技巧

8.1 重点掌握内容

  1. ​软件开发过程​​:各生命周期阶段的主要活动
  2. ​软件设计原则​​:高内聚低耦合、信息隐藏等
  3. ​软件测试技术​​:各级别测试的特点和方法
  4. ​项目管理​​:估算技术、进度管理、关键路径法

8.2 解题技巧

  1. ​关键路径计算​​:
    • 正推法计算最早时间
    • 反推法计算最晚时间
    • 时差为0的活动在关键路径上
  2. ​测试用例设计​​:
    • 等价类划分注意有效和无效等价类
    • 边界值分析测试边界和边界附近的值
  3. ​软件度量计算​​:
    • 理解各种度量指标的含义
    • 掌握基本计算公式

8.3 记忆方法

​软件生命周期​​:规需设编测维(规划、需求、设计、编码、测试、维护)

​测试级别​​:单集系验(单元、集成、系统、验收)

​设计原则​​:模块抽象信息隐藏功能独立

结语

软件工程与项目管理是软件设计师必须掌握的核心知识,不仅关系到软件开发的成功,也直接影响软件质量和项目效益。通过系统学习软件开发全过程和项目管理方法,能够提高软件开发的专业水平和管理能力。

​思考题​​:在敏捷开发越来越流行的今天,传统的软件工程方法是否还有价值?请结合具体项目特点,分析不同开发方法的适用场景。

下一篇我们将探讨面向对象技术,这是现代软件开发的重要基础。


软件设计师软考备战:第五篇 软件工程与项目管理》 是转载文章,点击查看原文


相关推荐


[wps_clear]wps清理残余 ——注册表不干净
拾贰_Python9/30/2025

WPS卸载后常见的注册表残留位置包括:HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下的Kingsoft目录、HKEY_CLASSES_ROOT中与WPS相关的条目。此外,HKEY_CLASSES_ROOT\Applications下可能存在wpp.exe相关项,以及HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts.wps等文件关联记录的残留。这些注册表项需要手动清理以实现完全


ASCII 码表
IMPYLH2025/10/2

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用于表示一组特定的 95 个(英语)可打印字符和 33 个控制字符(共 128 个代码点)。 二进制八进制十进制十六进制字符010 00000403220space (no visible glyph)010 00010413321!010 00100423422"010 00110433523#010 01000443624$010 01


【c++】深入理解string类(3):典型OJ题
zzzsde2025/10/2

一 仅仅反转字母 链接如下:https://leetcode-cn.com/problems/reverse-only-letters/submissions/ 思路: 这道题目的核心就是交换,我们发现这个逻辑和当时在数据结构里学的快速排序非常类似:两个指针,一个指向开头,一个指向结尾,如果前一个指针的值小于后面指针的值,就交换。相应的在这道题目:如果前一个指针和后一个指针都是字母,那就交换。 所以我们需要先写一个判断是否是字母的函数。(c语言库中有这个函数,如果记得这个函数的名称和


2181、合并零之间的节点
Lenyiin2025/10/2

2181、[中等] 合并零之间的节点 1、问题描述: 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0 。 返回修改后链表的头节点 head 。 2、代码思路: 跳过第一个节点:链表的开头和结尾都包含值为 0 的节点,我们从第二个节点开始处理(即


磁盘的理解&&CHS和LBA地址转换
阑梦清川2025/10/3

1.对于磁盘的理解 首先就是我们的操作系统课本上面学习的这个磁盘的基本结构,比如下面的这个磁盘,磁头,磁头臂以及柱面,扇区的相关的概念; 针对于这个部分的内容,我自己也没有什么经验可以分享,因为这个东西就是固定的,唯一需要注意的就是结合图区进行理解,注意分别代表的是我们的图片里面画出来的这个磁盘的那一个具体的部分; 根据上面的内容,我们想要确定扇区只需要 CHS 三个部分即可,C 代表的就是我们的柱面,H 表示的是磁头,S 表示的是扇区,下面的这个是 ima 给出来的具体介绍,不懂就多去问问


从传输层协议到 UDP:轻量高效的传输选择
渡我白衣2025/10/5

前言 在计算机网络中,传输层是一个关键的层级,它为应用进程之间的通信提供了端到端的传输服务。常见的传输层协议有 TCP 和 UDP。前者强调可靠、面向连接的传输,而后者则提供轻量级、无连接的通信方式。传输层位于网络层之上、应用层之下,为进程之间提供端到端的数据传输服务。要理解 UDP 协议,我们需要先了解 传输层的功能与常见协议,再深入探讨为什么 UDP 在今天的网络环境中仍占据着举足轻重的地位。 一、传输层的基本概念 在 OSI 七层模型 和 TCP/IP 五层模型 中,传输层是第四层,它的主


Linus 眼中,编程 AI 的真实价值如何?
飞哥数智谈2025/10/6

今天刷到了一段视频,是 Linux 之父 Linus Torvalds 与 VMware 副总裁兼首席开源官 Dirk Hohndel 的一段对话。 内容挺有意思,分享给大家。 主要有两个话题: AI 只是打了鸡血的自动纠错 AI 幻觉带来了 bug 话题是由 Dirk Hohndel 提出,由 Linus Torvalds 进行回答的。 AI 是打了鸡血的自动纠错 针对这一点,Linus Torvalds 认为这一说法有一定的合理性,但 AI 在编程领域的真正潜力是可以成为一个识别“明显愚


Vue3 EffectScope 源码解析与理解
excel2025/10/7

1. 全局变量与基础类定义 activeEffectScope:表示当前正在运行的 effect 作用域。 EffectScope 类:用来管理一组副作用(ReactiveEffect),提供生命周期控制。 import type { ReactiveEffect } from './effect' import { warn } from './warning' // 当前全局正在运行的作用域 export let activeEffectScope: EffectScope | und


tcp服务器
liuy96152025/10/9

🧩 一、总体架构思路 TCP 服务器的基本流程: 创建监听套接字 → 绑定 IP 和端口 → 监听端口 → 接受连接 → 通信收发 → 关闭连接 伪代码框架: int main() { int listen_fd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP套接字 bind(listen_fd, …); // 绑定地址和端口 listen(listen_fd, SOMAXCONN);


对《DDD本质论》一文的解读
canonical_entropy2025/10/10

在《DDD本质论:从哲学到数学,再到工程实践的完整指南之理论篇》中,我们建立了一套从第一性原理出发的DDD理论体系。由于原文理论密度较高、概念间关系精微,为帮助读者更清晰地把握其思想脉络,我们设计了一项思想实验,并借助AI进行体系梳理与对比。 我们首先向AI提出以下问题: DDD领域驱动设计的概念有哪些?这些概念之间的相互关系是什么。如果要逐一去掉这些概念,你会按照什么顺序,为什么? 换言之,如果从第一性原理出发,如何逐步推导出这些概念的相互关系? 不要把任何技术看作是一个不可切分的整体,任何

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0