当前位置: 首页 > news >正文

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

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

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

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

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

结语

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

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

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

http://www.dtcms.com/a/405870.html

相关文章:

  • 接口访问速度突然变慢,怎么排查
  • C++ IO 库全方位解析:从基础到实战
  • 从“手机拆修”看懂POD与非POD的区别
  • vc无法启动
  • SenseVoice微调
  • 【C++】: list介绍以及模拟实现
  • dlib 实战:人脸检测、关键点定位与疲劳检测的全流程实现
  • SpringBoot 整合机器学习框架 Weka 实战操作详解:MLOps 端到端流水线与知识图谱融合实践
  • 华为OD最新机试题A卷双机位-单词接龙-2025年
  • Python 爬虫(豆瓣top250)-享受爬取信息的快乐
  • Kafka选举机制深度解析:分布式系统中的民主与效率
  • 一文读懂费用分析:定义、分类与成本费用区别
  • 全国做网站找哪家好做宣传海报的网站
  • 【Linux】基础IO(3)
  • 【Redis学习】Redis中常见的全局命令、数据结构和内部编码
  • AI行业应用深度解析:从理论到实践
  • AI 伦理审查破局:从制度设计到实践落地的 2025 探索
  • RocketMQ面试问题与详细回答
  • 多传感器数据融合到base_link坐标系下
  • 阿里新开源Qwen3-Omni技术解析
  • Flink 流式分析事件时间、Watermark 与窗口
  • 解析前端框架 Axios 的设计理念与源码
  • 使用IOT-Tree消息流InfluxDB模块节点实现标签数据的时序数据库存储
  • 【深入理解JVM】垃圾回收相关概念与相关算法
  • 文档抽取技术:金融保险行业数字化转型的核心驱动力之一
  • 神秘魔法?耐达讯自动化Modbus TCP 转 Profibus 如何为光伏逆变器编织通信“天网”
  • 做庭院的网站佛山网站专业制作
  • wordpress开启多站点营销云官网
  • 企业AI 智能体(AI_Agent)落地开源方案:Dify、n8n、RAGFlow、FastGPT、AutoGen和OAP深度梳理与对比分析
  • Day51 时钟系统与定时器(EPIT/GPT)