▎为什么要有周期
生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。
- 周期带来明确,让每个人知道当下在何时、何地、要做何事。
- 周期带来秩序,让所有人知道如何分工。
- 周期带来简化,软件工程太复杂,只有把工程分解为小周期可理解可完成的
- 周期带来成就,开发者可以很快看到成果,而不是一味的编码
- 周期带来减损,短周期可以让需求者迅速做反应,而不是等整个流程结束后才知道产品和需求不对应
▎周期中包括
- Propose(Requirement) | 提案(需求)
- Development | 开发
- Integration + Testing | 集成和测试
- Release | 发布
在周期中,有很多规范可以参考,像 Agile/SCRUM,这也是整个工作期间,用过的最多的一种开发方式。
SCRUM 中定义了需求的标准,优先级的制定,开发的一些方式,集成和测试的建议,这套体系比较复杂,有机会再细讲。但好的体系学习成本高,背后的收益也大,可以在团队中树立标准的沟通语言,构建共同的认知体系,降低总成本。
另一个要提到的点是在周期中技术的应用,软件开发不仅是在开发软件,更多的是在利用现在工具整合流程,提升效能。有时,技术的采用就是标准的采用。
▎常见软件开发周期
- 年
- 月
- 两周
- 周
以上是我见过主流的开发周期。
> Annual | 年
以年为单位的,主要是一些大型软件,以开发语言,操作系统为主。
开发语言 Node.js / Java / Python 等
操作系统 macOS / Ubuntu 等
这种系统的特点就是庞大,且有着明确的发布日期,需求的来源也有着明确的标准。
> Monthly | 月
一些偏传统的公司会采用一种发布列车的方式,每月定制发布时间。如果一个功能能在发布列车启动前做好准备,就可以上车。
总体来说,月还是偏少见的。
> Biweekly/Weekly | 双周/单周
从 MS/EF,双周一直是比较推荐的,原因是一个标准周期里的项目有点多:需求及评审,开发,集成,测试,发布,回顾。放在单周中,会挤压开发时间,让开发者疲于应对。
单周应用于一些特殊时刻,需要产品尽快上线,有种做一点上一点的感觉。
▎实践
> 角色:
- Product | 产品
- Designer | 设计
- Developer | 开发
- Tester | 测试
> 流程图
这是我在上家公司所实施的流程,图中表示了不同的周期,不同的角色,在一个时间线里,分别要做的事务。
在每个生命周期里,流程是有严格的依赖的关系,产品先行,设计其实,然后是开发,测试,直至发布。
产品是建议先行最少一个迭代的,设计要在下一个迭代开始前,准备好大量的稿件,不要等开发阶段开始后还在等设计。
开发和测试同行,其次是集成和测试同步进行。
在开发期间,同时处理线上的一些问题。
▎举例
年度 | Python Annual Release Cycle
Python 于 2019 年末宣布使用 12 个月的发布周期,委员会认为有一个一致的时间表会对社区有所帮助:
- 开发者能制定自己的工作计划
- 社区知道何时参与测试,提供反馈
https://lwn.net/Articles/803679
https://www.python.org/dev/peps/pep-0602
▎REF::
https://en.wikipedia.org/wiki/Systems_development_life_cycle
https://en.wikipedia.org/wiki/Software_release_life_cycle
https://stackify.com/what-is-sdlc