为什么我们经常要花将近一个月的时间来发布几行代码?

2020 年 7 月 21 日

为什么我们经常要花将近一个月的时间来发布几行代码?

本文最初发布于 hackernoon.com,经原作者授权由 InfoQ 中文站翻译并分享。


你有没有想过,为什么我们要花将近一个月的时间,才能把几行代码修改交付给我们的明星客户或忠实客户?当所做的更改符合产品、营销和应用程序管理人员的要求时,有什么会妨碍它立即发布?为什么管理人员会针对维护发布列出一个在你看来如此“不现实”的时间表呢?这些是我在编写生产级代码的最初几个月里的思考。


在大学的时候,我总以为完成项目就是开发,就是永无止境地编写代码。一旦特性的初版完成,项目即告完成。全部完成。没有同行代码评审,没有文档,什么都没有。只是一些原始的代码文件,其中零星有一些注释。它是有效的,可以满足需求。我们从不考虑可维护性、可读性、可伸缩性等等。你提出的功能需求,你设计了它,开发了它,然后又测试了它,你当然会对它满意。


更重要的是,我们的软件有效。我不只是说它没出问题,或者它的行为完全符合书面规范,或者它可以高效地生成报告。它是真得很有效。


但是,企业界的情况似乎有所不同。


有一种东西叫做“流程”,流程的成功/成果取决于团队。团队要有足够的耐心和纪律来遵循流程。本文将讨论这个所谓的流程。不同的公司遵循不同的流程,我会尽量使这篇文章尽可能的通用,以便读者可以将自己的情况与本文的内容联系起来。请在评论区与我们分享您公司的流程。


第一步:软件产品建议


产品线的市场营销部门会分析产品服务的市场趋势,在一个较高的层面上简要地了解客户的需求(有些客户往往会提供更多的细节和见解,但一般情况下,很多人只会提供高层细节,因为你还没有表现出要给予任何承诺。这也取决于你的目标市场的活跃程度)。下面这句话总结了营销团队的工作。


在编程中,困难的不是解决问题,而是决定要解决什么问题。


一旦市场营销团队基于前面的分析找到了一个有前途的 ROI,他们就会继续,创建一个软件产品建议,简要说明公司在市场上的位置、产品的规格、潜在客户、预期收益等。一旦得到批准,领导团队就会确定每个模块对应的所有者——业务所有者、产品经理、S/W 经理、S/W 开发人员、S/W 测试主管、质量经理和应用程序/客户经理。


第二步:软件产品规范


一旦确定了高层次的市场需求,相关的产品经理就会介入,并创建一份全面的 S/W 产品规范。一般情况下,其中会包括执行概要、产品描述/分类、产品分销、客户的特定要求和产品安全要求(适用于汽车和相关行业)。产品经理会考虑不同的受众,并创建框图来解释高层次的设想。


草案准备好之后,产品经理就会将其分发给不同涉众进行评审,并召开评审会议,讨论什么时候可以执行完成、外部依赖关系以及向客户交付产品。


第三步:软件架构、设计 &测试计划


一旦研发团队与业务/营销团队在功能和规范上达成一致,他们就会继续下一步工作,创建 S/W 架构和设计文档。他们从产品经理那里获得输入,并创建这些文档,以便将每个营销特性很好地映射到需求。每个需求都会映射到各自的架构和设计规范。这样,就可以无缝地进入开发阶段了。


构建软件设计有两种方法:一种方法是使其非常简单,明显没有缺陷,另一种方法是使其非常复杂,没有明显的缺陷。


S/W 开发经理了解所有的映射,并将需求分配给 S/W 开发人员(根据可用资源情况)。与此同时,S/W 测试主管会了解规范,他/她将制定测试计划和测试策略来测试特性。产品执行所需的任何豁免现在就开始执行。


在此阶段,产品经理和 S/W 开发经理还创建了风险管理计划,记录了所有的依赖关系、可用的资源,以及如果事情没有按照预期进行,可能出现的时间延迟。(通常情况下,事情并不像预期的那样发展)。基本上,这份文档旨在抑制所有可能的意外,但我每天都会经历。


第四步:特性 &测试用例开发——单元测试


如果软件产品规范、需求、架构和设计文档广受好评,就意味着可以进入开发阶段了。终于到容易产生共鸣的东西啦。


开发完全由研发团队掌控,间歇性地从应用管理方和项目管理方那里获取输入。通常,特性开发与测试用例开发同步。然而,测试用例开发将特性视为一个黑盒,对特性开发一无所知。测试计划的整个输入是软件产品规范。这有助于保持测试的公正。当特性开发部分完工时,大多数开发人员会编写单元测试用例来检查预期的功能。通常,单元测试是高度模块化的,并且在函数级进行。这可以使开发人员有足够的信心相信函数的响应总是确定的。下面是我最喜欢的一种调试形式。


最有效的调试工具仍然是经过仔细考虑的、放在适当放置的打印语句。


S/W 开发经理会密切关注开发进度,并向项目经理报告执行进度的最新信息(每周/每月)。


第五步:更多测试——集成测试 &静态/动态分析


当特性和测试用例开发快完成时,开发人员会以可测试的方式将代码交付给测试负责人。当测试团队在代码上执行严格的迭代测试时,开发人员也没闲着,他们会执行需求级的集成测试。他们通过集成各种单元测试来测试特性/需求。他们有了足够的信心,事情会按预期进行,但这还没完。测试负责人将报告一些不确定的行为,显然,这些行为会使开发人员感到惊讶/沮丧。通常情况下,开发人员和测试人员会保留各自的意见。你不能责怪测试人员,因为那是他们的工作职责:发现 Bug。


测试的另一个重要方面是执行静态和动态分析。这种形式的测试属于开发人员的职责范围。大体上,他们会检查代码是否符合适当的编码准则,先前执行的单元测试覆盖了多少语句和函数,等等。根据我的个人经验,通过执行这项分析,我已经修复了许多未发现的 Bug。这保证了代码的完整性,并使代码更具确定性和可维护性。通常,一旦由开发人员提供的报告(如单元测试、集成测试和静态分析)就绪,代码就会被冻结。同时,测试负责人会生成测试报告。


第六步:整合


代码被冻结。已确认。通过所有测试用例。已确认。你认为我们可以交接并继续前进了,对吗?坚持住,伙计。


文档,它的重要性再怎么强调都不过分。


文档是一封写给未来的自己的情书。


这个产品现在只有两类人可以理解——开发人员和测试人员。应用工程师/客户工程师完全不知道如何有效地使用你提供的特性。开发人员需要编写清晰的文档说明如何使用该特性。不要太长,那令人厌倦。也不要太短——他们肯定会回来问你更多的问题。文档的资源占用经常被低估。它确实会花费你大量的时间来解释如何使用这个特性。


S/W 开发经理移交代码,应用团队提供产品信息,测试负责人提供报告,质量经理验证文档并根据流程的遵循情况来打分。项目经理把所有东西都整合在一起,召开最后的交接会议。


回到文章开头提出的问题。为什么要花近一个月的时间来发布几行代码?


假设我们的目标是一次维护发布,我们只执行开发、测试和文档编制的步骤(步骤 4-6)。对于一名 S/W 开发人员来说,代码更改看起来可能需要两天的时间,但是考虑到上面的步骤,实际上可能需要几周到一个月的时间。我用下图来说明一下。



问这个问题的人是那个火柴人。我希望他现在明白了。


原文链接:


Why Does it Often Take Nearly a Month to Ship a Few Lines of Code?


2020 年 7 月 21 日 10:391261

评论

发布
暂无评论
发现更多内容

架构师训练营第一次课程感想小记1

tuuezzy

软件工程 求职 架构师 UML

重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

Solidity的Bytecode和Opcode简介

程序那些事

区块链 智能合约 以太坊 Ethereum eth

大家都知道递归,尾递归呢?什么又是尾递归优化?

石头

Assignment 01

高冰洁

iPad配置OpenVPN客户端

wong

ipad OpenVPN

架构师训练营第二周

Melo

架构师训练营第一周学习总结

全力以赴@

读懂才会用:Redis ZSet 的几种使用场景

小眼睛聊技术

Java redis 学习 架构 后端

编程的未来 Java, C, Go, Swift, Dart? Uncle Bob Martin - The Future of Programming

John(易筋)

Java 敏捷开发 编程的未来 编程简史 Bob大叔

IP 基础知识全家桶,45 张图一套带走

小林coding

计算机网络 计算机基础 IP

下周要开始“卖桃者说”代班计划了

泰稳@极客邦科技

日常

kubernetes简单入门(多图少字版)

绿星雪碧

Kubernetes 入门

中电标协提出并归口:《政务APP评价指标》团体标准开启制订工作

BonreeAPM

App 标准化 中电标协 政务信息化 博睿宏远

【JS】给console来的样式

学习委员

Java html5 前端 Web console

Java15都快出来了,你还不会Java8中的Lambda?

Java全栈封神

Java Lambda java8

情绪管理 - ABC理论

石云升

情绪控制 ABC理论 费斯汀格法则

「编程模型」C++封装资源

顿晓

c++ 封装 资源封装 自动化管理 简化代码

食堂就餐卡系统设计

huangyb

第一周作业一:食堂就餐卡系统设计

DZ

华硕灵珑II笔记本电脑——自由work不设限

飞天鱼2017

浅谈互联网思维和区块链思维

CECBC区块链专委会

区块链思维

ARTS打卡第二周6.1-6.7

我笔盒呢

常用运筹学软件整理

张利东

钩陈/ 好中文作业:巴别塔

ZoomQuiet大妈

写作 大妈 是也乎 IMHO 蟒营®

ERC20 Short Address Attack

程序那些事

区块链 以太坊 Token ERC20 代币

【总结】优秀架构师的职责及综合能力

huangyb

平常心平常心

zhoo299

随笔杂谈

小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下

程序那些事

Java io nio 小师妹 buffer

JAVA 中的 CAS

犀利豆

Java 并发 CAS

知乎Matisse图片库在Android10上拍照,预览问题

三爻

android

为什么我们经常要花将近一个月的时间来发布几行代码?-InfoQ