精华内容
下载资源
问答
  • 什么是集成测试集成测试示例教程)

    万次阅读 多人点赞 2019-09-18 20:08:31
    集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。 在使用黑盒测试技术测试大型应用程序时,涉及多个彼此紧密耦合的模块的组合。我们可以应用集成测试技术...

    集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。

    在使用黑盒测试技术测试大型应用程序时,涉及多个彼此紧密耦合的模块的组合。我们可以应用集成测试技术概念来测试这些类型的场景。

    什么是集成测试?

    集成测试的含义非常简单- 将单元测试模块逐个集成/组合,并将行为测试为组合单元。

    该测试的主要功能或目标是测试单元/模块之间的接口。

    我们通常在“单元测试”之后进行集成测试。一旦创建并测试了所有单个单元,我们就开始组合这些“单元测试”模块并开始进行集成测试。

    该测试的主要功能或目标是测试单元/模块之间的接口。

    首先单独测试各个模块。模块经过单元测试后,逐个集成,直到所有模块都集成在一起,检查组合行为,验证需求是否正确实现。

    在这里我们应该理解,集成测试不会在周期结束时发生,而是与开发同时进行。因此,在大多数情况下,所有模块实际上都无法测试,这就是测试不存在的东西的挑战!

    为何进行集成测试

    我们认为集成测试很复杂,需要一些开发和逻辑技能。确实如此!那么将这个测试集成到我们的测试策略中的目的是什么?

    以下是一些原因:

    1. 在现实世界中,当开发应用程序时,它被分解为更小的模块,并且为每个开发人员分配1个模块。一个开发人员实现的逻辑与另一个开发人员完全不同,因此检查开发人员实现的逻辑是否符合预期并根据规定的标准呈现正确的值变得很重要。
    2. 很多时候,当数据从一个模块移动到另一个模块时,数据的面或结构会发生变化。附加或删除某些值,这会导致后续模块出现问题。
    3. 模块还与某些第三方工具或API进行交互,这些工具或API也需要进行测试,以确保该API /工具接受的数据是正确的,并且生成的响应也是预期的。
    4. 测试中一个非常常见的问题 - 频繁更改需求!:)许多时间开发人员在没有单元测试的情况下部署更改。当时集成测试变得很重要。

    好处

    这种测试有几个优点,下面列出的很少的一部分。

    • 此测试可确保集成模块/组件正常工作。
    • 一旦要测试的模块可用,就可以开始集成测试。它不需要完成其他模块以进行测试,因为Stubs和Drivers可以用于相同的操作。
    • 它检测与接口相关的错误。

    挑战

    下面列出的是集成测试中涉及的一些挑战。

    1. 集成测试意味着测试两个或多个集成系统,以确保系统正常工作。不仅应该测试集成链接,还应该考虑环境进行详尽的测试,以确保集成系统正常工作。
    2. 管理集成测试变得复杂,因为它涉及的因素很少,如数据库,平台,环境等。
    3. 在将任何新系统与遗留系统集成时,需要进行大量的更改和测试工作。在集成任何两个遗留系统时也是如此。
    4. 如果在任何一个系统中进行任何更改都不确定,那么两个不同公司开发的两个不同系统的集成对于其中一个系统如何影响另一个系统是一个巨大的挑战。

    为了最大限度地减少开发系统时的影响,应该考虑很少的事情,例如可能与其他系统集成等。

    集成测试的类型

    下面给出了一种测试集成及其优缺点。

    大爆炸方法:

    Big bang方法一次性集成了所有模块,即它不会逐个集成模块。它会在集成后验证系统是否按预期工作。如果在完全集成的模块中检测到任何问题,则很难找出导致该问题的模块。

    大爆炸方法是一个耗时的过程,找到一个自身有缺陷的模块,因为这需要时间,一旦检测到缺陷,修复相同的方法会花费很高,因为在后期检测到缺陷。

    大爆炸方法的优点:

    • 这对于小型系统来说是一种很好的方法。

    大爆炸方法的缺点:

    • 很难检测出导致问题的模块。
    • Big Bang方法需要所有模块一起进行测试,这反过来会导致更少的测试时间,因为设计,开发,集成将占用大部分时间。
    • 测试仅在一次进行,因此不会孤立地进行关键模块测试。

    集成测试步骤:

    1. 准备集成测试计划。
    2. 准备集成测试场景和测试用例。
    3. 准备测试自动化脚本。
    4. 执行测试用例。
    5. 报告缺陷。
    6. 跟踪并重新测试缺陷。
    7. 重新测试和测试一直持续到集成测试完成。

    测试集成方法

    从根本上说,有两种方法可以进行测试集成:

    1. 自下而上的方法
    2. 自上而下的方法。

    让我们考虑用下图来表述该测试方法:

    自下而上的方法:

    自下而上的测试,从应用程序的最低或最里面的单位开始,逐渐向上移动。集成测试从最低模块开始,逐步向应用程序的上层模块发展。这种集成一直持续到所有模块都集成在一起,整个应用程序作为一个单元进行测试。

    在这种情况下,模块B1C1,B1C2和B2C1,B2C2是经过单元测试的最低模块。模块B1和B2尚未开发。模块B1和B2的功能是调用模块B1C1,B1C2和B2C1,B2C2。由于B1和B2还没有开发,我们需要一些程序或“刺激器”来调用B1C1,B1C2和B2C1,B2C2模块。这些刺激计划称为驱动程序。

    简单来说,DRIVERS是虚拟程序,用于在调用函数不存在的情况下调用最低模块的函数。自底向上技术要求模块驱动程序将测试用例输入提供给被测模块的接口。

    这种方法的优点是,如果在程序的最低单元存在重大故障,则更容易检测到它,并且可以采取纠正措施。

    缺点是在最后一个模块被集成和测试之前,主程序实际上不存在。因此,只会在最后检测到更高级别的设计缺陷。

    自上而下的方法:

    该技术从最顶层的模块开始,逐渐向较低的模块发展。只有顶层模块是单独进行单元测试的。在此之后,下层模块逐个集成。重复该过程,直到所有模块都被集成和测试。

    在我们的图中,测试从模块A开始,下层模块B1和B2逐个集成。现在,较低的模块B1和B2实际上不可用于集成。因此,为了测试最顶层的模块A,我们开发了“ STUBS ”。

    “Stubs”可以称为代码片段,它接受来自顶层模块的输入/请求并返回结果/响应。这样,尽管模块较低,但是不存在,我们能够测试顶层模块。

    在实际情况中,存根的行为并不像看起来那么简单。在这个复杂模块和体系结构的时代,被调用模块大多数时候都涉及复杂的业务逻辑,如连接数据库。因此,创建Stubs变得像真实模块一样复杂和耗时。在某些情况下,Stub模块可能会比受激模块更大。

    Stub和驱动程序都是虚拟代码,用于测试“不存在”模块。它们触发函数/方法并返回响应,并将其与预期行为进行比较

    让我们总结一下Stubs和Driver之间的一些区别:

    StubsDriver
    用于自上而下的方法用于自下而上的方法
    首先测试最顶层的模块首先测试最低模块。
    刺激较低级别的组件刺激更高级别的组件
    较低级别组件的虚拟程序高级组件的虚拟程序

    唯一的变化是这个世界的常数,所以我们有另一种称为“ 三明治测试 ”的方法,它结合了自上而下和自下而上方法的特征。当我们测试像操作系统这样的大型程序时,我们必须拥有一些更有效的技术并增强信心。三明治测试在这里起着非常重要的作用,其中,自上而下和自下而上的测试同时开始。

    集成从中间层开始,同时向上和向下移动。在我们的图中,我们的测试将从B1和B2开始,其中一个臂将测试上部模块A,另一个臂将测试下部模块B1C1,B1C2和B2C1,B2C2。

    由于这两种方法同时开始,这种技术有点复杂,需要更多的人以及特定的技能组合,从而增加了成本。

    GUI应用程序集成测试

    现在让我们谈谈我们如何暗示黑盒技术中的集成测试。

    我们都知道Web应用程序是一个多层应用程序。我们有一个可供用户看到的前端,我们有一个中间层,它有业务逻辑,我们有一些更多的中间层做一些验证,集成一些第三方API等,然后我们有后层,这是数据库。

    集成测试示例:

    我们来看看下面的例子:

    我是一家广告公司的老板,我在不同的网站上发布广告。在本月底,我想看看有多少人看过我的广告以及有多少人点击了我的广告。我需要显示我的广告的报告,并相应地向我的客户收取费用。

    GenNext软件为我和以下开发了这个产品的架构:

    UI - 用户界面模块,对最终用户可见,其中给出了所有输入。
    BL - 是业务逻辑模块,具有所有计算和业务特定方法。
    VAL - 是Validation模块,它具有输入正确性的所有验证。
    CNT - 具有所有静态内容的内容模块,特定于用户输入的输入。这些内容显示在报告中。
    EN - 是Engine模块,该模块读取来自BL,VAL和CNT模块的所有数据,并提取SQL查询并将其触发到数据库。
    Scheduler- 是否根据用户选择(每月,每季度,每半年和每年)安排所有报告的模块
    DB - 是数据库。

    现在,在看过整个Web应用程序的体系结构后,作为一个单元,在这种情况下,集成测试将关注模块之间的数据流。

    这里的问题是:

    1. BL,VAL和CNT模块如何读取和解释在UI模块中输入的数据?
    2. BL,VAL和CNT模块是否从UI接收正确的数据?
    3. BL,VAL和CNT的数据以哪种格式传输到EQ模块?
    4. EQ如何读取数据并提取查询?
    5. 查询是否正确提取?
    6. 调度程序是否获得了正确的报告数据?
    7. EN收到的结果集是否正确并且符合预期?
    8. EN是否能够将响应发送回BL,VAL和CNT模块?
    9. UI模块是否能够读取数据并将其适当地显示到界面?

    在现实世界中,数据通信以XML格式完成。因此,无论用户在UI中输入什么数据,它都会转换为XML格式。

    在我们的场景中,在UI模块中输入的数据被转换为XML文件,该文件由3个模块BL,VAL和CNT解释。EN模块读取由3个模块生成的结果XML文件,并从中提取SQL并查询到数据库中。EN模块还接收结果集并将其转换为XML文件并将其返回到UI模块,该模块以用户可读的形式转换结果并显示它。

    在中间,我们有调度程序模块,它从EN模块接收结果集,创建和调度报告。

    那么整合测试的确在哪里?

    那么,测试信息/数据是否正确流动将是您的集成测试,在这种情况下将验证XML文件。XML文件是否正确生成?他们有正确的数据吗?数据是否正确地从一个模块传输到另一个模块?所有这些都将作为集成测试的一部分进行测试。

    尝试生成或获取XML文件并更新标记并检查行为。这与测试人员通常所做的常规测试非常不同,但这将为测试人员的知识和对应用程序的理解增加价值。

    其他几个样本测试条件可能如下:

    • 菜单选项是否生成正确的窗口?
    • 窗户是否能够调用被测窗口?
    • 对于每个窗口,标识应用程序应允许的窗口的函数调用。
    • 识别从窗口到应用程序应允许的其他功能的所有调用
    • 识别可逆调用:关闭被调用窗口应返回调用窗口。
    • 识别不可逆转的呼叫:在出现被叫窗口之前调用窗口关闭。
    • 测试执行对另一个窗口的调用的不同方式,例如 - 菜单,按钮,关键字。

    启动集成测试的步骤

    1. 了解应用程序的体系结构。
    2. 确定模块
    3. 了解每个模块的功能
    4. 了解数据如何从一个模块传输到另一个模块。
    5. 了解数据如何输入和接收到系统中(应用程序的入口点和出口点)
    6. 隔离应用程序以满足您的测试需求。
    7. 确定并创建测试条件
    8. 一次采取一个条件并记下测试用例。

    集成测试的进入/退出标准

    进入标准

    • 集成测试计划文档已签署并批准。
    • 已经准备好集成测试用例。
    • 测试数据已创建。
    • 开发的模块/组件的单元测试已完成。
    • 所有关键和高优先级缺陷都已关闭。
    • 测试环境设置为集成。

    退出标准:

    • 所有集成测试用例都已执行。
    • 没有关键和优先级P1和P2缺陷被打开。
    • 测试报告已经准备好了。

    集成测试用例

    集成测试案例主要关注模块之间的接口,集成链接,模块之间的数据传输,作为已经过单元测试的模块/组件,即功能和其他测试方面已经涵盖。

    因此,主要思想是测试集成时两个工作模块的集成是否按预期工作。

    对于示例集成Linkedin应用程序的测试用例包括:

    • 验证登录页面和主页之间的接口链接,即当用户输入凭证并记录时,应将其定向到主页。
    • 验证主页和配置文件页面之间的接口链接,即配置文件页面应该打开。
    • 验证网络页面和连接页面之间的接口链接,即单击网络邀请页面上的接受按钮,一旦点击,就会在连接页面中显示接受的邀请。
    • 验证通知页面之间的界面链接并说出恭喜按钮,即单击说恭喜按钮应指向新的消息窗口。

    可以为此特定站点编写许多集成测试用例。以上四点只是了解测试中包含哪些Integration测试用例的一个示例。

    集成是白盒还是黑盒技术?

    集成测试技术可以在黑盒子和白盒技术中统计。黑盒技术是测试人员不需要任何系统内部知识的地方,即不需要编码知识,而白盒技术需要应用程序的内部知识。

    现在,在执行集成测试时,它可能包括测试两个集成Web服务,这些服务将从数据库中获取数据并根据需要提供数据,这意味着可以使用白盒测试技术进行测试,而可以测试在网站中集成新功能使用黑匣子技术。

    因此,集成测试不是黑盒子或白盒技术。

    集成测试工具

    有几种工具可用于此测试。

    以下是工具列表:

    • Rational Integration Tester
    • TESSY
    • Protractor
    • Steam

    系统集成测试

    系统集成测试用于测试完整的集成系统。

    在集成组件之前,模块或组件在单元测试中单独测试。

    一旦测试了所有模块,就可以通过集成所有模块来完成系统集成测试,并对整个系统进行测试。

    集成测试和系统测试之间的区别

    集成测试是一种测试,其中集成了一个或两个经过单元测试的模块进行测试和验证,以验证集成模块是否按预期工作。

    系统测试是对整个系统进行测试的测试,即所有模块/组件都集成在一起,以验证系统是否按预期工作,并且由于集成模块而不会出现问题。

    结论

    这是关于集成测试及其在白盒和黑盒技术中的实现。希望我们用相关的例子清楚地解释它。

    测试集成是测试周期的一个重要部分,因为它可以在集成两个或多个模块时更容易找到缺陷,以便在第一步中将所有模块集成在一起。

    它有助于在早期发现缺陷,从而节省了工作量和成本。它确保集成模块按预期正常工作。

    转载于:https://my.oschina.net/hechunc/blog/3031766

    展开全文
  • 单元测试与集成测试

    万次阅读 多人点赞 2019-09-17 08:25:00
    按测试策略和过程,软件测试分为单元测试、集成测试、确认测试和系统测试。 按软件系统工程,测试是软件质量保证的最后的一关。 高质量的程序取决于以下几个方面: 高质量的设计 规范的编码 有效的测试 开发部...

    软件测试分类

    • 按测试用例的设计方法,软件测试分为白盒测试黑盒测试
    • 按测试策略和过程,软件测试分为单元测试、集成测试、确认测试和系统测试
    • 按软件系统工程,测试是软件质量保证最后的一关

    高质量的程序取决于以下几个方面:

    1. 高质量的设计
    2. 规范的编码
    3. 有效的测试

    开发部的测试   效果不好:为什么?

    • 没有时间测试
    • 不知道怎样测试
    • 不好组织
    • 缺乏方法和工具    

    这种情况下,往往把单元测试的任务堆积到系统测试阶段。

    如果把单元测试的任务堆积到系统测试阶段,将会怎样?

    • 大量的故障堆积在项目中后期:项目后10%的工作,占用了项目90%的时间。
    • 故障难以定位
    • 故障飘忽不定
    • 开发、测试人员疲于奔命 

    软件缺陷的修复费用

    单元测试(why)

    • 最高的成本收益比
    • 减少联调和后续测试的时间
    • BUG更容易定位
    • 更有信心去修改老代码 

    单元测试(who)

    • 单元测试可以是开发者本人执行,也可以是独立的专业测试人员执行。
    • 两者各有优势。
    • 建议开发人员必须完整地做单元测试,同时测试人员针对重点模块实施独立的单元测试。

    1、单元测试的目标和任务

    测试的4个阶段:单元测试----->集成测试----->系统测试----->验收测试

    按阶段进行测试是一种基本的测试策略

    定义:     单元测试是对软件基本组成单元进行的测试。

    时机:     单元测试和编码是同步进行,但在TDD中,强调测试在先,编码在后。一般在代码完成后由开发人员完成,QA人员辅助。

    概念:     模块, 组件, 单元

    1.1 为何要进行单元测试?

    • 尽早发现错误   (错误发现越早,成本越低.    发现问题比较容易    修正问题更容易 )
    • 检查代码是否符合设计和规范

    为什么要进行单元测试?

    1.单元测试是不是太浪费时间了?

    • 不经过单元测试,直接进入集成测试,系统正常工作的可能性非常低,大量的时间被花费在跟踪那些简单的Bug上,会导致集成为一个系统时增加额外的工期。
    • 编写完整计划的单元测试和编写实际的代码所花费的精力大致相同。但是,一旦完成了这些单元测试工作,很多Bug将被纠正,在确信他们手头拥有稳定可靠的部件的情况下,开发人员能够进行更高效的系统集成工作,这才是真正意义上的进步。
    • 调试人员的不受控和散漫的工作方式只会花费更多的时间而取得很少的好处。

    2.单元测试仅仅是为了证明这些代码作了什么吗?

    • 这是那些没有首先为每个单元编写一个详细设计文档而直接跳到编码阶段的开发人员提出的一条普遍的抱怨。这样的测试完全基于已经写好的代码,这无法证明任何事情。
    • 单元测试基于详细设计文档,这样的测试可以找到更多的代码错误,甚至是详细设计的错误。
    • 因此,高质量的单元测试需要高质量的详细设计文档。

    3.我是一个很棒的程序员,是不是可以不进行单元测试呢?

    • 每个都可能犯错误
    • 真正的完整的系统往往是非常复杂的,不能寄希望于没有进行广泛的测试和Bug修改过程就可以正常工作。

    4.有集成测试就够了,集成测试将会抓住所有的Bug。

    • 系统规模愈来愈大,复杂度愈来愈高,没有单元测试,开发人员很可能会花费大量的时间仅仅是为了使系统能够运行。
    • 任何实际的测试方案都无法执行。
    • 在系统集成阶段,对单元功能全面测试的负载程度远远的超过独立进行的单元测试过程。
    • 最后的结果是测试将无法达到它所应该有的全面性,一些缺陷被遗漏,并且很多Bug被忽略过去。

    5.单元测试的成本效率不高?

    • 无论什么时候做出修改都要进行完整的回归测试。
    • 生命周期中尽早的对产品进行测试将使效率和质量得到最好的保证
    • Bug修改越晚,费用就越高,单元测试是一个在早期抓住Bug的机会。
    • 相比后阶段的测试,单元测试的创建简单维护容易,并且可以更方便的进行重复。
    • 从全程的测试费用来考虑,相比复杂且旷日持久的集成测试,或是不稳定的系统,单元测试所需的费用是最低的

    单元测试的重要性

    • 一个尽责的单元测试方法将会在产品开发的某个阶段发现很多的Bug,并且修改它们的成本也很低。
    • 系统开发的后期阶段,Bug的检测和修改将会变得更加困难,并要消耗大量的时间和开发费用。
    • 无论什么时候做出修改都要进行完整的回归测试,在生命周期中尽早的对产品代码进行测试将是效率和质量得到最好的保证。
    • 在提供了经过单元测试的情况下,系统集成过程将会大大的简化。开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上,而不会陷入充满很多Bug的单元之中不能自拔。
    • 使测试工作的效率发挥到最大化的关键在于选择正确的测试策略,这包含了完全的单元测试的概念,以及对测试过程的良好的管理,还有适当的使用好工具来支持测试过程。

    单元测试的背景

    开发流程时间表与修改Bug代价的关系图

    • 编程过程中,每写1000行代码会犯几十个错误
    • 编程与编译运行结束后,每1000行代码中大约残留有2-6个Bug
    • 寻找与修改程序错误的代价占总体开发投资的30% -60%
    • Bug在整个研发流程中被发现的越早,修改的代价就越低

    单元测试是什么?

    单元测试,对单个的软件单元或者一组相关的软件单元所进行的测试,是代码级的测试。

    Unit:函数,源代码文件,类

    把测试比作是清洗一台机器:

    • 系统测试就是清除机器外面的尘土。
    • 集成测试就是保证机器各个部件的接头处干净。
    • 单元测试就是清洗各个零件的内部。

    单元测试原则

    • 应该尽早地进行软件单元测试。
    • 应该保证单元测试的可重复性。
    • 尽可能地采用测试自动化的手段来支持单元测试活动。

    1.2 单元测试的目标和要求

    目标: 单元模块被正确编码

    • 信息能否正确地流入和流出单元;
    • 在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。
    • 在为限制数据加工而设置的边界处,能否正确工作。
    • 单元的运行能否做到满足特定的逻辑覆盖。
    • 单元中发生了错误,其中的出错处理措施是否有效。
    • 指针是否被错误引用、资源是否及时被释放。
    • 有没有安全隐患?是否使用了不恰当的字符串处理函数等。

    单元测试的一系列活动:

    1. 建立单元测试环境,包括在集成开发环境中安装和设置单元测试工具(插件);
    2. 测试脚本(测试代码)的开发和调试;
    3. 测试执行及其结果分析。

    单元测试的主要内容:

    • 目标:确保模块被正确地编码。
    • 依据:详细设计描述。
    • 过程:经过设计、脚本开发、执行、调试和分析结果等环节。
    • 执行者:由程序开发人员和测试人员共同完成。
    • 采用那些测试方法:包括代码控制流和数据流分析方法,并结合参数输入域的测试方法。
    • 测试脚本的管理:可以按照产品代码管理的方法进行类似的配置(并入代码库),包括代码评审、版本分支、变更控制等。
    • 如何进行评估:通过代码覆盖率分析工具来分析测试的代码覆盖率、分支或条件的覆盖率。

    单元测试的一般准则:

    • 软件单元功能与设计需求一致。
    • 软件单元接口与设计需求一致。
    • 能够正确处理输入和运行中的错误。
    • 在单元测试中发现的错误已经得到修改并且通过了测试。
    • 达成了相关的覆盖率的要求。 完成软件单元测试报告。

    任务1:模块独立执行通路测试

    检查每一条独立执行路径的测试。保证每条语句被至少执行一次。

    Checklist:

    • 误解或用错了算符优先级。
    • 混合类型运算。
    • 变量初始化错误、赋值错误。
    • 错误计算或精度不够。
    • 表达式符号错等。

    任务2:模块局部数据结构测试

    检查局部数据结构完整性

    Checklist:  

    • 不适合或不相容的类型说明。  
    • 变量无初值。  
    • 变量初始化或缺省值有错。
    •  不正确的变量名或从来未被使用过。  
    • 出现上溢或下溢和地址异常。

    任务3:模块接口测试

    检查模块接口是否正确

    checklist:  

    • 输入的实际参数与形式参数是否一致。 (个数、属性、量纲)
    • 调用其他模块的实际参数与被调模块的形参是否一致。 (个数、属性、量纲) 
    • 调用预定义函数时所用参数的个数、属性和次序是否正确  
    • 全程变量的定义在各模块是否一致。
    •  外部输入、输出   ( 文件、缓冲区、错误处理 )

    任务4:模块边界条件测试

    检查临界数据处理的正确性

    Checklist:  

    • 普通合法数据的处理。  
    • 普通非法数据的处理。
    •  边界值内合法边界数据的处理。
    •  边界值外非法边界数据的处理。  
    • 其它

    任务5:模块的各条错误处理通路测试

    预见、预设的各种出错处理是否正确有效。

    Checklist:  

    • 输出的出错信息难以理解。  
    • 记录的错误与实际遇到的错误不相符。
    •  在程序自定义的出错处理代码运行之前,系统已介入。  
    • 异常处理不当。  
    • 错误陈述中未提供足够的定位出错的信息。

    2、 静态测试

    静态测试技术:不运行被测试程序,对代码通过检查、阅读进行分析。

    三步曲:  走查(Walk Through)  审查(Inspection)  评审(Review)

    2.1 编码的标准和规范

    • 标准:建立起来必须遵守的规则
    • 规范:建议最佳做法,推荐更好方式

    实施代码规范的原因:  可靠性  可读性和可维护性  可移植性

    2.2 代码评审

    • 一次检查少于200~400行代码
    • 努力达到一个合适的检查速度:300~500LOC/hour
    • 有足够的时间、以适当的速度、仔细地检查,但不宜超过60~90分钟
    • 在审查前,代码作者应该对代码进行注释
    • 使用检查表(checklist)肯定能改进双方(作者和复审者)的结果
    • 验证缺陷是否真正被修复

    1.代码走查(Walk Through)

    定义:采用讲解、讨论和模拟运行的方式进行的查找错误的活动。

    注意:  

    • 引导小组成员在走查前通读设计和编码。
    •  限时,避免跑题。  
    • 发现问题适当记录,避免现场修改。
    •  检查要点是代码是否符合标准和规范,是否有逻辑错误。

    2.正式会议审查(Inspection)

    定义:采用讲解、提问方式进行,一般有正式的计划、流程和结果。主要方法采用缺陷检查表。

    注意:

    •  以会议形式,制定会议目标、流程和规则,结束后要编写报告。  
    • 按缺陷检查表逐项检查。  
    • 发现问题适当记录,避免现场修改。  
    • 发现重大缺陷,改正后会议需要重开。  
    • 检查要点是缺陷检查表,所以该表要根据项目不同不断积累完善。

    走查与审查的比较

     

    走   查

    审   查

    准备

    通读设计和编码

    应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编码标准和代码缺陷检查表

    形式

    非正式会议

    正式会议

    参加人员

    开发人员为主

    项目组成员包括测试人员

    主要技术方法

    缺陷检查表

    注意事项

    限时、不要现场修改代码

    限时、不要现场修改代码

    生成文档

    会议记录

    静态分析错误报告

    目标

    代码标准规范,无逻辑错误

    代码标准规范,无逻辑错误

    3.评审(Review)

    定义:通常在审查会后进行,审查小组根据记录和报告进行评估。

    注意:  

    • 充分审查了所规定的代码,并且全部编码准则被遵守。
    •  审查中发现的错误已全部修改。

    3 、动态测试

    动态测试需要真正将程序运行起来,需要设计系列的测试用例保证测试的完整性和有效性。  

    白盒测试  黑盒(灰盒)测试

    驱动程序和桩程序

    运行单元程序有时需要基于被测单元的接口,开发相应的驱动模块和桩模块。

    •  驱动模块(drive):对底层 或子层模块进行测试所编写的 调用这些模块的程序。
    •  桩模块(stub):对顶层或 上层模块进行测试时所编写的 替代下层模块的程序。

    单元测试设计

    • 单元测试模型的设计。
    • 测试项目的设计。

    (1)单元测试模型设计

    • 构造最小运行调度系统,即驱动模块,用于模拟被测模块的上一级模块。
    • 模拟实现单元接口,即单元函数需调用的其他函数接口,即桩模块。
    • 模拟生成测试数据或状态,为单元运行准备动态环境。
    • 对测试过程的支持,对测试结果的保留,对测试覆盖率的记录等。

    单元测试环境的示意图如下:

    (2)测试项目设计

    • 测试项目是测试用例的一个总则,主要是根据测试需求设计测试点,不包含具体实践的用例。
    • 在测试项目的设计中,主要从功能覆盖和代码覆盖两个角度进行考虑。

                   功能覆盖属黑盒的范畴,用来指出测试用例是否已经覆盖了程序应该提供的功能。逻辑覆盖率是考核单元测试质量的一个关键指标。

                    代码覆盖也称逻辑覆盖,包括语句覆盖、分支覆盖、路径覆盖,是一种常用的白盒测试方法。

    • 覆盖率指标:核心代码覆盖率达到100%,共享资源库的代码覆盖率达到100%,非核心代码覆盖率达到90%。

    4、调试与评估

    调试与测试的对象及采用的方法有很大程度上的相似,调试还用到断点控制等排错方法,但其目的却完全不同。测试是为了找出软件中存在的缺陷,而调试是为了解决存在的缺陷。  

    • 软件单元功能与设计需求一致。  
    • 软件单元接口与设计需求一致。
    •  能够正确处理输入和运行中的错误。  
    • 在单元测试中发现的错误已经得到修改并且通过了测试。  
    • 达到了相关的覆盖率的要求。  
    • 完成软件单元测试报告

    5、单元测试的管理

    过程:

    • 在详细设计阶段完成单元测试计划。
    • 建立单元测试环境,完成测试设计和开发。
    • 执行单元测试用例,并且详细记录测试结果。
    • 判定测试用例是否通过。
    • 提交《单元测试报告》。

    单元测试的文档

    1. 《软件需求规格说明书》、《软件详细设计说明书》 -----> 《单元测试计划》
    2. 《单元测试计划》、《软件详细设计说明书》-----> 《单元测试用例》
    3. 《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》-----> 《缺陷跟踪报告》/《缺陷检查表》   
    4. 《单元测试用例》、《缺陷跟踪报告》、《缺陷检查表》-----> 《单元测试检查表》
    5.   评估----->   单元测试报告》

    7、系统集成的模式与方法

    集成测试定义

    定义

    集成测试又称“组装测试”、“联合测试”。集成测试遵循特定的策略和步骤将已经通过单元测试的各个软件单元(或模块)逐步组合在一起进行测试,以期望通过测试发现各软件单元接口之间存在的问题。

    集成测试对象

    理论上凡是两个单元(如函数单元)的组合测试都可以叫做集成测试。实际操作中,通常集成测试的对象为模块级的集成和子系统间的集成,其中子系统集成测试称为组件测试。

    集成测试目的与意义

    考虑以下问题:

    • 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
    • 各个子功能组合起来,能否达到预期要求的总体功能;
    • 一个模块的功能是否会对另一个模块的功能产生不利的影响;
    • 全局数据结构是否有问题 单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。  
    • 共享资源访问的测试  (   要想发现并排除在模块连接中可能发生的上述问题,就需要进行 集成测试。)

    集成测试有以下不可替代的特点:

    • 单元测试具有不彻底性,对于模块间接口信息内容的正确性、相互调用关系是否符合设计无能为力。只能靠集成测试来进行保障。
    • 同系统测试相比,由于集成测试用例是从程序结构出发的,目的性、针对性更强,测试项发现问题的效率更高,定位问题的效率也较高;
    • 定位问题较快,发现问题后比较容易定位,所以能够有效地加快进度,减少隐患。

    集成测试(when)

    • 在开始体系结构设计的时候开始制定测试方案;
    • 在进入详细设计之前完成集成测试方案;
    • 在进入系统测试之前结束集成测试。

    集成测试(who)

    • 集成测试可以在开发部进行,也可以由独立的测试部执行。
    • 开发部尽量进行集成测试,测试部有选择地进行集成测试。

    集成测试原则

    • 集成测试是产品研发中的重要工作,需要为其分配足够的资源和时间。
    • 集成测试需要经过严密的计划,并严格按计划执行。
    • 应采取增量式的分步集成方式,逐步进行软件部件的集成和测试。
    • 应重视测试自动化技术的引入与应用,不断提高集成测试效率。
    • 应该注意测试用例的积累和管理,方便进行回归并进行测试用例补充。

    集成测试内容

    • 集成功能测试
    • 接口测试
    • 全局数据结构测试
    • 资源测试
    • 任务优先级冲突测试
    • 性能和稳定性测试

    集成测试、单元测试与系统测试的差别

    测试类型

    对象

    目的

    测试依据

    测试方法

    单元测试

    模块内部的程序错误

    消除局部模块的逻辑和功能上的错误和缺陷

    模块逻辑设计,模块外部说明

    大量采用白盒测试方法

    集成测试

    模块间的集成和调用关系

    找出与软件设计相关的程序结构,模块调用关系,模块间接口方面的问题

    程序结构设计

    结合使用白盒与黑和测试方法,采用较多黑盒方法构造测试用例 

    系统测试

    整个系统,包括系统中的硬件等

    对整个系统进行一系列的整体、有效性测试

    系统结构设计,目标说明书,需求说明书等

    黑盒测试

    由以上可以看出,整个软件系统的测试过程是:先对各个软件模块进行单元测试,然后把经过单元测试的各个模块组装起来进行集成测试,最后把经过集成测试的子系统合成软件版本,对照需求规格,在实际环境下,进行系统功能验证。 

    7.1 集成测试前的准备

    人员安排 、测试计划、测试内容 、集成模式、测试方法

    7.2 集成测试的模式

    渐增式测试模式与非渐增式测试模式:

    • 非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
    • 渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。

    各自的优缺点

    • 非渐增式测试模式优缺点:工作量较小;发现模块间接口错误较晚;发现错误较难诊断,可以并行测试。
    • 渐增式测试模式优缺点:要编写的软件较多,工作量较大;发现模块间接口错误较早;测试执行更彻底;需要较多的机器时间。

    7.3 大棒集成方法(Big-bang Integration)

    采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试 。

    因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。  

     非增量式集成测试实例

     

    评述:模块d1、d2、d3、d4、d5是对各个模块做单元测试时建立的驱动模块,s1、s2、s3、s4、s5是为单元测试而建立的桩模块。这种一次性集成方式将所测模块连接起来进行测试,但是一次试运行成功地可能性并不大。其结果发现有错误,但茫然找不到原因,差错和改错都会遇到困难。    

    适应于一个维护型或被测试系统较小的项目。 

    非增量式策略——优缺点:

    • 优点: ①方法简单 ②允许多测试人员同时并行工作,人力物力资源利用率较高
    • 缺点: ①必须为每个模块准备相应的驱动模块和桩模块,测试成本较高 ②一旦集成后包含多种错误,难以纠正。

    7.4 自顶向下和自底向上集成方法

    驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。

    桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。

    1.自顶向下法(Top-down Integration) 

    自顶向下法,从主控模块(主程序)开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。

    组装过程可以采用深度优先策略和宽度优先策略

    • 深度优先:从最顶层单元开始,持续向下到下一层,选择一个分支,自顶而下一个一个的集成这条分支上的所有单元,直到最底层,然后转向另一个分支,重复这样的集成操作直到所有的单元都集成进来。
    • 广度优先:从最顶层单元开始,持续向下到下一层, 一个个完成下一层上所有单元集成后,再转向下面一层,重复这样的集成操作直到所有的单元都集成进来。

     

    自顶向下增量测试 

    自顶向下集成测试的整个过程由3个步骤完成:  

    1. 主控模块作为测试驱动器。   
    2. 根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。
    3. 在每个模块被集成时,都必须进行单元测试。     重复第2步,直到整个系统被测试完成。  

    深度优先组装方式:

    广度优先组装方式:

    自顶向下法——优缺点

    优点:

    不需要测试驱动程序;

    能够在测试阶段的早期实现并验证系统的主要功能;

    能在早期发现上层模块中的接口错误。 

    缺点:

    需要桩程序,要使桩模块能够模拟实际子模块的功能十分困难;

    底层验证被推迟; 同时涉及复杂算法,真正输入/输出的模块一般在底层,

    他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。

    自顶向下增量式集成适用范围:

    • 产品控制结构比较清晰和稳定;
    • 高层接口变化较小;
    • 底层接口未定义或经常可能被修改;
    • 产口控制组件具有较大的技术风险,需要尽早被验证;
    • 希望尽早能看到产品的系统功能行为。

    练习:

    (1)对如下结构采用自顶向下深度优先策略进行测试

     

    (2)一个按广度优先测试进行集成测试

    1. 首先,对顶层的模块A进行单元测试,这时需配以被调用子模块s1、s2、s3,以模拟被它调用的模块B、C和D。
    2. 其后,把模块B、C和D与顶层模块A连接起来,再对模块B和D配以被调用模拟子模块s4和s5以模拟对模块E和F的调用。
    3. 最后,去掉被调用模拟子模块s4和s5,把模块E和F集成后再对软件完整的结构进行测试。

    2.自底向上法(Bottom-up Integration)

    自底向上法,测试从原子模块(软件结构最底层的模块)开始集成以进行测试。自底向上进行集成和测试时,需要为所测模块或子系统编制相应的驱动模块。

    自底向上增量式集成测试步骤:

    1. 起始于模块依赖关系树的底层叶子模块,也可以把两个或多个叶子模块合并到一起进行测试
    2. 使用驱动模块对步骤1选定的模块(或模块组)进行测试
    3. 用实际模块代替驱动模块,与它已测试的直属子模块组装成一个更大的模块进行测试
    4. 重复上面的行为,直到系统最顶层模块被加入到已测系统中

    自底向上增量式测试

    一个自底向上增量式集成测试的典型例子

    1. 首先,(a)、(b)、(c)表示树状结构图中处于最下层的叶结点模块E、C和F,由于它们不再调用其他模块,对它们进行单元测试时,只需配以驱动模块d1、d2和d3,用来模拟B、A和D对它们的调用。
    2. 完成这3个单元测试后,再按(d)和(e)的形式,分别将模块B和E及模块D和F连接起来,再配以驱动模块d4和d5实施部分集成测试。
    3. 最后按图(f)的形式完成整体的集成测试。

    自底向上法——优缺点

    与自顶向下法刚好相反。

    优点:

    • 不需要桩程序
    • 同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决
    • 自底向上增值的方式可以实施多个模块的并行测试,提高测试效率。

    缺点:

    • “程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。也就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到
    • 驱动的开发工作量大;

    自底向上增量式集成适用范围:

    适用范围:

    • 适应于底层接口比较稳定;
    • 高层接口变化比较频繁;
    • 底层组件较早被完成。

    3.混合策略(Modified Top-down Integration)

    混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合。

    7.5 三明治集成方法(Sandwich Integration)

    • 混合式集成
    • 把系统划分成三层,中间一层为目标层,目标层之上采用自顶向下集成,之下采用自底向上集成

    三明治集成策略

     集成步骤

    • 首先对目标层之上一层使用自顶向下集成,因此测试A,使用桩代替B,C,D
    • 其次对目标层之下一层使用自底向上集成,因此测试E,F,使用驱动代替B,D
    • 其三,把目标层下面一层与目标层集成,因此测试(B,E),(D,F),使用驱动代替A
    • 最后,把三层集成到一起,因此测试(A,B,C,D,E,F)

    优缺点分析    

    优点: 集合了自顶向下和自底向上两种策略的优点

    缺点: 中间层测试不充分,在真正集成之前每一个独立的模块没有完全测试过

    适用范围: 适应于大部分软件开发项目

    改善的三明治集成方法

    改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底 。

    集成策略框图

    几种集成方法性能的比较

     

    自底向上

    自顶向下

    混合策略

    大棒

    三明治

    改进三明治

    集成

    基本程序能工作时间

    需要驱动程序

    需要桩程序

    工作并行性

    特殊路径测试

    容易

    容易

    容易

    中等

    容易

    计划与控制

    容易

    容易

    集成策略选择

    7.6  持续集成

    • 通常系统集成都会采用持续集成的策略,软件开发中各个模块不是同时完成,根据进度将完成的模块尽可能早的进行集成,有助于尽早发现Bug,避免集成中大量Bug涌现。  
    • 而且容易定位Bug、修正Bug,最终提高软件开发的质量与效率。

    7.7 集成测试流程

    集成测试主要由系统部的系统设计人员、软件评测部完成,开发人员也参与集成测试。集成测试相对来说是挺复杂的,而且对于不同的技术、平台和应用差异也比较大,更多是和开发环境融合在一起。集成测试所确定的测试的内容,主要来源于设计模型。

    集成测试流程

     (1)集成测试计划

    输入 :需求规格说明书、概要设计文档、 产品开发计划路标

    输出:集成测试计划

    活动步骤

    • 确定被测试对象和测试范围
    • 评估集成测试被测试对象的数量及难度,即工作量
    • 确定角色分工和划分工作任务
    • 标识出测试各阶段的时间、任务、约束等条件
    • 考虑一定的风险分析及应急计划
    • 考虑和准备集成测试需要的测试工具、测试仪器、环境等资源
    • 考虑外部技术支援的力度和深度,以及相关培训安排
    • 定义测试完成标准

    (2)集成测试分析和设计

    集成测试分析和设计的主要目的是制定测试大纲(测试方案)。集成测试大纲规定了今后的集成测试内容、测试方法以及可测性接口,以后所有集成测试均在该大纲的框架下进行,所以,制定一份完善的集成测试大纲非常重要。

    输入:需求规格说明书 概要设计 集成测试计划

    输出:集成测试设计方案

    活动步骤

    • 被测对象结构分析
    • 集成测试模块分析
    • 集成测试接口分析
    • 集成测试策略分析
    • 集成测试工具分析
    • 集成测试环境分析
    • 集成测试工作量估计和安排

    (3)实施阶段

    输入:需求规格说明书 概要设计 集成测试计划 集成测试设计

    输出:集成测试用例 集成测试规程 集成测试代码、集成测试脚本、集成测试工具(如果有)

    活动步骤

    • 集成测试用例设计
    • 集成测试规程设计
    • 集成测试代码设计(如果需要)
    • 集成测试脚本(如果需要)
    • 集成测试工具(如果需要)

    (4)执行阶段

    输入

    • 需求规格说明书
    • 概要设计
    • 集成测试计划
    • 集成测试设计
    • 集成测试用例
    • 集成测试规程
    • 集成测试代码(如果有)
    • 集成测试脚本(如果有)
    • 集成测试工具(如果有)
    • 详细设计
    • 代码
    • 单元测试报告

    输出

    • 集成测试报告

    活动步骤

    • 执行集成测试用例
    • 回归集成测试用例
    • 撰写集成测试报告

    相应过程的测试文档

     

    展开全文
  • 集成测试是接口测试吗 是否编写集成测试可能是一个宗教问题:您相信还是不相信它们。 我们甚至所说的集成测试都可能导致无休止的语义争论。 单元测试很容易定义,它们可以测试单个单元:单个类,单个方法,对该...

    集成测试是接口测试吗

    是否编写集成测试可能是一个宗教问题:您相信还是不相信它们。 我们甚至所说的集成测试都可能导致无休止的语义争论。

    单元测试很容易定义,它们可以测试单个单元:单个类,单个方法,对该方法的行为进行单个声明。 您可能需要模拟(同样,这取决于您对模拟的宗教观点)。

    就我所知,集成测试意味着它可以从外到内测试您的代码的已部署(或至少可部署)版本,并尽可能接近“用户”的工作。 如果要构建网站,请使用Selenium WebDriver 。 如果要编写Web服务,请编写一个测试客户端,并向正在运行的服务实例发出请求。 尽可能地超出代码范围,以模仿用户将要执行的操作,并做到这一点。 测试您的代码在集成后是否真正有效。

    在这两种极端之间,存在着不同程度的混乱,有人将其称为集成测试。 例如,通过实例化您的请求处理程序类并以编程方式将请求传递给它,从而使其通过数据库运行,来测试Web服务。 这肯定不是单元测试,因为它正在打击数据库。 但是,这不是一个完整的集成测试,因为它错过了一层:如果对服务的HTTP请求从未路由到处理程序,该怎么办呢?

    那是什么问题

    集成测试很慢。 根据定义,您正在与一个正在运行的应用程序进行交互,然后必须启动,设置,与之交互,拆除并清理。 您将永远无法获得与单元测试一样的速度。 我刚开始使用Visual Studio的后台测试运行程序NCrunch很棒 ,但是您不能一直运行缓慢,昂贵的集成测试。 如果您的单元测试需要30秒钟才能运行,我敢打赌,您需要在每次检入之前运行它们。 如果您的集成测试需要20分钟才能运行,那么我敢打赌您不要运行它们

    您最终可能会复制较低级别的测试。 如果您遵循编写失败的集成测试的典型两级方法,那么编写失败的单元测试然后通过,直到最终您的集成测试通过–集成测试和单元测试的内容之间不可避免地存在重叠。 这是预期的,是设计使然,但看起来像重复。 当您的功能更改时,您将至少有两个测试要更改。

    它们并不总是很容易 。 如果要测试特定案例,则需要完全正确地设置环境。 如果您的应用程序与其他服务/系统交互,则必须对它们进行打桩,以便提供罐装数据。 这可能是不平凡的。 在我工作过的大多数环境中,建立良好的集成测试所产生的最大成本是建立测试基础架构的所有必要弊端:伪造Web服务,第三方,消息传递系统,数据库等等。 这都需要时间和维护,并且会减慢您的开发过程。

    最后,集成测试最终可能会反复覆盖应用程序中不感兴趣的部分,这意味着某些更改在更新测试方面非常昂贵。 例如,如果您的应用程序具有中央菜单系统并且您对其进行了更改,则需要更改多少个测试用例? 如果您的网站有一个登录表单,并且您在很大程度上改变了流程,那么有多少个测试用例需要一个登录用户?

    使用页面对象模式之类的模式,您可以对测试进行编码以最大程度地减少这种情况,但是要完全避免此类失败并不总是那么容易。 我在太多公司工作过,即使出于最好的意图,集成测试最终仍以某种工作方式锁定,您要么坚持要么宣布破产,然后删除失败的测试。

    那有什么好处呢?

    集成测试使您有信心从用户的角度来看应用程序是否可以正常工作。 我绝不建议使用集成测试来涵盖所有可能的极端情况–但是,对某项功能和故障情况的满意测试可以使您对任何给定功能的最基本方面都能发挥作用充满信心。 您可以进行单元测试的复杂情况,但是整体集成测试可以帮助您确保功能已基本集成,并且您不会错过任何明显的单元测试无法涵盖的内容。

    您的集成测试可以非常接近验收测试。 如果您使用的是BDD类型方法,那么您应该得到足够技术用户可以理解的,易于阅读的测试定义。 这可以帮助您验证基本功能是否符合用户的期望 ,而不仅仅是其功能是否符合您的期望。

    怎么了?

    问题是如果很难编写集成测试,就不会编写。 您会发现需要投资的另一项测试基础架构,决定这次不值得,并跳过它。 如果您的方法依靠集成测试来获得应用程序各个部分的适当覆盖率(尤其是对于UI层而言),那么跳过它们意味着您最终得到的覆盖率会比您想要的少得多。

    不久前,我正在开发WPF桌面应用程序–我想为其编写集成测试。 用于测试WPF应用程序的不同库基本上都是废话。 他们每个人都无法以某种令人讨厌的关键方式满足我的需求。 我想要的是WPF的WebDriver。 所以我开始写一个。 问题是,Windows UI事件系统的多变意味着这很难 。 在花了很多时间投资于测试基础结构而不是编写集成测试之后,我仍然只有一个几乎无法使用的测试框架,使所有常见情况都无法测试。

    因为我无法编写集成测试,并且无法对WPF UI代码进行单元测试,所以我只能对最核心的内部功能进行单元测试-这使WPF UI层的大部分内容都未经测试。 最终,很明显,这是不可接受的,我们回到了编写单元测试(和单元测试)的老式方法,以使用某些源代码以XML编写时获得了接近实际的100%覆盖率。 。

    这使我们回到了一个完整的圈子:我们对某个功能拥有良好的单元测试覆盖范围,但是没有集成测试可以验证所有不同的单元是否正确地结合在一起并可以在已部署的应用程序中工作。 但是,如果要权衡取舍的是很少的测试覆盖范围或带有系统盲点的不错的测试覆盖范围,那么最好的选择是什么?

    结论

    您应该编写集成测试吗? 如果可以的话,轻松:是的! 如果您正在编写Web服务,那么为几乎所有其他类型的应用程序编写集成测试容易得多。 如果您正在编写一个相对传统的,不是JavaScript过多的网站,则WebDriver非常棒(这是获得良好的跨浏览器信心的唯一实用方法)。 如果您要编写非常复杂的UI代码(WPF或JavaScript),则可能很难编写体面的集成测试。

    这是您的测试方法与体系结构模糊的地方:尽可能多的体系结构需要简化测试。 对应用程序的结构进行细微的更改可能会更容易获得体面的测试覆盖率:您可以设计应用程序以使其易于独立地测试不同的元素(例如,从业务逻辑服务中分离出UI层); 您没有得到完全集成的测试,但可以最大程度地减少错误通过漏洞的机会。

    从根本上说,是否编写集成测试是一个问题,即要选择哪种体系结构以使您对代码有信心,就必须选择哪种测试。

    翻译自: https://www.javacodegeeks.com/2014/03/are-integration-tests-worth-the-hassle.html

    集成测试是接口测试吗

    展开全文
  • 集成测试计划模板

    热门讨论 2011-10-25 12:56:39
    【描述集成测试执行启动的约束准则。】 如, 配置管理员提交给测试组每次build的正确版本及集成的模块清单。 测试环境通过检验之后。 测试结束准则 【描述集成测试执行结束的约束准则。】 如,测试案例全部执行...
  • 但是,但我们需要对系统进行集成测试的时候,需要启动服务主机,利用浏览器或者Postman 等网络工具对接口进行集成测试,这就非常的不方便,同时浪费了大量的时间在重复启动应用程序上;今天要介绍就是如何在不启动...
  • sonar集成测试结果配置

    千次阅读 2015-05-16 18:24:37
    Sonar显示failsafe与jacoco集成测试结果数据

    在http://blog.csdn.net/cloud_ll/article/details/45290169中我介绍了如何使用failsafe实现自动化集成测试。那么肯定就需要对集成测试的测试用例的测试覆盖度进行统计。sonar中可以很容易的加入集成测试报告。

    首先,在集群测试failsafe配置中,为了测试代码覆盖度,需要使用jacoco或者cobertura等工具来帮助检查代码的运行时执行情况。这里分2种情况:

    1. 对于测试用例是通过failsafe内部执行的用例,在failsafe插件configuration中加入argLine节点($agent指向jacoco agent,$file指明分析结果文件路径,includes指明哪些文件要分析):

    <argLine>-javaagent:${jacoco.agent.path}=destfile=${jacoco.file.path}</argLine>,includes=com.cloud.*
    2. 对于测试用例是请求与外部容器中war交互的,需要在容器的启动中加入jacoco启动参数。


    其次运行集成测试(mvn:verify),然后执行mvn -Dsonar.jacoco.itReportPath="${jacoco.file.path}" sonar:sonar,将集成测试结果导入sonar数据库中。


    最后很重要的一点,我第一次搭建sonar环境时也犯过的问题,没有在sonar中通过configure widgets加入integration显示。自己研究了半天还以为是哪个步骤出错了,真心汗。。。

    最后给个成功后的图片:



    展开全文
  • Web集成测试:在嵌入式的Servlet容器(Tomcat,Jetty)里启动应用程序,在真正的应用服务器里进行测试。 Spring Mock MVC :能在一个接近真实的模拟Servlet容器里启动应用程序,而不用实际启动应用服务器,相当于...
  • 软件测试—十三章集成测试

    千次阅读 2020-06-23 11:36:15
    集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。 在使用黑盒测试技术测试大型应用程序时,涉及多个彼此紧密耦合的模块的组合。我们可以应用集成测试技术...
  • Maven使用failsafe实现集成测试

    千次阅读 2015-05-16 15:24:47
    使用mock之后单元测试可以完全不依赖外界环境,比如database...Mock测试带来的问题就是各个类,模块之间的集成测试完全没有做,这个时候就需要集成测试。单元测试maven有surefire插件实现自动化,集成测试则有failsaf
  • Springboot集成测试MockBean踩坑记录

    千次阅读 2019-10-03 12:22:29
    前提:之前给自己的代码写单元测试习惯使用Mokito、MockMvc,这次是需要对自己写的grpc接口进行一个集成测试,由于刚接触grpc,所以我需要通过集成测试保证grpc的调用是顺利的。 在真实方法中,我需要使用...
  • 集成测试集成测试需要启动服务,并且连接数据库,因此配置这一块要做到位。本人之前没有接触过SpringBoot集成测试,故踩了以下3个大坑,希望分享给大家! 问题1:SpringBoot的自动装配、yml文件都无法导入 在测试...
  • 单元测试、集成测试、系统测试和验收测试、冒烟测试、回归测试、随机测试、探索性测试和安全测试 前言:项目前期、中期至发布后测试启动前后我们一般要经历的几种测试方法。
  • maven执行单元和集成测试

    千次阅读 2015-02-12 15:25:45
    1.集成测试2.设置maven jetty插件自启动3.集成测试两种方式4.... 集成测试是对功能的测试,对于大部分web模块来说需要启动web容器,进行集成测试   maven生命周期中已经包含测试(test)和集成测试(integratio
  • 下面,结合CI和CD两种不同软件生产实践,总结一下如何从零开始部署一套web集成测试环境。 1.服务器准备。根据项目和使用的中间件的规模,准备好一个或多个资源配置能够满足要求的服务器,一般选用linux下 centos的...
  • 从整体的角度可以分为单元测试、集成测试、系统测试、确认测试。 下面内容来自网络相关资料的整理: 1.单元测试 (1)定义:单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验...
  • 8-1 集成测试

    千次阅读 2019-04-11 15:41:10
    1.什么是集成测试(integration testing) 集成测试就是在单元测试的基础上,将所有已通过单元测试的模块按照概要设计的要求组装为子系统或系统,并进行测试的过程,目的是确保各单元模块组合在一起后能够按既定意图...
  • 【软件测试】集成测试和系统测试

    千次阅读 2017-01-10 14:41:56
    1.1 软件集成测试前的准备 ◇人员安排 ◇测试计划 ◇测试内容 ◇集成模式 ◇测试方法 1.2 集成测试的模式 渐增式测试模式与非渐增式测试模式  非渐增式测试模式:先分别测试每个模块,再把所有模块按...
  • 从整体的角度可以分为单元测试、集成测试、系统测试、确认测试。 下面内容来自网络相关资料的整理: 1.单元测试 (1)定义:单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的...
  • Spring 单元测试和集成测试

    千次阅读 2012-08-21 19:08:59
    集成测试:将模块整合到一起后进行的测试,它的目的是在于发现一些模块间整合的问题。 原则:You shoule not normally use the Spring container for unit tests:simply popolate your POJOs in plains Junit tests...
  • 集成测试和单元测试覆盖率合并

    千次阅读 2016-04-07 23:29:54
    首先要明白一点,maven里单元测试和集成测试的java是混合在一起的,没有默认的目录。需要你自己去配置哪些时单元测试,哪些是集成测试。 默认不跑,只有安装了surfire插件才跑单测,只有安装了failureSafe才跑test...
  • SpringBoot Test集成测试

    万次阅读 2017-06-09 09:12:29
    如何测试SpringBoot的请求?使用spring-boot-starter-test这个包即可完成测试,SpringBoot项目为什么需要测试本章不作过多说明,重点放在测试代码上。 使用说明 导包 gradle项目 compile group: '...
  • 文章目录gitlab CI中单元测试与集成测试的研究与实践配置说明GitlabGitlab RunnerSonarqubeCI流程图需要解决的问题代码编写项目代码单元测试Service单元测试Controller单元测试集成测试提供专门用于测试的配置文件...
  • Flutter测试应用: 如果APP较小,手动测试即可。当页面达到几十个的时候,一套完整的自动化测试将有助于确保应用在发布之前正确执行,同时快速修复错误。 自动化测试方法: 单元测试测试单一功能、方法、...
  • 利用Docker和JUnit进行集成测试

    千次阅读 2018-05-23 10:43:38
    利用Docker和JUnit进行集成测试 1.前言 “集成测试的目的是验证各组件之间的通信路径与交互以检测接口上的缺陷” ——敏捷开发创始人Martin Fowler 随着云端服务的普及,微服务架构开始应用于越来越多...
  • 这个自动化测试系统包括了三个部分:集成测试,系统测试,基于模块的测试。其中集成测试构建于Junit之上,使用了模拟器。通过这个集成测试系统提供的各种各样的功能,开发人员可以快速的写出测试用例,用于验证一个...
  • 友盟推送SDK,集成测试,问题和集成注意事项
  • Jenkins+Docker搭建持续集成测试环境

    千次阅读 2016-07-18 16:11:42
    原文链接:http://www.zjbonline.com/2016/03/05/Jenkins-Docker搭建持续集成测试环境/ 本文将重点讨论在Jenkins管理的持续集成以及测试的环境中,我们如何通过引入Docker来优化资源的配置,提高整个环境...
  • 本文描述集成测试的测试计划、测试活动过程、测试用例及执行等三部分内容实践,每部分仅举例部分实际内容供参考,以及相关测试规范。 文中推荐使用UML时序图做为测试用例中测试步骤描述。
  • Hadoop集群下进行集成测试的小策略

    千次阅读 2013-12-14 20:23:48
    对于maven工程来说,默认的integration test是作为构建周期的一个phase进行的,这对一般的工程进行集成测试来说是很方便的,但是对于Hadoop(或HBase)项目来说是不太适合的,主要是因为一方面它们的应用都是在集群...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 241,745
精华内容 96,698
关键字:

启动服务集成测试