我们有一个小型程序,只是不会写足够的试验。
我唠叨他每两个小时,"你有没有书面的测试吗?"
我们已经试过:

  • 显示出,在设计变为更简单
  • 显示出它可以防止缺陷
  • 使它成为一个自我的东西只是说糟糕的程序不
  • 这个周末2队员前来工作,因为他的代码有一个空的参考和他没有测试它

我的工作需要高质量的稳定代码,并且通常每个人都得到它并没有必要推测试通过。我们知道我们可以让他写的试验,但我们都知道有用的测试那些写入当你进入它。

你知道的更多的动机?

有帮助吗?

解决方案

这是一个 最难的事情 要做。让你的人来 得到它.

有时候最好的方式之一,以帮助初级程序员'get it'和学习的权利的技术,从老年人是做了一些对方案编制。

试试这个:在即将开展的项目,对初级的人与自己或另一名高级程序员。他们应该共同努力,轮流"驱动"(正在一个打字在他们的键盘)和"辅导"(找过肩的驱动程序,并指出建议,错误,等等,因为他们去).它可能看起来像一个废弃的资源,但是你会发现:

  1. 这些家伙在一起,可能产生的代码足够快速和高质量。
  2. 如果你的小家伙学习足够"得到它"有一个老家伙指挥他沿着正确的道路(例如。"好了,现在在我们继续之前,让我们写在测试这一功能。") 这将是值得的资源承诺。

也许还有某人在你的小组得到的 单元测试101 介绍通过凯特*罗德,我认为它的一个好办法让人兴奋的测试,如果交付。

另一件事你能做的就是有你的。开发实践的 保龄球游戏卡塔 这将帮助他们学习试验驱动的发展。它是在爪哇,但可以很容易地适合于任何一种语言。

其他提示

有一个代码审查之前的每一提交(即使这是一个1分钟"我已经改变了这个变量名称"),并作的一部分代码的审查,审查的任何单元的测试。

不要签署的承诺,直到测试。

(也是-如果他的工作是不是测试-为什么它在一个生产建立在首位?如果这不是测试,不要让它在那么你就不必工作的周末)

为我自己,我已经开始坚持要求每一个错误我发现和解决可表示为一种试验:

  1. "嗯,那是不对的..."
  2. 找到可能的问题
  3. 写一个测试,表明这种失败的代码
  4. 解决问题
  5. 表明,新的码的通行证
  6. 循环,如果原来的问题仍然存在

我尝试这样做,甚至在搞的东西,我会完成在大约同一时间,只有一部分测试。

(我不住在一个商业节目编排的环境,并往往是唯一的编码工作一个特定的项目。)

想象一下我是一个模拟程序员,名叫...马可。想象一下我有学校毕业不久之前,并没有编写试验。想象一下我在一个公司工作,这真的不能强制或要求。OK?好!现在想象一下,该公司被转换到使用测试,并且他们想让我内这一点。我会给点表露无疑反应项目所提到的这么远,如果我没有做任何研究。

让我们这个开始的创造者:

显示出,在设计变为更简单。

怎么可以写的更多,做出简单的事情。我现在必须密切关注越来越多的情况,等等。这使得它更加复杂,如果你问我。给我固体细节。

显示出它可以防止的缺陷。

我知道这一点。这就是为什么它们被称为测试。我的代码是很好,我检查了它的问题,所以我没有看到那些测试会有所帮助。

使它成为一个自我的东西只是说糟糕的程序没有。

哦,所以你觉得我是个糟糕的程序,只是因为我不做尽可能多的使用测试。我侮辱和积极地讨厌你。我宁愿要援助和支持的说法。

@贾斯汀标准:在开始的新的展望对青年人与自己或另一名高级程序员。

哦,这是非常重要,因此资源将用于确保我看到的事情是如何做的,并有一些协助我的事情是如何做。这是有帮助的,而且我可能只是开始做更多。

@贾斯汀标准:阅读 单元测试101 介绍通过凯特罗得岛。

啊,这是一个令人感兴趣的介绍,这使我考虑的测试。它敲定一些要点,我应该考虑,它可能动摇我的观点。

我喜欢看到更多的引人注目的文章和其他工具,以协助我得到符合为这是正确的方式做事情。

@多米尼克*库尼:花一些时间和分享测试技术。

啊,这有助于我了解什么是对我的期望尽的技术,和它把更多的项目在我的包里的知识,我可能再次使用。

@多米尼克*库尼:回答问题,例和书籍。

有一点的人(人员)回答的问题是有帮助的,它可能让我更有可能尝试。很好的例子是巨大的,它给我一些目标,东西看起来供参考。书有关这一直是伟大的参考。

@亚当海:惊喜审查。

说什么,你弹的东西,我完全没有准备。我感觉不舒服,但将尽我的最好的。我现在害怕和轻度担心这来了再次谢谢你。然而,恐吓策略可能会有工作,但它的确有成本。然而,如果没有别的工作,这也可能只是推动就是需要的。

@Rytmis:项目只考虑这样做时他们已经测试的情况。

哦,有趣。我看我们真的有必要现在这样做,否则我没完成东西。这是有道理的。

@jmorris:摆脱/牺牲。

瞪,瞪,瞪 -有机会的话我可能会学习,并与支持和援助,我可以成为一个非常重要的和功能的部队。这是我的一个障碍,但它不会长久。然而,如果我只是不懂,我明白,我会去。我想我会得到它。


最后,支持我的团队发挥了很大一部分,在这一切。有一个人把他们的时间,以协助,并得到我开始成良好的习惯永远是受欢迎的。然后,之后有一个良好的支持网络将是巨大的。它总是会被理解为有别人来过几次之后,和过去一些代码,看到一切都是流动的,不是在审查本身,但多作为一个友好的访问。

推理,编制教学,后续行动,支持。

我注意到,很多程序价值的测试在一个合理的水平。如果你已经听说过类似的事情"是啊,我知道我应该试验,但我真的需要得到这个迅速完成"然后你知道我什么意思。然而,在情感层面上,他们感到他们得到的东西做的,只有当他们正在编写的真正的代码。

我们的目标,那么,应该以某种方式获得他们理解,检验是在实际上 的方式来衡量时,什么是"完成",并因此给他们的内在激励写测试。

我害怕这是一个很大的难度比它应该是,虽然。你会听到很多借口沿线的"我在一个真正快点,我重写/"重构"这个以后再添加测试的"--当然,跟踪不会发生,因为,奇怪的是,他们 只是为下周的繁忙.

这是什么我都会做的事:

  • 第一时间了..."我们要做到这项目的联合。我要写的测试和你会写的代码。注意到我是如何编写测试,因为这就是我们在这里做事的,这就是我对你的期望."

  • 以下是..."你在做什么?伟大的!第一,让我们来看看测试你的驾驶的发展。哦,没有测试?让我知道当那样做,我们将重新安排看着你的代码。如果你需要帮助制订测试让我知道,我会帮助你。"

作为一个初级程序员,我仍然想让成写作的习惯的测试。这显然是不容易拿起新的习惯,但在思考什么会做这项工作对我来说,我必须+1的意见,有关代码的评论和指导/对方案编制。

它也可能值得强调的长期目的测试:保证什么昨天工作仍然是工作的今天,下个星期和下个月。我只能说,因为在撇的答案,我没有看到提及。

在这样做的代码评论(如果你决定要这样做),请确保您的年轻dev知道这不是把他放下来,这是关于 使代码的更好。 因为这样他的信心不太可能得到损坏。这是重要的。另一方面,所以知道是怎么一点,你知道。

当然,我真的不知道任何东西。但是我希望的话已经很有用的。

编辑:[贾斯汀标准]

不要把自己放下来,你有什么要说的是,相当多的权利。

在你的一点有关代码的评论:你会发现是,不仅将青少年开发学习的过程,但是这样会的评论。每个人都在一个码审查的学习如果你让一个协作进程。

坦率地说,如果你有把 努力让他做一些事然后你可能要面对认为他可能只是不适合的团队,并可能需要走。现在,这并不一定意味着雇他...这可能意味着找到别的地方在该公司他的技能更适合。但是,如果没有别的地方...你知道该怎么做。

我假设他还是一个相当的新聘用(< 1年)和也许最近的学校...在这种情况下,他可能不会习惯的事物如何运作在一个企业环境。这样的事情大多数我们可以摆脱大学。

如果是这种情况下,有一件事我已经找到工作是一种"惊喜的新聘用审查。" 没关系如果你以前从来没有做过...他不会知道这一点。只要让他坐下来告诉他你要去他的表现,并显示他一些真正的数字...把你的正常的审查表(你有一个正规审查程序的权利?) 和更改标题如果你想要这样看起来正式和表明他的立场。如果你告诉他在一个非常正式设置不做测试是不会不利地影响其业绩评级而不仅仅是"唠唠叨叨"他说,他希望能得到这一点。你得告诉他,他的行动将在实际上影响他被它付出明智的或以其他方式。

我知道,你可能想要远离这样做是因为它不是正式的...但我觉得你是在合理的范围内做到这一点,它可能会是一个很便宜于具有开火他,并招募新的人。

他已经这样做。真的。他只是不把它写下来。不相信吗?看着他走过的标准的发展周期:

  • 写一段代码
  • 编译它
  • 跑来看看它做什么
  • 写下代码

第3步是测试。他已经做的测试,他只是做了手工。问他这个问题:"你怎么知道的明天,代码从今天仍然有效?" 他会回答:"它是这样一个小量的代码!"

问:"如何关于下星期吗?"

当他没有得到答案,问:"你会怎么喜欢你的节目来告诉你什么时候的变化符的东西,昨天工作?"

那是什么单元的自动试验所有有关。

作为一个初中程序员自己,我认为,揭露它是什么样子的时候我发现自己在一个类似的情况给你的小型开发人员。

当我第一次出来的uni,我发现,它已严重联合国配备我来处理真实的世界。是的,我知道一些JAVA基础的某些理念(并不要求),但是它。当我第一次有我的工作就是一个有点令人生畏。让我告诉你我可能是最大的一个牛仔的时候,我会劈在一起的一个小错误的修复/算法有没有评论/检测/文件和运出门。

我很幸运足够的监督下的一种 非常 病人的高级程序员。幸运的是我,他决定坐下来与我和花费1-2周要通过我非常侵togethor代码。他会解释我走错了,细节c和指针(男孩一样,混淆了我!)。我们设法编写一个很体面的类/模块中的大约一个星期。所有我能说的是,如果高级开发并没有投入时间来帮助我沿着正确的道路上,我可能不会已经持续了很长时间。

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

把家里点

  1. 大多数大学都非常坏的学生准备用于现实世界
  2. 配对的程真正帮助我。那不是要说,这将有助于每个人,但它为我工作。

将其分配给项目,不需要"高质量的稳定代码"如果那是你的关切和让jr。开发人员会失败。他们是一个'在上个周末来解决他们的错误。午餐很和谈软件开发做法(不讲座,但讨论).在时他们将获取和开发的最佳做法做到他们的任务分配。

谁知道,他们甚至可能拿出更好的东西比的技术团队目前使用。

如果初级程序员,或者任何人,不见的价值测试,然后,它将难以获得他们这样做...的时期。

我会做的初级程序员牺牲他们的周末来解决这一错误。他的行动(或缺乏有的)都没有影响到他直接。此外,使它明显,他不会看到促进和/或支付的增加,如果他不提高自己的技能测试。

最后,即使有所有你的帮助、鼓励、指导、他可能不是一个适合你的队伍,让他去找一个人不会得到它。

我的第二RodeoClown的评论对代码审查的每一提交。一旦他做了一个公平的几次他会的习惯测试的东西。

我不知道如果你需要阻止提交的那样。在我的工作场所的每个人都有自由承诺的一切,所有SVN提交信息(有差异)通过电子邮件发送给该小组。

注:你的 真的 想要的 雷鸟色差异的插件 如果你打算这样做。

我的老板或自己(2'高'的程序员)将结束读通过的承诺,并且如果有任何东西像"你忘了补充单元的测试"我们只是甩尾一个电子邮件和聊天的人,解释为什么他们需要单元测试或什么的。其他人都是鼓励阅读的承诺,因为这是一个非常好的方式看到了什么,但该小型开发者没意见那么多。

你可以帮助鼓励人们习惯这可以通过定期地这样说的"嘿,鲍勃,你有没有看到提交我今天上午,我找到了这个绝招,你可以做的等等等等等什么,阅读提交,看看它是如何工作!"

NB:我们有2个'高'的开发者和3名初级。这可能不会规模,或者可能需要调整的过程,一位与更多的开发。

  1. 编码的复盖范围一部分的评论。
  2. 使"编写一个试验,暴露了错误"的一个先决条件的固定一个错误。
  3. 需要一定水平的复盖代码之前可以进行检查。
  4. 找一本好书在试验驱动的发展和使用以显示如何测试一可以加速发展。

很多心理和有帮助的"指导"技术,但是,在所有诚实,这仅仅归结为"编写测试如果你想仍然有工作,明天。"

你可以睡沙发这在任何方面你认为是适当的、恶劣的或软的,没关系。但事实是,编程人员不支付给仅仅一起扔码和检查它在--他们支付仔细一起把代码,然后放一起试验,然后测试他们的代码,然后检查了整个事情。(至少是这么听起来像从你的描述。)

因此,如果有人要拒绝去做他们的工作,向他们解释说,他们可以留在家里,明天,你会租人将做的工作。

再次,你可以做到这一点轻轻的,如果你认为这是必要的,但很多人只是需要一个大的难拍的 生活在现实世界, 然后你就可以去做他们一个忙,给他们。

好运气。

改变他的工作描述为一段时间来仅仅将编写测试和维护测试。我已经听说许多公司做的这个全新经验的人一段时间,当他们开始。

此外,问题是一个挑战,同时他就在那角色:编写测试,将a)无法在目前的代码a)满足要求的软件。我们希望它将导致他创造了一些坚实和彻底的测试(改善项目),并使他更好地在编写测试时,他重新融入核心的发展。

编辑>fulfull要求软件的意义,他不只是写测试故意破解密码时代码从来没有打算或需要采取试验的情况下考虑在内。

如果你的同事缺乏经验编写测试也许他或她是有困难的测试超越了简单的情况,而是表现为不充分的测试。这里是我会尝试:

  • 花一些时间和分享试验技术,如依赖注射,在寻找边缘情况,并与你的同事。
  • 提供给回答问题有关的测试。
  • 做代码审查的测试。问问你的同事,以审查改变你是示例性的良好测试。看看他们的意见来看,如果他们真的阅读和理解你的测试的代码。
  • 如果有书籍,适合特别是与你的团队是测试的理念得到他或她的一份。它可能会帮助如果你的代码审查的反馈或讨论的参考书,所以他或她有一个线程取和遵循。

我不会尤其强调耻辱/内疚因素。值得指出,检测是一个广泛采用的良好做法,编写和维护良好的测试是职业礼貌让你的队友不需要花费他们的周末,在工作,但是我不会痛斥的那些点。

如果你真的需要"强硬"然后研究所的公正系统;没有人喜欢的感觉他们被挑出来。例如你的团队可能需要代码要保持一定的水平测试的复盖率(能够被耍花招,但至少能够自动化);需要新的代码有测试;需要审查人员考虑质量测试时代码的审查;等等。建立这一系统应该从团队的协商一致。如果你主持讨论小心你可能会发现其他根本原因你的同事的测试并不是你所期望的。

这是他的导师负责教导他/她。你是如何教他/她如何考试。你是对的他吗?青少年更有可能不知道怎么设置了一个很好的测试xyz。

作为一个初级freshout的学校,他知道许多概念。某些技术。一些经验。但在结束时,所有初中的潜力。几乎每一个特征,他们的工作,将有新的东西,他们从未做过的事情。确保青少年可以做一个简单的国家模式的一个项目类,打开和关闭的"门",但从来没有一个真实世界的应用程序的的模式。

他/她将只是不如你如何教。如果他们能够"只要得到它"你认为他们会采取的一个初中的位置在哪里?

以我的经验,青少年被雇用,并鉴于几乎相同的责任为老年人,但是只支付较小,然后被忽略的时候,他们开始动摇。原谅我,如果我似乎苦,这是因为我。

@jsmorris

我曾经有高级开发和"建筑师"指责我和一个测试(这是我第一次作业的大学)在电子邮件对不住晚,完成这样一种"简易的"任务的前一天晚上。我们已经在它的所有一天,并呼吁它停止在晚上7点,我已经颠簸由于上午11点午餐之前的那一天,已经缠着的每一个成员我们的团队的帮助至少两次。

我的回答,并抄送队:"我已经失望你为一个月。我从来没有得到帮助的团队。我会在咖啡店街如果你需要我。我很抱歉我不能调试的参数12,800线的方法,只是对一切都依赖。"

在冷却后在咖啡馆一个小时,我又回办公室,抓住我的废话离开了。几天后他们叫我问我是来,我说我会的但我有一次采访中,也许明天。

"因此你放弃吗?"

你源库:使用挂钩,在每次提交(预先承诺挂钩SVN例如)

在这钩,检查是否存在至少一个使用情况的每一个方法。使用一个公约》的单元测试的组织,你可以容易地执行通过前的承诺挂钩。

在一个一体化服务器上编译的一切和检查regularely测试的复盖范围使用测试的复盖范围的工具。如果测试的复盖面不是100%,一个代码,阻止任何提交的开发。他应该送你的测试情况,涵盖100%的代码。

只自动检查的可能规模以及在一个项目。你不能检查一切手。

开发者应该有一个意味着如果要检查他的测试案例的复盖100%的代码。这样,如果他没犯100%的测试码,这是他自己的过错,而不是"对不起我忘记了"故障。

请记住:人们永远不会做什么你期望,他们总是做什么你检查。

首先,像大多数答复者在这里指出,如果这个家伙看不到的价值测试,这里没有什么可以做的,你已经指出的,你不能开火的家伙。然而,失败不是选择在这里,那么几件事你 可以 做什么?

如果您的组织足够大,有超过6开发,我强烈推荐一个具有质量保证部门(即使只有一个人开始)。理想情况下,应有一个比1的比率测试的3-5的开发。关于程序是...他们是程序员,不测试。我还没有面试一个程序已经正式教授的适当QA技术。

大多数组织使致命的缺陷的分配测试角色的新的聘用,该人与少量暴露于你的码--理想的是,高级开发人员应该移到QA作用,因为他们有经验的代码,(希望)已开发了一种第六感对于代码的气味和失败点,可以作物。

此外,该程序员,犯了一个错误是可能不会发现的缺陷,因为它通常不是一个语法错误(那些得到在编),但是逻辑错误的--同样的逻辑是在工作的时候,他们编写测试作为当他们写的代码。没有人发达代码测试,代码-他们会发现少错误比任何人都会。

在你的情况下,如果你可以得到重新定向的工作的努力,使这个新家伙的第一个成员你QA队。让他读"软件的检验在现实的世界:改善的过程",因为他显然将需要一些培训在他的新作用。如果他不喜欢它,他会退出,你的问题仍然是解决的。

一个稍微不那么复仇的办法是让这个人做什么,他们都是好时(我假设此人得到雇用,因为他们实际上主管在编程工作的一部分),并聘请一个测试或两个来做测试的(大学的学生往往有实习或"合作社"的条款,将爱的曝光,并且价格便宜)

附注:最终,你会想要的质量保证团队报告的质量保证董事,或者至少不要软件开发人员管理,因为具有质量保证小组报告的管理者的主要目标是得到我们的产品所做的是一个利益冲突。

如果您的组织小于6个,或者你不能摆脱与创建一个新的团队,我建议成对编程(PP)。我不是一个总转换的所有极端的编程技术,但是我绝对相信,在配对方案编制。然而,这两个成员的配对的程团队必须用专用的,或者它只是不起作用。他们必须遵循两条规则:检查专员有充分理解什么是被编码或屏幕上他已经要求编码解释;编码只能代码什么他可以解释-不,"你会看到的"或"相信我"或手挥舞着会被容忍。

我只是建议PP如果你的团队是可以做到这一点,因为,就像测试,没有量的欢呼,或威胁会劝说几个自我充满了内向的人一起工作,如果他们不觉得舒适这样做。然而,我发现之间的选择的写详细的功能规格和做码评论与配对的程,PP通常为胜出。

如果PP是不是你,然后有效的你最好的选择,但只有当其所采取的从字面上。测试驱动发展的意思是你写的测试,第一次运行测试,以证明他们实际上做失败,然后编写最简单的代码,使它的工作。贸易是现在你(应)有一个收集的数以千计的测试,这也是代码,只作为可能产生的代码包含的错误。我会说实话,我不是一个大风扇使用,主要是因为这个原因,但它的工作对于许多开发人员会而编写测试脚本于试验的情况下文件--的一些测试是比没有好。几TDD PP为一个更好的可能性测试的复盖范围和少错误的脚本。

如果一切都失败了,有的程序员等同的一个发誓罐子-每次程序中断的建立,他们必须投入20美元,50美元,100美元(不管是适度的痛苦的对您的工作人员)进入一个罐子里去你最喜欢的(注册!) 慈善机构。直到他们支付的,他们顺:)

玩笑归玩笑,最好的方式得到你的程序员编写的试验是不要让他程序。如果你想要一个程序,聘请一名程序员--如果你想测试,聘请一个测试仪。我开始作为一个初级程序员,在12年前做试验,它变成我的职业生涯的路径,并且我也不会贸易它任何东西。固体质量保证部门,是正确的培养和赋予的权力和任务,以改善该软件只是作为宝贵的作为开发者编写软件在第一位。

这可能有点无情,但你的方式描述的情况,这听起来你需要这家伙。或者至少使其清楚的:拒绝按照内部开发的做法(包括编写测试) 在检查车码,其他人已经清理最终将得到你被解雇了。

主要原因初级工程师/程序员不要采取很多时间来设计和执行测试脚本,是因为大多数CS证不重要,因此,其他地区的工程所涵盖还在大学课程,例如设计的模式。

以我的经验,最好的方式获得的初级专业人员的习惯,就是让它过程的一部分明确。这就是,当时估计的时间一个迭代应该采取,时间的设计、编写和/或执行的情况下应该被纳入这一次估计。

最后,审查测试脚本的设计应的一部分设计审查,并且实际的代码应该进行审查的码的审查。这使得程序员承担责任,做正确的测试的每一行代码,他/她写的是,高级工程师和同龄人负责提供反馈和指导意见的编码和测试写的。

基于你的评论,"显示,设计变为更简单的"我假设你们的实践影响。做一个代码审查之后,事实是不会的工作。整个事情对方,这是一个设计并不是一个测试的理念。如果不是他写的测试的一部分设计的,你不会得到很多益处编写测试之后的事实,尤其是从初中开发。他最终会缺少一个整体很多角的情况下和他的代将仍然能蹩脚的。

你最好的赌注是有一个 非常 病人的高级开发人员坐下来与他和做一些对方案编制。而只要保持,直到他学习。或不学习,在这种情况下需要重新分配他的任务,他更适合,因为你只会令人沮丧,你真的开发。

不是每个人都有相同水平的人才和/或动机。开发团队,甚至敏捷的,是由人在"A-Team"人"的B小组"。一个团队的成员是一个人的建筑师的解决方案,编写所有的不平凡的生产码,并与企业的业主-所有的工作,需要思维的条条框框。B队处理的事情样的配置管理,编写脚本,固定跛脚的错误,并且维护工作的所有工作,有严格的程序,具有小型后果的失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top