(否“相关问题”似乎生来就是这块,所以这里去。)
我在生产代码的工作。 吵什么用户是很难做到的,有时不可见。 如果销售不能看到它,这是一个外部成本给他们,他们会反对它,除非有很大的理由。
多少单元测试是一件好事吗? 如果测试每个类,每一个方法,你的当前版本将需要更长的时间,可能要长得多。 如果你没有进行测试,维护,今后将需要更长的时间,可能要长得多的bug修正和新功能的原因问题,你没有预见,并且单元测试本来是可以赶上。
你如何找到一个健康,合理的平衡?
销售没有运行的过程中,但他们肯定有投入,并应具有在任何一组有限的输入。 他们是谁支付账单的人。 如果他们完全转向的一切,这是不合理的,很明显。
我敢肯定没有最佳答案,但我很好奇,以什么其他人的想法是合理的。 我期待在两个极端(一切!没有!),而且很多在中间。
没有人会选择他们的经理,如果在单元测试一个糟糕的政策是在与公司/项目的人住一个化妆成败的决定......你有更多的职业选择比大多数人来说,朋友。 :-)
如何证明什么积极的任何想法?
Answer 1:
为最小的单元测试,将提供最“的划算”两个建议:
通过剖析应用程序,找到最常用的部分开始 - 要确保那些是单元测试。 保持向外移动到不常用的代码。
当一个错误被固定,写,将检测到它一个单元测试。
Answer 2:
这一点,我认为,这是一个谬论:
如果测试每个类,每一个方法,你的当前版本将需要更长的时间,可能要长得多。
测试 - 尤其是第一次试验 - 改进我们的流程,使我们在该区域,实际上加速我们。 我更快完成任务, 因为我测试。 它未能测试让我们放慢脚步。
我不考getter和setter方法; 我认为这是毫无意义的 - 尤其是因为它们是自动生成的。 但几乎一切 - 这是我的实践,我的意见。
Answer 3:
启动最容易出问题的领域创建单元测试(即经常打破,并导致大量的销售团队和开发人员之间的通信代码段)。 这将导致通过销售团队和其他人员的直接和明显的影响。
然后,一旦你有信誉,他们看到的价值,开始添加问题较少的地区,直到你开始注意到投资回报率仅仅是不存在了。
当然全覆盖在理论上是好的,但在实践中往往没有必要的。 且不说过于昂贵。
Answer 4:
什么是劝我是这样的:
- 试着像你想象的; 过了一会儿,评价自己:
- 如果测试花费更多的时间比你认为是reasonnable,和你有过投资太少回报,测试少。
- 如果你的产品是足够的测试,你失去的时间,测试更多。
- 根据需要循环。
另一种算法::-)
- 一些测试是很容易的,而真正有用的 。 始终做到这一点,具有高优先级。
- 一些测试是真的很难成立,而很少会很有用 (例如,它可以被人体试验总是在你的过程中发生重复)。 停止这样做,它失去了你的时间。
- 在这两者之间,试图找到一个平衡点 ,随着时间取决于项目的阶段进入可能会发生变化?
更新了评论,要证明一些测试(你坚信的那些)的用处:
我经常告诉我的年轻的同事,我们的技术人员(developpers等),有没有与我们的管理沟通 。 正如你所说,管理,未列出的费用不存在,因此,他们避免了它们不能用来证明另一个成本。 我曾经是沮丧之谓也。 但是,思考它,那是他们工作的本质。 如果他们接受不必要的费用没有正当理由,他们会很差经理!
这不是说他们是对我们否定这些活动,我们知道是有用的。 但是,我们首先必须明显的成本 。 更有甚者,如果我们提出以适当的方式成本,管理层将不得不做出我们想要的决定(或者他们会很糟糕的经理;请注意,这个决定或许仍会优先......)。 因此,我建议跟踪,使他们没有隐藏任何更多的成本:
- 在你跟踪你花的时间, 注意:分别是来自代码是未经测试成本的地方(如果没有可用的工具,将其添加为评论)
- 聚集在一个专用的报告, 这些费用如果该工具没有,所以每个星期,你的经理读取你的时间X%是花费在那
- 每次评估负荷,时间评估分开几个选项,带或不带自动测试, 显示在手动测试的时间花费或自动化测试是差不多的(如果你限制自己最有用的测试,如前所述),而后者反对回归的资产。
- 链接错误的原代码 。 如果链接是不是在你的过程中,找到一种方法将它们连接起来:你需要显示的bug来自没有自动测试。
- 也积累这些链接的报告 。
要真正影响到经理,你可以每星期给他们发送电子表格的最新(但与整个历史,不仅为一周)。 电子表格给出的图形,让即时了解,并让不信的经理得到的原始数据...
Answer 5:
“成本”的开发过程中支付的,当它是更具成本效益,以及持续维护过程中实现了回报,当它是非常困难和昂贵的修复bug。
我一般总是做方法单元测试是:
然后,对于更复杂的方法,我将单元测试这些。 对于这样的getter / setter方法,或简单的数学的东西简单的事情,我不考。
在维修过程中,最合法的bug报告得到了单元测试,以确保特定的错误不会再次发生。
Answer 6:
我始终相信在不被极端。 特别是,当时间和精力是有限的。 你就不能测试这一切。
并不是每一个方法/函数需要一个单元测试。 下面可能不需要。 (1)一个,这显然是不复杂的像只得到/套,小条件或循环。 (2)一个将通过具有单元测试其他方法被调用。
有了这两个条件,我觉得你可以砍掉了很多这些的。
只是一个想法。
Answer 7:
IMO,如果有足够的给别人谁继承了代码的想法,使他们能够开始进行更改,不管是修复bug,或将在增强,而不必花费几天读代码得到它,这就是我的建议。
因此,不测试所有死刑,但包括一些常见的案例和一些边缘的情况下只是为了看看最初奠定了事情不顺利会发生什么。
Answer 8:
测试足以让你可以放心,一个坏的重构将通过测试来捕获。 通常情况下,其足以以测试逻辑和管道/布线代码。 如果你有一些代码基本上的getter / setter方法,所以测试它们?
关于销售的人的意见,认为测试的心不是需要 - 嗯,如果他们知道这么多,为什么他们不这样做的血腥编码?
Answer 9:
自动化单元测试带来了很多表。 我们用它在几个项目。 如果有人打破了构建,每个人都立即知道是谁做的,他们解决它。 它是还内置到Visual Studio的后续版本。 调查
测试驱动开发
它应该为您节省大量的时间和不产生开销显著量。 希望这可以帮助! 如果是这样,将其标记。
Answer 10:
对于单元测试,我公司已通过了一个相当不错的策略:我们有一个层次的应用(数据层,服务层/ Business Objects公司,表示层)。
我们的服务层是与数据库进行交互(通过在数据层的方法)的唯一途径。
我们的目标是具有至少以代替基本单元测试用于在服务层中的每个方法。
它的工作很适合我们 - 我们并不总是彻底检查所有的代码路径(特别是在复杂的方法),但是每一个方法都有它的验证最常见的代码路径(S)。
我们的对象并不单元测试,除了顺便经由服务层测试。 他们也往往是“哑巴”的对象 - 最有除了那些不需要的方法(如equals()和GetHastCode())。
Answer 11:
开发人员测试的目的是为了加快可接受的质量水平的完成软件的开发。
这导致了两点需要说明:
- 这是完全有可能这样做不对,所以它实际上减慢你失望。 所以,如果你发现它会降低你的,它很可能是你做错了的情况。
- 您的“质量合格”的定义可能与市场的不同。 归根结底,他们是对的,或者至少说了算。
该工程软件是一家专业化,细分市场,相当于从专业昂贵的材料制成的高端设计硬件。 如果你是市场外,则客户将没有更多的期待您的软件可靠地工作比预期他们的球衣,停止子弹。
Answer 12:
多少单元测试是一件好事:
单元测试也不是一成不变的,一旦你这样做,你的工作完成后,将继续通过产品的出生活,直到你不上你的产品停止进一步发展
基本上,单元测试应该在每次的时间内完成:1)你做修复
2)新版本
3)或者你发现一个新的问题
我没有提到发展的时期,因为在这期间您的单元级测试是进化而来的。
这里基本的东西是不是量(多少钱),但你的单元测试的覆盖范围
例如:对于您的应用程序,你喜欢一个问题的特定功能X,你做一个
修为X,如果没有其他的模块被触摸,你可以做单元测试
适用于模块X,现在,这是第一点单位X多少测试
覆盖
所以,你的单元测试必须检查:
1)每个接口
2)所有的输入/输出操作
3)逻辑核对
4)应用程序特定结果
Answer 13:
我建议拿起书单元测试的艺术 。 第8章涵盖了单元测试集成到您的组织。 有一个伟大的表(第232页),显示了两个小组试验的结果(使用一个测试,一个没有); 测试团队剃光休息两天他们的整体释放时间(包括集成,测试和错误修正),并有1/6在生产中发现的错误。 第9章讨论了获取最大收益换了降压与遗留代码测试的可行性分析。
Answer 14:
虽然有可能超过测试(收益递减点)很难做到这一点。 测试(特别是在早期测试)可以节省时间。 越长的缺陷停留在产品的更多它的成本来解决。
测试早期的测试频率和测试尽可能全面实用!
Answer 15:
虽然单元测试是非常有用的,你绝对应该有一个系统的测试计划,每一个版本 - 这应包括测试您的应用程序(回归)和特定功能的正常使用情况进行更深入正在处理。
自动化系统测试是非常重要的,以避免回归 - 单元测试都可以通过和您的应用程序仍然是牛粪的瓦罐。
但是,如果你不能对所有的用例自动化系统测试(大多数应用程序具有复杂的使用情况,特别是在与第三方系统和用户界面交互),那么你可以手动运行系统测试。
用户界面创建的主要问题 - 大多数其他东西可以相对容易地实现自动化。 有工具来自动测试的用户界面堆,但他们是出了名的脆性,即在每一个释放的自动测试需要只捏了捏通过(假定没有新的错误)。
文章来源: How much unit testing is a good thing? [closed]