完整在gitee
1.简述软件测试的意义
随着计算机技术的迅速发展和广泛深入的应用,软件质量问题已成为开发和使用软件人员关注的焦点。而由于软件本身的特性,软件中的错误是不开避免的。不断改进的开发技术和工具只能减少错误的发生,但是却不可能完全避免错误。因此为了保证软件质量,必须对软件进行测试。软件测试是软件开发中必不可少的环节,是最有效的排除和防治软件缺陷的手段,是保证软件质量、提高软件可靠性的最重要手段。
2.什么是软件缺陷?它的表现形式有哪些?
从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需实现的某种功能的失效或违背。
它的表现形式主要有以下几种:
(1)软件未达到产品说明书中已经标明的功能;
(2)软件出现了产品说明书中指明不会出现的错误;
(3)软件未达到产品说明书中虽未指出但应当达到的目标;
(4)软件功能超出了产品说明书中指出的范围;
(5)软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良。
3.”软件测试能够保证软件的质量”这句话对吗?软件测试和软件质量之间是什么关系
不对。软件测试是保障软件质量的手段之一,但不是唯一手段。测试是产品高质量的必要非充分条件,软件测试不能决定软件质量。
4.分别解释什么是静态测试、动态测试、黑盒测试、白盒测试、人工测试和自动化测试。
所谓静态测试是指不运行被测软件,仅通过分析或检查等其他手段达到检测的目的。
所谓动态测试是指通过运行被测软件,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。
黑盒测试是指在对程序进行的功能抽象的基础上,将程序划分成功能单元,然后对每个功能单元生成测试数据进行测试。用这种方法进行测试时,被测程序被当作打不开的黑盒,因而无法了解其内部构造,因此又称为功能测试。
白盒测试又称为结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。
广义上,人工测试是人为测试和手工测试的统称。人为测试的主要方法有桌前检查,代码审查和走查。手工测试指的是在测试过程中,按测试计划一步一步执行程序,得出测试结果并进行分析的测试行为。
自动化测试指的是利用测试工具来执行测试,并进行测试结果分析的测试行为。
9.在单元测试中,所谓单元是如何划分的?单元测试的主要任务是什么?
单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。
单元测试的主要任务是:模块接口测试;局部数据结构测试;路径测试;错误处理测试;边界测试。
10. 如果开发时间紧迫,是否可以跳过单元测试而直接进行集成测试?为什么?
不可以。因为没有经过单元测试的模块会遗留大量的缺陷到集成测试阶段,而在集成测试阶段对这些缺陷定位困难,导致后续工作展开困难,修复缺陷成本成指数级增长。
11.什么是回归测试?什么时候进行回归测试?
回归测试就是重新运行现有测试用例测试原有功能,以便确定变更是否达到了预期的目的,检查变更是否损害了原有的正常功能。每当软件发生变化时就应进行回归测试。
12.集成测试有哪些不同的集成方法?简述不同方法的特点。
集成测试通常有一次性集成、自顶向下集成、自底向上集成和混合集成4种集成方法。
一次性集成方法需要的测试用例数目少,测试方法简单、易行。但是由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大;如果一次集成的模块数量多,集成测试后可能会出现大量的错误,给程序的错误定位与修改带来很大的麻烦;即使集成测试通过,也会遗漏很多错误进入系统测试。
自顶向下集成在测试的过程中,可以较早地验证主要的控制和判断点;一般不需要驱动程序,减少了测试驱动程序开发和维护的费用;可以和开发设计工作一起并行执行集成测试,能够灵活的适应目标环境;容易进行故障隔离和错误定位。但是在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;桩模块不能反映真实情况,重要数据不能及时回送到上层模块,导致测试不充分;涉及复杂算法和真正I/O的底层模块最易出问题,在后期才遇到导致过多的回归测试。
自底向上集成可以尽早的验证底层模块的行为;提高了测试效率;一般不需要桩模块;容易对错误进行定位。但是直到最后一个模块加进去之后才能看到整个系统的框架;驱动模块的设计工作量大;不能及时发现高层模块设计上的错误。
混合集成具有自顶向下和自底向上两种集成策略的优点,但是在被集成之前,中间层不能尽早得到充分的测试。
13.分析比较面向对象的软件测试与传统的软件测试的异同。
传统的单元测试的对象是软件设计的最小单位——模块。当考虑面向对象软件时,单元的概念发生了变化,此时最小的可测试单位是封装的类或对象,而不再是个体的模块。传统单元测试主要关注模块的算法实现和模块接口间数据的传递,而面向对象的单元测试主要考察封装在一个类中的方法和类的状态行为。
面向对象软件没有层次的控制结构,因此传统的自顶向下和自底向上集成策略就不再适合,它主要有以下两种集成策略: 基于类间协作关系的横向测试;基于类间继承关系的纵向测试。
系统测试一般不考虑内部结构和中间结果,因此面向对象软件系统测试与传统的系统测试差别不大。
面向对象软件测试的整体目标和传统软件测试的目标是一致的,即以最小的工作量发现尽可能多的错误,但是面向对象测试的策略和战术有很大不同。测试的视角扩大到包括复审分析和设计模型,此外,测试的焦点从过程构件(模块)移向了类。
14.用种子模型法估算软件中存在错误数的困难在哪里?请举例说明。
(1)人为植入错误较为困难
(2)错误被发现的难易程度不一样,被插入的错误并不一定能代表各种可能的错误,估算结果不一定准确。
例子:在开始测试前向被测软件人为插入10个bug,均是已知类型的常见错误。经过一段时间测试以后这10个错误都被发现了,这样一来根据种子模型估算方法,软件中隐藏的错误数估算为0,显然是不合理的。
15.两个小组独立地测试同一个程序,第一组发现35个错误,第二组发现23个错误,在两个小组发现的错误中有16个是共同的。(1)根据Hyman估算法可以估计程序中的错误总数是多少个?(2)运用Hyman估算法时需要注意什么问题?
答案解析:
(1)35×23÷16≈50
(2)当两组测试人员具有较高相关性时,Hyman估算方法会有较大误差。
16.软件产品质量特性是什么?什么是软件质量保证? 其主要任务是什么?
软件产品质量特性指的是软件产品满足使用要求的程度,就是高质量的软件系统能够准时交付给用户,所耗费的成本不超出预算,且能够正常地运行。
软件质量保证(Software Quality Assurance, SQA)就是保证软件质量的一系列系统性的活动,它是建立一套有计划,有系统的方法,向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
软件质量保证的主要任务是向所有有关的人提供证据以确立软件产品的质量功能按照需求运行,它不负责高质量软件的编制,其主要职责是审计软件经理和软件工程组的质量活动,并鉴别活动中出现的偏差。
17.质量保证部门与测试部门的职责是否一样?归纳它们的共同点和不同点。不一样。
从共同点的角度看,软件测试部门和软件质量保证部门的目的都是尽力确保软件产品满足需求,从而开发出高质量的软件产品。两个流程都贯穿在整个软件开发生命周期中。
二者的不同之处在于软件质量保证部门的工作侧重对软件开发流程中的各个过程进行管理与控制,杜绝软件缺陷的产生。而测试部门工作则是对已产生的软件缺陷进行修复。
18.简述CMM的具体等级划分。
CMM将软件过程能力成熟度划分为5个等级,如下图所示。每个等级定义一组过程能力目标,并且表述了能够达到这些过程能力目标的实践活动。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBYJuWHx-1664678781500)(http://p.ananas.chaoxing.com/star3/origin/905e46c93cfb7cee90b83eb0ee3784f5)]
19.简述测试计划工作的目的是什么?测试计划工作的内容都包括什么?
测试计划的目的是明确测试活动的意图,它规范了软件测试内容、方法和过程,为有组织地完成测试任务提供保障。
测试计划的主要内容包括:测试目的、测试范围、测试对象、测试策略、测试任务、测试用例、资源配置、测试结果分析和度量及测试风险评估等,测试计划应当足够完整但也不应当太详尽。
20. 概括测试文档的含义,简述测试文档的内容。
测试文档(Testing Documentation)是测试活动中非常重要的文件,用来记录和描述整个测试流程。
整个测试流程会产生很多个测试文档,一般可以把测试文档分为两类:测试计划类文档和测试分析报告类文档。测试计划类文档描述将要进行的测试活动的范围、方法、资源和时间进度等,如测试计划、测试设计规格说明、测试用例规格说明和测试步骤规格说明等。测试分析报告类文档是对测试结果进行分析说明,说明软件经过测试以后,结论性的意见如何,软件的能力如何,存在哪些缺陷和限制等,如测试日志、测试事件报告、测试总结报告等。
21.确认和验证的区别
确认和验证(V&V):
验证 Verification 是通过检查和提供客观证据证实某一规定预期用途的特殊需求已经满足。
确认 Validation 是通过检查和提供客观证据证实规定的需求已经满足。
验证:从开发者的角度来验证产品的需求、架构设计等方面和用户要求的一致
“验证”是要证明产品恰当地反映了规定的要求,如:文档评审,要检查的东西是文档,检查标准就是文档的评审标准;又如:测试软件,要检查的东西就是软件,检查的标准就是软件的规格说明,包含功能说明、性能要求等。
确认:从用户的角度来验证产品和自己想要的一致
“确认”是要证明所提供的产品适合其设计的用途,一般来说,就是调试、验收测试等,这些工作都是在真实环境上进行的,确保软件符合使用要求。
软件确认是检查最终产品是否满足客户需求,关注于是否达到用户的原始需求,是以结果为导向的。
软件验证是检查当前阶段的产品是否保持上一阶段的产品需求,是以过程为导向的。
例如开发一个软件,如果最终离我们最初的目标有一些偏离,那么软件验证是可以通过的,因为过程没有问题,而软件确认不能通过,因为没有满足用户的原始需求。
换句话说,验证要保证“做得正确”,而确认则要保证“做的东西正确”。
22.软件质量保证QA和软件控制QC的区别
QA和QC的主要区别是:QC是保证产品质量符合规定,QA是建立体系并确保体系按要求运作,以提供内外部的信任。
同时QC和QA又有相同点:QC和QA都要进行验证,如QC按标准检测产品就是验证产品是否符合规定要求,QA进行内审就是验证体系运作是否符合标准要求;又如QA进行产品稽核和可靠性检测,就是验证产品是否已按规定进行各项活动,是否能满足规定要求,以确保交付的产品都是合格和符合相关规定的。
QC是控制质量最基础的环节,包含了所有的检验工作。而QA中是包含QC的,其核心仍在于控制质量。但是,它超出了检测的范围,还包括像培训,文件管理和审核等相关工作。质量管理则是一个更广泛的范围,它不仅包含QA和QC,还包括对质量体系的思考和管理。因此QA不仅要知道问题出在哪里,还要知道这些问题解决方案如何制订,今后该如何的预防。QC要知道如何对问题进行控制,但不一定要知道为什么要这样去控制。
QC是警察,QA是法官,QC只要把违反法律的抓起来就可以了,并不能防止别人犯罪和给别人最终定罪,而法官就是制订法律来预防犯罪,依据法律宣判处置结果.
23.软件测试和软件调试的区别
软件开发过程中,需要对程序进行测试和调试,测试和调试的含义完全不同。
测试是去发现软件中的问题的过程,是一个可以系统进行的有计划的过程,可以事先确定测试策略,设计测试用例,可以把测试结果和预期的结果进行比较。测试发现的不一定是错误本身,而可能只是错误的外部征兆或表现。
调试是在发现错误之后消除错误的过程。调试应充分利用测试结果和测试提供的信息,全面分析,先找出错误的根源和具体位置,再进行修正,将错误消除。
从职责上说,测试工作只需要发现错误即可,并不需要修正错误,而调试的职责就是要修正错误。软件开发者有时需要同时肩负这两种职责,对自己开发的程序进行测试,发现问题,并对其进行调试,修正错误。
后消除错误的过程。调试应充分利用测试结果和测试提供的信息,全面分析,先找出错误的根源和具体位置,再进行修正,将错误消除。
从职责上说,测试工作只需要发现错误即可,并不需要修正错误,而调试的职责就是要修正错误。软件开发者有时需要同时肩负这两种职责,对自己开发的程序进行测试,发现问题,并对其进行调试,修正错误。
版权归原作者 Cutele_ 所有, 如有侵权,请联系我们删除。