代码之家  ›  专栏  ›  技术社区  ›  abyx

如何让初级程序员编写测试?[闭门]

  •  105
  • abyx  · 技术社区  · 17 年前

    我们有一个初级程序员,只是没有编写足够的测试。
    我每两个小时就得唠叨他一次,“你有笔试吗?”

    • 显示设计变得更简单
    • 显示它可以防止缺陷
    • 这个周末,两个团队成员不得不来工作,因为他的代码有一个空引用,他没有测试它

    你知道更多的动机吗?

    24 回复  |  直到 17 年前
        1
  •  128
  •   Stephan    10 年前

    这是其中之一 去做。让你的人 .

    有时候,帮助初级程序员“理解”并从高级程序员那里学习正确技术的最好方法之一就是做一些结对编程。

    1. 这些人一起可以快速、高质量地生成代码。
    2. 如果你的下级成员学到了足够多的知识,能够在上级成员的指导下“获得它”(例如:“好的,在我们继续之前,让我们在测试时为这个函数编写代码。”),那么你投入的资源将是物有所值的。

    也许你的团队中也会有人 Unit Testing 101 由Kate Rhodes所作的演示,我认为这是一个让人们对测试感到兴奋的好方法,如果交付得好的话。

    Bowling Game Kata 这将帮助他们学习测试驱动开发。它是用java编写的,但很容易适应任何语言。

        2
  •  21
  •   RodeoClown    17 年前

    在每次提交之前进行代码审查(即使是1分钟的“我已经更改了这个变量名”),并且作为代码审查的一部分,审查任何单元测试。

    (还有——如果他的作品没有经过测试——为什么一开始就在生产构建中?如果没有测试,不要让它进来,那么你就不必在周末工作了)

        3
  •  20
  •   dmckee --- ex-moderator kitten    17 年前

    就我自己而言,我已经开始坚持将我发现和修复的每一个bug都表示为一个测试:

    1. “嗯,那不对……”
    2. 找出可能的问题
    3. 解决问题
    4. 显示新代码通过

    (我不生活在商业编程环境中,通常是唯一一个从事特定项目的程序员。)

        4
  •  16
  •   Community Mohan Dere    8 年前

    假设我是一个模拟程序员,名叫。。。马可。想象一下,我不久前就毕业了,从来没有真正地写过测试。想象一下,我在一家没有真正执行或要求这样做的公司工作。好啊好的现在想象一下,该公司正转向使用测试,他们正试图让我了解这一点。我会对到目前为止提到的项目做出一些尖刻的反应,就好像我没有对此做任何研究一样。

    怎样才能写得更多,使事情更简单。我现在必须密切关注更多的案件,等等。如果你问我的话,这会让事情变得更复杂。给我确切的细节。

    显示它可以防止缺陷。

    让它成为一种自负的东西,说只有糟糕的程序员才不会。

    @ Justin Standard :在新项目开始时,将初级程序员与您或其他高级程序员配对。

    @ 贾斯汀标准 Unit Testing 101 凯特·罗德斯的演讲。

    我希望看到更多有说服力的文章和其他工具来帮助我认识到这是正确的做事方式。

    @ Dominic Cooney :花些时间分享测试技术。

    啊,这有助于我了解在技术方面对我的期望,它在我的知识袋中放了更多的东西,我可能会再次使用。

    多米尼克·库尼 :回答问题、例子和书籍。

    Adam Hayle :惊喜回顾。

    说什么,你做了一件我完全没有准备的事。我对此感到不舒服,但我会尽力的。我现在会很害怕,并且有点担心这件事再次发生,谢谢。然而,恐吓策略可能奏效,但确实有成本。然而,如果其他方法都不起作用,这可能只是需要的推动。

    @ Rytmis :项目只有在有测试用例时才被视为已完成。

    哦,很有趣。我知道我现在真的必须这么做,否则我什么都做不了。这是有道理的。

    @ jmorris

    眩光,眩光,眩光 -我有机会学习,在支持和帮助下,我可以成为团队中非常重要和实用的一部分。这是我现在的一个障碍,但不会太久。然而,如果我不明白,我知道我会去。我想我会得到的。


    最后,我的团队的支持在这一切中起了很大的作用。让一个人花时间来帮助我,让我养成良好的习惯总是受欢迎的。然后,之后有一个好的支持网将是伟大的。如果有人在事后来过几次,检查一下代码,看看一切是如何进行的,这将是非常感激的,不是在评论中,而是作为一次友好的访问。

    推理、准备、教学、跟进、支持。

        5
  •  12
  •   Rytmis    17 年前

    我注意到很多程序员都看到了在理性层面上进行测试的价值。如果你听过类似“是的,我知道我应该测试一下,但我真的需要尽快完成”,那么你知道我的意思。然而,在情感层面上,他们觉得只有在编写真正的代码时才能完成某些事情。

    只有 衡量某件事情何时“完成”的方法,从而给他们编写测试的内在动机。

    不过,恐怕这要比实际困难得多。你会听到很多这样的借口:“我真的很忙,我稍后会重写/重构它,然后添加测试”——当然,后续工作从未发生过,因为令人惊讶的是,它们是 下个星期也一样忙

        6
  •  9
  •   Mark Harrison    17 年前

    下面是我要做的:

    • 接下来。。。“完成了吗?太好了!首先让我们看看驱动您开发的测试。哦,没有测试?完成后请告诉我,我们会重新安排查看您的代码。如果您需要帮助制定测试,请告诉我,我会帮助您。”

        7
  •  6
  •   Aaron Digulla    16 年前

    他已经这么做了。真正地他只是不把它写下来。不相信?观察他完成标准开发周期:

    • 编译它
    • 编写下一段代码

    第三步是测试。他已经做了测试,他只是手工做。问他这个问题:“你怎么知道明天的代码仍然有效?”他会回答:“代码太少了!”

    当他没有答案时,问:“当一个改变打破了昨天的工作时,你希望你的程序如何告诉你?”

        8
  •  5
  •   Community Mohan Dere    8 年前

    作为一名初级程序员,我仍在努力养成编写测试的习惯。很明显,养成新习惯并不容易,但考虑到是什么让这对我起作用,我必须对代码审查和指导/结对编程的评论加上1。

    也许还值得强调测试的长期目的:确保昨天有效的东西在今天、下周和下个月仍然有效。我之所以这么说,是因为在略读答案时,我没有看到有人提到这一点。

    使代码更好。 因为这样他的信心就不太可能受到损害。这很重要。另一方面,知道自己知道的太少也是如此。

    编辑:[ Justin Standard ]

    不要贬低自己,你要说的几乎是对的。

        9
  •  4
  •   Adam Haile    17 年前

    坦白地说,如果你不得不 为了让他做点什么付出了很多努力,然后你可能不得不接受这样的想法:他可能不适合球队,可能需要离开。现在,这不一定意味着解雇他。。。这可能意味着在公司里找一个更适合他的地方。但是如果没有别的地方…你知道该怎么做。

    我假设他也是一名相当新的员工(<1年),可能最近刚从学校毕业……在这种情况下,他可能不习惯公司环境中的工作方式。像这样的事情,我们大多数人在大学里都可以侥幸逃脱。

    我知道,你可能不想这样做,因为这不是官方的。。。但我认为你有理由这么做,而且这可能比解雇他和招募新人要便宜得多。

        10
  •  4
  •   TK.    17 年前

    作为一名初级程序员,我认为我可以揭示当我发现自己处于与您的初级开发人员类似的情况时的情况。

    当我刚从大学出来的时候,我发现它让我无法应付现实世界。是的,我知道一些JAVA基础知识和一些哲学(不要问),但就是这样。当我第一次得到我的工作时,至少可以说有点令人畏惧。让我告诉你,我可能是世界上最大的牛仔之一,我会在没有评论/测试/文档的情况下,拼凑出一个小的bug修复/算法,然后把它送出去。

    我很幸运地受到了一位善良而有教养的人的监督 非常

    令人高兴的是,2年后,我希望我的一些同事甚至会认为我是一个普通的程序员。

    带回家点

    1. 大多数大学都不善于让学生为现实世界做好准备
    2. 配对编程真的帮助了我。这并不是说它会帮助所有人,但它对我起了作用。
        11
  •  3
  •   Jeff    17 年前

    谁知道呢,他们甚至可能想出比你的团队目前使用的技术更好的方法。

        12
  •  2
  •   jsmorris    17 年前

    如果初级程序员或任何人看不到测试的价值,那么就很难让他们去做。

    我会让初级程序员牺牲他们的周末来修复这个bug。他的行为(或缺乏)并没有直接影响到他。此外,要清楚地表明,如果他不提高自己的测试技能,他将不会获得晋升和/或加薪。

    最后,即使有你所有的帮助、鼓励和指导,他也可能不适合你的团队,所以让他去寻找一个真正得到他的人。

        13
  •  2
  •   Orion Edwards    17 年前

    我支持Rodeo小丑关于代码检查每个提交的评论。一旦他做了几次,他就会养成测试东西的习惯。

    我不知道你是否需要阻止这样的提交。

    注:你 真正地 thunderbird colored-diffs addon 如果你打算这么做。

    我的老板或我自己(两名“高级”程序员)最终会阅读提交的内容,如果有任何类似“你忘了添加单元测试”的内容,我们只需轻弹一封电子邮件或去与此人聊天,解释他们为什么需要单元测试或其他什么。其他人也被鼓励阅读提交,因为这是一个很好的方式来了解正在发生的事情,但是初级开发人员不会评论太多。

    注:我们有2名“高级”开发人员和3名初级开发人员。这可能无法扩展,或者您可能需要与更多开发人员一起稍微调整流程。

        14
  •  2
  •   Brian Leahy    17 年前

    教导他/她是他的导师的责任。你教他/她如何测试的情况如何。你和他在一起吗?大三学生很可能不知道如何为xyz设置一个好的测试。

    作为一名刚毕业的大三学生,他知道许多概念。一些技巧。一些经验。但归根结底,大三学生都是有潜力的。几乎每一个功能,他们的工作,将有一些新的,他们从来没有做过。当然,大三学生可能在课堂上为一个项目做了一个简单的状态模式,打开和关闭“门”,但从来没有实际应用过这些模式。

    他/她只会和你的教学水平一样好。如果他们能够“直接得到”,你认为他们一开始会担任初级职位吗?

    根据我的经验,大三学生被雇佣,承担的责任几乎与大四学生相同,但他们的工资较低,当他们开始步履蹒跚时,就会被忽视。原谅我,如果我看起来很痛苦,那是因为我很痛苦。

        15
  •  2
  •   joel.neely    17 年前
    1. 将“编写暴露错误的测试”作为修复错误的先决条件。
    2. 在签入代码之前,需要一定程度的覆盖率。
    3. 找到一本关于测试驱动开发的好书,并用它来展示测试优先如何加快开发。
        16
  •  2
  •   Olie    17 年前

    很多心理学和有用的“指导”技巧,但老实说,这只能归结为“如果你还想有工作,明天就写测试。”

    因此,如果有人拒绝做他们的工作,向他们解释明天他们可以呆在家里,你会雇佣一个做这项工作的人。

    再说一次,如果你认为这是必要的,你可以轻轻地做这一切,但很多人只是需要一记沉重的耳光 现实生活

    祝你好运

        17
  •  2
  •   Steven Evers    16 年前

    此外,在他担任该职务时,提出一个挑战:编写测试,以a)在当前代码上失败a)满足软件的要求。希望它能让他创建一些可靠而彻底的测试(改进项目),并使他在重新集成到核心开发中时能够更好地编写测试。

        18
  •  1
  •   Dominic Cooney    17 年前

    如果你的同事缺乏编写测试的经验,那么他或她可能在简单的情况下测试有困难,这表现为测试不充分。以下是我将尝试的:

    • 主动回答有关测试的问题。
    • 如果有特别适合您团队测试理念的书籍,请给他或她一本。如果您的代码评审反馈或讨论参考了这本书,那么他或她就有了一条线索可以学习和遵循,这可能会有所帮助。

        19
  •  1
  •   Brian Leahy    17 年前

    @杰斯莫里斯

    有一次,我的高级开发人员和“架构师”在电子邮件中斥责我和一名测试人员(这是我大学毕业后的第一份工作),因为他们没有在前一天晚上熬夜,完成了如此“简单”的任务。我们已经讨论了一整天,在晚上7点就结束了。从那天午饭前11点开始,我就一直在痛打,并且至少两次缠着我们团队的每个成员寻求帮助。

    我回应并抄送了团队:

    “那么你辞职了?”

        20
  •  1
  •   Jérôme Radix    17 年前

    在源存储库上:在每次提交之前使用钩子(例如SVN的预提交钩子)

    在集成服务器上,使用测试覆盖率工具编译所有内容并定期检查测试覆盖率。如果代码的测试覆盖率不是100%,请阻止开发人员的任何提交。他应该向您发送涵盖100%代码的测试用例。

    只有自动检查才能在项目上很好地扩展。你不能用手检查所有的东西。

    记住:人们从不做你期望的事,他们总是做你想做的事。

        21
  •  1
  •   dennisjbell    17 年前

    首先,正如大多数受访者所指出的,如果这个人看不到测试的价值,你就无能为力,你已经指出你不能解雇这个人。然而,失败在这里不是一种选择,那么你能做的几件事呢 可以

    如果您的组织足够大,可以有6个以上的开发人员,我强烈建议您设立一个质量保证部门(即使只需要一个人)。理想情况下,测试人员与开发人员的比例应为1:3-5。关于程序员的事情是。。。他们是程序员,不是测试人员。我还没有采访过一位被正式教授过适当QA技术的程序员。

    此外,犯错误的程序员可能不会发现缺陷,因为它通常不是语法错误(那些在编译时被发现),而是逻辑错误——当他们编写测试和编写代码时,同样的逻辑在起作用。不要让开发代码的人测试代码——他们会发现比其他人更少的bug。

    一个稍微不那么报复的方法是让这个人做他们擅长的事情(我假设这个人被聘用是因为他们在工作的编程部分有能力),然后雇佣一两个测试人员来做测试(大学生通常有实习或“合作”条件,喜欢曝光,而且价格便宜)

    旁注:最终,您会希望QA团队向QA总监报告,或者至少不向软件开发经理报告,因为让QA团队向经理报告,而经理的主要目标是完成产品是一种利益冲突。

    如果您的组织小于6个,或者您无法创建一个新团队,我建议您使用配对编程(PP)。我不是所有极限编程技术的彻底皈依者,但我绝对相信成对编程。然而,配对编程团队的两个成员都必须尽心尽力,否则根本不起作用。他们必须遵循两条规则:检查员必须完全理解屏幕上编码的内容,或者他必须要求编码者解释;编码员只能对他能解释的内容进行编码——不能容忍“你会看到”或“相信我”或挥手。

    若PP不适合你们,那个么TDD是你们最好的选择,但前提是它是字面意义上的。测试驱动开发意味着您首先编写测试,运行测试以证明它们确实失败,然后编写最简单的代码使其工作。取舍是,现在您(应该)拥有数千个测试的集合,这些测试也是代码,并且与生产代码一样可能包含bug。老实说,我不太喜欢TDD,主要是因为这个原因,但它对许多宁愿编写测试脚本而不愿编写测试用例文档的开发人员来说是有效的——有些测试总比没有好。将TDD与PP结合起来,可以更好地实现测试覆盖,减少脚本中的bug。

    如果所有其他方法都失败了,让程序员像一个发誓罐一样——每次程序员破坏构建时,他们都必须将20美元、50美元、100美元(无论对您的员工来说是多少痛苦)放入一个罐中,然后捐给您最喜欢的(注册的!)慈善机构。在他们还清之前,避开他们:)

    别开玩笑了,让程序员编写测试的最好方法就是不要让他编写程序。如果你想要一个程序员,请雇佣一个程序员——如果你想要测试,请雇佣一个测试人员。12年前我作为一名初级程序员开始做测试,它成为了我的职业道路,我不会用它来换取任何东西。一个坚实的质量保证部门,经过适当的培养,并被赋予改进软件的权力和授权,其价值与开发人员最初编写软件的价值一样。

        22
  •  0
  •   Charles Duffy    17 年前

    这可能有点无情,但你描述情况的方式听起来好像你需要解雇这个家伙。或者至少明确表示:拒绝遵循房屋开发实践(包括写作测试)

        23
  •  0
  •   axs6791    17 年前

    初级工程师/程序员不花很多时间来设计和执行测试脚本的主要原因是,大多数CS认证对此要求不高,因此其他工程领域将在大学课程中进一步涵盖,如设计模式。

    根据我的经验,让初级专业人员养成这种习惯的最好方法是明确地将其作为过程的一部分。也就是说,当估计迭代应该花费的时间时,设计、编写和/或执行案例的时间应该包含在这个时间估计中。

    最后,审查测试脚本设计应该是设计审查的一部分,实际代码应该在代码审查中审查。这使得程序员有责任对他/她编写的每一行代码进行适当的测试,高级工程师和同行有责任对编写的代码和测试提供反馈和指导。

        24
  •  0
  •   abyx    16 年前

    你最好的办法是有一个 耐心的高级开发人员和他坐在一起,做一些结对编程。一直坚持到他学会为止。或者不学习,在这种情况下,您需要将他重新分配到一个更适合他的任务,因为您最终会让真正的开发人员感到沮丧。

    并不是每个人都有相同水平的天赋和/或动机。开发团队,甚至是敏捷团队,都是由“A团队”和“B团队”中的人员组成的。A团队成员负责设计解决方案、编写所有非琐碎的生产代码,并与业务所有者进行沟通——所有需要跳出框框思考的工作。B团队处理诸如配置管理、编写脚本、修复跛脚bug和进行维护等工作——所有这些工作都有严格的程序,对故障的影响很小。