软件质量保证与测试知识点总结

简介: 【2月更文挑战第21天】软件质量保证与测试知识点总结

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个等级,如下图所示。每个等级定义一组过程能力目标,并且表述了能够达到这些过程能力目标的实践活动。

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.软件测试和软件调试的区别

软件开发过程中,需要对程序进行测试和调试,测试和调试的含义完全不同。
测试是去发现软件中的问题的过程,是一个可以系统进行的有计划的过程,可以事先确定测试策略,设计测试用例,可以把测试结果和预期的结果进行比较。测试发现的不一定是错误本身,而可能只是错误的外部征兆或表现。

调试是在发现错误之后消除错误的过程。调试应充分利用测试结果和测试提供的信息,全面分析,先找出错误的根源和具体位置,再进行修正,将错误消除。
从职责上说,测试工作只需要发现错误即可,并不需要修正错误,而调试的职责就是要修正错误。软件开发者有时需要同时肩负这两种职责,对自己开发的程序进行测试,发现问题,并对其进行调试,修正错误。
后消除错误的过程。调试应充分利用测试结果和测试提供的信息,全面分析,先找出错误的根源和具体位置,再进行修正,将错误消除。
从职责上说,测试工作只需要发现错误即可,并不需要修正错误,而调试的职责就是要修正错误。软件开发者有时需要同时肩负这两种职责,对自己开发的程序进行测试,发现问题,并对其进行调试,修正错误。

目录
相关文章
|
1天前
|
机器人 测试技术 语音技术
LabVIEW使用软件定义进行汽车电子测试
LabVIEW使用软件定义进行汽车电子测试
|
1天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
5 0
|
4天前
|
人工智能 大数据 测试技术
深入探索软件自动化测试的未来
【5月更文挑战第8天】随着科技的不断发展,软件测试领域正经历着前所未有的变革。本文将深入探讨软件自动化测试的现状与未来,从人工智能、大数据和云计算等方面分析其对软件测试的影响,以及如何利用这些技术提高测试效率和质量。
|
8天前
|
机器学习/深度学习 人工智能 算法
深入探索软件自动化测试的优化策略
【5月更文挑战第4天】 随着软件开发周期的不断缩短和发布频率的增加,传统的手动测试方法已无法满足快速迭代的需求。因此,本文聚焦于自动化测试流程的优化,旨在提高测试效率和质量。文章首先回顾了自动化测试的基本概念与实施条件,随后分析了当前自动化测试面临的主要挑战,包括维护成本高、测试用例设计复杂等问题。在此基础上,提出了一系列优化策略:持续集成环境下的自动化测试、数据驱动测试、关键字驱动测试、以及基于人工智能的测试用例生成和维护等。通过案例分析和性能评估,验证了这些策略在提升测试覆盖率和减少人工干预方面的有效性。
|
8天前
|
机器学习/深度学习 敏捷开发 人工智能
探索软件自动化测试的未来趋势
【5月更文挑战第4天】 在快速发展的信息时代,软件已成为支撑现代社会运行的核心力量。随之而来的是软件测试领域面临的挑战和机遇,特别是自动化测试技术。本文将深入探讨自动化测试的最新发展,分析其对提高软件开发效率、降低维护成本的重要性,同时预测未来可能的技术趋势。通过实际案例分析和最新研究动态的梳理,旨在为读者呈现一个清晰的自动化测试技术蓝图。
|
11天前
|
测试技术 持续交付 数据安全/隐私保护
深入理解软件自动化测试中的数据驱动策略
【5月更文挑战第1天】 在软件测试领域,自动化测试已经成为提高测试效率和质量的重要手段。其中,数据驱动测试(DDT)作为一种高效实施自动化测试的策略,允许测试用例与测试数据分离,增强了测试脚本的可维护性和灵活性。本文将详细探讨数据驱动测试的核心概念、实现方式以及在实际中的应用案例,帮助读者更深入地理解如何利用数据驱动策略优化自动化测试流程。
|
11天前
|
Java 测试技术 开发者
深入理解与应用单元测试:软件质量的守护者
【4月更文挑战第30天】 在现代软件开发过程中,单元测试作为保障代码健康的重要环节,其地位日益凸显。本文将探讨单元测试的核心概念、实施单元测试的重要性以及如何高效地设计并执行单元测试。通过实例分析,我们将揭示单元测试在确保软件产品质量和加速开发周期中的关键作用。
|
21天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
115 7
性能工具之emqtt-bench BenchMark 测试示例
|
15天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
4天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
13 0

热门文章

最新文章