软件测试在软件可靠性与安全性方面的重要意义目录引言第一章、软件测试的基本概述1.1 软件测试的概念1.2 软件测试历史1.3 软件测试的挑战性1.4 不进行测试的后果1.5 测试——底线第二章、软件测试技术分类2.1 分类2.2 静态测试2.2.1源程序静态分析2.2.2人工测试2.3动态测试2.3.1白盒测试2.3.2白盒测试与调试的异同2.3.3黑盒测试2.3.4黑盒测试和白盒测试的异同2.3.5 白盒测试和黑盒测试的比较2.4测试方法的选择第三章、软件测试的规范3.1软件测试流程3.1.1 软件测试流程图3.1.2 .软件测试流程细则3.1.3软件测试注意事项3.2 软件测试的10大原则3.3 软件测试的10个最佳实践第四章、软件的缺陷4.1 软件缺陷分类4.2 产生软件缺陷的原因4.3 软件测试著名失败案例第五章、软件测试的重要性(结论)摘要软件从它诞生之日起,就受到“虫子”折磨。
所谓的“虫子”,是指寄生在软件中的故障,它具有巧妙的隐身功能,能够在关键的场合突然现身。
而软件测试就是检测软件中是否有所谓的“虫子”,从而保证新开发的软件的质量。
当一个软件推向市场时,客户最关心的是它的质量。
可以这么说,一个软件开发得是否成功完全在于客户对它的满意度。
所以,软件测试在软件开发中扮演了极其重要的角色,具有画龙点睛的作用。
而软件测试的分类很多,其研究也是一项繁重的任务。
关键词:软件测试重要性错误论文正文引言:随着软件行业在我国的发展,软件质量也越来越受到人们的关注。
因此,专业人士也开始转向软件测试这一环节。
尽管如此,我国从事这方面工作的人才还是供不应求。
所以,我们从事计算机专业的人员都非常关注这方面的发展,希望越来越多的从事计算机专业的大学生在选择工作时能够从事软件测试。
这样就能使我国软件开发行业的发展速度迅速提高,也会使我国在国际IT行业中的地位有所提升。
虽然我的专业是计算机软件,但本人对软件测试非常感兴趣,所以想发表我对软件测试的看法。
因此,我在网上查询了信息,借阅了关于软件测试的书籍。
当然,我也询问过专业老师,并得到了确切的答案。
在论文中,我阐述了软件测试的基本情况,并且具体介绍了软件测试技术的分类。
当然,最后我得出了软件测试确实非常重要的结论。
我相信读者看后对软件测试会有更加深刻的了解。
正文第一章软件测试的基本概述1.1 软件测试的概念软件测试是为了发现程序中的错误而执行程序的过程。
具体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。
1.2 软件测试历史1947年,测试等同于调试1957年,测试是为了表明程序正确而进行的1972年,测试是为发现错误而至此能够的一个程序或者系统的过程1996年,提出测试能力成熟度TCMM(Testing Capability Maturity Model),测试支持度TSM(Testability Support Model),测试成熟度TMM(Testing Maturity Model),测试工具流行。
2002年,测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。
1.3 软件测试的挑战性测试有多么困难呢?为了回答这个问题,让我们考虑下面的例子。
假设我们要测试一个简单函数,该函数将两个32位数相加并返回结果。
如果每秒钟可以执行1000个测试用例,那么彻底测试完这个函数将占用多长时间呢?如果你猜测是用几秒钟,那么这个答案差得太远了。
如果你猜测是用几分钟,这个答案还是差得太远。
即使你猜测是几小时,几天甚至是几个星期,这个答案仍然差得很远。
实际的数字是58亿5千万年。
确实,一一测试每种可能的情况是不现实的。
任何头脑清醒的人都不会试图用每一个可能的值来测试这个函数!实际上,我们会用一些形式化的、测试技术如边界分析和等价类划分等来帮助我们在测试用例中选择样本数据。
使用这些测试数据,可以假设如果函数执行满足这些样本值,那么它也将满足所有类似的值,从而将测试该函数所需的时间减少到可接受的时间范围。
而作为测试者,我们不应该这么快就满足信心,因为仍然有许多问题会使这个“简单的”函数的测试复杂化。
例如:●如果函数需要与同一应用中的其他函数互操作会怎么样?●如果计算是通过复杂的图形用户界面驱动的,用户可以以任何顺序在相应字段中键入加数并点击相应按钮来执行计算会怎么样?●如果这个函数要提交到许多配置不同的硬件平台上会怎么样?这些都是许多测试人员在他们每天的测试工作中要面临的软件系统的常见需求,这些需求使得软件系统高度复杂化,同时也使测试面临着巨大的挑战。
1.4不进行测试的后果对于那些以安全应用为主、以业务为主或以保密性为主的系统来说,以及一旦系统失败(或者诉诸法律或者失去公众信任),最终都将导致该软件失去市场的领域都有很多例子。
即使对于不是处理关键应用的系统,情况明确的系统的失败,如一个公司的网站、共享软件或演示软件的失败,仍然会对该公司有严重的商业影响,可能会失去公众的信任,有损声望。
一个缺陷很微小且难以发现,但是它们却可能会对一个公司的业务产生重大的影响。
例如,在缺陷被发现之前的某一天系统失败或无效了,那么这个公司就会损失每个相关人员的一天的人力。
如果一个未被发现的缺陷只是会引起系统性能的降低,那么用户可能根本不会意识到问题的存在。
然而,如果该缺陷导致了每天30分钟的生产率的损失,那么这个公司每年就会损耗每个人20天的人力。
1.5 测试——底线像“零缺陷软件”或“无缺陷系统”这样的说法都是夸张的说法,至多只能被看作是一个可望而不可及的目标。
实际上,由于计算机的复杂性,以及开发过程和这一过程涉及的人员易于出错,所以即使是保证一个相对简单的程序没有缺陷也是不可能的。
简言之,对一个给定系统进行充分地测试以确定其没有缺陷是不可能实现的。
当这个问题与测试资源的有限和(更典型地是)供应短缺这样的事实合并在一起时,那么充分的测试就显得有问题了。
为了尽可能多地发现并改正缺陷,测试者必须集中精力使测试过程尽可能地高效和有效。
最终,测试只会使大家确信某个给定软件系统在它的待定目标方面是可接受的。
这个级别的信任必须在决定发布或接受软件之前在系统预期的作用(如安全要求、业务要求、保密性要求、机密或情况明确的应用)和系统运行失败的风险之间进行权衡。
有效测试的关键是使过程尽可能地高效:必须采用严格的计划和项目管理;测试者必须利用他们测试技术的知识和经验指导他们策划有效的测试;在测试过程的所有阶段中必须引入和管理重用;公司要仔细考虑自动化软件测试工具的好处和作用。
第二章软件测试技术分类2.1 分类从不同的角度,可以把软件测试技术分成不同种类,如:一、从是否需要执行被测软件的角度,可分为静态测试和动态测试。
那些不利用计算运行被测程序,而是通过其他手段达到测试目的的方法称作静态测试。
常用的有以下几种:①代码检查②代码走查③桌面检查④同行评分二、从软件测试用例设计方法的角度,可分为黑盒测试(Black-Box Testing)和白盒测试(White-Box Testing)。
三、按照软件测试的策略和过程分类,软件测试可分为单元测试(Unit Testing)、集成测试(Integration Testing)、确认测试(Validation Testing)、系统测试(System Testing)和验收测试(V erification Testing)。
2.2.1源程序静态分析在静态结构分析中,测试者通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,可以清晰地标识整个软件系统的组成结构,使其便于阅读与理解,然后可以通过分析这些图表,检查软件有没有存在缺陷或错误。
通常采用以下一些方法进行源程序的静态分析。
(1)生成各种引用表①标号交叉引用表②变量交叉引用表③子程序(宏、函数)引用表④等价表⑤常数表(2)错误静态分析错误静态分析主要用于确定在源程序中是否有某类错误或“危险”结构。
①类型和单位分析②引用分析③表达式分析④接口分析2.2.2人工测试静态分析中进行人工测试的主要方法有桌前检查、代码审查和走查。
经验表明,使用这种方法能够有效地发现30%~70%的逻辑设计和编码错误。
(1)桌前检查由程序员自己检查自己编写的程序。
程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分析、检验,并补充相关的文档,目的是发现程序中的错误。
(2)代码审查代码审查是由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。
代码审查分两步。
第一步,小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为审查的依据。
小组成员在充分阅读这些材料后,进入审查的第二步,召开程序审查会。
(3)走查走查与代码审查基本相同,其过程分为两步。
第一步也把材料先发给走查小组每个成员,让他们认真研究程序,然后再开会。
开会的程序与代码审查不同,不是简单地读程序和对照错误检查表进行检查,而是让与会者“充当”计算机,即首先由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。
走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论用。
2.3动态测试软件测试的种类大致可分为人工测试和基于计算机的测试。
人工测试前面已经介绍,属于静态测试。
而基于计算机的测试属于动态测试,又可分为黑盒测试和白盒测试。
白盒测试是根据软件产品的内部工作过程,在计算机上进行测试,以证实每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
白盒测试把测试对象看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
这就是说,白盒测试是一种可视的测试软件的方法,即它把测试对象看作一个透明的盒子,测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作。
白盒测试的过程如图2—3—1所示:1、从承担的任务来看,白盒测试同其他类型测试一样,它的任务是发现所开发的项目中的缺陷;但是,调试不属于测试,其任务是纠正软件中的缺陷。
2、从最终的结果来看,白盒测试有预知的结果,不可预知的只是程序是否通过测试,并且成功测试的结果是发现错误的症状,从而引起调试的进行;而调试的结果是消除项目中的错误。
3、从执行的过程来看,测试是一个发现错误、改正错误、重新测试的过程;而调试是一个推理过程。