目录
一、传统的软件项目分阶段进行
二、根据”挑战性的目标“制订计划,危害性很大
三、推荐随时发现缺陷随时修复
四、 价值是什么
一、传统的软件项目分阶段进行
潜在风险:试图去计划并实现所有的功能特性,这使我们处于不利的境地。我们完全没有时间去改变,而且即使有时间,也不可能理清哪些事情不该做,哪些事情应该做。
作者建议:从一开始就计划多次发布版本。多次发版更容易管理,也能够更早交付价值。以这种方式构建软件更容易,同时所有人都能够共赢。
个人理解: 实际项目中,需要综合考虑需求大小、改动风险、人力资源、业务诉求紧急程度等等,来评估是否需要多次发布,每次发布的大小等等。 在某些情况下,本可以1次发布的项目,硬拆成分2次发布,反而增加了额外的成本。
二、根据”挑战性的目标“制订计划,危害性很大
在制订计划(特别是短期计划)时,人们往往会设定”挑战性目标“或者”鼓励“团队”再多完成一个功能特性“。
作者建议: 不要这样做。 因为团队真的会尝试这样做。由于急于讨好上司,他们会不自觉 赶工。为了多完成一个功能,会遗漏一些测试,并且写出的代码也不像以往那样清晰整洁。压力具有破坏性,请尽量避免向团队施压。
- 赶工会给整个项目带来更多缺陷。修复缺陷往往花费更长的诗句。
- 槽糕的代码同样影响进度。 如果代码清晰,下一个功能特性也会进展顺利;反之,如果代码很槽糕,所有功能特性可能都需要花费更长的时间。
三、推荐随时发现缺陷随时修复
缺陷引发的成本
- 正如咨询师汤姆:狄马克(Tom DeMarco)所说,没有人会在看见餐厅地板上有一只蟑螂时说: ”瞧,有一只蟑螂“。 对于缺陷而言,情况也一样。 如果出现了一个缺陷,那就意味着可能会有很多缺陷。
- 找出缺陷将花费很多时间,修复这些缺陷同样也要花费时间。
随时发现缺陷随时修复
- 测试不但没有减慢开发速度,反而使其更快。 因为测试可以让我们犯更少的错误,同时使错误更快被发现。
- 需要两个层面的测试:
”业务“测试:验收测试驱动开发
”技术“测试:直接对代码测试,测试驱动开发。当进行开发人员层面测试时,测试用例在编写代码之前或者与代码一起完成的。 作为开发工作的一部分,测试可以阻止缺陷在程序中出现。 这笔直到我们认为编码已经完成时才进行测试要快得多。
ps: 个人理解, ”技术“测试,在国外来说,主力是研发,写测试代码、与写业务代码同样重要。
四、 价值是什么
价值的用途: 基于价值决定要做什么,以及不做什么。我们会先做价值高的事情,将价值低的事情放到后面去做。
价值是什么: 简单来说,价值就是”我们想要的东西“、”我们看重的东西“
我们看重的东西(价值)举例:
- 对商业上有用
- 对客户有用
- 信息。 我们可能为产品选择一个战略方向。我们认为需要了解用户都喜欢什么。因此构建了几个原型向潜在用户展示。
- 我们的产品可能旨在挽救生命。 我们决定根据每个功能特性所能够挽救的生命数量,来确定接下来要开发哪些功能特性。
- 我们的公司可能出现了资金周转困难。 因此我们决定找一些风险投资,并快速开发出样品,向潜在投资者展示。 这里我们看重资金,帮助公司继续经营下去。
- 我们的产品运行速度比较慢,顾客因此选择其他产品。 我们决定推迟新的功能特性来提高软件的运行速度。 我们看重的是产品的运行速度。
- 我们的进度可能很慢, 完成全部功能特性需要花费的时间太长。所以我们决定推迟增加新的功能特性来精简软件,这样开发速度就能更快。 我们看重的是进度。
- 我们的产品可能展示一些很可爱的猫的照片。 这样做的目的是使人们露出笑脸,为他们的生活添加幸福。 我们看重的是人们的幸福。
⭐️ 对所有人都适用的价值并不存在。 不论是公司还是个人,要想生存下去,就必须深入了解价值,然后从可能去做的所有事情中选择那些最重要的去做。
选择价值,就是选择那些对我们重要的东西
所谓价值, 就是那些我们想要的东西。