admin管理员组文章数量:1595926
浅谈测试开发相关知识
1.什么是测试?
(1) 测试是为了发现程序中的错误而执行程序的过程。
(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
(3) 成功的测试是发现了至今为止尚未发现的错误的测试。
2.软件测试准则
(1) 所有的测试都应该能追溯到用户需求。软件测试的目标是发现错误。从用户的角度看,最严重的错误是导致程序不能满足用户需求的哪些错误。
(2) 应该远在测试之前就制定出测试计划。实际上,一旦完成了需求模型就可以着手制定测试计划,在建立了设计模型之后就可以立即开始设计详细的测试方案。因此,在编码之前就可以对所有测试工作进行计划和设计。
(3) 把Pareto原理应用到软件测试中。Pareto原理说明,测试发现的错误中的80%很可能是由程序中20%的模块造成的。当然,问题是怎样找出这些可疑的模块并彻底的测试它们。
(4) 应该从“小规模”测试开始,并逐步进行“大规模”测试。通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。
(5) 穷举测试时不可能的。所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试。即使时一个中等规模的程序,其执行路径的排列数也十分庞大,由于受时间,人力以及其他资源的限制,在测试过程中不可能执行每个可能的路径。因此,测试只能证明程序中有错误,不能证明程序中没有错误。但是,精心地设计测试方案,有可能充分覆盖程序逻辑并使程序达到所要求的可靠性。
(6) 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。所谓“最佳效果”是指由最大可能性发现错误的测试。
3.黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。“黑盒”法着眼于程序外部结果、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且华友对哪些不合法但是可能的输入进行测试。
4.白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内不动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,百合测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数时天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些于数据相关的错误。
软件人员使用百合测试方法,主要对程序模块进行如下的检查:
对程序模块的所有的执行路径至少测试一次;
对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;
在循环的边界和运行界限内执行循环体;
测试内部数据结构的有效性,等。
具体的=包含的逻辑覆盖有:-语句覆盖-判定覆盖-条件覆盖-判定-条件覆盖-条件组合覆盖-路径覆盖。
5.白盒测试&黑盒测试的对比
白盒测试技术:深入到代码一级的测试,使用这种技术发现问题最早,效果也是最好的。该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码街富安,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,在Java平台使用Xunit系列工具进行测试,Xunit测试工具是类一级的测hi工具对每一个类和该类的方法进行测试。
**黑盒测试技术:**黑盒测试的内容主要有一下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,根据软件需求,设计文档,模拟客户场景随系统进行实际的测试,这种测试技术是使用最多的测试技术涵盖了测试的方方面面,可以考虑以下方面:
1. 正确性:计算结果,命名等方面。
2. 可用性;是否可以满足软件的需求说明。
3. 边界条件:输入部分的边界值,就是使用一般书中说的等价类划分,试试最大最小和非法数据等等。
4. 性能:正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候相应时间在可以接受范围内。J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了。如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题。
5. 压力测试:多用户情况可以考虑使用压力测试工具,建议将压力和性能测试结合起来进行。如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况,如果有必要可以模拟大量数据输入,对硬盘的影响等等信息。如果有必要的话必须进行性能优化(软硬件都可以)。这里的压力测试针对的是某几项功能。
6. 错误恢复:错误处理,页面数据验证,包括突然间断电,输入脏数据等。
7. 安全性测试:这个领域正在研究中,防火墙、补丁包,杀毒软件等的就不必说了,不过可以考虑。破环性测试时任意看了一些资料后得知,这里面设计到的知识内容可以写本书了,不是一两句可以说清的,特别是一些商务网站,或者跟钱有关,或者跟公司秘密有关的web更是需要这方面的测试,在国外有一种专门干这一行的人叫安全顾问,可以审核代码,提出安全建议,出现紧急时件时的处理方法等,在国内没有听说哪里有专门高安全技术测试的内容。
6.白盒测试和黑盒测试具体方法介绍
黑盒测试:
- 等价类划分方法
- 边界值分析
- 错误推测
- 因果图方法
- 判定表驱动分析方法
- 正交实验设计方法:取正交的测试用力组合
- 功能图分析方法
(1) 等价类划分:
把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一个子集中选取少数具有代表性的数据作为测试用例,该方法是一种重要的,常用的黑盒测试用例设计方法。等价类划分又分为两种不同的情况:有效等价类和无效等价类。
有效等价类:对于程序的 规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等加类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类:与有效等价类的定义相反。
(2) 边界值分析法:
边界值分析方法是对等价类划分方法的补充。现实情况中,大量的错误是发生在输入或者输出范围的边界上,而不是发生在输入输出范围的内部,因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况,通常输入和输出等价类的边界,就是应着重测试的边界情况,应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取边界类中的典型值或任意值作为测试数据。
(3) 错误推测法:
基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计用例的方法。
列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如,在单元测试时列出的许多在模块中常见的错误,以前产品测试中经常发现的错误等,这些就是经验的总结。还有,输入数据和输出数据为零的情况;输入表格为空格或者输入表格只有一行,这些都是容易发生错误的情况,可选这些情况下的例子作为测试用例。
(4)因果图法:
等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系。考虑输入条件之间的相互组合,可能会产生一些新的情况,但要检查输入条件的组合意识不是一件容易的事情,因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例,这就需要利用因果图。
因果图方法最终生成的是判定表,它适合于检查程序输入条件之间的各种组合情况。
利用因果图生成测试用例的基本步骤:
(1)分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果富裕一个标识符。
(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的关系,根据这些关系,画出因果图。
(3)由于预压或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
(4)把因果图转换为判定表。
(5)把判定表的每一列拿出来作为依据,设计测试用例。
从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取true与取false的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加。
前面因果图方法中已经用到了判定表。判断表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具。在程序设计发张的初期,判定表就已被当作编写程序的辅助工具了,就是因为它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确。
(5)判定表法:
判定表通常有四个部分组成:
条件桩(Condition Stub):列出了问题得所有条件。通常认为列出得条件的次序无关紧要。
动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。
动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。
判定表的建立步骤:(根据软件规格说明)
①确定规则的个数,假如有n个条件,每个条件有两个取值(0,1),故有种规则。
②列出所有的条件桩和动作桩。
③填入条件项。
④填入动作项,等到初始判定表。
⑤简化,合并相似规则(相同动作)
B.Beizer指出了适合使用判定表设计测试用例的条件:
①规格说明以判定表形式给出,或很容易转换成判定表。
②条件的排列顺序不会也不影响执行那些操作。
③规则的排列顺序不会也不影响执行那些操作。
④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。
⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。
白盒测试:
白盒测试的方法:总体上分为静态方法和动态方法两大类。
静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前,之中和之后,对软件系统香味的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。
六种白盒测试方法(强度由低到高):语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
(1)语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一条执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。语句覆盖率的公司可以表示如下:
语句覆盖率=被评价到的语句数量/可执行的语句总数*100%
(2)判定覆盖:是设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。
优点:判定覆盖具有比语句覆盖更强的测试能力,而且具有和语句覆盖一样的简单性,无需细化分割判定就可以得到测试用例。
确定:往往大部分的判定语句是多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
(3)条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支。
条件覆盖要检查每个符合为谓词的子表达式值为真和假两种抢矿,要独立衡量每个子表达式的结果,以确保每个子表达式的值为真和假两种情况都被测试到。
(4)判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。
(5)条件组合覆盖:在白盒测试法中,选择足够的测试用例,使得所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准称为条件组合覆盖。
(6)路径覆盖:是每条可能执行到的路径至少执行一次;
说明:其中语句覆盖是一种最弱的覆盖,判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖,条件组合覆盖是除路径覆盖外最强的,路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。
7.灰盒测试
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时关注程序内部的情况。黑盒测试不像白盒测试那样详细,完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、时间、表示来判断内部的运行状态。
定义:灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识和与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。
8.单元测试
在计算机编程中,单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确检验的测试工作。程序单元是应用的最小可测试部件。简单来说,就是测试数据的稳定向是否达到程序的预期。
1.Junit
Junit 是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。
Junit促进了“先测试后编码”TDD的理念,强调建立测试数据的一端代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点…”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。
TDD是Test-Driven Development(测试驱动开发)的缩写。
Junit的特点
1.开源框架
2.提供注解来识别测试方法
3.提供端来来测试预期结果
4.提高编码速度,并且提高代码的质量
5.代码优雅简洁,不复杂,减少编码时间
6.Junit测试可以自动运行并且检查自身结果并提供即使反馈。所以也没有必要人工梳理测试结果的报告。
7.Junit测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。
8.Junit在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则是红色。
Junit注解
Junit断言
9.集成测试
集成测试的含义就是将单元测试模块朱哥集成、组合,并将行为测试为组合单元。
集成测试的主要功能或目标是测试单元/模块之间的接口。
我们通常在“单元测试”之后进行集成测试。一旦创建并测试了所有单个单元,我们就开始组合这些“单元测试”模块并开始进行集合测试。
集成测试的主要功能或目标是测试单元/模块之间的接口。集合测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。
10.Code Review 代码评审
Code Review中文应该译作“代码审查”或是“代码评审”,这是一个流程,当开发人员写好代码之后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法。由此,我们可以审查代码的风格、逻辑、思路…,找出问题,以及改进代码。因为这是代码刚刚出炉的时间,所以,这也是代码重构,代码调整,代码修改的最佳时候。所以,Code Review 是编码实现中最最重要的一个环节。
版权声明:本文标题:浅谈测试开发相关知识 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728242343a1150711.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论