Questions tagged «testing»

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

9
您如何扩展集成测试?
我正在研究用于扩展我们当前产品上不断增加的集成测试数量的技术和策略,以便使它们(人类)能够成为我们开发和CI流程的一部分。 在大约200多个集成测试中,我们已经达到1小时的标准以完成完整的测试运行(在台式机上运行),这对开发人员在常规推送过程中容忍运行整个套件的能力产生了负面影响。这正影响着积极地去管教他们创造良好的动机。我们只对关键的场景进行前后集成测试,并且我们使用的环境可以反映生产,该环境是在每次测试运行时从头开始构建的。 由于运行需要时间,因此无论测试运行有多集中,都会造成严重的反馈循环和许多浪费的周期,等待机器完成测试运行。别介意对流程和进度,理智和可持续性造成更大的负面影响。 我们希望在该产品开始变慢之前进行10倍以上的集成测试(虽然还不知道,但似乎还没有开始使用功能)。我认为在某些时候,我们必须合理地期望要进行几百或几千个集成测试。 明确地说,要防止这种情况成为关于单元测试和集成测试的讨论(永远不要交易)。我们正在使用TDD进行单元测试,并在该产品中进行集成测试。实际上,我们在服务体系结构的各个层进行集成测试,这对我们有意义,因为我们需要验证在将体系结构中的模式更改为其他领域时,我们在何处引入重大更改。系统。 关于我们的技术栈的一些知识。我们目前正在(CPU和内存密集型)仿真环境上进行测试,以从头到尾运行我们的测试。由组成noSql后端(ATS)的Azure REST Web服务组成。我们通过在Azure桌面模拟器+ IISExpress中运行来模拟生产环境。每台开发机仅限于一个模拟器和一个本地后端存储库。 我们也有一个基于云的CI,它可以在相同的仿真环境中运行相同的测试,并且与我们当前的CI提供程序一起在云中进行测试所花费的时间是其两倍(2小时以上)。就硬件性能而言,我们已经达到了云CI提供程序SLA的极限,并且超出了他们在测试运行时间上的允许范围。为了公平起见,他们的规格还不错,但显然是内部脏台式机的一半。 我们正在使用一种测试策略,为每个逻辑测试组重建数据存储,并预加载测试数据。在全面确保数据完整性的同时,这对每个测试增加了5-15%的影响。因此,我们认为在产品开发的这一点上优化该测试策略几乎无济于事。 总而言之,它的缺点是:尽管我们可以优化每个测试的吞吐量(即使每个测试的吞吐量提高多达30%-50%),但在不久的将来,我们仍然无法通过数百个测试有效地扩展规模。现在1小时甚至还远远超出了人类可以忍受的范围,我们需要在整个过程中进行一定程度的改进以使其可持续。 因此,我正在研究可以采用哪些技术和策略来大大减少测试时间。 编写更少的测试不是一种选择。让我们不要在这个线程中争论那个。 尽管价格昂贵,但绝对可以选择使用更快的硬件。 无疑,在并行环境中在单独的硬件上运行测试/方案组也是肯定的选择。 围绕正在开发的功能和场景创建测试分组是合理的,但最终无法证明完整的覆盖范围或对系统不受更改影响的信心。 从技术上讲,可以在云规模的暂存环境中运行而不是在台式机模拟器中运行,尽管我们开始将部署时间添加到测试运行中(在测试运行开始时每个部署时间大约20分钟以部署内容)。 将系统的组件分成独立的逻辑部分在一定程度上是合理的,但是由于组件之间的干扰预计会随着时间而增加,因此我们认为在此方面的里程有限。(即,更改是无效的,可能会以意想不到的方式影响其他人,这在系统逐步开发时经常发生) 我想看看其他人在这个领域使用什么策略(和工具)。 (我必须相信其他人在使用某些技术集时可能会遇到这种困难。) [更新:2016年12月16日:我们最终在CI并行测试上投入了更多资金,以讨论结果:http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]

3
由于需要过多的模拟而导致单元测试脆弱
关于我们在团队中实施的单元测试,我一直在遇到越来越烦人的问题。我们正在尝试将单元测试添加到设计不良的旧代码中,尽管我们在实际添加测试方面没有遇到任何困难,但是我们开始为测试的结果而苦恼。 作为问题的一个示例,假设您有一个方法在执行过程中调用了5个其他方法。此方法的测试可能是确认是否由于调用这5个其他方法之一而导致了行为。因此,由于单元测试应该仅出于一个原因和一个原因而失败,因此您希望消除调用这四种方法并对其进行模拟而导致的潜在问题。大!执行单元测试,忽略模拟的方法(它们的行为可以作为其他单元测试的一部分进行确认),并且验证有效。 但是存在一个新问题-单元测试对您如何确认将来行为和任何其他4种方法的签名变化或需要添加到“父方法”的任何新方法有深入了解。导致必须更改单元测试以避免可能的故障。 自然地,可以通过简单地使更多的方法完成更少的行为而在某种程度上缓解该问题,但是我希望可以找到一个更优雅的解决方案。 这是捕获问题的示例单元测试。 简要说明一下,“ MergeTests”是一个单元测试类,它继承自我们正在测试的类,并根据需要覆盖行为。这是我们在测试中采用的“模式”,允许我们覆盖对外部类/依赖项的调用。 [TestMethod] public void VerifyMergeStopsSpinner() { var mockViewModel = new Mock<MergeTests> { CallBase = true }; var mockMergeInfo = new MergeInfo(Mock.Of<IClaim>(), Mock.Of<IClaim>(), It.IsAny<bool>()); mockViewModel.Setup(m => m.ClaimView).Returns(Mock.Of<IClaimView>); mockViewModel.Setup( m => m.TryMergeClaims(It.IsAny<Func<bool>>(), It.IsAny<IClaim>(), It.IsAny<IClaim>(), It.IsAny<bool>(), It.IsAny<bool>())); mockViewModel.Setup(m => m.GetSourceClaimAndTargetClaimByMergeState(It.IsAny<MergeState>())).Returns(mockMergeInfo); mockViewModel.Setup(m => m.SwitchToOverviewTab()); mockViewModel.Setup(m => m.IncrementSaveRequiredNotification()); mockViewModel.Setup(m …

7
关于单元测试的最佳书籍,文章和文献
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在我的工作组中引入单元测试的斗争中,我发现很多人对此概念一无所知。你能建议: 快速介绍相关主题的最佳文章或教程 深入学习单元测试的最佳综合书籍 证明单元测试有效的学术作品和研究

5
测试人员应该批准发布,还是只报告测试?
将签名授权给测试人员是否有意义?应该有一个测试团队 只需测试功能,问题等,并仅在通过/失败的基础上进行报告,然后由其他人根据这些结果采取行动,或者 是否有权根据这些结果自行阻止发布? 换句话说,应该要求测试人员实际批准发布吗?与我一起工作的测试团队认为他们确实这样做了,因为“测试范围蠕变”,我们对此有疑问-拒绝批准发行版有时是基于有问题的发行版未明确解决的问题。

5
如何在测试抗文化中开始测试?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我要坦白:正式的自动化测试从来都不是我编程背景的一部分。我现在在一家非常大的公司工作,有很多开发人员(其中大多数是某种类型的Web开发人员),很明显,他们中的大多数人都没有测试*。(*我不会继续正式发言;请推断出来。) 如果我等待组织的支持开始测试,那将永远不会发生。如果我试图通过推动管理层的测试来“从内部改变事情”,那么在改变发生之前,我将精疲力尽。我需要立即开始测试。 但是对于TDD及其同类产品,我将最终获得大量测试代码以及​​生产代码。我们的版本控制系统(全部为集中式)并不是为了存储测试代码而组织的。我必须在我的工作站上找到所有放置的地方。 是否有可能在一种不重视或不提供工具的文化中开始个人软件测试实践?当官方工具和组织没有测试,框架和自动化的地方时,您使用什么技术和工具来进行测试?
20 testing  tdd 


8
一个单元的单个或多个文件用于单元测试?
在研究单元测试最佳实践以帮助为我的组织制定准则时,我遇到了一个问题,即分离测试装置(测试类)还是将一个类的所有测试保存在一个文件中是更好还是有用。 首先,我纯粹是指“单元测试”,它们是针对单个类,每个测试一个断言,所有依赖项都被嘲笑的白盒测试。 一个示例场景是一个类(称为Document),它具有两个方法:CheckIn和CheckOut。每种方法实现控制其行为的各种规则等。按照每次测试一个断言的规则,每种方法我将有多个测试。我可以将所有测试放在一个单独的DocumentTests类中,其名称类似于CheckInShouldThrowExceptionWhenUserIsUnauthorized和CheckOutShouldThrowExceptionWhenUserIsUnauthorized。 或者,我可以有两个单独的测试类:CheckInShould和CheckOutShould。在这种情况下,我的测试名称将被缩短,但是它们会被组织起来,以便针对特定行为(方法)的所有测试都在一起。 我确定这两种方法都有优缺点,并且想知道是否有人使用多个文件进行了路由,如果是,为什么?或者,如果您选择了单文件方法,为什么感觉更好呢?

7
经理想要一个结合的开发和生产环境
我在一个小型的编程团队中工作,为较大的组织提供支持。今年,我们的经理决定我们将使用Oracle Apex技术来处理我们公司的绝大多数数据。 可以,除非我们只有一台Apex服务器。我们的经理已下令一切都发生在那个实例中。我们的团队正在开发应用程序,而经理演示的是应用程序,而内部客户则在使用它们,这显然已经引起了问题! 我只能期望随着我们对Apex的投入越来越大,应用程序变得更加复杂以及用户数量的增长,这种情况会变得更糟。我听说最佳实践是拥有单独的开发,测试和生产环境,但是为什么会这样呢? 问题:为什么我们要有单独的开发,测试和生产环境?

4
整理数据太麻烦时如何测试?
我正在编写一个解析器,作为其中的一部分,我有一个Expander将单个复杂语句“扩展”为多个简单语句的类。例如,它将扩展此内容: x = 2 + 3 * a 变成: tmp1 = 3 * a x = 2 + tmp1 现在,我正在考虑如何测试此类,特别是如何安排测试。我可以手动创建输入语法树: var input = new AssignStatement( new Variable("x"), new BinaryExpression( new Constant(2), BinaryOperator.Plus, new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a")))); 或者我可以将其编写为字符串并进行解析: var input = new Parser().ParseStatement("x = 2 + 3 * a"); …

9
断言代码太多了吗?
我真的爱上了单元测试和TDD-我被测试感染了。 但是,单元测试通常用于公共方法。有时候,尽管我确实也必须在私有方法中测试一些假设-断言,因为其中一些是“危险的”,并且重构无济于事。(我知道,测试框架允许测试私有方法)。 因此,我的习惯是私有方法的第一行和最后一行都是断言。 但是,我注意到我倾向于“肯定”地在公共方法(以及私有方法)中使用断言。因为公共方法假设是由单元测试框架从外部进行测试的,所以这可能是“测试重复”吗? 有人会认为太多的断言是代码的味道吗?

7
抽象是否必须降低代码的可读性?
最近与我合作的一名优秀开发人员告诉我,他在实现我们继承的某些代码中的功能时遇到了一些困难;他说,问题在于该代码难以遵循。由此,我对产品进行了更深入的了解,并意识到查看代码路径有多么困难。 它使用了许多接口和抽象层,以致于很难理解事物的开始和结束位置。这让我开始思考过去的项目的时间(在我很清楚干净的代码原理之前),发现在项目中走来走去非常困难,这主要是因为我的代码导航工具总是使我进入一个界面。找到具体的实现或某些插件类型体系结构中的连接位置将花费大量的额外精力。 我知道有些开发人员正是出于这个原因严格拒绝依赖注入容器。它极大地混淆了软件的路径,以致代码导航的难度成倍增加。 我的问题是:当框架或模式引入如此多的开销时,是否值得?这是模式实施不当的征兆吗? 我想开发人员应该从更大的角度看待抽象带给项目的东西,以帮助他们度过沮丧。通常,尽管如此,很难使他们看到大局。我知道我未能通过TDD出售IOC和DI的需求。对于那些开发人员而言,使用这些工具只会严重限制代码的可读性。

3
我应该在Docker映像中包含测试吗?
关于测试,我可以想到两个选择: 将测试和应用程序放在一张图中。 在图像中仅包含应用程序代码。创建一个特定于测试的容器,该容器在主映像之后构建并向其添加一些层(测试代码,依赖项等)。 使用第一个选项,我可以测试容器并按照测试的要求完全运送它。明显的缺点是不必要的代码(以及潜在的测试数据)将包含在图像中。 使用第二种选项时,出厂的图像与测试的图像不太相同。 两者看起来都是错误的策略。有没有第三种更好的策略?

2
“灯具”的不同含义是什么?
我对理解“固定装置”的概念有些困难。我知道什么是测试套件,测试用例,测试运行,但是“夹具”到底是什么?参数化的测试用例? 在我看来,“夹具”一词的含义或语义可能会因编程语言或测试框架而略有不同?我认为一个phpunit夹具 “ 代码将世界设置为已知状态,然后在测试完成时将其返回到其原始状态。该已知状态称为测试的夹具。 ” 与“ 健身器材 ” 略有不同, “ 夹具是Wiki页面和被测系统(SUT)之间的桥梁,被测系统是要测试的实际系统 ”。 这里附近有软件测试专家可以回答这个问题吗?欢迎引用其他编程语言。

4
如何在一个测试是另一测试的设置的地方构造测试?
我正在通过仅使用公共API 集成测试系统。我有一个看起来像这样的测试: def testAllTheThings(): email = create_random_email() password = create_random_password() ok = account_signup(email, password) assert ok url = wait_for_confirmation_email() assert url ok = account_verify(url) assert ok token = get_auth_token(email, password) a = do_A(token) assert a b = do_B(token, a) assert b c = do_C(token, b) # ...and so on... 基本上,我正在尝试测试单个事务的整个“流程”。流程中的每个步骤都取决于后续的上一个步骤。因为我将自己限制在外部API上,所以我不能只是将值插入数据库中。 …
18 testing 

5
为什么要使用内存数据库进行集成测试?
当我看到许多用于测试的内存数据库实现时,我真的很困惑,因为我还从集成测试最佳实践中听到很多信息,即运行测试的环境应尽可能类似于生产环境,包括操作系统,库,数据库引擎等。 我在这里想念什么?
18 testing 

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.