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

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
C A 4
D A 6
E B,C 2
F D 3

​​解析​​:

  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 记忆方法

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

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

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

结语

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

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

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

相关推荐
抓到一只狗6 小时前
系统分析师——统一建模语言
软件工程·uml·类图·用例图·系统分析师·顺序图·高级软考
guslegend1 天前
从需求分析到 Spec-Kit 落地:三种思维、施工方案与规格驱动开发
aigc·软件工程·需求分析·ai编程·spec-kit
llilian_161 天前
失真度校准装置有哪些重点指标?失真度测量仪校准
功能测试·嵌入式硬件·51单片机·软件工程
谢亮_vipxieliang2 天前
软件工程的全景地图:从知识体系到技术栈
软件工程
ggb喔2 天前
52pojie 的桌面工具:为什么它们总在高分屏上模糊、资源管理器重启后失效
windows·python·网络安全·软件工程·个人开发·用户界面·用户体验
seconp3 天前
AI 时代怎么做计算机毕业设计?
人工智能·毕业设计·软件工程·课程设计·毕设
郝学胜-神的一滴3 天前
C++ Templates 07:编译报错和调试手段与实战技巧
开发语言·c++·后端·软件工程·visual studio
小南知更鸟3 天前
飞利浦KeyLink软件分享下载
软件工程
RockHopper20254 天前
AI时代模型生命周期与软件资产重构:概要版
人工智能·系统架构·软件工程·ai编程·世界模型
記億揺晃着的那天5 天前
【Agent 架构实战】大模型长期项目开发:决策文档生命周期管理与 CI 门禁治理
软件工程·devops·架构设计·ai agent·文档管理