软件工程(一)

参考资料:

软件工程(学科)_百度百科

软件生命周期是什么?包括哪些阶段?各阶段的目标和任务是什么? - 知乎

一文搞清瀑布模型、迭代模型、螺旋模型、原型模型、敏捷模型和V模型的区别 - 知乎

2.2六个传统软件模型:瀑布、V模型、原型、增量、螺旋、喷泉 - Dinesaw - 博客园

2.3现代模型:基于构件的开发、统一过程、敏捷开发模型 - Dinesaw - 博客园

RAD是什么?如何快速开发应用程序? - 知乎

Scrum 是什么?概念、定义、实施指南 - 知乎

敏捷管理系列:极限编程(XP) - 知乎


目录

软件工程(一)

4.1 软件生命周期与软件开发模型

4.1.1 软件危机与软件工程

1. 软件危机的表现与原因

2. 软件工程的概念

定义

三要素

3. 软件工程原则

4.1.2 软件生命周期

1. 定义与阶段划分

2. 软件生命周期标准

4.1.3 传统软件开发模型

1. 瀑布模型

2. 快速原型模型

3. 增量模型

4. 螺旋模型 (Boehm模型)

5. 喷泉模型

6. 基于构件的模型 (CBSD) 与 RAD

4.1.4 现代软件开发方法(敏捷开发)

1. 敏捷开发的核心理念

2. Scrum 框架 (当前工业界绝对主流)

3. 极限编程 (XP)

4. RUP (统一软件开发过程)

4.1.5 模型与方法的比较与选择


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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐