2 软件测试技术或类别 很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 您知道哪种软件测试?我听说过测试驱动开发,单元测试等,但是不了解它们的重要性和差异。例如,为什么我们要使用回归测试或验收测试。他们提供什么优势? 16 unit-testing testing tdd integration-tests acceptance-testing
10 在什么时候为了更多的钱而放弃一些软件开发原则? 我想把这个问题扔出去,有趣地看看介质在哪里。 我要承认,在过去的12个月中,我获得了TDD和软件开发中的许多敏捷价值。我对软件开发的进步感到不知所措,以至于我永远都不会放弃它们。直到...我被任命为承包人,这使我当年的实得工资翻了一番。 我加入的公司没有遵循任何特定的方法,团队还没有听说过代码气味,SOLID等问题,而且如果团队从未做到过,我当然也不会浪费时间进行TDD在实践中看到了单元测试。我卖完了吗?不,不是完全...代码将始终被“干净地”编写(按照Bob叔叔的教)),并且SOLID的原理将始终应用于需要的我编写的代码。尽管对我来说测试已经放弃了,但坦率地说,公司无法承担如此未知的任务,即使我确实创建了测试框架,他们也永远不会正确使用/维护测试框架。 以此为例,您会说开发人员出于金钱/个人其他利益而绝不放弃其工艺原则的观点?我了解这可能是一种非常个人的看法,即人们对自己的需求,业务需求以及工艺等方面的关注程度。但是,可以考虑,例如,如果公司决定宁愿进行测试,则可以放弃测试。测试团队,而不是理解编程中的单元测试,那会不会像我那样原谅自己?因此,考虑到您会丢掉一些东西,通常业务中应该有相等的成本来弥补您丢掉的东西-希望如此,除非您当然愿意掏腰包而不是依靠社区/社会合作; )。 加倍您的钱,回到RAD?或继续前进,寻找正在做敏捷的人,再也不回头... 16 agile testing unit-testing tdd sdlc
12 您在编程时多久运行和测试一次代码?[关闭] 已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 尤其是在用C从头开始编写新代码时,我发现自己编写了数小时甚至数天的代码,除了偶尔进行语法检查之外,甚至没有运行编译器。 我倾向于仔细地编写更大的代码块,并仅在确信通过分析我的头脑中的代码可以实现代码的预期工作时才进行彻底的测试。不要误会我的意思-我不会编写1000行而不进行任何测试(这将是赌博),但是在我认为完成后我会编写一个完整的子例程并对其进行测试(并在必要时进行修复)。 另一方面,我看到大多数新手都会在他们进入编辑器的每一行之后运行并测试他们的代码,并认为调试器可以代替谨慎和理智的做法。学习了语言语法后,我认为这会分散很多注意力。 您认为这两种方法之间的正确平衡是什么?当然,第一个需要更多经验,但这对生产率有正面还是负面的影响?第二个可以帮助您更好地发现错误吗? 16 productivity testing coding
4 测试:确定性还是不确定性? 最好有一个 确定性测试套件,导致后续的相同测试 非确定性测试套件,可能涵盖更多案例 ? 示例: 您编写了一个测试套件来测试MVC应用程序中的控制器功能。在测试期间,控制器需要来自数据库的应用程序数据作为输入。有两种方法可以执行此操作: 您可以硬编码选择测试数据库中的哪行作为输入(例如,第10行和第412行) 您使用随机数生成器从数据库中伪随机地选择数据(随机数生成器选择了两行) 首先是确定性的:对于相同版本的代码,每次运行测试都应产生相同的结果。第二个是不确定的:测试套件的每次运行都有可能产生不同的结果。但是,随机选择的数据可能会更好地表示数据边缘情况。它可以模拟用户更好地为我们的控制器提供不可预测的数据吗? 选择一个而不是另一个的原因是什么? 16 testing mvc
9 是否应该使用单元测试来测试枚举的值? 如果您有一个仅带有值的枚举(没有任何方法可以像Java中那样),并且此枚举是系统业务定义的一部分,那么应该为它编写单元测试吗? 我一直认为应该编写它们,即使它们看起来很简单而且很多余,但我认为应该在测试中明确编写与业务规范有关的内容,无论它是使用unit / integration / ui / etc编写的。测试或使用语言的类型系统作为测试方法。因为从业务的角度来看,枚举(例如Java中)必须具有的值不能使用类型系统进行测试,所以我认为应该为此进行单元测试。 这个问题是不是类似于这一个,因为它没有解决同样的问题我的。在该问题中,存在一个业务功能(savePeople),而该人员正在查询内部实现(forEach)。在那里,有一个中间业务层(该功能可节省人员),封装了语言构造(forEach)。这里的语言构造(枚举)是用于从业务角度指定行为的一种。 在这种情况下,实现细节与数据的“真实性质”相吻合,即:(在数学意义上)一组值。您可以说使用了一个不可变的集合,但是相同的值仍然应该在那里存在。如果使用数组,则必须执行相同的操作来测试业务逻辑。我认为这里的难题在于,语言结构与数据的性质非常吻合。我不确定我是否正确解释了自己 15 unit-testing testing type-systems enum
2 可以避免测试基类吗? 我有一个带有大量“元编程”的基类,以使其具有相当通用的灵活性/抽象性。 在基类中,我确实有很多使用通用方法的子类,并且有面向行为的单元测试,涵盖了每个子类中的所有情况。 可以跳过基类测试吗? 15 unit-testing testing
6 正在创建您认为需要在TDD中进行第一次测试的对象 我对TDD相当陌生,在创建任何测试代码之前的第一个测试时遇到了麻烦。在没有任何实现代码框架的情况下,我可以随意编写我的第一个测试,但是它似乎总是被我的Java / OO问题思考方式所困扰。 例如,在我的Github ConwaysGameOfLifeExample中,我编写的第一个测试(rule1_zeroNeighbours)首先创建了一个尚未实现的GameOfLife对象。称为不存在的set方法,不存在的step方法,不存在的get方法,然后使用断言。 随着我编写了更多测试并进行了重构,这些测试也在不断发展,但最初看起来是这样的: @Test public void rule1_zeroNeighbours() { GameOfLife gameOfLife = new GameOfLife(); gameOfLife.set(1, 1, true); gameOfLife.step(); assertEquals(false, gameOfLife.get(1, 1)); } 当我根据在早期阶段决定编写此第一项测试的方式来强制实施设计时,这感觉很奇怪。 以您理解TDD的方式可以吗?我似乎遵循TDD / XP的原则,因为我的测试和实现随着时间的推移随着重构的发展而发展,因此,如果这种最初的设计被证明是无用的,那就可以改变了,但是感觉就像我在向开发者强加一个方向。通过这种方式解决。 人们还如何使用TDD?我可以从没有GameOfLife对象开始,而只有原语和静态方法开始,进行更多的重构迭代,但这似乎太虚构了。 15 java testing tdd extreme-programming
5 为什么要为将要重构的代码编写测试? 我正在重构一个巨大的遗留代码类。重构(我认为)主张: 为遗留类编写测试 摆脱困境 问题:一旦我重构了类,就需要更改步骤1中的测试。例如,以前是旧方法中的东西,现在可能是一个单独的类。一种方法现在可能是几种方法。遗留类的整个景观可能被抹杀为新的东西,因此我在步骤1中编写的测试几乎是无效的。本质上,我将添加步骤3。大量重写我的测试 那么重构之前编写测试的目的是什么?这听起来更像是为自己创造更多工作的学术活动。我现在正在为该方法编写测试,并且正在学习有关如何测试事物以及旧方法如何工作的更多信息。可以通过阅读旧代码本身来学习这一点,但是编写测试几乎就像在摸摸我的鼻子,并且在单独的测试中记录这种临时知识。因此,以这种方式,我几乎别无选择,只能学习代码在做什么。我在这里说的是暂时的,因为我会从代码中重构出乱七八糟的东西,并且我的所有文档和测试在很大程度上都是无效的,除非我的知识会留下来并使我对重构更加新鲜。 这是重构之前编写测试的真正原因-帮助我更好地理解代码吗?还有另一个原因! 请解释! 注意: 有一篇文章:没有时间进行完全重构时,为遗留代码编写测试是否有意义?但是它说“重构之前先写测试”,但没有说“为什么”,或者说“写测试”看起来像“很快就会被销毁的繁忙工作”该怎么办。 15 testing refactoring tdd legacy-code
4 为什么Cem Kaner认为测试不显示bug浪费时间? 在肯定的测试中确认功能,证明其有效该怎么办?我应该说这是浪费时间吗?这句话背后是什么概念? 测试失败,即没有发现错误的测试是浪费时间。 Web工程:引用Cem Kaner 的Web应用程序系统开发学科。 15 testing theory
2 我如何知道我是否有足够的单元测试范围来删除集成测试? 我正在使用旧系统(这意味着它是在没有测试的情况下编写的)。我们试图通过编写集成测试来测试某些系统,这些集成测试从外部测试功能。 这使我有信心重构代码的某些部分,而不必担心会破坏它。但是问题在于这些集成测试需要一个部署(2分钟以上)和很多分钟才能运行。而且,它们很难维持。它们每个都覆盖了数千行代码,当其中一个中断时,可能需要花费数小时来调试原因。 我最近为这些功能更改编写了很多单元测试,但是在提交之前,我总是做一个新的部署并运行所有集成测试,以确保我不会错过任何东西。至此,我知道我的单元测试和某些集成测试与它们的测试重叠。 我怎么知道我的良好单元测试足以覆盖不良的集成测试,以便我可以删除该集成测试? 15 testing unit-testing integration-tests test-coverage
4 如果每个测试只能有一个断言;如何测试多个输入? 我正在尝试建立一些测试用例,并且已阅读到您应该尝试限制每个测试用例的断言数量。 所以我的问题是,测试带有多个输入的功能的最佳方法是什么?例如,我有一个函数,可分析用户的字符串并返回分钟数。字符串可以采用形式"5w6h2d1m",其中w, h, d, m对应于星期,小时,天和分钟数。 如果我想遵循“每个测试规则1条断言”,我将不得不对每种输入变化进行多次测试?这似乎很愚蠢,所以我只有这样: self.assertEqual(parse_date('5m'), 5) self.assertEqual(parse_date('5h'), 300) self.assertEqual(parse_date('5d') ,7200) self.assertEqual(parse_date('1d4h20m'), 1700) 在一个测试用例中。有没有更好的办法? 15 testing unit-testing
5 如何设计测试用例以覆盖基于随机事件的代码? 例如,如果代码生成一个从0到10的随机整数,并且在每个结果上采用不同的分支,那么如何设计一种测试套件以保证此类代码中100%的语句覆盖率? 在Java中,代码可能类似于: int i = new Random().nextInt(10); switch(i) { //11 case statements } 15 testing test-coverage
5 什么时候应该和不应该使用'new'关键字? 我看了Misko Hevery 在Google Tech Talk上有关单元测试的演讲,他说避免new在业务逻辑代码中使用关键字。 我写了一个程序,最终还是在new各处使用了关键字,但是它们主要用于实例化保存数据的对象(即,它们没有任何功能或方法)。 我想知道,当我在程序中使用new关键字时,我做错什么了吗?我们在哪里可以打破“规则”? 15 testing unit-testing
5 对于具有许多排列的事物,如何进行TDD? 当创建一个像AI这样的系统时,它可以非常迅速地采用许多不同的路径,或者实际上是具有多个不同输入的任何算法,则可能的结果集可能包含大量的排列。 创建一个输出许多很多结果排列的系统时,应该采用哪种方法来使用TDD? 15 testing algorithms tdd artificial-intelligence
5 通常如何滥用模拟对象? 我最近读过一篇文章,其中说到模拟对象经常被误解和滥用。我可以寻找任何清晰的模拟反模式吗? 15 testing tdd anti-patterns object-oriented-design mocking