Questions tagged «testing»

根据软件系统的预期行为来验证该软件系统的行为。

21
在代码中留下故意的错误以供测试人员查找
我们在公司没有这样做,但是我的一位朋友说他的项目经理要求每个开发人员在产品进行质量检查之前添加故意的错误。它是这样工作的: 在产品进行质量检查之前,开发团队在代码中的随机位置添加了一些故意的错误。他们适当地备份了原始的有效代码,以确保最终产品没有附带这些错误。 测试人员也将被告知这一点。因此,他们将进行艰苦的测试,因为他们知道存在错误,并且未找到它们可能被认为是能力不足的标志。 如果发现错误(故意的或其他),则将报告它们,以供开发团队修复。然后,在产品进入第二级质量保证之前,开发团队会在代码的相关部分中添加另一个故意的错误。项目经理说,测试人员应该像开发人员那样思考,并且他/她应该在进行更改的部分中期待新的错误。 好吧,这是怎么回事。他们说这种方法具有以下优点。 测试人员将始终保持警惕,他们将疯狂地进行测试。这可以帮助他们发现隐藏的(非故意的)错误,以便开发人员可以对其进行修复。 测试人员以错误为食。找不到任何错误会影响他们的士气。因此,给他们一个容易找到的人会帮助他们的士气。 如果您忽略了最终产品附带这些故意错误之一的情况,那么在考虑采用这种方法之前,我们还应考虑哪些其他缺陷? 一些说明: 他们在源代码管理中正确备份了原始代码。 当测试人员发现故意的错误时,开发团队将忽略它。如果测试人员发现了非故意(原始)错误,则开发团队首先检查该错误是否由任何故意的错误引起。也就是说,开发团队首先尝试在原始工作代码上重现该代码,并尝试对其进行修复。 只需忽略质量检查和开发团队之间的关系问题。我是在程序员而不是在工作场所上专门问这个问题的。考虑到质量保证和开发团队之间的融洽关系,他们在下班后聚会。项目经理是一位很好的老绅士,他随时准备支持两个团队(Godsend)。

9
花大量的时间(如果不是更多的话)编写测试而不是实际的代码是正常的吗?
我发现测试比他们正在测试的实际代码更加棘手,更难编写。对于我来说,花更多的时间编写测试而不是测试代码并不稀奇。 那是正常的还是我做错了什么? 问题“ 单元测试或测试驱动的开发值得吗?”,“ 我们比实施系统本身花费更多的时间来实施功能测试,这是否正常?”,他们的答案更多地是关于测试是否值得(例如“我们应该完全跳过编写测试吗?”中的内容)。尽管我确信测试很重要,但是我想知道我在测试上花费的时间是否比实际代码多还是正常的,还是仅我一个人? 从我收到的问题的观点,答案和投票的数量来看,我只能认为它是网站上其他任何问题都没有解决的合法问题。


30
给开发人员较慢的开发机器会导致更快/更有效的代码吗?[关闭]
假设我给开发人员一个尖叫的快速机器。基于WPF的VS2010加载非常快。然后,开发人员创建一个WPF或WPF / e应用程序,该应用程序可以在其盒子上正常运行,但在现实世界中运行得慢得多。 这个问题分为两个部分... 1)如果我给开发人员提供较慢的计算机,这是否意味着生成的代码可能更快或更高效? 2)我该如何给开发人员以快速的IDE体验,同时又提供“典型”的运行时体验? 更新: 作为记录,我正在准备对管理层的公正回应。这不是我的主意,你们正在帮助我纠正客户的错误要求。感谢您给我更多的弹药,并提及在何时何地使用这种弹药。我为+1的有效用例进行了+1,例如: -特定的服务器端编程优化 -测试实验室 -可能会购买更好的服务器,而不是顶级显卡
130 ide  testing  performance 

10
我应该如何测试随机性?
考虑一种随机调整数组元素的方法。您将如何编写一个简单而健壮的单元测试以确保其正常工作? 我提出了两个想法,两个都有明显的缺陷: 随机排列数组,然后确保其顺序与以前不同。这听起来不错,但是如果随机播放以相同顺序随机播放,则失败。(不可能,但可能。) 用恒定的种子对数组进行混洗,并根据预定的输出进行检查。这依赖于随机函数始终在给定相同种子的情况下始终返回相同的值。但是,有时这是一个无效的假设。 考虑第二个函数,该函数模拟掷骰子并返回随机数。您将如何测试此功能?您将如何测试该功能... 永远不会返回给定范围之外的数字? 返回有效分布中的数字?(一个骰子统一,大量骰子正常。) 我正在寻找答案,以提供不仅可以测试这些示例,而且可以测试常规代码的随机元素。这里的单元测试甚至是正确的解决方案吗?如果没有,那是什么样的测试? 只是为了让大家放心,我没有编写自己的随机数生成器。

7
您应该使用单元测试来测试什么?
我刚大学毕业,下周要去上大学。我们已经看到了单元测试,但是我们并没有太多地使用它们。每个人都在谈论他们,所以我想也许我应该做些。 问题是,我不知道要测试什么。我应该测试一下普通情况吗?边缘情况?我怎么知道一个功能已被充分覆盖? 我总是有一种可怕的感觉,尽管测试可以证明某个功能在特定情况下可以工作,但是证明该功能在一定时期内是完全没有用的。

11
(数据库)集成测试不好吗?
有人坚持认为集成测试是种种种错误和错误的方法 -一切都必须经过单元测试,这意味着您必须模拟依赖项;由于种种原因,我并不总是喜欢这种选择。 我发现在某些情况下,单元测试根本无法证明任何事情。 让我们以以下(简单,幼稚的)存储库实现(在PHP中)为例: class ProductRepository { private $db; public function __construct(ConnectionInterface $db) { $this->db = $db; } public function findByKeyword($keyword) { // this might have a query builder, keyword processing, etc. - this is // a totally naive example just to illustrate the DB dependency, mkay? return $this->db->fetch("SELECT * …

7
到底什么是集成测试?
我和我的朋友一直在努力准确地对什么是集成测试进行分类。 现在,在回家的路上,我才意识到,每当我尝试给出一个真实的集成测试示例时,它实际上就是一个验收测试,即。业务人员会大声说出要指定系统应该提供的内容。 我检查了Ruby on Rails文档中对这些测试类型的分类,现在完全把我扔了。 您能否以一个真实的例子为我提供关于集成测试的简短学术描述?
110 testing  agile  tdd 

12
可测试的代码更好吗?
我试图养成定期用我的代码编写单元测试的习惯,但是我已经读过第一件事,编写可测试的代码很重要。 这个问题涉及编写可测试代码的SOLID原则,但是我想知道这些设计原则是否有益(或至少无害),而根本不计划编写测试。需要澄清的是-我了解编写测试的重要性;这不是它们有用性的问题。 为了说明我的困惑,在启发这个问题的那篇文章中,作者给出了一个检查当前时间并根据时间返回一些值的函数示例。作者指出这是错误的代码,因为它会产生内部使用的数据(时间),因此很难进行测试。但是,对我而言,将时间作为争论似乎有点过头了。在某个时候需要初始化值,为什么不最接近消耗量呢?另外,在我看来,该方法的目的是基于当前时间返回一些值,通过将其设为参数,您可以暗示可以/应该更改此目的。这个问题以及其他问题使我想知道可测试的代码是否与“更好的”代码同义。 即使在没有测试的情况下,编写可测试的代码是否仍然是一种好习惯? 可测试的代码实际上更稳定吗?建议重复。但是,这个问题与代码的“稳定性”有关,但是我在更广泛地询问代码是否由于其他原因(例如可读性,性能,耦合性等)是否优越。

11
(为什么)单元测试不测试依赖项很重要?
我了解自动测试的价值,并在问题足够明确的地方使用它,以便我可以提出好的测试用例。但是,我注意到,这里和StackOverflow上的某些人只强调测试一个单元,而不是测试其依赖项。在这里我看不到好处。 为避免测试依赖性而进行的模拟/存根增加了测试的复杂性。它在生产代码中增加了人工灵活性/去耦要求,以支持模拟。(我不同意说这会促进良好设计的任何人。写额外的代码,引入诸如依赖注入框架之类的东西,或者以其他方式增加代码库的复杂性以在没有实际用例的情况下使事情变得更灵活/可插拔/可扩展/解耦是过度设计,而不是好的设计。) 其次,测试依赖项意味着使用其他输入的测试关键的底层代码,而不是那些编写测试的人明确想到的输入。通过在高级功能上运行单元测试而不嘲笑它所依赖的低级功能,我发现了低级功能中的许多错误。理想情况下,这些可以通过单元测试中的低级功能找到,但是总是会漏掉一些情况。 另一面是什么?单元测试不要同时测试其依赖关系真的很重要吗?如果是这样,为什么? 编辑:我可以理解模拟外部依赖项(如数据库,网络,Web服务等)的价值。(感谢Anna Lear激励我进行澄清。)我指的是内部依赖项,即其他类,静态函数等。没有任何直接的外部依赖关系。

12
如果执行TDD,是否应该避免使用私有方法?
我现在正在学习TDD。我的理解是,私有方法是不可测试的,不应担心,因为公共API将提供足够的信息来验证对象的完整性。 我了解OOP已有一段时间了。据我了解,私有方法使对象更易于封装,从而更能抵抗更改和错误。因此,默认情况下应使用它们,并且仅将对客户端重要的那些方法公开。 好吧,对于我来说,可以创建一个仅具有私有方法并通过侦听其他事件与其他对象进行交互的对象。这将被非常封装,但是完全不可测试。 另外,为了测试而添加方法也被认为是不好的做法。 这是否意味着TDD与封装不一致?适当的余额是多少?我现在倾向于公开大多数或所有方法...


11
使用模拟对象时,如何检测单元测试的依赖性问题?
您有一个X类,并且编写了一些验证行为X1的单元测试。还有一个类A,它把X作为依赖项。 为A编写单元测试时,您将模拟X。换句话说,在对A进行单元测试时,您将(假设)X的模拟行为设置为X1。时间的流逝,人们确实在使用您的系统,需要改变,X演变:您修改X以显示行为X2。显然,针对X的单元测试将失败,您需要对其进行调整。 但是A呢?修改X的行为后(由于X的模拟),针对A的单元测试不会失败。当使用“真实”(修改的)X运行时,如何检测A的结果会有所不同? 我期望得到以下答案:“这不是单元测试的目的”,但是单元测试有什么价值呢?它真的只是告诉您,当所有测试通过时,您还没有进行重大更改吗?当某个班级的行为发生变化时(有意或无意),您如何发现(最好以自动化方式)所有后果?我们不应该更多地关注集成测试吗?

19
TDD为什么起作用?[关闭]
如今,测试驱动开发(TDD)规模很大。我经常在Programmers SE和其他场所将它推荐为解决各种问题的解决方案。我不知道为什么行得通。 从工程角度来看,这使我感到困惑,原因有两个: “编写测试+重构直到通过”方法看起来令人难以置信的反工程。例如,如果土木工程师使用该方法进行桥梁建造,或使用汽车设计师作为汽车制造商,则他们将以很高的成本重塑桥梁或汽车,结果将是没有经过深思熟虑的体系结构而造成的混乱。“重构直到通过”准则通常被视为忘记建筑设计并做任何必要的工作以符合测试的要求。换句话说,测试而不是用户来设置需求。在这种情况下,我们如何保证结果中的良好“缺陷”,即最终结果不仅是正确的,而且是可扩展的,健壮的,易于使用的,可靠的,安全的,安全的等。这就是架构通常要做的。 测试不能保证系统正常运行。它只能表明它没有。换句话说,测试可能会向您显示如果系统未通过测试,则该系统包含缺陷,但是通过所有测试的系统并不比未通过测试的系统安全。测试覆盖率,测试质量和其他因素在这里至关重要。在民用和航空航天业中,已经报道了“绿色”结果给许多人带来的错误安全感觉,这是极其危险的,因为它可能被解释为“系统还不错”,而当它真正意味着“系统还不错时”。作为我们的测试策略”。通常,不检查测试策略。或者,谁来测试测试? 总而言之,我更关心TDD中的“驱动”位而不是“测试”位。测试完全可以;我没有得到的是通过设计来驱动设计。 我想看到一些答案,这些答案包含了为什么软件工程中的TDD是一种好的做法以及为什么我上面解释的问题与软件无关(或不足够相关)的原因。谢谢。
92 testing  tdd 

12
是否有原因未将测试与其测试代码内联地编写?
最近,我一直在阅读一些有关Literate Programming的文章,这让我开始思考...写得井井有条的测试(尤其是BDD风格的规范)在解释代码作用方面比散文效果更好,并且具有以下优点:验证自己的准确性。 我从未见过将测试与其代码内联地编写的测试。这是仅是因为语言在编写到相同的源文件中时不会趋向于将应用程序和测试代码分开(而没有人使之变得容易),还是人们在原则上将测试代码与应用程序代码分开呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.