The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
首先,无论采用何种方法论,我们都是为了用户(也就是顾客、项目赞助商、最终用户或客户)编写软件。其次,无论采用何种方法论,我们都是逐步编写,逐个发布功能和错误修复。也许我说的是一些非常明显的事情,但重要的是要记住,每个新版本首先应满足用户的需求,而不是我们程序员的需求。换句话说,我们将一个大任务拆分为小块的方式应该是面向用户的,这就是为什么你总是从上往下地工作。让我们通过一个实际例子来说明我的意思。
假设我接到一个朋友的合同,要求我创建一个类似于wc的命令行字数统计工具。他答应支付我200美元的报酬,并且我答应将产品分为两个版本——Alpha版本和Beta版本。我答应在星期六发布Alpha版本,在星期日发布Beta版本。他会在第一次发布后支付我100美元,剩下的在第二次发布后支付。
我将使用C语言编写,他将支付现金。
这个工具非常简单,我只花了几分钟写完。请看一下:
但是让我们保持专业,不要忘记构建自动化和单元测试。以下是一个简单的Makefile
,可以同时完成这两项任务:
现在我从命令行运行make
命令,并得到以下输出:
All clean!
我准备拿到我的200美元了。等等,交易是要交付两个版本,并分两次付款现金。让我们退后一步思考一下——我们如何将这个小工具分成两个部分呢?
一开始的想法是先发布工具本身,然后再建立自动化和测试。这个主意好吗?我们能不能在没有运行测试的情况下交付任何软件呢?如果我不与之一起交付测试,我怎么知道它能正常工作呢?我的朋友会怎么看待我发布没有测试的任何东西呢?这将是一种彻底的尴尬。
好吧,我们先发布Makefile,然后再发布wc.c。但是,如果我朋友手上只有一些测试而没有产品,他会怎么做呢?这个第一次发布将是完全没有意义的,而且我也拿不到我的100美元。
现在我们来到了这篇文章的重点。我想说的是,每一个新的增量都必须为顾客所感知的产品增加一些价值,而不是我们程序员。Makefile绝对是一个有价值的工具,但对我的朋友来说没有任何价值。他不需要它,但我需要它。
下面是我要做的事情。我将发布一个由测试支持的工具框架,但是只有一个完全无用的实现。看一下:
我将相应地修改Makefile
。我将禁用第一个测试以确保构建通过。
我的工具有效吗?是的,有效。它可以计算单词吗?是的,对于某些输入有效。它对我的朋友有价值吗?显然!他可以从命令行运行它,并可以将文件作为输入传递。尽管他总是得到计数的结果是”5”,但这很令人沮丧,但这只是一个测试版本。他并不指望它完美运行。
然而,它有效,它有测试支持,并且已经妥善打包。
我刚才所做的是一种自顶向下的设计方法。首先,我创建了一些对我的客户有价值的东西。我确保它也满足我的技术目标,如适当的单元测试覆盖率和构建自动化。但对我来说最重要的目标是确保我的朋友得到了东西…并且给了我报酬。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-16 at 15:45