软考高级之软件工程

软件工程

软件工程概述

软件危机

进度失控:开发延期、成本超支(常超预算 50%-100%)

质量低下:功能不达标、Bug 多、可靠性差

维护困难:无规范文档、代码可读性差、修改牵一发而动全身

供需失衡:软件生产率远低于硬件发展速度

软件工程三要素

软件工程由方法、工具、过程三大核心要素构成,缺一不可:

软件工程核心定义

IEEE:将系统化、规范化、可度量的方法应用于软件的开发、运行、维护,并对这些方法进行研究的学科。

Fritz Bauer:应用工程化原则,以低成本获得高质量、可靠的软件。

核心目标:在规定时间、预算内,交付满足需求、高质量、可维护的软件产品

软件生命周期

软件定义

软件开发

软件运行和维护

软件工程过程模型

瀑布模型

特点:阶段严格顺序、文档驱动、无反馈,前一阶段输出是后一阶段输入

适用:需求明确、稳定的中小型项目(如嵌入式、政务系统)

缺点:灵活性差,后期发现问题修改成本极高

原型模型

特点:快速构建原型→用户反馈→迭代优化,降低需求模糊风险

适用:需求不明确、用户参与度高的项目(如互联网产品、创新系统)

增量模型

特点:分批次交付功能模块,每增量一次验证一次,降低整体风险

适用:大型项目、需快速上线核心功能的场景

螺旋模型

特点:风险驱动,每轮循环含 "目标设定→风险分析→开发验证→评审"

适用:超大型、高风险、复杂的软件项目(如航天、金融核心系统)

风险驱动

喷泉模型

定位:面向对象的软件过程模型

核心特点:迭代、无间隙、阶段可重叠、可回溯

优点:灵活支持需求变更,适合面向对象开发,效率高

缺点:管理难度大,文档易混乱

适用:需求不固定、采用面向对象方法的项目

基于构建的模型

定位:复用驱动的软件开发模型,核心是 "购买 / 复用,而非从零建造"

核心:用标准化、可独立部署的构件,通过接口组装构建系统

优点:效率高、成本低、质量稳、易扩展

缺点:需构件库 + 标准化,存在匹配 / 兼容风险

适用:需求明确、有成熟构件的企业级 / 通用系统(OA、电商后台等)

形式化方法模型

建立在严格的数学基础上的一种软件开发方法

敏捷模型

核心思想:个体交互 > 流程工具,可用软件 > 文档,客户协作 > 合同谈判,响应变化 > 遵循计划

特点:迭代、增量、快速交付、拥抱变化

典型方法:Scrum、XP(极限编程)

优点:灵活、风险低、用户参与度高、交付快

缺点:文档弱、对团队要求高、不易管控

适用:需求多变、互联网产品、快速迭代项目

  • 主要的敏捷方法
    Scrum迭代开发(Sprint 2~4 周),角色:产品负责人、Scrum Master、开发团队,强调站会、评审、回顾。
    XP(极限编程)注重工程实践:TDD 测试驱动、结对编程、持续集成、简单设计、频繁发布。
    FDD(特征驱动开发)以 "功能特征" 为单位迭代,短小周期,强调设计和代码质量。
    Crystal(水晶方法)按项目规模 /criticality 分不同敏捷流派,轻量、以人为本。
统一过程模型

全称:Rational Unified Process,重量级、用例驱动、架构中心、迭代增量。

二维结构:

时间(4 阶段):初始 → 细化 → 构建 → 移交

核心工作流:需求、分析、设计、实现、测试

特点:文档规范、阶段清晰、适合大型复杂项目

缺点:过程重、不够灵活,不太适合小型快速项目

RUP 9 个核心工作流(软考必背)

业务建模

需求

分析与设计

实现

测试

部署

配置与变更管理

项目管理

环境

软件能力成熟度
  1. 初始级(Level 1 - Initial)
    特征:过程无规范、混乱、临时拼凑;成功依**赖个人能力,**结果不可预测。
    典型问题:项目超期、超预算、质量不稳定。
  2. 可重复级(Level 2 - Managed)
    特征:建立项目级基本管理过程(计划、跟踪、需求管理、配置管理、质量保证);过程可重复、项目可控。
    关键实践:项目计划、需求管理、配置管理、质量保证、测量与分析。
  3. 已定义级(Level 3 - Defined)
    特征:建立组织级标准过程并文档化;项目可裁剪组织标准过程;过程标准化、可复用、质量稳定。
    关键区别:从 "项目级管理" 升级为 "组织级管理"。
  4. 量化管理级(Level 4 - Quantitatively Managed)
    特征:对过程与产品质量量化管理;建立量化目标,用统计技术控制关键过程,过程可预测。
    关键实践:量化项目管理、组织过程性能、原因分析与解决。
  5. 优化级(Level 5 - Optimizing)
    特征:持续过程改进;主动缺陷预防、引入新技术、基于数据驱动优化,追求卓越。
    关键实践:组织创新与部署、持续过程改进、缺陷预防。

逆向工程

定义:从现有程序 / 代码反向推导出设计文档、需求、架构的过程。

目的:理解系统、恢复文档、维护改造、复用设计。

层次(从低到高):

实现级:程序的抽象语法树、符号表、过程的设计表示

结构级:核心内容:反映程序分量之间相互依赖关系的信息,如调用图、结构图、程序和数据结构

功能级:反映程序段功能及程序段之间关系的信息,如数据和控制流模型

领域级::反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,如 E-R 模型

常配套概念:

重构:在不改变功能前提下优化代码结构

再工程:逆向工程 + 重构 + 正向开发,对旧系统全面升级改造

需求工程

需求工程:把用户意图转化为规范需求的全过程,贯穿软件生命周期前期。

核心任务:获取→分析→定义→验证→管理需求

需求层次

业务需求:高层目标,为什么做(组织视角)

用户需求:用户要做什么(用户视角)

系统需求:系统必须提供的功能 / 性能 / 约束

功能需求:做什么

非功能需求:性能、安全、可靠性、易用性、可维护性、可移植性

设计约束:技术栈、平台、标准、合规等

需求工程需求获取

需求获取

方法:访谈、问卷、会议、观察、原型、用例
需求分析

结构化分析、面向对象分析

去歧义、完整性、一致性检查
需求定义(规格说明)

输出:需求规格说明书 SRS
需求验证

评审、测试用例、原型验证
需求管理

基线、变更控制、版本可控制、需求追踪,需求状态跟踪

需求获取
需求变更

变更申请 相关方提交书面变更请求,说明原因、内容、范围。
变更评估 评估对进度、成本、质量、范围、风险、资源的影响。
CCB 审批 变更控制委员会评审,决定批准 / 否决 / 暂缓。
变更实施 批准后,修改需求、设计、计划等相关文档与产品。
变更验证与确认 测试、评审,确认变更正确实现且无副作用。
基线更新 更新配置项基线、版本、需求追踪矩阵。
变更通知将结果同步给所有相关干系人。

需求跟踪
  1. 正向跟踪
    从需求出发:这个需求 → 写到设计里没?→ 代码实现没?→ 写测试用例没?→ 最终上线没?
  2. 反向跟踪
    从结果往回查:这个功能 → 对应哪个设计?→ 对应哪个需求?

系统分析与设计

  1. 主要任务
    业务流程梳理
    需求获取与分析
    提出新系统逻辑方案
    可行性分析(技术、经济、操作、法律)

结构化开发方法

就是传统、经典、一步一步来的软件开发方法,也叫结构化分析与设计(SA+SD)。

核心一句话:自顶向下、逐步求精、模块化

数据流图




数据字典


结构化设计

--- 后面不记了

相关推荐
张较瘦_2 天前
[论文阅读] AI + 软件工程 | 突破LLM代码生成瓶颈:编程知识图谱(PKG)让检索增强更精准
论文阅读·人工智能·软件工程
肖有米XTKF86462 天前
河北奢源水光商城系统制度开发
人工智能·软件工程·团队开发·csdn开发云
肖有米XTKF86462 天前
二二复制裂变小程序系统制度(双轨制公排模式)
人工智能·小程序·软件工程·团队开发
思茂信息2 天前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
互联网推荐官3 天前
上海物联网应用开发技术路径拆解:从协议选型到平台架构的工程实践
大数据·人工智能·软件工程
极创信息3 天前
信创领域五种主流CPU架构(X86 / ARM / RISC-V / MIPS / LoongArch)
java·arm开发·数据库·spring boot·mysql·软件工程·risc-v
Thanks_ks3 天前
软件系统中的熵增定律:技术债的形成与重构的艺术
软件工程·敏捷开发·架构设计·状态管理·代码重构·技术债·康威定律
互联网推荐官4 天前
上海小程序开发实践:技术选型、场景分化与平台能力的全面审视
人工智能·软件工程
a里啊里啊4 天前
软考-软件评测师:知识点整理(七)——软件工程
设计模式·软件工程·软考·uml·结构化开发·软件评测师·软件模型
互联网推荐官5 天前
上海小程序开发:从技术架构到工程落地的完整拆解
人工智能·物联网·软件工程