软件开发周期

▎为什么要有周期

生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。

  • 周期带来明确,让每个人知道当下在何时、何地、要做何事。
  • 周期带来秩序,让所有人知道如何分工。
  • 周期带来简化,软件工程太复杂,只有把工程分解为小周期可理解可完成的
  • 周期带来成就,开发者可以很快看到成果,而不是一味的编码
  • 周期带来减损,短周期可以让需求者迅速做反应,而不是等整个流程结束后才知道产品和需求不对应

▎周期中包括

  • 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