软件生命周期与软件开发模型 - 软考备战(二十三)
软件工程(一)

参考资料:
软件生命周期是什么?包括哪些阶段?各阶段的目标和任务是什么? - 知乎
一文搞清瀑布模型、迭代模型、螺旋模型、原型模型、敏捷模型和V模型的区别 - 知乎
2.2六个传统软件模型:瀑布、V模型、原型、增量、螺旋、喷泉 - Dinesaw - 博客园
2.3现代模型:基于构件的开发、统一过程、敏捷开发模型 - Dinesaw - 博客园
目录
4.1 软件生命周期与软件开发模型
4.1.1 软件危机与软件工程
1. 软件危机的表现与原因
表现
开发进度难以控制;
开发成本高,超预算;
软件质量差,漏洞多;
软件难以维护;
缺乏文档。
根本原因
软件本身的复杂性;
忽略了软件的需求分析和文档(早期把软件开发等同于“写代码”);
生产方式落后(手工作坊式)。
2. 软件工程的概念
定义
将系统化、规范化、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化方法应用于软件。
三要素
方法(怎么做)
工具(用什么做)
过程(按什么顺序做)
3. 软件工程原则

抽象
模块化
信息隐藏
局部化
一致性
确定性
完备性
可验证性
注意:信息隐藏通常通过封装来实现,是提高软件可维护性的关键原则。
4.1.2 软件生命周期
1. 定义与阶段划分
软件从产生、发展到消亡的周期。
通常包含六个阶段:
问题定义 -> 可行性研究 -> 需求分析 -> 软件设计 -> 编码 -> 软件测试 -> 运行与维护。
前三个阶段是“定义期”,中间两个是“开发期”,最后是“维护期”。
需求分析是决定软件成败的关键,维护是生命周期中耗时最长、成本最高的阶段。
2. 软件生命周期标准
GB/T 8566 / ISO/IEC 12207:这是中国和国际通用的软件生命周期过程标准。
核心思想:
不再是一个单一的线性模型,而是定义了一系列“过程”(如获取过程、供应过程、开发过程、运作过程、维护过程等),适用于任何类型的软件项目。
4.1.3 传统软件开发模型

1. 瀑布模型

核心:
文档驱动,各阶段线性顺序进行,如同瀑布逐级下落。
优点:
阶段清晰,提供了按部就班的规范化框架;
易于管理。
缺点:
缺乏灵活性;
用户直到项目晚期才能看到运行结果;
难以适应需求变更。
适用场景:
需求非常明确、且在开发过程中需求不发生变化的项目。
2. 快速原型模型

核心:
快速构建一个可运行的“原型”(简陋版系统),让用户试用并提出修改意见,再根据原型编写正式需求规格说明书。
优点:
有效消除需求的不确定性,降低开发风险。
缺点:
原型往往比较粗糙,容易抛弃实际开发中的严谨架构设计。
适用场景:
需求不明确的项目。
3. 增量模型

核心:
将软件分成多个“增量”构件,每次交付一个可用的增量
(如先做核心功能,再做边缘功能)。
优点:
第一个增量就能交付使用;
逐步增加功能,允许需求变更;
降低技术风险。

缺点:
需要开放式架构,否则难以集成新增量。
适用场景:
急需尽早交付核心功能,且人员资金有限的项目。
4. 螺旋模型 (Boehm模型)

核心:
结合了瀑布模型和增量模型,并首次引入了“风险分析”。
沿螺旋线旋转,经历制定计划、风险分析、实施工程、客户评估四个象限。
优点:
对大型复杂项目的风险控制极好。
缺点:
非常昂贵,需要风险分析专家;
不适用于小项目。
适用场景:
大规模、高复杂度、高风险的项目(如大型企业级系统)。
5. 喷泉模型

核心:
以面向对象方法为基础。
软件开发过程像喷泉一样,水(活动)可以自下而上喷发,也可以回落(迭代和无缝过渡)。
特点:
各阶段没有明显的界限,开发过程高度迭代。
6. 基于构件的模型 (CBSD) 与 RAD
CBSD
大量使用现成的可复用构件组装系统。

RAD (快速应用开发)

极短的开发周期,主要使用可复用构件,强调极快的交付速度,通常与第四代语言(4GL)配合使用。
4.1.4 现代软件开发方法(敏捷开发)

1. 敏捷开发的核心理念
《敏捷宣言》的4个价值观(重点):
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
注意:右项也有其价值,但左项更为重要。
2. Scrum 框架 (当前工业界绝对主流)
核心机制:
将漫长的开发周期拆分为多个固定长度的短周期,称为冲刺,通常2~4周。
三大角色:

Product Owner(产品负责人,决定做什么)
Scrum Master(团队教练,清除障碍)
Dev team(开发团队,自组织,执行开发)。
四大工件:
产品待办列表、冲刺待办列表、产品增量、燃尽图。
五大事件:
冲刺规划会、每日站会(15分钟)、冲刺评审会、冲刺回顾会。
3. 极限编程 (XP)

核心思想:
适应需求变化,强调团队间的紧密协作。

核心实践:
结对编程(两人一台电脑,实时代码审查)
测试驱动开发 (TDD)(先写测试用例,再写业务代码)
持续集成
重构。
4. RUP (统一软件开发过程)

定位:
一种“重型”的、以用例驱动的、以架构为中心的迭代开发方法。
(它不是纯粹的敏捷,但吸收了迭代思想)。
四个阶段:

初始阶段(确定范围和可行性) -> 细化阶段(分析问题域,建立架构基础) -> 构建阶段(开发构件) -> 交付阶段(产品发布)。
4.1.5 模型与方法的比较与选择
|
关键词 / 场景描述 |
最匹配的模型/方法 |
|
需求非常明确、环境固定、合同项目 |
瀑布模型 |
|
需求模糊、用户说不清想要什么 |
快速原型模型 |
|
经费有限、想先把最核心的功能上线赚钱 |
增量模型 |
|
军工、航天、超大型系统、强调规避风险 |
螺旋模型 |
|
面向对象开发、无严格阶段界限 |
喷泉模型 |
|
拼装现成组件、要求极快上线(如MIS系统) |
RAD / 基于构件模型 |
|
拥抱变化、短周期迭代交付、客户深度参与 |
敏捷方法 (Scrum / XP) |
|
重文档、重架构、用例驱动、大型企业项目 |
RUP |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)