我刚刚在 Hanselminutes 上听完一个关于“完成”定义的令人大开眼界的播客。所以我对每个人的问题是“你什么时候认为一个软件是“完成”的?是在它完全单元测试的时候吗?是在它完全记录在案的时候吗?你在开发过程中使用什么衡量标准来确定你的完成度?软件?
12 回答
确定取决于软件的上下文和目的吗?
月球着陆器(真实的东西)对完成月球着陆器的 Flash 游戏会有一个非常不同的定义。
在我工作的地方,DONE 是由非技术经理委员会定义的。你可以想象其中的乐趣和游戏。
sprint 评审中的测试、单元测试、集成测试、webtest、同行 QA 和最终用户评审。同行 QA 决定是否需要其他任何东西,所有测试都必须在 CI 环境中通过。这是在一个 scrum 网络项目中。
支票什么时候结清?
说真的,每次你编写一个软件时,你都应该定义“完成”的含义。第一的。如果您有客户,那么应该有一份合同——具体的、可衡量的、商定的和可测试的——定义完成。
如果你不知道你要去哪里,你怎么知道你什么时候到那里?
当他们的客户(1)认为它完成时,它会被签入、备份和记录。
另外:“完成”很少存在于网络开发中。
(1) 客户可能是内部 PM 等
一个很好的衡量标准是代码流失。使用您的源代码控制软件,测量变化率。每天要删除/添加/更改多少行代码。随着时间的推移绘制这个图表。当您接近准备发布时,这应该会呈下降趋势,并表明稳定性和准备发布。这假设您实际上测试良好并进行更改以修复错误或响应更改请求。如果您的用户验收测试用户和集成/单元测试活动继续回归和测试,并且您不必进行代码更改(因为他们没有发现任何需要更改的内容),那么您可能已经准备好发布了。
如果在任意或外部驱动的发货日期前几天大量代码正在搅动,请注意!
当软件可用于满足定义系统的要求时。
但我一直认为,“软件永远不会完成,它只是达到了可接受的不完整程度。”
从开发的角度来看,我的朋友和导师西蒙贝克很好地描述了“完成”,这里
Alistair Cockburn、Jeff Patton 和 Mike Cohn 也收集了以下观点
可交付的质量必须在上线运行中得到锻炼,这迫使团队真正专注于确保更仔细地考虑增量工作。
“完成”是上面所有引用的第一个同意的东西,每个团队和项目总是不同的;然而,为了满足知道某项工作已经完成,团队必须在开始时进行一项练习,以充实完成度的衡量标准并列出这些标准。
在这样做的过程中,每个人都一致同意可接受的完成点是什么——这是否包括在 Excel 中记录任务,或者编写文档(或不)成为该团队/项目的实施细节。最重要的是,每个人对 Done 的理解都是统一的。
同样,假设您通过共识达成该定义,也可以根据共识的要求对其进行更改。
当所有要求都得到满足并且所有测试都通过时。
它从未完成,只是版本化和发布。
每个项目都有自己的完成定义,我们的代码完整(编译成功等),单元测试(或某种本地测试,如果不可能)并在我们的一个包中发布(因此其他团队可以使用) .
但国防部最重要的事情是各方都应该就它是什么(团队、产品负责人、经理等)达成一致,它应该是某种公共合同,在团队门户中发布是个好主意。
任何时候任何软件都完成了 80%。至少,这是我的经验告诉我的......
当客户认为是。