软件测试实践之测试需求与测试用例
- 格式:pdf
- 大小:216.37 KB
- 文档页数:7
软件测试中的需求与用例设计在软件开发过程中,需求与用例设计是至关重要的环节。
需求定义了软件系统的功能和性能要求,而用例则是对这些功能需求进行详细描述和验证的测试用例。
本文将从需求分析和用例设计两个方面进行探讨,以便更好地理解软件测试中的需求与用例设计。
一、需求分析1. 需求的定义需求是对软件系统功能、性能和约束条件的描述。
它应该具备明确、一致、完整、可验证等特点。
在需求定义阶段,需求工程师需要与业务方进行充分的沟通与交流,了解用户的真实需求,并将其转化为可执行的软件需求规格。
2. 需求的分类需求可以分为功能需求和非功能需求两种类型。
功能需求描述了软件系统应该具备的功能特点,如输入、输出、计算等。
非功能需求则描述了软件系统的性能、可靠性、安全性等方面的要求。
3. 需求的分析方法在需求分析的过程中,我们可以使用多种方法,包括故事板、用例分析、场景分析等。
其中,故事板方法常用于敏捷开发中,通过讲故事的方式描绘用户的真实场景;用例分析则是以用户视角描述系统的功能特点;场景分析则通过场景的刻画来分析用户的需求。
二、用例设计1. 用例的定义用例是对软件系统功能需求的详细描述,它包括了输入、输出、前置条件、后置条件等元素。
用例的编写应该具备可重复、可验证、完整性、一致性等特点。
2. 用例的结构用例通常由以下几个部分组成:用例标识、用例名称、参与者、前置条件、正常流程、异常流程和后置条件。
其中,正常流程描述了用户按照预期使用系统的场景,异常流程描述了用户可能发生的错误操作或系统异常情况。
3. 用例的设计原则在进行用例设计时,我们需要遵循一些设计原则。
首先,用例应该具备可读性,以方便开发人员和测试人员理解和修改。
其次,用例应该具备可扩展性,能够应对需求变更和系统扩展。
此外,用例还应该足够详细,以便于测试人员能够准确执行测试。
三、需求与用例的关系1. 需求与用例的衔接需求和用例是相互依存的,需求定义了软件系统的功能,而用例则是对这些功能的详细描述。
系统软件测试中的测试需求分析摘要:随着人们对软件工程化的重视以及软件规模的日益扩大,软件分析、设计的作用越来越突出,有资料标明,60%以上的软件错误不是程序错误,而是分析和设计错误,因此,做好软件需求和设计的测试工作就显得非常重要。
这也是我们提倡的测试概念扩大化,提倡软件全生命周期测试的理念。
关键词:系统软件测试;测试;需求;分析中图分类号:tp3111 什么是测试需求简单来说,测试需求就是确定在项目中需要测试什么。
测试需求描述测试的目标,特别是描述了产品的质量需求,测试需求分析目的是帮助定义测试对象和测试范围,发现软件需求中不完善和不明确的地方并加以完善以节省测试时间的投入,便于软件需求基线化和跟踪业务需求的变更。
一条有用的测试需求是唯一的、精确的、有边界的、可测试的。
例如:软件产品可能有这样一个测试需求“系统主要事务的响应时间能满足系统要求”。
这就是一个不符合要求的测试需求,怎样的指标是“满足”?系统的要求又是什么都不清晰,测试就无法开展。
一个完整清晰的可测试的软件测试需求是这样的:在1g内存和1.73兆主频的计算机上在25个并发用户执行插入、更新和删除操作时端到端的响应时间在3秒时间内。
符合标准的测试需求是存在一个明确的可预知的结果,可以通过某种方法对这个结果进行判断和验证测试需求应覆盖已经定义的业务流程,功能及非功能方面的需求。
2 为什么要做测试需求分析测试需求是测试计划的基础与依据,我们在测试活动中,首先需要明确测试需求(what),才能决定怎么测(how),测试时间(when),需要多少人(who),测试的环境是什么(where)。
是衡量测试覆盖率的重要指标。
确立测试需求是为了保证测试质量与进度,测试需求越详细精准,表明对所测软件的了解越深,对所要进行的任务内容就越清晰,就更有把握保证测试的质量与进度。
在软件工程项目中,存在一些普遍的现象例如:需求阶段的问题,到测试的最后阶段才被发现;开发、测试、市场等不同角色的人员对软件功能细节存在理解歧义。
软件测试实习日记(9篇)软件测试实习日记(精选9篇)软件测试实习日记篇1了解了各种测试用例的方法,之后又在实际项目中设计了一些测试用例,总体感觉就是:公司里分配写作测试用例的时间并不长,而且提供的文档也不全面,所以写测试用例要符合测试部门的当前现状和项目的测试特点,综合考虑,所以看起来有点像测试计划的某些内容,但是对问题的细化程度不一样。
测试用例的设计是一项复杂的测试工作,测试用例的设计方法需要考虑测试的目标,被测试软件的特性,测试者人力资源的技术和能力,测试组织形式,测试进度、测试成本等多个方面。
确定测试用例的输入数据确实对于测试用例非常重要,它决定着测试用例的执行效果和效率,但是确定输入测试数据只是设计测试用例的一个步骤,而不是全部。
因此,不能把测试用例的设计方法等同于测试用例数据的方法。
软件测试实习日记篇2在web服务测试当中,点击率和模拟的用户数是能够反映出服务压力的大小。
当压力变大时,事务的响应时间变长,则导致点击率会受到响应时间的影响,不会因为用户增多,而增加。
点击率在服务器出现瓶颈时,压力的增加不会增加点击率。
积累期应该是测试比较辉煌的阶段,在公司也有一定资历和地位,是幕后运筹帷幄的元帅,是能够运筹于帷幄之中,决胜于千里之外的人。
这个时候应该根据实际经验,根据公司实际情况制定章程,工作标准流程,建立自己的核心团队,团队要合理配备要有学习期的也要有成长期的人。
其实积累期的人也会彷徨,特别当前面所做的事都基本完成后,发现没有动力再次推动。
我有一测试朋友他是这么处理,创建一个团队后就离职然后到新单位再重新来一遍周而复始。
我觉得这个时期应该需要创新,包括测试本身的创新,如引入自动化测试,量化考核上,测试框架的建立等。
也可以职业进行新的规划,如搞质量管理,有得做研发管理,做测试咨询等。
软件测试实习日记篇3做测试已不知不觉有两个月了。
现在我仅自我总结以下如何做好测试计划工作。
1.明确测试的目标,增强测试计划的实用性编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。
软件测试中的测试文档和测试用例管理在软件测试过程中,测试文档和测试用例管理是至关重要的环节。
测试文档和测试用例管理的有效性和规范性,对于保证测试工作的质量和效率具有重要意义。
本文将从测试文档和测试用例的概念、作用、编写与管理流程等方面展开论述。
一、测试文档概述测试文档是软件测试过程中的重要产物,包括测试计划、测试设计、测试执行和测试报告等文档。
它们记录了测试活动的过程、方法和结果,提供给相关人员进行查询和参考。
1. 测试计划文档测试计划文档是测试工作的规划和组织文件,它详细描述了测试的目标、范围、资源、进度、风险等信息。
测试计划文档的编写应该综合考虑项目的需求和约束条件,确保测试工作有条不紊地进行。
2. 测试设计文档测试设计文档是测试用例设计的依据,它描述了测试的方法和策略。
测试设计文档应包含测试用例的编写规范、测试数据准备和测试环境配置等信息,以保证测试的全面性和有效性。
3. 测试执行文档测试执行文档记录了测试过程中的测试环境、步骤、结果和问题等信息。
它是测试人员进行测试过程管理和问题追踪的重要工具,有助于确保测试任务的完成和问题的跟踪解决。
4. 测试报告文档测试报告文档是测试结果的总结和分析,它向相关人员提供测试过程中的问题和风险评估。
测试报告文档的编写应该清晰准确地反映测试的结果和推断,为项目决策和改进提供依据。
二、测试用例管理测试用例是测试工作中的核心内容,它描述了如何执行测试,以及预期的测试结果。
测试用例管理的目标是确保测试用例的全面性、有效性和可维护性。
1. 测试用例编写测试用例编写是根据测试需求和设计文档,制定测试用例的过程。
测试用例应该覆盖功能点和边界条件等各种场景,以尽可能发现软件缺陷。
2. 测试用例执行测试用例执行是按照测试计划和设计文档,执行测试用例并记录测试结果的过程。
测试用例执行需要严格按照测试环境和测试数据准备的要求,保证测试的一致性和可重复性。
3. 测试用例管理工具测试用例管理工具是用于管理和维护测试用例的软件工具。
软件需求说明书编写中的测试用例设计与执行在软件开发的过程中,测试用例的设计与执行是非常关键的环节。
只有通过充分而有效的测试用例,我们才能够评估软件的质量和可靠性,并发现其中的潜在问题。
本文将详细介绍如何在软件需求说明书编写中进行测试用例的设计与执行。
一、测试用例设计测试用例设计是测试工作的起点,合理的测试用例设计能够降低测试的风险,提高测试的效率。
以下是测试用例设计的一般步骤:1. 理解需求:首先要全面理解软件需求说明书中的功能模块和业务需求,包括输入、输出、操作流程等。
2. 划定测试范围:根据需求文档,确定测试的边界条件和约束条件,明确测试对象的功能和非功能需求。
3. 编写测试用例:根据需求和设计文档中的功能模块,设计并编写测试用例,包括输入数据、预期输出和执行步骤。
4. 考虑异常情况:在编写测试用例时,需要考虑各种异常情况,如输入为空、输入非法数据等,以验证软件的稳定性和安全性。
5. 设计测试数据:选择合适的测试数据,包括正常数据、边界数据和异常数据,以覆盖不同情况下的功能和性能。
6. 确定测试方法:根据不同的功能和需求,选择适当的测试方法,如黑盒测试、白盒测试、性能测试等。
7. 确定测试环境:根据软件的特点和需求,确定测试环境、测试工具和测试设备,以确保测试的准确性和可靠性。
二、测试用例执行测试用例设计完成后,接下来是测试用例的执行。
在执行测试用例时,需要遵循以下步骤:1. 环境准备:在执行测试用例之前,需要准备好测试环境,包括测试设备、测试数据和测试工具等。
2. 执行测试用例:按照测试用例的步骤和预期结果,逐个执行测试用例,并记录实际结果和执行时间。
3. 记录问题和缺陷:在执行测试用例的过程中,如果发现问题和缺陷,应立即记录,并详细描述问题的具体情况和出现的条件。
4. 验证修复效果:当问题和缺陷被修复后,需要重新执行相关的测试用例,并验证修复的效果是否符合预期。
5. 编写测试报告:在测试结束后,根据执行的测试用例和实际结果,编写测试报告,包括测试的覆盖率、问题和缺陷的统计等。
软件测试技术及其应用案例分析近年来,随着软件行业的迅速发展,软件测试技术也逐渐成为了软件研发中不可或缺的重要环节。
软件测试技术不仅仅是指单纯的代码测试,更包括了测试方案、测试计划、测试用例设计、测试执行与结果分析等多方面内容。
在这篇文章中,我们将会通过一些实际的应用案例分析,深入了解软件测试技术的相关知识点及其在实践中的应用。
一、测试类型概述及其实际应用针对软件测试的具体内容,一般来说可以分为功能测试、性能测试、安全测试、兼容性测试、随机性测试等多个子项。
其中,功能测试通常是最主要的一个测试类型。
在实际应用中,功能测试是针对软件产品中固有的功能,通过人工或自动化方式进行测试,以保障软件产品在实际使用中的正确性。
具体而言,我们可以通过对用户需求、系统架构、用例设计等等方面进行测试,来评估软件产品的功能是否合理,是否符合用户实际需求。
除了功能测试之外,其他测试类型也都具有实践应用价值。
性能测试可以评估软件在高负荷下的性能表现,安全测试可以评估软件在安全方面的表现,兼容性测试可以评估软件在不同操作系统、硬件设备下的表现,随机性测试则可以评估系统在极端情况下的表现等等。
综合来看,不同的测试类型适用于不同的场景,针对不同的问题解决方法,则需要采用不同的测试方式及相应的测试策略。
二、测试用例设计思路及实际操作一旦确定了测试类型,我们就可以为软件产品设计相应的测试用例。
针对测试用例的设计,我们可以考虑使用较为流行的BDD (Behavior-Driven Development)框架。
BDD框架通过将软件需求和测试场景整合在一起,促进了“通用语言”的建立,使得测试用例更容易理解和践行。
通常来说,我们可以通过业务领域分解、场景分析、用例设计等多个步骤来完成测试用例的设计。
举个例子,假设我们现在需要为一个社交APP设计测试用例。
首先我们需要定位业务领域,即社交领域。
然后,我们可以再按照功能、性能、安全、兼容等方式,将测试用例进行细分。
软件测试中的可测试性设计与实践软件测试是保证软件质量的重要环节。
在软件开发的过程中,可测试性设计是一种关键策略,它旨在提高测试的效率和准确性,确保软件功能的正确性和稳定性。
本文将详细介绍软件测试中的可测试性设计与实践,并提供一些实用的方法和技巧。
一、什么是可测试性设计可测试性设计是指在软件开发的早期阶段就考虑测试的需求,通过合理的设计和架构来提高软件的可测试性。
可测试性设计的目标是使得测试人员能够更轻松地编写、执行和维护测试用例,减少测试周期,提高软件质量。
可测试性设计需要考虑以下方面:1. 清晰的需求规格:确保需求规格文档明确、一致,并能够提供可测试的需求细节。
2. 模块化设计:将软件系统划分为模块,每个模块独立可测,并且模块之间的接口明确、可测试。
3. 可重用性设计:通过设计可重用的模块和组件,减少测试用例的编写和维护工作。
4. 错误处理设计:考虑各种可能的错误场景,设计良好的错误处理机制,便于测试人员验证软件在异常情况下的正确性。
5. 数据管理设计:提供方便的数据管理机制,包括测试数据的录入、修改和删除,以及测试数据的备份和还原功能。
二、可测试性设计的实践方法1. 制定明确的测试目标:在软件开发过程中,确定测试的目标和范围,以便测试人员能够有针对性地进行测试。
2. 设计合适的测试用例:根据需求规格和功能设计,编写详细的测试用例,覆盖各种正常和异常情况,确保软件功能的正确性和稳定性。
3. 自动化测试:利用自动化测试工具,对重复性的测试用例进行自动化,提高测试效率和准确性。
4. 引入测试驱动开发(TDD):在软件开发的早期阶段,编写单元测试用例,以测试驱动的方式开发代码,保证软件的正确性。
5. 团队协作与沟通:测试人员与开发人员、需求人员之间的协作与沟通非常重要,及时解决测试过程中发现的问题,并进行反馈和改进。
6. 多样化的测试方法:除了功能测试,还可以采用性能测试、安全测试、兼容性测试等多种测试方法,全方位检验软件的可测试性和稳定性。
测试用例和测试报告一、引言测试用例和测试报告是软件测试中两个重要的文档,它们在软件开发过程中起到了至关重要的作用。
测试用例是按照特定的测试目的编写的测试脚本,用于验证软件是否符合预期的功能和性能要求。
测试报告则是测试结果的总结和分析,为项目决策提供了依据。
本文将深入探讨测试用例和测试报告的概念、编写方法以及在软件开发中的应用。
二、测试用例2.1 测试用例的概念测试用例是测试人员按照特定的测试需求,对软件系统进行测试的一组步骤和数据。
它描述了一个或多个测试场景,包括输入数据、预期结果和具体的执行步骤。
测试用例的编写需要结合软件需求、设计文档和实际业务场景,以覆盖尽可能多的测试情况,从而提高测试的全面性和准确性。
2.2 测试用例的编写方法编写高质量的测试用例对于测试工作的有效性至关重要。
以下是几个编写测试用例的常用方法:2.2.1 根据需求和设计编写测试用例应该基于软件开发过程中的需求文档和设计文档进行编写。
通过仔细研读这些文档,我们可以了解系统的功能点、预期的输入/输出以及各种业务场景。
根据这些信息,我们可以编写出一系列针对不同功能点和场景的测试用例。
2.2.2 使用黑盒测试方法黑盒测试是一种不考虑内部结构的测试方法,它只关注软件的输入和输出。
在编写测试用例时,我们可以根据软件的规范和功能需求,设计一系列有效的输入数据,然后验证输出结果是否符合预期。
这种方法可以覆盖不同的输入组合,从而提高测试的全面性。
2.2.3 考虑边界情况边界情况通常是指输入数据的最大值、最小值或临界值。
这些值可能会导致软件系统在处理中出现异常或错误。
在编写测试用例时,我们应该特别关注这些边界情况,以验证系统在处理边界值时的正确性和稳定性。
2.2.4 使用等价类划分法等价类划分法是一种将输入数据划分成若干个等价类的方法。
在编写测试用例时,我们可以根据系统的输入规范,将输入数据划分成不同的等价类,然后选择其中一个或几个典型的数据进行测试。
软件测试中的测试用例管理与执行在软件测试中,测试用例的管理与执行对于确保软件质量和项目的成功非常重要。
本文将探讨测试用例管理与执行的方法和实践。
一、测试用例管理测试用例管理是指对测试用例进行有效组织、分类、版本控制和跟踪的过程。
下面介绍几种常见的测试用例管理方法:1. 需求关联:测试用例应与软件需求一一对应,确保每个需求都有相应的测试用例。
通过需求关联,可以跟踪测试用例的执行进度和覆盖率。
2. 优先级排序:根据软件功能的重要性和风险程度,对测试用例进行优先级排序。
这样可以确保关键功能的测试能够优先进行。
3. 分类和标记:将测试用例按照模块、功能、场景等进行分类,并标记每个测试用例的状态和优先级。
这样可以方便测试人员快速找到和执行相应的测试用例。
4. 版本控制:对测试用例进行版本控制,确保使用的是最新的测试用例版本。
每次修改测试用例都需记录相应的变更和原因。
5. 自动化管理:软件测试中,自动化测试用例的管理也非常重要。
通过使用自动化测试工具,可以快速创建、执行和管理大量的测试用例。
二、测试用例执行测试用例的执行是验证软件功能是否符合预期的过程。
以下是一些测试用例执行的实践和方法:1. 环境准备:在执行测试用例之前,需要确保测试环境的准备工作已经完成。
包括安装必要的软件、配置网络环境等。
2. 执行顺序:根据测试用例的优先级和依赖关系确定执行顺序。
一般来说,先执行优先级高且不依赖其他测试用例的测试案例,再逐步执行其他测试用例。
3. 测试数据准备:根据测试用例的要求,准备相应的测试数据。
测试数据应包括正常情况和异常情况下的数据。
4. 实际结果记录:在执行测试用例时,记录实际的测试结果。
如果发现异常或错误,应及时记录并通知相关人员。
5. 缺陷报告:如果在执行测试用例时发现软件缺陷或错误,应及时编写缺陷报告并提交给开发人员。
6. 执行记录和跟踪:对每个测试用例的执行情况进行记录和跟踪。
可以使用测试管理工具或电子表格等方式进行管理。
软件测试实践之测试需求与测试用例陈雷关键词:测试需求测试用例测试过程本文是一位一线软件测试工作者对自己两年工作经验的总结,文中介绍了有关测试需求整理和测试用例设计的一些方法和建议。
这些方法和建议已经在实践中被证明可以用来提高测试团队的工作效率,也许它们并不是完全适合于您的工作,但是可以为您的工作提供一种新的实践思路。
这篇文章并不适合从未接触过软件测试工作的朋友,希望您在阅读本文之前,已经掌握了软件测试的一些基本概念,并作过一些实际的软件测试工作,当然,最好也对RUP中的测试过程部分有所了解。
另外,本文中将不会涉及到同测试工具相关的话题,有关测试工具的引入和实施,笔者会在今后的文章中进行讨论。
测试需求整理的三板斧测试需求的确定将为我们制定测试进度时间表、分配资源以及确定某个阶段测试工作是否完成提供一个可供衡量的标准。
当然,还有更重要的一点,已被确定的测试需求是我们进行测试用例设计和考虑测试覆盖率的依据。
1.确定测试工作的范围。
在很多实际工作中,因为受到一些外界因素的影响,比如市场需求的变化,既定发布时间的到来,团队内并发性工作导致的资源紧张等,使我们不得不考虑对软件质量的“适度”要求。
在对软件测试的投入成本与收益做出衡量后,就需要决定是否在测试对象的确定和测试类型的选择方面做一些增减。
而测试对象的确定和测试类型的确定,也就是某个阶段测试工作范围的确定。
这里之所以提到测试工作范围的确定,是因为它将直接影响到测试需求的确定。
当然,如果不考虑上面所说的那些因素,我们可以简单的把某个阶段测试工作范围的确定等同于软件需求的确定。
不过现实中的情况是软件需求在开发过程中会经常性的发生变化,有时甚至在软件最终发布之前才能确定下来。
我们又该如何根据频繁变更的软件需求确定我们的测试工作范围呢?应该说要完成这样的工作是很困难的。
但是我们可以通过其他的方法来减少这种情况对工作造成的影响,比如采用软件需求的版本化管理。
这里所提到的“软件需求的版本化管理”,是指在一个软件产品进行一个新版本的迭代时,要尽早的确定这个版本中所包含的需求,并同上个版本做出比较,哪些内容是新增的,哪些内容是被调整过的。
在该阶段工作开始之初的工作会议上,明确的向所有需要了解软件需求的涉众传达这部分信息。
而如果在该版本的开发过程中出现需求变更的情况,则应该根据市场策略、已公布的发布时间、客户需求、实现的代价和难易程度以及对现有工作的影响等方面,由项目负责人对需求进行适度划分,明确哪些变更需求将对当前版本产生影响,哪些变更需求由今后的版本负责处理。
应对软件需求频繁变更的唯一方法是:早讨论、早决定、早调整。
2.整理测试需求。
测试需求的整理是要明确我们现在要“测什么”。
在软件需求确定之后,就可以开始这项工作了。
在一次迭代过程中的需求阶段结束时,我们手头上可以参考的东西,通常会有软件需求规约(以下简称SRS)和用例(以下简称UC)——当然,也可能是一份包含UC的SRS。
通过对SRS和UC的阅读,我们可以从文档对软件特性和业务流程的描述中获得对软件所涉及的业务的一个基本的认识。
比如用户的实际业务是如何进行的?多个业务之间是否存在相互关系?在业务进行时是否受到一些条件的影响?等等。
通过对这些业务的分析,我们可以获得最初的一部分测试需求。
你可以将测试需求定位在较高的层次上,也可以把你所能想到的所有需要测试的内容都写下来,而并不一定是仅仅局限于对一个特性或一个由基本流同某些备选流组成的场景的分析。
这里强调的是基于业务的分析,换句话说,就是考虑在用户处理实际业务时将会作些什么。
对于测试需求的表现形式,大家可以根据自己的需要来进行设计,使用电子表格还是文本文档并不会影响测试需求的作用。
只要在一条测试需求中,用容易理解的自然语言,清楚的、明确的描述一项(也只应该有一项)需要测试的内容就可以了。
随着工作的开展,开发部门的架构设计文档和详细设计文档也将陆续提交。
设计文档是对软件需求中实际业务分析后得到的工件,文档中对于系统解决方案以及实现思路等方面的内容,虽然更倾向于用计算机软件的语言来描述,但仍然可以从中发现同软件需求之间的紧密联系。
因此,我们可以通过对设计文档中这些特性的分析,来对已有的测试需求进行增补或修改。
当进入执行测试阶段时,我们总是能发现一些缺陷的出现是出乎我们意料的,或者说是已有的测试需求和测试用例未能覆盖的。
那么,对于这部分缺陷,也应当在分析整理后添加到测试需求中,并设计相应的测试用例,以便于下一个版本迭代时进行参考。
其实,对于一个长期发展的团队或产品,它的所有东西都是要不断积累的、不断迭代的,软件需求、软件设计、代码以及测试需求、测试用例、测试脚本,都不仅仅是在一个版本的开发过程中不同的阶段进行迭代,在产品的整个生命周期中的不同版本间,也是不断迭代和积累的。
3.“测试需求”和“测试设计”。
测试需求的主要来源是软件需求文档和软件设计文档,所以我们在整理测试需求之前,就不能不考虑软件需求文档和软件设计文档中描述的内容本身是否存在缺陷。
而对需求和设计本身的检查,也就不可避免了。
在实际工作中,对软件需求的检查可以简单的概括为两个方面的内容。
一是对软件需求正确性的检查,也就是要保证需求文档中所描述的内容是真实可靠的。
在进行这部分工作时,关键是不要迷信所谓的“都是用户提出的真实的需求”。
我们必须考虑,提出这些需求的涉众,是否真的可以正确的描述自己的需求?我们的需求人员是否真的可以正确的理解用户的需求?有没有一些被用户认为在业务处理上是理所当然、极其平常的事情,而没有作为需求提出来?有没有一些被用户认为他们过去使用的软件已经提供了相应的功能,所以认为我们也应当提供,而没有提出来的?关于这个问题,也曾经有朋友提过不同的看法,认为这样对测试人员的要求太高了——既要熟悉需求人员的工作,又要熟悉软件所涉及的行业的业务。
但笔者还是固执的认为,作为测试人员,还是需要对软件产品所涉及的行业的业务有一个全面的、深入的了解——当然,这不是对一个刚刚入门的测试者的要求,但是如果想称为一个优秀的测试者,是难免要付出这部分努力的。
二是要保证软件需求的可测试性。
对于“可测试性”,笔者的概念是:对于一条软件需求或者一个需要实现的特性,必须存在一个可以明确预知的结果,并且可以通过设计一个可以重复的过程来对这个明确的结果进行验证。
说的直白一点,就是要保证所有的需要实现的需求在最终实现后,都可以用某种方法来明确的判断是否符合需求文档中的要求。
如果对于某条需求或某个特性,无法通过一个明确的方法来进行验证,或者无法预知它的结果,那么就意味着这条需求的描述存在缺陷,应该请需求人员对需求文档进行修改或补充——我们有理由相信,如果作为测试人员对需求无法产生准确的理解,那么开发人员也同样无法对同一条需求产生准确的理解。
对于软件需求理解的二义性,是在不规范的开发过程中导致返工的一个主要原因。
如果认为有必要,那应该在“需求评审会议”上确认所有涉众对需求的理解是一致的。
当然,对于如何提高软件需求的质量,在网络上或者已经出版的书刊中都已经有了很多更加具体、实用的方法,如果有兴趣,大家也可以找来参考。
不过,如果您正在从事软件测试工作,那么上面这部分内容对您仍然是非常有用的。
对于设计文档,检查的重点是软件设计同软件需求的一致性。
对于软件需求中描述的特性,在用同计算机软件的语言来描述时,是否仍然可以被读者正确的理解?对于软件需求中描述的业务规则和算法,在转换成数学公式的时候,是否仍然可以正确的表达需求的意图?只有同需求中已经定义的部分相符的内容,才可以影响到我们的测试需求。
而同软件需求不相符的部分,则需要同设计人员和需求人员一起讨论,明确以哪一方作为基准,决定是调整软件需求,还是修改软件设计,最后对测试需求进行相应的增补或者调整。
另外,《软件工程》一书也告诉我们另外一个检查软件需求和软件设计的理由:越早发现软件缺陷的存在,那么修复缺陷的成本也就越低。
越早发现软件缺陷的存在,修复缺陷的成本就越低测试用例设计的三板斧1.确定测试用例的粒度。
我们是不太可能只用一个测试用例覆盖所有测试需求的,因为这将使我们的测试用例成为一个巨无霸,在团队工作中难以使用。
——除非您的软件所包含的功能真的又少又简单,不过如果真的有这么一个软件,恐怕也没有测试和发布的必要了。
当然,这也并不是要您走向另一个极端,为需求中定义的每个特性或功能都提供一个甚至多个测试用例。
这里的关键,是要寻找一个合适的度——关注“有效功能”。
有效功能是指在被测应用所涉及的实际业务中,当用户在原始状态下进行工作时,整个业务流程中对用户来说,具有实际意义那些功能。
当我们把这个功能单独从计算机软件还原到用户的原始手工状态时,它的完成可以作为用户实际业务的一个阶段性结束的标志,而不是一旦从这个业务流程中独立出来就失去了意义。
而该业务完成后,可以为其他用户或业务提供所需要的信息。
为了方便理解,我们可以先看一下下面的例子。
拿我们常见的财务软件来说,当填写一张会计凭证时,通常是需要填写会计科目,在使用计算机完成工作时,我们可以利用软件的功能,从很多备选科目中选择一个自己需要的科目,或者通过科目代码来输入科目。
这项功能很有可能会作为一个特性要求出现在软件需求规格说明书中,那么这个科目的选择或输入是不是一个有效功能呢?让我们试着用上面规则来衡量一下。
首先,这个功能所实现的操作在用户手工业务处理过程中是存在的,不同的是这项功能是在用户填写凭证时,在自己的大脑中完成的。
那么这项功能的完成对于用户来说意味着什么呢?我们从上面的描述中可以看到,用户希望软件提供的是可以添加一张完整的凭证这样的功能,而不仅仅是方便填写会计科目。
填写会计科目只是用户在添加凭证时的一个步骤,单独把这个功能提取出来对用户来说没有任何实际意义。
对于业务流程下游的用户,需要的也不仅仅只是一个会计科目的信息,而是一张包含了会计科目以及其他会计信息的完整的会计凭证,否则就无法进行下面的工作。
这样看来,这个功能并不是一个有效的功能,我们可以把它最为需要测试的特性在测试需求中进行描述,却不应该作为一个单独的测试用例出现在我们的测试用例集中。
而我们在测试用例中真正关注的,应该是添加会计凭证这个具有实际意义的功能。
另外,对于那些相互之间存在数据或状态的依赖性的业务(有效功能),同样要注意将它们剥离到不同的测试用例中。
在剥离的过程中,要分清这些业务之间的相互依赖是否只是对数据或状态的依赖,如果是这样,那么可以简单的把上下游业务之间的关系理解为输入、输出的关系:下游业务只是根据上游业务不同的输出做出不同的反应。
这样在每个测试用例的开始,把不同的输入作为不同前置条件来描述就可以了。
当然,下游业务对不同输入的不同反应是应该放在不同的测试用例中进行描述的。