软件测试在软件可靠性与安全性方面的重要意义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试在软件可靠性与安全性方面的重要意义
目录
引言
第一章、软件测试的基本概述
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)。