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

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 
# 创建分支
git branch 
# 切换分支
git checkout 
# 添加文件到暂存区
git add 
# 提交更改
git commit -m "message"
# 推送到远程仓库
git push origin 
# 合并分支
git merge 

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

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

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

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

结语

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

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

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

posted @ 2025-10-01 19:44  wzzkaifa  阅读(10)  评论(0)    收藏  举报