您的位置:首页 > 其它

软件测试基础

2020-02-28 01:58 127 查看

软件测试员的目的是尽可能早地找出软件缺陷,并确保其得以修复。

一、检查产品说明书

  • 黑盒测试和白盒测试

黑盒测试(black-box testing):

       在黑盒测试中,测试员不需要知道软件是如何运行的,只要进行一些输入,就能得到某种输出结果。黑盒测试又叫功能性测试(functional testing)或者行为测试(behavioral testing)。

白盒测试(white-box testing):

      在白盒测试中,测试员可以访问代码,并通过检查代码的线索来协助测试。测试员根据代码检查结果判断或多或少可能出错的数目,并以此定制测试。白盒测试有时称透明盒测试(clear-box testing)。

  • 静态测试和动态测试

静态测试(static testing):是指测试不运行的部分--只检查和审核。

(测试产品说明书就属于静态黑盒测试,无论产品说明书是文字还是图片格式,都可以用静态黑盒测试。)

动态测试(dynamic testing):使用和运行软件。

  • 审查产品说明书的高级技术

  1. 假设自己是客户:了解客户的需求,熟悉软件应用领域的相关知识(业务知识),注意同时不要忘记安全性的考虑。
  2. 研究现有的标准和规范:包括(客户)公司管用语和约定、行业要求、政府标准、GUI、安全标准;测试员不是制定标准,而是要检查采用的标准是否正确、有无遗漏。
  3. 审查和测试类似软件:审查竞争产品的规模、复杂性、测试性、质量和可靠性、安全性。(除自己使用测试外,要看看软件评价方面的文章或内容,有利于发现的缺陷)
  • 在详细审查产品说明书时的注意事项

  1. 产品说明书属性检查清单:完整(是否有遗漏)、准确(既定解决方案与目标定义)、清晰(描述和解释易看懂易理解)、一致(功能间无冲突)、贴切(描述的功能与客户需求符合,无需冗余信息)、合理(进度在现有资源能实现)、代码无关(定义产品而不是代码架构)、可测试性(给提供测试员建立验证操作的信息)
  2. 问题用于检查清单:

(1)总是、每一种、多有、没有、从不:太过于绝对

(2)当然、因此、明显、显然、必然:意图说服你接收假定情况

(3)某些‘、有时、常常、大多、几乎:太过模糊

(4)等等、诸如此类、例如、以此类推:以这些词结束的功能清单无法测试,会让人产生迷惑

(5)良好、廉价、稳定、小、迅速、高效:无法量化的词,无法测试,需进一步定义其含义

(6)处理、进行、跳过、排除:包含大量需要说明的功能

(7)如果...那么...:

 

二、黑盒测试

  • 动态黑盒测试:不深入代码细节测试软件的方法

      测试员像用户一样使用软件,输入数据、接收输出、检验结果。

      测试用例是指进行测试时使用的特定输入,以及测试软件的过程步骤。

  • 软件的基本测试方法

    通过性测试(test-to-pass):运行简单直接的测试用例,确认软件至少能做什么
  • 失效性测试(fail-to-pass):纯粹为了破坏软件而设计和执行的测试用例
  • 设计测试用例的方法

  • (1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强;

    (2)必要时用等价类划分方法补充一些测试用例;

    (3)用错误推测法增加一些测试用例;

    (4)检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例;

    (5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法

     

    等价类划分(equivalence partitioning):分步骤把海量的测试用例集减得很小,但过程同样有效。

            一个等价类或一个类划分是指测试相同目标或者暴露相同缺陷的一组测试用例。

             无效等价类:不满足程序输入要求或者无效的输入数据构成的集合。使用无效等价类,可以鉴别程序异常情况的处理。

             有效等价类:输入完全满足程序输入的规格说明,有效、有意义的输入数据所构成的集合。

     

    • 数据测试等价划分时关键原则:

    (1)边界条件:是指软件运行在计划操作界限的边界的情况

           测试边界时,还需测试边界的两边,包括临近边界的有效数据和超出边界的无效数据。

    (2)次边界条件

          2的幂:数据传输量

          ascii表:字母与符号的分界

    (3)默认、空白、空值、零

           一定需建立处于以上情况的等价划分

    (4)非法、错误、不正确、垃圾数据

          这些是失效性测试对象!

    • 状态测试:

    (1)逻辑流程

           建立状态转化图:

                软件每一种独立状态;进入另一种状态所需的输入和条件;进入或退出状态的设置条件和输出结果

          减少要测试的状态及转换的数量:

                每种状态至少访问一次;最常见的转化状态;最不常用的分支;所有错误状态及其返回值;测试随机状态转化

          怎么进行具体测试

    (2)失败状态测试

          竞争条件和时序错乱:多任务

          重复、压迫和负重:

                 重复测试(主要是查是否存在内存泄漏);

                压迫测试(在不够理想的条件下运行);

                负重测试(条件充足的条件下,处理尽可能大的文件)。

    • 其他黑盒测试

    (1)像新用户一样使用软件

    (2)在已经找到缺陷的地方再找找

    (3)像黑客一样找漏洞

    (4)凭借经验、直觉和预感

     

    三、白盒测试

    静态白盒测试

    • 静态白盒测试:是在不执行软件的条件下,有条理地仔细审查软件设计、体系结构和代码、从而找出软件缺陷的过程,有时称为结构化分析

    • 正式审查:确定问题;遵守规则;准备;编写报告。

    • 好处:

            在开发早期发现问题,降低修复的时间成本和经济成本;

            测试员可以更好了解软件,与程序员建立良好关系;

            项目状态可以传达给测试成员。

    • 编码规范和标准
    • 如何从整体审查代码错误

    (1)数据引用错误:是否引用未初始化数据;下标;常量变量;变量赋值;指针分配内存;数据结构定义

    (2)数据声明错误:声明是是否初始化;变量名声;未引用变量;

    (3)计算错误:数据类型;长度;溢出;除数/模为0;精度丢失;运算优先级;

    (4)比较错误:

    (5)控制流程错误:各个循环能否终止;能否永不执行;

    (6)子程序参数错误

    (7)输入/输出错误

    (8)其他检查:其他语言;拓展ascii码;是否要移植;兼容性;警告和提示

    动态白盒测试

    • 动态白盒测试:是指利用查看代码功能和实现方式得到的信息来确定哪些需要测试,哪些不要测试,如何展开测试。也叫结构化测试
    • 调试和动态白盒测试

           动态白盒测试的目标是寻找软件缺陷;

          调试的目标是修复缺陷。

    • 单元和测试集

           单元测试(底层)---> 集成测试(模块的组合)-----> 系统测试(产品)

           单元测试:1.编写测试驱动(或测试桩)以独立于其他部分的形式测验模块

                             2.分析说明书,确定黑盒测试用例,等价类划分减少测试用例集合

                             3.查看代码函数实现,利用模块的白盒知识增减测试用例

         单元测试的策略:逻辑覆盖、循环覆盖、同行评审、桌前检查、代码走查、代码评审、景泰数据流分析

          非增量式集成测试:对所有模块进行个别的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。

          增量集成测试:集成是逐步实现的,即逐次将未曾集成测试的模块和已经集成测试的模块(或 子系统)结合成程序包,再将这些模块集成为较大系统,在集成的过程中边连接边测试,以发现连接过程中产生的问题。包括:自顶向下增量式测试、自底向上增量式测试、混合增量式测试。

          自顶向下集成(Top-Down Integration)方式是一个递增的组装软件结构的方法。从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。

        (1)该方在早期发现顶层的错误。    

        (2)早期的程序框架可以进行演示。

        (3)需要开发桩模块辅助测试。有些甚至需要多个桩模块辅助,加大了桩模块本来的错误影响。    

        (4)测试完一个上层模块后,挑选哪个模块作为下一个测试模块,以及测试的顺序没有唯一的界定标准。  

     优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。    

    缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。    注意;自底向上才需要驱动开发模块。
     

          自底向上的集成(Bottom-Up Integration)方式是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。

        (1)I/O操作可以提前测试,更好提交测试用例。

        (2)测试后比较容易观察输出。

        (3)需要开发驱动模块。 

        (4)直到最后一个模块提交,程序才能完整的系统测试。

       优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。

       缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
     

         混合式集成测试(mixed testing)在实际中测试通常是结合了自顶向下和自底向上这两种方法,也称作三明治式集成测试(sandwich testing)

    • 数据覆盖测试

     (1)数据流:在调试器中跟踪观察中间值

    (2)次边界

    (3)公式和等式

    (4)错误强制error forcing:强制改变变量的值(需注意值的合法性)

    • 代码覆盖测试(code coverage):程序的状态和流程

             工具:代码覆盖率分析器

    (1)程序语句和代码行覆盖:

             语句覆盖是最起码的结构设计要求,语句覆盖要求设计足够多的测试用例,使程序中每条语句至少被执行一次。

    (2)分支覆盖:

             使程序中每个判定至少有一次为真值,有一次为假值,即程序中的每个分支至少执行一次。每个判断的区真、取假至少执行一次。

    (3)条件覆盖:

             判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,一次为假值。

    (4)判定/条件覆盖:

            判定中的每个条件获得各种可能的结果至少出现一次,每个判定本身所有可能的结果也至少出现一次。

    (5)组合覆盖:

            判定中条件结果的所有可能组合至少出现一次。

    (6)路径覆盖:

            覆盖程序中所有可能的路径。

     

    小结:

    • 测试分类:个人审查、抽查和审查、黑盒测试、白盒测试
    • 黑盒测试方法:等价类划分、边界值分析法、因果图法、错误推测法、综合策略、正交分析法、用于软件的确认测试
    • 白盒测试方法:逻辑覆盖方法(包括语句覆盖、判断覆盖、条件覆盖、判断条件覆盖、条件组合覆盖、路径覆盖)、程序插桩技术、基本路径法、符号测试、错误驱动测试
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: