什么是unit testing和集成testing,以及我应该了解哪些其他types的testing?

我见过其他人提到Stack Overflow的几种types的testing。

我能记得的是unit testing和集成testing。 尤其是unit testing提到了很多。 什么是unit testing? 什么是集成testing? 我应该知道哪些其他重要的testing技术?

编程不是我的职业,但我希望有一天能够做到,也欢迎制作等方面的东西。

closures我的头顶上:

  • “testing应用程序中最小的可隔离单元”意义上的unit testing ; 这通常是一种方法或一个类,取决于规模。
  • 集成testing
  • functiontesting :这可能会跨越单位,是TDD的重点。
  • 黑盒testing :只testing公共接口,不知道该如何工作。
  • 玻璃盒testing :testing一个事物的所有部分,完全知道它是如何工作的。
  • 回归testing :构build用于重现错误的testing用例,以确保它们不会在以后重新出现。
  • 毫无意义的testing :不止一种方式testing相同的基本情况,或testing一些非常微不足道的东西,以至于不需要testing(比如自动生成的getter和setter)

我应该知道我的代码的任何其他重要的testing吗?

根据软件生命周期的不同阶段,这些是一些不同types的testing:

  • unit testing :这个小小的代码工作吗?
  • unit testing套件 :许多unit testing的序列(对于很多小代码)
  • 集成testing :testing两个组件在合并时是否一起工作(或“集成”)
  • 系统testing :testing所有组件在组合(或“集成”)时是否一起工作
  • 验收testing :客户做什么来决定他想要支付给您的费用(系统testing发现软件是否按照devise工作…验收testing发现“devise”是否是客户想要的)

还有更多:

  • 可用性testing
  • 性能testing
  • 负载testing
  • 压力testing

而且,testing软件几乎和编写软件一样广泛。

MSDN:unit testing

unit testing的主要目标是在应用程序中使用最小的可testing软件,将其与代码的其余部分分离,并确定其行为是否与您期望的完全相同。 每个单元在将它们集成到模块之前分别进行testing,以testing模块之间的接口。 unit testing已经certificate了它的价值,因为在使用过程中发现了很大比例的缺陷。

MSDN:集成testing

集成testing是unit testing的逻辑扩展。 以最简单的forms,将已经testing过的两个单元组合成一个组件,并testing它们之间的接口。 在这个意义上,组成部分是指一个以上单位的综合集合。 在一个现实的情况下,许多单位被组合成组件,而这些组件又被汇集到更大的程序中。 这个想法是testing组合件,并最终扩大与其他组的testing您的模块的过程。 最终所有组成一个过程的模块都一起进行testing。 除此之外,如果程序由多个进程组成,则应该成对testing,而不是一次testing。

检查网站的更多信息。 除微软之外,还有大量的信息。

另一个重要的技术是回归testing 。 在这种技术中,你需要维护一套testing(称为回归套件),这些testing通常每晚都在运行以及每次签入之前运行。 每当你有一个错误修复,你就会向套件中添加一个或多个testing。 目的是阻止你重新引入已经修复的旧bug。 (这个问题出奇的普遍!)

在项目变大之前,尽早积累回归套件,否则会后悔的。 我当然有!

对于软件开发生命周期中的哪个阶段,有不同级别的testing。 最高级别是需求分析,最低级别是解决scheme的实施。

什么是unit testing?

  • unit testing就软件的实现进行评估。
  • 我们专注于testing程序单元(即个别方法),而忽视谁调用/使用这些单元。 因此,我们把每个单位作为一个独立单位来处理。
  • 有很多unit testing工具,其中最stream行的是JUnit。

  • 在执行unit testing时,我们要构build满足一定覆盖标准的testing集(一组testing用例)。 这可以是一些结构覆盖标准(NC,EC,PPC等)或数据stream标准(ADC,AUC,ADUPC等)

  • 请注意,unit testing是最低级别的testing,因为它会评估实施后生成的实际代码单元。 这种types的testing是在集成testing之前完成的。
  • 高效的unit testing有助于确保集成testing不会带来痛苦,因为在unit testing中更容易find并修复错误

什么是集成testing?

  • 需要进行集成testing,以确保在组合两个或更多组件时我们的软件仍能正常工作。
  • 您可以在系统完成之前执行集成testing。
  • 类集成testing命令(CITO)问题与集成testing相关联。 CITO与整合组件的策略有关。 CITO提供了许多build议的解决scheme,例如自顶向下集成,自底向上集成等。主要目标是集成组件,使得能够进行高效的testing和最less量的存根,因为编写代码存根并不总是容易并且花费时间。 请注意,这仍然是一个活跃的研究领域!
  • 集成testing是在unit testing之后完成的。
  • 通常情况下,单个组件工作正常,但是当一切都放在一起时,我们突然看到由于接口不兼容/问题而出现的错误。

其他级别的testing包括:

  1. 回归testing

    • 这种types的testing具有非常重要的意义,因为开发人员经常会对软件进行更改,所以我们希望确保这些更改不会引入错误。
    • 有效的回归testing的关键是限制回归testing的大小,以便完成testing不需要太长的时间,否则在下一次提交之前testing集将不能完成运行。 我们还必须select有效的testing案例,不会漏掉错误。
    • 这种types的testing应该是自动化的。
    • 重要的是要注意,为了抵消日益增加的回归testing,我们可以不断增加更多的机器,但是在某些时候,权衡是不值得的。
  2. 验收testing

    • 通过这个testing,我们根据提供的要求评估软件,基本上我们看看我们生产的软件是否符合我们提供的要求。
    • 这通常是软件开发活动顺序中最后一种testingtypes。 因此,这种types的testing是在unit testing和集成testing之后完成的。

unit testing只是写(希望)小块代码来testing应用程序的独立部分的想法。

例如,你可能有一个计算器应用程序,你需要确保添加function的作品。 要做到这一点,你写一个单独的应用程序,直接调用添加function。 然后你的testingfunction将评估结果,看看它是否与你所期望的一样。

这基本上是用已知的input调用你的函数,并validation输出正是你所期望的。

谷歌的前两个search结果的“types的testing”看起来全面

我认为最相关的。 看到这里 。

这是我写的一个条目: 不同types的自动化testing 。

unit testing :对一个单元或一个最小的软件进行的testing。 完成validation它是否满足其function规格或其预期的devise结构。

集成testing:testing相关模块的组合function。

回归testing:testing应用程序以validation修改没有造成意想不到的影响。

烟雾testing :烟雾testingvalidation构build是否可testing。

不同types的testing用例:

functiontesting用例

functiontesting用例用于发现应用程序的接口是否与系统的其余部分及其用户一起工作。 testing确定软件预期执行的function是成功还是失败。 这种情况是一种黑盒testing,它使用的是testing软件的规范或用户故事。 这样就可以执行testing,而无需访问正在testing的软件的工作或内部结构。 QA团队通常是功​​能testing用例的作者,因为他们属于正常的QAstream程。 只要开发第一个function可用于testing,它们就可以被编写和运行。 为了帮助指导开发,如果所有testing人员都可以访问,则可以在代码之前写入代码。 如上所述,只要能够这样做,它们就可以被编写和运行,并且每当更新被添加时就应该重复,直到客户成为可能。

例如:确认用户可以成功上传个人资料照片。

用户界面testing用例

用户界面testing用例用于validationgraphics用户界面(GUI)的特定部分是否按预期工作。 这些types的testing用例可以用来识别化妆品不一致性,语法和拼写错误,链接以及用户与之交互或看到的任何其他元素。 这些案例通常由testing团队编写,但devise团队也可能因为他们最熟悉界面而参与其中。 用户界面testing用例是软件testing中的testing用例types,通常会导致跨浏览器testing。 浏览器倾向于以不同的方式呈现,用户界面testing用例有助于确保您的应用程序在多个浏览器中保持一致。 这些testing用例将在开发阶段完成后运行,并将用户界面连接到数据库。

例如:在手机等小屏幕上查看网站时会发生什么情况? UI是否中断?

性能testing用例

性能testing用例validation应用程序的响应时间和整体有效性。 也就是说,执行一个动作之后,系统需要多长时间来响应? 性能testing用例应该有一套非常明确的成功标准。 testing团队通常编写这些testing用例,而且通常是自动化的。 一个大的应用程序可以有数百或数千的性能testing。 自动执行这些testing并频繁运行这些testing有助于揭示应用程序未达到预期水平的情况。 性能testing用例有助于理解应用程序在现实世界中的performance。 一旦testing团队对产品团队有性能要求,就可以编写这些案例。 但是,许多性能问题可以手动识别,而不需要具体的要求。

示例:系统authentication用户并加载下一页需要多长时间? 当多人同时login时,应用程序是否保持稳定?

集成testing用例

集成testing用例旨在确定不同的模块如何相互交互。 集成testing用例的主要目的是确保不同模块之间的接口工作正常。 testing团队确定哪些领域应该进行集成testing,而开发团队将对如何编写这些testing用例提供意见。 这两个团队中的任何一个都可以写这个案子。 他们validation已经单独工作的模块也能够一起工作。

例如:检查主页和“collections夹”部分之间的链接。 当您从主页添加项目作为“collections夹”时,是否出现在“collections夹”部分?

可用性testing用例

可用性testing用例通常被称为“任务”或“场景”。 testing人员不是提供执行testing的详细分步说明,而是提供高级场景或任务来完成。 可用性testing用例有助于确定用户如何自然接近和使用应用程序。 他们通过各种情况和stream程帮助指导testing人员。 没有事先知道的应用程序是必要的。 这些testing案例通常由devise团队和testing团队一起准备。 可用性testing应该在用户验收testing之前完成。

示例:用户是否可以成功将多个商品添加到购物车中? 这是什么经验?

数据库testing用例

数据库testing的testing用例检查幕后发生的事情。 用户界面是干净的,一切似乎正在工作…但所有的数据去哪里? 为了编写这些testing用例,您需要对整个应用程序,数据库表和存储过程有深入的了解。 testing团队经常使用SQL查询来开发数据库testing用例。 数据库testing用于validation开发人员是否以一种一致,安全的方式存储和处理数据的方式编写代码。

示例:我们考虑创build用户configuration文件。 当用户提交他们的configuration文件时,应该对数据库进行以下testing。 应用程序是否将input的数据存储在数据库中? 在这个过程中是否有数据丢失? 部分执行的数据不应该被保存。 未经授权的用户不应该能够查看或访问用户的信息。

安全testing案例

安全testing用例有助于确保应用程序在必要时限制操作和权限。 这些testing用例是为了在需要保护的时间和地点保护数据而编写的。 安全testing用例用于驱动渗透testing和其他types的基于安全的testing。 authentication和encryption通常是安全testing案例的主要焦点。 安全团队(如果有的话)通常负责编写和执行这些testing。

示例:如果用户login失败次数达到X次,帐户是否被locking? 用户是否能够在不login的情况下上传数据?

用户验收testing用例

用户验收testing用例或“UAT”testing用例帮助团队testing用户验收testing环境。 这些testing用例应该是广泛的,涵盖了应用程序的所有领域。 这些testing用例的目的不是发现错误(希望它们在之前的testing中已经被发现和修复),而是validation应用程序是否被用户接受。 那么,当他们执行testing时,testing的结果是否可以接受? 由于许多其他types的testing已经在UAT开始的时候完成,所以焦点并不在粒度上,而是在更大的情况下。 用户验收testing用例由最终用户或客户使用,由testing团队或产品经理准备。 这也许是testing中最重要的阶段,因为它是进入生产之前的最后一步。

例如:如果testing一个摄影工作室的照片pipe理应用程序,客户端(用户)应该testing他们能够以符合其业务需求的方式上传和pipe理他们的照片。