乐于分享
好东西不私藏

软件生命周期六个阶段——从需求到退出,一文讲透每个阶段的精髓

软件生命周期六个阶段——从需求到退出,一文讲透每个阶段的精髓

引子:软件也有生老病死

大家好,我是小高。

上一期我们聊了五种生命周期模型,很多同学看完之后意犹未尽,问我:"那软件到底是怎么从无到有、又从有到无的呢?中间要经历哪些阶段?"

问得好。这就是今天的主题——软件生命周期的六个核心阶段

说起来,软件其实跟人一样,也有自己的"生命周期":出生(需求)、成长(设计)、成熟(编码)、独立(测试)、融入社会(部署),然后工作很多年(运维),最后退休(退出)。

听起来有意思吧?那我们一个个阶段来盘它。


一、需求过程——万丈高楼平地起

需求过程是软件生命周期中最最重要的阶段,没有之一。

很多项目出问题,不是编码写得烂,而是需求就没搞清楚。需求阶段搞砸了,后面所有阶段都是在填坑。

需求过程的四个子活动

  1. 需求获取(Elicitation):到用户那里去,了解他们真正想要什么。注意:是"真正想要",不是"说出来想要"。很多用户说"我要一个很牛的系统",这不叫需求,这叫愿景。你要通过访谈、观察、工作坊等方式,挖掘出具体的、可实现的需求。

  2. 需求分析(Analysis):把获取到的需求进行整理、归类、优先级排序,找出需求之间的冲突和不一致。比如用户A说"系统要快",用户B说"系统要安全",这两者有时候是矛盾的,就需要权衡。

  3. 规格说明书编制(Specification):把分析后的需求写成正式的文档——《需求规格说明书》(SRS)。这份文档是后续所有阶段的"宪法",是判断"系统做对了没有"的标准。

  4. 需求验证与确认(Validation & Verification)

    • 验证(Verification):我们做的东西符合规格吗?(Are we building the product right?)
    • 确认(Validation):规格本身是对的、符合用户真实需要的吗?(Are we building the right product?)

需求过程的交付物

  • 需求规格说明书(SRS)
  • 需求跟踪矩阵(RTM)——把每个需求和后续的设计、编码、测试对应起来,确保没有遗漏
  • 需求模型(用例图、流程图等)

软考真题怎么考?

【2020年上半年·第35题】需求规格说明书的主要内容不包括( )。A. 质量功能部署  B. 功能需求  C. 非功能需求  D. 约束条件答案:A解析: 需求规格说明书主要描述功能需求、非功能需求和约束条件,质量功能部署(QFD)是质量规划阶段使用的工具。


二、架构设计——给软件建骨架

如果说需求是"这栋楼要住多少人、有什么功能",那么架构设计就是"这栋楼的结构怎么搭、承重墙在哪儿、管道怎么走"。

架构设计要解决的核心问题

  • 系统分解:把系统拆成哪些子系统/模块?
  • 技术选型:用什么语言、框架、数据库、中间件?
  • 接口定义:模块和模块之间怎么通信?
  • 数据建模:数据怎么存储、怎么流转?
  • 质量属性:系统要满足什么性能、安全性、可用性要求?

常见的架构风格

  • 分层架构:表现层→业务逻辑层→数据访问层(最经典)
  • 微服务架构:把系统拆成多个独立部署、独立运行的小服务
  • 事件驱动架构:通过消息队列异步处理业务
  • 面向服务的架构(SOA):服务之间通过标准接口通信

架构设计的交付物

  • 架构设计说明书
  • 系统的技术架构图
  • 数据字典
  • 接口设计文档

三、软件实现——把蓝图变成代码

软件实现阶段,工程师们终于要"真刀真枪"地写代码了。这个阶段主要包括三件事:配置管理、编码、测试

1. 配置管理

软件实现过程中,会产生大量的代码、文档、模型、数据……这些东西就是配置项(Configuration Item)。配置管理的核心任务是:

  • 识别配置项:哪些东西需要纳入配置管理?
  • 版本控制:每次修改都有记录,可以追溯到任何一个历史版本
  • 基线(Baseline):在关键节点建立基线,之后的变更要走正式变更流程

2. 编码

编码不是"把设计文档翻译成代码"那么简单。好代码要:

  • 可读性好:别人能看懂
  • 可维护:改起来方便
  • 经过 Code Review:别人帮你检查过
  • 遵守编码规范:命名、注释、格式统一

3. 测试

这个阶段做的测试主要是单元测试(Unit Testing)集成测试(Integration Testing)

  • 单元测试:测试最小的代码单元(通常是函数/方法)是否正确工作
  • 集成测试:把多个单元组合在一起,测试它们之间的接口是否正常

软考真题怎么考?

【2019年上半年·第33题】在软件实现过程中,配置管理的作用不包括( )。A. 记录软件变更  B. 统一控制软件变更  C. 分析变更的影响  D. 满足用户新的需求答案:D解析: 配置管理的作用是记录、控制和分析变更影响,AB C都是,"满足用户新需求"是需求工程的事,不是配置管理的职责。


四、部署交付——软件走向用户

软件做好、测试通过之后,就要交给用户使用了。部署交付是软件生命周期中**从"内部产品"变成"外部商品"**的关键阶段。

部署的三个层次(Build-Ship-Run)

现代软件部署通常分为三个层次:

  1. Build(构建):把源代码编译、打包成可部署的产物
  2. Ship(交付):把产物发送到目标环境
  3. Run(运行):在目标环境启动和运行软件

持续交付 vs 持续部署

这是两个非常容易混淆的概念,考试经常考:

  • 持续交付(Continuous Delivery,CD):代码每次合并到主干后,自动完成构建、测试、打包,但不自动部署到生产环境。部署到生产需要人工确认。
  • 持续部署(Continuous Deployment,CD):代码每次合并到主干后,自动完成构建、测试、打包,并自动部署到生产环境,全程无人干预。

简单说:持续部署比持续交付更激进,连"人确认"这一步也省了。

部署策略

  • 蓝绿部署(Blue-Green Deployment):准备两套完全相同的环境,一套运行旧版本(蓝),一套部署新版本(绿)。切换时,把流量从蓝切到绿,出现问题可以秒级回滚。
  • 金丝雀部署(Canary Deployment):先让新版本接受少量流量(比如5%),观察没问题再逐步扩大比例。
  • 滚动部署(Rolling Deployment):逐批替换旧版本实例。

部署交付的交付物

  • 部署手册
  • 运维手册
  • 上线报告
  • 培训材料

五、运行维护——软件的一生都在被伺候

软件上线了,并不意味着生命周期结束了。相反,运行维护阶段往往占据软件整个生命周期70%以上的时间和成本

运行维护的四种类型

  1. 纠正性维护(Corrective Maintenance):修Bug——系统出错了,把它改对
  2. 适应性维护(Adaptive Maintenance):适应环境变化——比如操作系统升级了、第三方接口变了,软件需要相应调整
  3. 完善性维护(Perfective Maintenance):优化性能、完善功能——用户用了之后发现某些地方不好用,需要改进
  4. 预防性维护(Preventive Maintenance):防患于未然——主动排查隐患,降低未来出问题的概率

运维的核心指标

  • RTO(Recovery Time Objective):灾难发生后,系统恢复到正常运行需要多长时间?
  • RPO(Recovery Point Objective):灾难发生后,允许丢失多长时间的数据?

六、退出——软件的优雅谢幕

最后一个阶段往往被忽视——软件也是有"退休"的时候的。

软件退出的触发条件

  • 产品生命周期结束,不再有新版本
  • 被新系统完全替换
  • 业务停止,系统不再需要
  • 合规要求变化,系统无法满足

退出阶段要做的事

  • 数据迁移:把历史数据迁移到新系统或归档存储
  • 数据归档:按照法规要求,保存必要年限的数据
  • 资源释放:释放服务器、域名、证书、云资源等
  • 知识转移:把运维经验、特殊处理逻辑等文档化,移交给相关团队
  • 正式停运:关闭系统,发布停运公告

七、V模型——开发与测试的完美对应

讲完六个阶段,不得不提V模型。V模型是软件工程里描述开发阶段和测试阶段对应关系的经典模型,左边是开发,右边是测试,像个V字。

V模型各阶段对应关系

需求获取  ←→  验收测试(用户验收)系统设计  ←→  系统测试(整个系统是否符合需求)架构设计  ←→  集成测试(模块间接口是否正常)模块设计  ←→  单元测试(每个模块是否正确)     ↓  编码实现

V模型的核心启示

越早引入测试,成本越低、效果越好。Bug发现得越晚,修复代价越高。单元测试在编码阶段就做,是最便宜的测试;验收测试在最后做,是最贵的测试。

软考真题怎么考?

【2022年上半年·第34题】在V模型中,需求规格说明验证对应的是( )。A. 单元测试  B. 集成测试  C. 系统测试  D. 验收测试答案:C解析: V模型中,需求规格说明对应验收测试,系统设计对应系统测试,架构设计对应集成测试,模块设计对应单元测试。注意验收测试对应的是最初的需求获取阶段(最上层的用户需求)。


一句话口诀

口诀二:"需求获取分析规格书,验证确认不可少;架构设计定骨架,编码实现写代码;部署交付走CD/CD,运维退出别忘掉;V模型左开发右测试,需求对应验收顶呱呱。"

解析:

  • 需求工程四个子活动(获取、分析、规格说明、验证确认)缺一不可;
  • 持续交付(CD)和持续部署(CD)的区别:交付不自动部署生产,部署连确认这一步也省了;
  • V模型的核心记忆方法:需求对应验收测试(顶层对顶层),设计各层对应测试依次往下,单元测试对应模块设计(底层对底层)。

正在备考软考高项?持续关注,持续更新,系统化搞定软件生命周期 🚀