敏捷理念

敏捷理念

Download on the App Store

敏捷理念 episodes

  • 026便捷又实用的计算速度和待办事项的方法

    布兰登·林顿的联系方式: [email protected] 兰瑟: 这一集,我们和布兰登·林顿讨论了关于计算工作速度的便捷的方法,特别是关乎未完成的用户需求。 布兰登: 你好,我叫布兰登·林顿。我住在底特律,它位于美国的密歇根州。我是埃森哲解决方案的敏捷教练。 我在敏捷空间工作了八年时间,提供咨询业务长达四年。很高兴能和兰斯一起工作。 兰瑟: 是的。我也很高兴能和布兰登一起工作。 布兰登: 很高兴来到这里。我们正在做一个关于需求的播客,主要研究那些需要较长时间才能完成的需求。 兰瑟: 是的。那么,这是一个问题吗? 布兰登: 这不但是一个问题,还是一个大问题。不久前,我们在办公室就这件事情进行了一次简洁的沟通,是的,我们在谈论,或者说我在谈论一个我刚刚加入的团队,问题出现在一次sprint计划会议上,他们有一个需求;但是在上一次的sprint中,他们还有多个需求没有完成。我们的需求依然具有很高的优先级。他们说,这是8个需求,我们可以先完成5个,然后把剩下的3个放在最后一个sprint中。总之,一切就是从这里开始的。 兰瑟: 我们把讨论的这个数字称为需求点,当团队有一大堆工作要做时,他们会制定一个sprint计划。 布兰登: 对的。 兰瑟: 最终他们得到了我们称之为速度的东西。 布兰登: 是的。但是速度到底是什么呢?拿开车来说,我们开车的时候车会有一个车速。速度有很多不同的形式。对,在scrum一文中,我给速度下了定义,你知道的,这只是一个大概的定义,或许它可以用更好的词语来定义,但是在这里我想说的是,在布兰登的世界中,速度是点数,需求的总点数就是在sprint中已经完成的、结束的那些。再没有比这更贴切的说法了。 兰瑟: 在这里,为了进一步强调布兰登的观点,我们假设一个场景:团队有10个需求,所有需求的点数相同,都是5个点。因此,这意味着如果他们完成所有的需求,他们需要完成50个需求点。 布兰登: 所以即使你有10个需求,但是你只能完成其中一个,那么,这就是你的速度。即使其他的需求即将完成,那也与你的速度无关。这有点像踢足球,如果你没有进球,不管你离终点有多近,一英寸,一码,还是50码,你都没有完成。因为拥有可持续的速度,意味着拥有一个能无限期保持的可重复的速度。 兰瑟: 所以正如布兰登所说,这并不是为了计算你的点数,而是为了建立你可以用于制定计划的指标。这些指标应该等同于我们在不确定的时间内所能达到的目标。 布兰登: 有趣的是,一个新的团队,往往会说,这个需求需要完成的点已经不是8个了,我们已经完成了5个,所以我们只需要计算剩下的3个。当然,这也引起了争论,那么,什么叫需求完成呢?他们说,嗯,这个任务,还有这个任务,你是知道的,这个,这个也是好的,这个已经完成了90%了,布兰登,对吧,我获得了所有的点,我们几乎就要完成了。但我总是说,好吧,你是在为谁做这个?这可能是多方面的,这取决于你工作的团队。如果这是某个应用程序的“保持登录”功能,当你返回后,不需要再次登陆,这个时候,除了保持登陆复选框,你的所有功能都是正常的,这对您的最终用户来说不是很有用,因为您登录的内容会一直存在,你甚至没有选择。这个功能并没有完成,它几乎快要完成了,但仍然是未完成状态。那么我要说的是,你的用户关心你做了多少吗?未来的用户能体会到它的价值吗?他们并不在乎你做了多少,他们只在乎你还有没有完成。 兰瑟: 这就好比,我把所有要买的东西都放进购物车,然后到了结账台,收银员说,对不起,这些东西我们不卖了,你不能买了。就像,我想要的东西都拿了,但是我却不能把它带回家去。所以我想我只在乎我能不能把它们带回家。 布兰登: 这可能会揭示一些有趣的机会,如何更好地分割需求。用你的比喻,如果我有一辆装满东西的购物车,我到了结账台,但是那是只收现金的,然而我没有现金。好吧,我当然没有现金了,我得在这里排队。但是如果我有现金,那至少是一种可以满足的用例或场景。因此,这可能意味着有机会将需求分开。但另一个,我们谈话的另一部分,我们现在怎么处理这些需求呢?尤其是因为你是对的… 兰瑟: 现实情况是,一部分需求完成了,但是另一部分需求并没有按时完成。他们根据邓恩的需求来计算工作速度。所以他们整理了所有的邓恩需求。他们把每个人的需求点加起来,可能一共是50个,但是他们仍然有一些需求没有完成,现在他们想为此制定一个计划。 布兰登: 假设这仍然是一个优先级高的事项。我在刚开始就会问:这些问题是否仍然重要,你知道,中途或部分完成,这些是否依然是迫切需要的。如果不是,把它们放在待办事项里,以后再做;如果是的话,你仍然想去追求这些,那么就像我平时所说的,让我们好好研究它们,再重新进行评估,因为在开始研究这些东西时,我们在sprint中可能学到了一些东西,但是还没有完成。我们现在是否能更好的知道完成这个需求实际上比我们之前估计的要付出更多的努力。 兰瑟: 是的。所以我有90%的需求完成了一段时间,假设这是一个20点的需求,我没有得到任何点数,我没有,我知道那不是斐波那契函数。很抱歉,伙计们,但这是一个20点的需求,我不明白,现在我们又要重新评估它,我们要评估什么工作是被遗留的,什么是仍然需要做的,或者是完成剩下的需求还需要什么东西。 布兰登: 对的。 布兰登: 是的。我们不想考虑的是,我们已经投入了多少精力。在速度方面,我们总是告诉团队,你需要非常专注于剩下的工作来完成这个任务。还有我们提到的那个场景,比如说,你知道的,20点的需求现在实际上只有13点,因为我们已经完成了一些工作,我们投资了一点,但还有很多路要走。你可能会说,好吧,我上一次sprint时做的工作没有得到表扬。你是完全正确的,那不是速度,对吧?你,我们,我们并没有完成。现实就是一个20点的需求现在变成了13点。所以如果我们看一下点数的总和,假设这是一个发布,现在你怀疑100个点降到了93个,对吧?你的,你的完成时间移动了一点点,对吧?你还没有完成需求,所以这不是工作速度,就拿获得信用来说,嗯,不要为之而担心。但事实却是,为了达到同样的价值,只需要少做一点努力,你想重新评估它,你知道,当这个需求仍然拥有优先权时,你需要考虑重新评估它。 兰瑟: 下一集,布兰登将继续劝阻我们不要把速度看做是衡量团队付出努力的方法或者是某种形式的信用,而不去估量他们已经完成的工作。 布兰登: 你知道的。我知道你想尽可能的反映出最真实的情况。所以,如果你知道这个需求是13点,就不要说它是20。 Tout Agile Noir Chinese version

    The post 026便捷又实用的计算速度和待办事项的方法 first appeared on Agile Thoughts.

    13 min
  • 025 作为开发者,如何熟练掌握TDD?

    最重要的几点: * 开始实践 * 如果某个问题难度太大:暂时保留下来,之后再回过头来重构代码 下面的情况说明你已经熟练起来了: * 一天8小时已经能写出很多个测试了 * 能重构4个较长的函数或者类,并让它们通过测试 * 很不喜欢收到跳过测试的建议 * 已经快一周没用过调试器了 下面的情况说明你已经非常精通了: * 能教会他人如何熟悉TDD * 你的团队项目有很高的代覆盖率了(高于80%),并且还在持续提升 * 团队的技术负债在每一轮冲刺中不断降低 开发者要熟练掌握TDD,必须得经历的那些事情: 先编写测试代码,再写产品代码。之后,你的大脑会形成条件化的思维,也就是形成一个新习惯。40/4挑战是一种培养新习惯的方法。它的意思是在4周的时间段里,写出40个单元测试。之后,你会在TDD上取得突破,并变得熟练。你在代码编写中会遇到好些困难,并发现困难通常都能通过先进行微测试来解决。你会发现一两个自己难以解决的问题,但没关系,继续努力。4周过后再来重新解决这个问题, 这时候你已经成为了专家,能用你条件化的思维来平衡测试与产品代码了。在回顾微测试提供的快速反馈时,你感到非常享受。你开始注意到你开发出了更多的功能,而且在修复有问题的代码上花费的时间越来越少。 开发者熟练不起来的常见原因有哪些? 14到22集的IT戏剧《敏捷思维》中,我们列出了几个原因。毫无疑问,最常见的原因,就是开发者对于已有的思维定式太过于习惯和舒适了。“我不先写代码,就没法写出微测试来。”这种思维定式让他们不愿意战胜自己来尝试新事物。然后,不舒适的感觉让他们继续自己既有的固定思维,跳过了要先写的微测试,直接编写代码。但这样反而让通过测试和实现功能的周期更长,也更冒险,因为你老是会遇到问题却没有任何头绪。 下一集会讲述一种“调皮或优雅”的方式来计算团队速度,由敏捷教练Brandon Linton带给大家。

    The post 025 作为开发者,如何熟练掌握TDD? first appeared on Agile Thoughts.

    5 min
  • 024 让整个组织实施TDD

    上一集,我们讨论了如何让团队实施TDD,也就是用微测试来发展他们的代码。让一个团队实施TDD非常有帮助,因为这样展示了TDD的实施不仅可行,而且很有价值。下一步是如何让整个组织采纳实施TDD。没有组织的接受,在管理层或者产品负责人更换的时候,TDD就有可能被否决。这种事情随时都有发生:团队自己发现了新事物的价值,管理层换人了,不理解团队的做法,于是开始干预,并停止了相应的做法。所以,组织的采纳是对TDD未来价值的确认。这样能使TDD成为公司文化、雇佣政策和职业路径的一部分。在一个团队成功展示了TDD的价值之时,就是全面实施TDD的时候了。 步骤一、让顶层人员熟悉相关情况 包括有关的管理人员、架构师以及产品负责人 管理层应该了解实施TDD需要的付出和会有的回报,这样他们就不会以负面的形式进行干预。开发人员最不喜欢实施TDD时的不确定性。挑战包括让管理层、架构师和产品负责人熟悉TDD时,这三类人群有着完全不同的需求和对TDD不同的看法。因此,传递的消息、目的和技术对话的效果都应当有所不同。 步骤二、进一步实施 开发者需要学会如何使用单元测试库,如何重构代码,如何设置连续整合服务器,以及如何采用先编写测试的设计。这些在起始阶段都会减慢开发者的速度。即使管理层已经作出了决定,开发人员也会按照自己的想法接受或者反对TDD。虽然并不需要每个人的同意,各团队需要40%到60%的开发人员有使用TDD的意愿。增加甚至长达数年的学习激励,可以让态度“还不明朗”的开发者开始先试用TDD几个月。根据我的教练经验,这足以使TDD新手变得熟练。 我见过较好的实施方法包括,副总为每位开发者分配奖金,团队的领头人负责确立一些可实现但又有挑战性的TDD实施目标。这样,也就确定了微测试数量的目标。如上一集提到的40/4挑战一样,目标是需要在两三个月的时间段里,让开发人员实现熟练掌握TDD的效果。 步骤三、设置标准 设置标准会成为团队对任务完成最低的定义。一种便捷的方式,就是让标准透明可见,容易通过连续整合展开。下面是一个例子: * 拥有一台连续整合服务器 * 服务器必须执行编译步骤,并让其可见 * 服务器必须执行微测试,并让其可见 * 服务器必须执行微测试的代码覆盖率评估,并让其可见 * 服务器必须执行宏测试,并让其可见 * 不能交付未通过测试的代码 * 服务器必须执行设计负债,并让其可见 * 新代码必须有90%的代码覆盖率 最后的一项对有大量历史遗留代码的情况较为困难,需要花费数年甚至数十年的时间来达到90%的代码覆盖率。因为任何理由都不可能让我们一切都从零开始来重写代码。添加到历史代码库的新类应该有很高的代码覆盖率,但是在用连续整合服务器实施检查时会较为困难。 步骤四、可持续的系统 雇佣政策需要直接地针对熟悉TDD或是对学习TDD持开放态度的人。在目前的情况下,招聘反对TDD的开发人员是不合适的。这样的招聘行为只会导致他们与同事之间的压力,以及增长整个组织负面的状况。因此,可以把TDD和结对编程作为面试的一个步骤。在实施级别薪酬的组织里,把测试自动化和代码重构作为确定级别的一部分指标。 下一集,作为开发者,如何熟练掌握TDD?

    The post 024 让整个组织实施TDD first appeared on Agile Thoughts.

    8 min
  • 023 让整个团队都开始实施TDD

    如果14到22集里TDD 的IT戏剧一样,一旦你找到了具备测试驱动开发实施能力和可以积极驱动这件事的人选,那么你就占到了起手。我们会回顾Vanilla Pop让他的团队实施TDD的一些步骤,同时也会增加一些我认为很有效的小贴士。 步骤一、寻找火花 寻找一个思维灵活、而且资历也比较高能影响到团队其他人的人选。让他们积极地在样本代码上试验学习TDD,之后在实际工作中开始应用。 另一个策略,是雇佣一个有敏捷软件开发经验的开发者,通常被称为敏捷技术教练或是XP教练。让他参与几次团队的设计冲刺。敏捷教练,比如我自己,有十多二十年使用不同编程语言全栈实施TDD的经验,因此帮助你的团队在几天内改变编程模式,并不是难事。 步骤二、让火花称为火焰积极地研究学习团队工作中所写的代码 教会每个开发者如何结合自己的用户故事来实施TDD。在几轮设计冲刺中进行结对编程,这样你的开发人员就能得到足够的指导,了解如何自己解决最有挑战的微测试问题,就这样让火花燃烧起来。一开始会有些难度,大家也会学习如何删除、改变已有代码,运用新学到的设计模式以便更方便地添加微测试。 减少发布的压力,使每个团队成员都能有时间学到让他们能够产出产品功能的技能。举例来说:让团队决定来做更少的用户故事,这样他们能够为代码提供更多的微测试。另一种方法,是选择一个故事,以结对编程的方式来实施TDD。然后在下几轮的冲刺中,继续这样的方式,直到每个人都能在他们的日常工作中都操练过一些TDD。 40/4挑战,以及永远停留在初级阶段的危险 使用社交化帮助团队操练,讨论微测试在站立期间所取得的成就。 步骤三、投入,让壁炉的火焰更旺获取管理层支持 同他们交流在全部产品代码中使用TDD的愿景。选择两个月后的某时间,让团队讨论使TDD成为主流的产品标准。让产品的微测试工作更加透明 公开每天新增的微测试数量。讨论但不要吹嘘有站立会里有多少交付的微测试。在连续整合服务器的面板显示有关的数据是个好主意。 停止抱怨自动化测试。开发者很快就会开始指责“新事物”减缓了进度,而且看似没有多少好处。每个人都知道学习需要时间。在开始学习这个方法的前两个月,速度减慢是正常、普遍的现象。抱怨正常出现的现象,只会让管理层有所顾虑,担心团队的不安。为了度过这一阶段,我建议关注学习新技能积极的一方面,与组员分享减慢速度后所学到的新事物。之后,速度就会回升,变得更快,但学习的过程必不可少。 在设计冲刺回顾中讨论微测试工作,这样你的组员就会知道他们需要为产出持久的价值负责。利益相关方也要了解到团队的新方法。 步骤四、保障燃料的持续供给 团队工作协议应该把处置未通过的测试作为优先任务。唯一一个更重要的事情,是产品的应用交付。在测试未通过时,有关的人员或者结对小组,应该停下来了处理这个问题。 新增且没有单元测试的代码,应该被删除,就像未通过审阅的代码一样。 对交付应用的代码进行结对编程(定义交付应用代码)。 如果两个月之后,团队对于新代码的使用上还有问题,反思这一情况出现的原因,这种情况只可能因为创建的微测试有问题或者开发者没有按有关的流程执行引发。 期待在开始启动TDD的6个月之后,代码几乎不会出现瑕疵,或是同未采用测试时的旧代码相比错误明显减少。错误追踪系统中的数量走势应当相应地下降。 据我的经验,在历史代码上启用TDD一年之后,错误追踪系统已经用处不大了,只是个支持和开发部门间的工作流程罢了。出现的错误应该少于10个。 下一集,让整个组织实施TDD

    The post 023 让整个团队都开始实施TDD first appeared on Agile Thoughts.

    9 min
  • 022 TDD和Stack Overflow的专家开发者

    《黑色敏捷书》简体中文版可在这里购买:https://weidian.com/s/161651986?wfr=c&ifr=shopdetail (《敏捷思维》在背景中播放) Vanilla:呃,你就是Lecter先生吧? Hannibai:Lecter博士。叫我Hannibai就好了。 Vanilla:博士先生,TDD是如何运作的呢,我们可以尝试使用吗? Hannibai:流程似乎非常简单,和开发者熟悉的传统工作流步骤恰好相反。目前我对这样工作的效果比较关注。此外,我还很关注这种工作流的价值。 Vanilla:呃,是的。回到工作流上,你了解这些步骤吗? Hannibai:工作流似乎是,第一步,研究产品代码,发现你想变动的地方。 Vanilla:没错,正是。 Hannibai:第二步,决定具体的设计。考虑是新增方法,还是直接修改已有的代码。 Vanilla:然后呢?关键的步骤是? Hannibai:是的,Clarice。第三步是—— Vanilla:呃,Clarice? Hannibai:请让我继续说,第三步是很有趣的一步。我们并不是直接变动代码,相反,我们会写出—— Vanilla:(很激动地)测试代码! Hannibai:没错,为变动代码所写的微测试。有时候,我们需要改变一个已有的接口,或者写一个新的对象和函数,然后用测试来驱动调用已有代码里的新接口。确定微测试的规格,是实现下一步功能的最简单方法。 Vanilla:(很夸张地)然后呢? Hannibal:第四步,运行微测试,查看是否能通过。观察红色的错误提示。你看见是哪个了没有(严肃地),Clarice? Vanilla:啊哈…… Hannibal:也就是说,微测试的确有可能通不过。但你知道吗,Clarice? Vanilla:啊…… Hannibal: (angrily) There is no sense in writing automated tests that cannot indeed fail! Hannibal:(有些生气的样子)如果所写的微测试100%会通过的话,就没必要写啦! Vanilla True Vanilla:确实如此。 Hannibal:还有第二个原因,你知道不?在我们添加或是修改了产品代码之后,可以观察测试结果由失败到通过的改变。 第三个原因,先写测试,能让你从代码调用者的角度思考。调用代码的人才是新功能的使用者。这不像你自己独自吃掉一个蛋奶酥,很快当。学会用良好的方式编写接口,不可能像吃蛋奶酥一样一下子就好。这一切是一种更高明的代码编写方法。 Vanilla:(觉得尴尬和唐突)呃,好的。听起来挺不错的。我们可以开始了吗? Hannibal:没错。我们把故事分成两部分,一部分要使用TDD,另一部分不用TDD。我们用计时器来测量每个组所花费的精力。 Vanilla:好的,为什么这样做呢? Hannibal:(清了清喉咙)啊,亲爱的Clarice,你看见了没?我们必须了解TDD的确是能节省开发和测试环节时间的。不然何必使用TDD呢? Vanilla:是的,有道理。 Hannibal:计时开始,大家行动吧! (Typing sound.  Music.  Time passes. Ding.) (打字的声音。音乐。时间过去了。叮。) Vanilla:测试已通过。 […]

    The post 022 TDD和Stack Overflow的专家开发者 first appeared on Agile Thoughts.

    13 min
  • 021 代码覆盖丑闻

    Vanilla Pop:IT团队怎么样呢?我们可以用TDD来实施一次设计冲刺,然后看看情况吗? Horst:我还是坚持我自己不赞成微测试的政策。不过,我很乐意让团队来自己决定如何才能向我交付功能和质量。 代码狗:我不相信TDD。你不能在写代码之前就先写好测试啊。你知道吗?没人会这样做。你想想,不过几周,就会回到老样子,我称之为错误驱动开发。我们调试代码的人就是这样做的。 架构师:我改变了。请教了专家,建议我尝试一下更为灵活的思维。我努力做得更好。不再强加观点给同事。让团队决定,而不是我自己命令他们。一首叫“Kumbiyah”的歌,我们都开始唱唱好吗?Pop是对的。他向我展示了一种方法,所以,我们需要做的就是开始实施。管理层希望我们带头,实现全部代码100%的微测试覆盖。副总已经签发这件事。会有个连续整合服务器来运行它们。我们只需要实施即可。这就是目前的规矩。好运哈。 Jose:(小声说)呃,灵活思维持续不到5分钟。 Junior Joe:(小声说)你认为那会是个新记录吗? 代码狗:啊,这不会发生的。我们不会真地那么做吧?那是质量控制的事情啊。 Jose:我不知道。Vanilla Pop之前的工作很出色。你看过这些测试没? 代码狗:呃…没有,那是Pop的东西呢。 Junior Joe:我觉得有点眉目了。我支持。 Vanilla Pop:谢谢。 架构师:Vanilla Pop和Junior的覆盖率有40%。这是一个小的也是新的单页应用。代码狗也在做TDD,按我的估计,下周我们可实现100%覆盖。我们努力前进吧,伙计们。 (时间过去了。)星期二,50%。星期三,60%。星期四,65%。星期五,85%。(继续前进!)星期一90%。 架构师:不错!我对代码狗的转变印象深刻。他抓住了TDD的精髓。实际上,他处理的代码块实现了100%的覆盖。我提议给他颁个奖。 代码狗:(吃惊了)哇,谢谢! 各位开发人员:(拍了拍代码狗的背。) Junior:干得好! Vanilla:很自豪能认识你。 Jose:对开发者来说很不错了。 Vanilla:他真地这样做到了。 Horst:这是什么情况?我这样滑动屏幕,为什么什么都看不见呢? 代码狗:(尴尬的样子)我知道这是什么情况。我会调试并修复的。 (关门了) Jose:很奇怪。他的代码是100%覆盖的,却似乎是有错误一样。 Junior:也许是个整合的问题?我审阅了他的代码,并建议他在视图层停止调用I.O.。不大量使用虚构的对象,就没法进行微测试。 架构师:代码狗在哪里?我希望它能适当重构一下代码。他的代码过于占用网络带宽了。 Vanilla:他正在处理一些Horst发现的情况。 架构师:什么?不可能吧!他的代码有100%的覆盖,看看这些漂亮的代码覆盖报告。 Vanilla:是的,真是个奇迹。Junior,你能向大家展示下他的微测试吗? Junior:啊,好的! Vanilla:啊,天呐。图灵的魂魄都会为此震惊的。 Jose:你看看Pop?他不是一个像你这样有个性的开发者。 Junoir:你会认为他的50个微测试什么测试也没做吗?我没有理由不这么想? Vanilla:这些测试是假的。 架构师:这人真不可思议!他只是假装在TDD! Jose:哦,天呐。他居然这样做了。真是疯狂,搞砸了。天呐,糟糕极了! 解说:代码覆盖是分析了解团队的代码自动化进展的好方法。但是如果推进得过快,或是用政策来强制实施,就容易得到虚假的结果。代码覆盖测试工具能让我们了解测试运行的时候哪些代码被执行,但并不能告诉我们自动化的测试是否在起作用。设想一个针对两个数值求和的函数。如果测量代码覆盖时,函数被执行,那么就会有100%的覆盖,但是代码全覆盖并不意味着函数会返回一加一等于二这样的结果。 结对编程或者审阅测试代码可以避免造假。如果你要审阅代码,那么检查微测试代码比检查产品代码更重要。微测试规格体现了开发者的意图。如果微测试质量足够好,那么我们可以相信能通过测试的产品代码也是高质量的代码。 下一集,TDD和Stack Overflow的专家开发者。

    The post 021 代码覆盖丑闻 first appeared on Agile Thoughts.

    8 min
  • 020 TDD破坏者

    Vanilla Pop:看见了没?在写产品代码前先写一小段测试,一切都会非常完美。 Joe:我不知道,我觉得思维上还不太适应这种向后工作的方式。 Vanilla:但这样操作对你来说是很容易的,对吧? Joe:那是自然!我已经从这儿学到了这套方法! Vanilla:(声音听起来不太确定)呃,我们继续结对编程吧。 Joe:你知道吗,我感觉你非常担心的样子。而且,我需要独自工作,不然我会感觉自尊心受伤了。 Vanilla:好的,你都这样说了,那行。 (时间一点点过去了,音乐声配上打字的键盘敲击声。在这天结束的时候,关灯时开关发出了响声,门也砰地一声合上了。) 第二天 Vanilla:我们看看这些测试吧。 Joe:来吧!你会喜欢这些测试的,我还做了一些调整。 Vanilla:呃?我点击测试按钮的时候,停顿了一下,而且…… Joe:(很自豪地说着)弹出了一个对话框! Vanilla:呃…… Joe:是的,这个对话框会询问用户希望往测试中传递什么样的疯狂参数。这样,我就可以用一个测试来取代你的4个测试了。 Vanilla:啊……现在测试时,我需要进行互动才能—— Joe:很厉害不是吗?如果需要进行调试,就都全部准备好了! Vanilla:但是Joe,我并不希望与微测试进行互动。有时候,会有数千个微测试,与它们互动时间上是没法操作的。只需要点击一下,全部的微测试就应该都开始运行了。 Joe:(心碎了)噢!明白了,我来处理吧。 (过了一段时间) Vanilla:为什么今天的测试运行报告比昨天少了一些测试呢? Joe:有些测试不知怎么回事,一直通不过,所以我禁用了一些测试? Vanilla:等一下!你的意思是,我每天都在增加测试,而你开始工作的头几天,你就直接把测试数量减下去了? Joe:这么说,是的。你的测试在我调整了代码之后就不起作用了。 Vanilla:是吗?你应该维护已经提交的测试,不然我们就只能原地踏步。 Joe:但是你把测试设计得太不灵活了。你得同意使用对话框,让用户手动输入测试参数的方法,就像我之前实施的那样—— Vanilla:但是Joe,每个微测试都是针对单一的情景设计的,仅仅就一个情景。这样测试才简单易懂,而且容易维护。 Joe:那如果测试没通过,你希望我怎样处置呢?打开对话框,没错对话框很有用! Vanilla:你需要维护测试,Joe。 Joe:可是我怎样知道哪一部分出了问题呢?是测试还是我的代码? Vanilla:测试的结果会提醒你有情况。这时你需要调查分析,并做出判断:是自己的代码出了问题,还是测试需要更新。 解说:Vanilla Pop正在让组员开始学习TDD。第一个错误,就在于他没有让Joe和他一起结对编程。教育系统培养的开发者习惯自己独立完成任务。而且,很多开发者习惯花费几个小时,自己面对着电脑挣扎,而不愿意与其他同行争执和讨论。这就是我们的本性。这个特性对学习编程其实还是有利的。我们坐在电脑前,独自折腾代码,不断反复,直到变得足够好,最终成功地交付项目。 但还有更好的方式。我们已经不再是学员,而在公司上班的好处,就是这里有很多熟练的开发者。开发者一起工作的时候越多,依靠这种社交方式,一个人的技能就会越快地传递给另一个开发者。如果能实施TDD这样的新流程,速度会明显快得多。结对编程是学会技术实践的好办法,一个秘密武器。不然,Vanilla Pop和初级程序员Joe依靠不断反馈的方式学习,会慢得多。 下一集,代码狗卷入了一场代码覆盖丑闻。

    The post 020 TDD破坏者 first appeared on Agile Thoughts.

    7 min
  • 018 产品负责人不喜欢测试驱动开发 (TDD)

    联系: ​想成为所有管理者争夺的高端开发者吗?想成为带领公司中最好的团队的经理吗?康美国帮助您将软件开发技能或开发人员的管理技巧提升到新的高度,并提供一些有见地见解的建议。 通过邮件跟我联系,康美国将发给您免费的视频,文章和工作表。有时候我会给您发送关于低成本的学习产品,例如电子邮件课程,书籍以及在线研讨会:http://agilenoir.biz/zh/敏捷理念/ 018 产品负责人不喜欢测试驱动开发(TDD) 解说:Vanilla Pop向产品负责人讲述团队在做的TDD。   Horst:Vanilla Pop,你好!你的工作真做得挺好,公司里新的明星员工。你对现在的工作怎么考虑的呢?   VPop:设计冲刺(sprint)计划会议在明天。我主要在为我们团队试验性地实施TDD,而且——   Horst:TDD,是和测试有关是吗?   VPop:没错。微测试。我觉得已经可以向整个团队教授如何实施了。才开始的时候会对开发的速度有些影响,但适应了之后速度就会回升。   (脑海里的声音:会减缓一些速度?他确定这样能行吗?)   Horst:不好意思啊,Jose不是已经在测试这个App了吗?有人在测试,为什么还要另外再测试呢?   VPop:呀,这两种测试是不一样的。Jose所做的是宏测试,有些还是手动的。我们所做的是自动化微测试,只检测代码是否运作正常,而不是产品的功能。   (脑海里的声音:测试代码,而不是功能?到底是什么意思哦?)   Horst:抱歉,但Jose进行的测试,不也是在测试代码吗?不是吗?   VPop:没错,但这些测试会更详尽地测试一小段代码,代码有没有瑕疵会马上显现出来。   Horst:所以,你的意思是Jose的测试速度很慢?   VPop:其实不是。如果说他的测试速度慢的话,主要是慢在我们寻找有问题的代码这一环节。宏测试并不能帮助我们定位代码的问题在哪里。它只能让我们知道代码有问题。   Horst:但是如果你们花费时间,去编写对代码的测试,而我们已经另外有独立测试的时候,听起来有些过度测试的感觉。我更希望你们编写功能性的代码,而让Jose去处理质量控制。 VPop:并不是这样的。如果所有的开发人员都这样做的话,我们可以确保代码零瑕疵。   (脑海里的声音:“零”,他当真说的是零瑕疵吗?他真是疯了!)   Horst:如果所有的开发人员都这样做,他们就是在进行重复的多余的测试,而没有把精力花在编写软件的功能上。不行!我们必须保持更快的速度,我们一定要在市场上占据到需要的位置。产品的功能才是重点!(Horst的口号)   Every business wants features that keep working and don’t want to pay for bug fixes […]

    The post 018 产品负责人不喜欢测试驱动开发 (TDD) first appeared on Agile Thoughts.

    7 min
  • 017 不受架构师青睐的微测试

    联系: ​想成为所有管理者争夺的高端开发者吗?想成为带领公司中最好的团队的经理吗?康美国帮助您将软件开发技能或开发人员的管理技巧提升到新的高度,并提供一些有见地见解的建议。 通过邮件跟我联系,康美国将发给您免费的视频,文章和工作表。有时候我会给您发送关于低成本的学习产品,例如电子邮件课程,书籍以及在线研讨会:http://agilenoir.biz/zh/敏捷理念/ 017 不受架构师青睐的微测试 欢迎在康美国的微店查看这一集的播客注释:https://weidian.com/s/161651986 解说:Vanilla Pop个人在运用TDD有一些新的突破,他已经开始在代码里实施了。问题是,有些和他一起工作的同事不太理解他的新方法。   (A knock. Architect says “enter”. Door closes) (敲了一下门。架构师说了声“请进“。之后门就关上了。) 架构师:我请你来我办公室讨论你的项目。   VPop:哦,是的。有什么没弄好的地方吗?   架构师:我正在审阅你提交的代码,觉得有几处情况。你有变动这些代码的项目编号吗?   VPop:是的,当然有。我写在提交代码的注释里了。   架构师:但是……你的代码里面到处都是变动呢。 啊,你看看,我们有好几个新文件:聚集测试、记录测试和比率测试。你增加了自动测试功能,很漂亮,我很喜欢。但是,项目555439的功能只针对比率文件。你有看过这段代码注释吗?这段注释写得很好,用直白的语言清晰地表达了这些代码的用途。   Pop:那是那是,但——   架构师:你只需要变动一个文件,但是你动了三个,并且还新增了三个测试。其实我不是抱怨新增的这些测试。但你确实不应该变动其它的代码。   Pop:好的,明白——   架构师:毕竟变动越多,漏洞就会越多。我的意思是只动记录这个文件。   Pop:在比率执行的时候,会调用记录。记录会打开网络连接,这样会将我的微测试减缓大约10,000倍。   架构师:当真如此?   Pop:确实这样。通常记录会与一个服务通讯。所以它会等待网络超时,这样测试会花费超过一分钟,而不是一毫秒。所以我才重写了记录,以便它可以利用缓存的内容。我使用TDD方法来重写了代码,所以会多出一个记录测试文件。   架构师:是这样的呢,开始你都没告诉我。那另外的这个类呢?   Pop:它也需要重写——   架构师:重写?   Pop:没错。这样才能改变代码的设计,又不影响它的行为。只有动了其它的几个类,才能确保将Rater同微测试不应该执行的一些操作分开,比如写入数据库、文件系统或者网络这些。   架构师:别忙!意思是你没有写一段整体的系统测试,而是通过额外的代码变动来实现了这一系列微测试,是吗?   VPop:这些微测试执行得很快很快,而且你知道吗,当微测试发现错误时,也就应该知道了有问题的代码大概是在哪里。   架构师:但是一个系统测试可以覆盖数千个微测试。我想要的并不是这些……我其实是希望测试整个系统(想想关于系统的那段话)! […]

    The post 017 不受架构师青睐的微测试 first appeared on Agile Thoughts.

    0 min
  • 016 在不确定性的影响下运行

    联系: ​想成为所有管理者争夺的高端开发者吗?想成为带领公司中最好的团队的经理吗?康美国帮助您将软件开发技能或开发人员的管理技巧提升到新的高度,并提供一些有见地见解的建议。 通过邮件跟我联系,康美国将发给您免费的视频,文章和工作表。有时候我会给您发送关于低成本的学习产品,例如电子邮件课程,书籍以及在线研讨会:http://agilenoir.biz/zh/敏捷理念/ 016 在不确定性的影响下运行 Narrator: 上一集,Code Dog试图阻止Vanilla Pop尝试TDD。现在,让我们看看这是如何影响香草流行体验TDD的能力 (Office sounds, keys clattering, VPop continues doing TDD, while plagued by voices of uncertainty (use echoey voices like in a Hitchcock film.) VPop: 我要怎么再试一次?这有点难。 这个测试库。我想这就是断言的写法。也可能是错的。我怎么知道测试是正确的? 1 Voice (Code Dogs words are haunting VPop): 首先这个测试倒退太多太多了 VPop: 好的。现在就写产品代码。哈。我花了那么多时间写一个测试。我真的很想花一天的时间来编写产品代码。但这不是TDD对吧?但什么是TDD?什么是正确的测试?生命是什么?我觉得很不舒服!怎么回事? 2 Voice: 为什么不编写更多的产品代码呢?我是说谁先写测试? VPop: 好的,好的。集中注意力。(紧张)需要集中注意力。必须集中注意力。只为产品代码写一个存根.。然后运行….那个…测试。 还是不行。 VPop: 呃! (clickt) 点运行测试,做到了! […]

    The post 016 在不确定性的影响下运行 first appeared on Agile Thoughts.

    0 min

About 敏捷理念

From the publisher's feed

康美国帮助您将软件开发技能或开发人员的管理技巧提升到新的高度,并提供一些有见地见解的建议。英文版在(English edition):