实验三 测试需求挖掘与管理
一、实验目的
(1)学会根据需求说明书挖掘测试需求。
(2)学会使用测试管理工具 TestCenter 结合《需求规格说明书》 相关文档构建测试需求。
(3)在 TC 下创建需求树。
二、实验环境和工具
(1)Windows 操作系统
(2)测试管理工具 TestCenter
(3)被测系统案例 CRM
三、实验内容
(1)了解测试需求相关项目。
(2)结合《需求规格说明书》等相关文档挖掘需求,构建需求树。
(3)学会使用测试管理工具 TestCenter 导入测试需求文档,如 word 和 Excel 文档。
注意:编写需求时注意要符合实际情况
• 保持语句和段落的简短。
• 采用主动语态的表达方式。
• 编写具有正确的语法、拼写和标点的完整句子。
• 使用的术语与词汇表中所定义的应该一致。
• 需求陈述应该具有一致的样式,例如“系统必须..”或者“用户 必须..”
四、实验步骤
(一)浏览《需求分析说明书》并分析出原始需求
需求采集的过程是将软件开发需求中的那些具有可测试性的需求或特性提取出来,形成原始测试需求。在本节中我们主要采用列表的形式对软件开发需求进行梳理,形成原始的测试需求列表,列表的内容包括需求标识、原始测试需求描述等。在原始的测试需求列表中,将每一条软件需求对应的《CRM客户关系管理系统需求规格说明书》中的章节号作为软件需求标识。
| 表3-1 “CRM客户关系管理系统”原始测试需求表 | ||||
| 序号 | 系统模块 | 软件需求标识 | 原始测试需求描述 | |
| 1 | 系统首页 | NA 系统桌面 | NA 修改密码 | 修改登录用户的密码 |
| NA 登录功能 | 输入用户名和密码并选择角色登录系统 | |||
| NA 退出系统 | 退出CRM客户关系管理系统 | |||
| 2 | 系统管理 | NA 管理系统 | NA 创建用户 | 系统管理员维护系统数据库、服务、系统安全 |
| NA 分配用户权限 | ||||
| 3 | 客户管理 | 3.1 销售机会管理 | 3.1.1 新增客户信息 | 当销售人员和销售经理发现新的销售机会后,创建自己的客户信息。系统默认以创建人为指派人, 但可以由销售经理进行特殊指派。 |
| 3.1.2 修改客户信息 | 销售对自己新创建的客户信息,未经销售经理指派的客户,可以进行客户编辑。 | |||
| 3.1.3 删除客户信息 | 状态为“未指派客户”的客户信息进行删除,删除是需要判断当前“指派人”是否是客户信息创建人,否则不可删除。 | |||
| 续表3-1 “CRM客户关系管理系统”原始测试需求表 | ||||
| 序号 | 系统模块 | 软件需求标识 | 原始测试需求描述 | |
| 4 | 客户管理 | 3.2 指派销售机会 | 每一个销售机会,会默认以当前创建人为指派人,客户经理根据销售的行业特长,对销售机会进重新指派,每一个销售机会指派给一个销售。 | |
| 5 | 联络管理 | 3.3 定制客户开发计划 | 3.3.1 新增联络 | 销售根据分配给自己的销售机会制定客户开发计划,新建客户联络信息。 |
| 预订管理 | 3.3.2 新增预约 | 根据客户信息,新增预约,提醒销售及时完成客户跟踪、提供客户服务,和客户保持紧密联系。 | ||
| 6 | 客户管理 | 3.3.3 执行开发计划 | 3.3.3.1 新建跟踪 | 客户经理、销售完成服务之后需要记录和客户交往内容,特别是一些重要事件。客户跟踪信息可以更新, 并且可以统计出累计跟踪次数。 |
| 7 | 客户管理 | 3.3.4 客户信息管理 | 3.3.4.1 管理客户信息 | 销售经理根据销售人员创建客户基本信息,对系统所有客户进行编辑、删除、查看。 |
| 联络管理 | 3.3.4.2 联络管理信息 | 每个客户可以有多个联系人信息。销售经理根据所有销售创建的客户联络方式,对系统客户联络方式进行查看、编辑、删除。 | ||
| 预订管理 | 3.3.4.3 管理预订信息 | 销售根据客户联络信息创建预约,合理规划、安排时间,及时提供客户服务,提高开发客户能力。销售经理定期查看销售人员业务,并关注客户开发机会与开发流程,并且可以删除预约信息。 | ||
| 文档管理 | 3.3.4.4 管理客户交流文档 | 文档可以是提供客户服务时,产生的一些相关文档、或者订单、合同。记录着客户重要信息。销售人员将和客户联络过程产生的文档上传到系统,提供客户历史资料查询与统计。 | ||
| 续表3-1 “CRM客户关系管理系统”原始测试需求表 | ||||
| 序号 | 系统模块 | 软件需求标识 | 原始测试需求描述 | |
| 7 | 日志管理 | 3.3.4 客户信息管理 | 3.3.4.5 管理跟踪 | 系统可以保存每个客户的交往记录。市场销售完成了客户服务后,记录下服务内容,特别是重要信 息。销售经理进入跟踪记录列表查看客户记录。 |
| 8 | 其他 | 4.1 技术需求 | 4.1.1 软硬件运行环境 | 操作系统:Microsoft Windows 2003 \XP;支持环境:IIS 5.0;数 据 库:Microsoft SQL Server 2005 |
| 4.1.2 性能需求 | 本系统在正常网络环境下,应能保证系统的响应时间;其他模块相应功能响应时间不大于 15s | |||
| 4.1.3 安全保密需求 | 保证管理者和注册用户密码安全,分权限管理,数据库访问控制; | |||
| 4.1.4 可维护性和可扩展性 | 网站管理者需懂得一定的服务器应用,SQL 数据库应用。 | |||
| 4.1.5 界面要求 | 界面个性化,简单易用,从分合理安排界面控件,各种表格直观易于操作。 | |||
| *NA表示《CRM客户关系管理系统需求规格说明书》中没有明确表明该功能对应的章节号,但该功能必须出现在测试需求中。 | ||||
(二)根据《需求分析说明书》挖掘被测模块的需求
测试需求列表是在原始需求列表的基础上,对每一条原始业务需求进行分析,形成可测试的分层描述的测试要点,再根据标准和需求文档对每一个测试要点进行分析,得出需要执行的测试类型和更详细的测试描述,最终对原始需求列表综合形成测试需求列表。
根据测试需求的类型可以分为:功能性测试、安全性测试、接口测试、容量测试、完整性测试等等。
1.功能性测试需求
| 表3-2 “系统桌面”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| NA 登录功能 | 1.1.1 | 用户输入的用户名不存在 | 系统提示“用户ID不存在” | 无 | 高 | |
| 1.1.2 | 用户输入的用户名存在,但输入的密码错误 | 系统提示“用户密码错误” | 无 | 高 | ||
| 1.1.3 | 用户必须输入用户名和密码,两者均不能为空 | 系统提示“请输入用户ID”或“请输入密码” | 无 | 高 | ||
| 1.1.4 | 用户输入的用户名和密码匹配 | 系统进入“系统桌面”界面 | 无 | 高 | ||
| NA 修改密码 | 1.2.1 | 用户输入的原始密码不正确 | 系统提示“旧密码不正确” | 用户已登录 | 高 | |
| 1.2.2 | 用户输入的原始密码正确但输入的新密码不符合要求 | 系统提示“新密码不合法” | 高 | |||
| 1.2.3 | 用户两次输入新密码不一致 | 系统提示“两次输入的密码不一致” | 高 | |||
| 1.2.4 | 用户未输入旧密码或未输入新密码 | 系统提示“旧/新密码不能为空” | 高 | |||
| 1.2.5 | 用户输入的旧密码正确,两次输入的新密码一致且合法 | 系统提示“密码修改成功”并进入登录界面,数据库中对应的用户密码更新 | 高 | |||
| NA 退出系统 | 1.3.1 | 用户点击“退出系统”按钮 | 系统在用户点击后退出 | 用户已登录 | 中 | |
| 表3-3 “系统管理”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| NA 创建用户 | 2.1.1 | 创建的用户名已存在 | 系统提示“创建的用户ID已存在” | 已登录管理员账户 | 高 | |
| 2.1.2 | 创建的用户名不合法 | 系统提示“请输入正确的用户ID” | 高 | |||
| 2.1.3 | 创建的用户名不存在且合法 | 系统提示“创建用户成功”,数据库中添加相应的用户记录(包括默认值)正确 | 高 | |||
| NA 分配用户权限 | 2.2.1 | 在已存在的用户中可以进行权限分配 | 用户能够被分配到相应的权限并且数据库中对应的用户权限信息会发生相应变化。 | 已登录管理员用户 | 中 | |
| 表3-4 “销售机会管理”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.1.1 新增客户信息 | 3.1.1 | 新增公司名称为空 | 系统提示“请输入公司名称” | 已登录的客户经理或市场销售用户 | 高 | |
| 3.1.2 | 申请类型、公司背景、申请信息、客户状态未选择 | 系统提示“请选择申请类型/公司背景/申请信息/客户状态” | 高 | |||
| 3.1.3 | 上述信息均已填写,但是部分非重要的信息未填写(如,公司地址,组织结构等)或所有的信息均已填写 | 系统提示“添加客户信息成功”并在数据库中添加相应信息 | 高 | |||
| 续表3-4 “销售机会管理”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.1.2 修改客户信息 | 3.2.1 | 需要修改的客户信息已被销售经理指派 | 系统提示“该客户已被销售经理指派,无法修改” | 已登录的客户经理或市场销售用户 | 高 | |
| 3.2.2 | 需要修改的客户信息未被销售经理指派 | 系统进入修改相应客户信息界面 | 高 | |||
| 3.1.3 删除客户信息 | 3.3.1 | 被删除客户当前状态处于“未指派用户” | 系统需要弹出确认删除信息后,经用户确认后相应客户信息删除。 | 高 | ||
| 3.3.2 | 被删除客户当前已被指派 | 系统提示“当前客户被xxx指派,无法删除” | 中 | |||
| 表3-5 “指派销售机会”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.2 指派销售机会 | 4.1.1 | 输入系统中不存在的销售 | 系统提示“该销售不存在” | 已登录销售经理用户 | 高 | |
| 4.1.2 | 输入系统中存在的销售 | 系统提示“指派成功”,数据库中指派人状态信息发生改变 | 高 | |||
| 表3-6 “定制客户开发计划”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.3.1 新增联络 | 5.1.1 | 未选择客户名称 | 系统默认选择第一个关联的客户名称 | 已登录客户经理或销售经理用户 | 中 | |
| 5.1.2 | 输入的客户姓名不合法或为空 | 系统提示“客户姓名不合法/为空” | 高 | |||
| 5.1.3 | 正确输入上述信息 | 点击“确定”在联络管理中生成客户联络信息。 | 高 | |||
| 3.3.2 新增预约 | 5.2.1 | 未选择单位信息 | 系统默认选择第一项单位信息 | 已登录的销售经理、市场销售用户 | 中 | |
| 5.2.2 | 未输入标题或预定日期 | 系统提示“请输入预定标题/预定日期” | 高 | |||
| 5.2.3 | 正确输入上述信息 | 系统提示“添加预约成功“并在等待预订中可查询到当前待预约的客户信息 | 高 | |||
| 表3-7 “执行开发计划”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.3.3.1新建跟踪 | 6.1.1 | 输入正确的查询条件, 能够查询到相应的客户 | 系统在页面上输出符合筛选条件的客户 | 已登录销售经理或市场销售用户 | 中 | |
| 6.1.2 | 点击“记录”按钮能选择客户状态来新建跟踪记录 | 系统提示“新建跟踪成功”并将信息保存至日志管理,可以查看当前跟踪所有客户记录信息。 | 高 | |||
| 表3-8 “客户信息管理”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.3.4.1 管理客户信息 | 7.1.1 | 创建客户的基本信息 | 系统能够正确地创建客户的信息 | 已登录销售经理用户 | 高 | |
| 7.1.2 | 查看所有/指定用户的信息 | 系统能够正确显示所有/指定用户的信息 | 中 | |||
| 7.1.3 | 编辑用户信息 | 系统能够正确编辑用户信息 | 中 | |||
| 7.1.4 | 删除用户信息 | 系统能够正确删除未指派客户的信息, 若客户已被指派则系统给出提示并拒绝删除 | 中 | |||
| 3.3.4.2 联络管理信息 | 7.2.1 | 给每个客户添加一个/多个联系人信息 | 能够正确添加 | 已登录的销售经理用户 | 高 | |
| 7.2.2 | 查看并编辑客户的联络方式 | 能够正确显示符合条件的客户并能够正常编辑 | 中 | |||
| 7.2.3 | 删除客户的联络方式 | 系统提示“是否确认删除xxx用户的联络方式”经过确认后删除或取消 | 高 | |||
| 3.3.4.3 管理预订信息 | 7.3.1 | 创建预约信息 | 销售可以根据客户的联络信息创建预约并合理安排时间 | 已登录的市场销售、销售经理用户 | 高 | |
| 7.3.2 | 销售经理查看销售人员业务 | 销售人员能够正确查看指定销售人员的业务 | 中 | |||
| 7.3.3 | 销售经理删除预约信息 | 只有当登录的用户为销售经理时才能删除预约信息,否则提示权限不够。 | 中 | |||
| 续表3-8 “客户信息管理”功能测试需求列表 |
| |||||
| 软件需求标识 | 测试需求标识 | 测试要点 | 预期结果 | 前提 | 优先级 | |
| 3.3.4.4 管理客户交流文档 | 7.4.1 | 市场销售能够将与客户的联络过程上传至系统 | 系统能够上传与客户的联络信息 | 已登录市场销售用户 | 高 | |
| 7.4.2 | 与客户的联络过程信息能够被查看 | 系统能够正确显示与客户的联络过程信息,不会出现乱码、排版错误等情况 | 中 | |||
| 7.4.3 | 进行客户历史资料的统计 | 能够正确统计客户的资料 | 中 | |||
| 3.3.4.5 管理追踪 | 7.5.1 | 系统保存每个客户的交往记录 | 能够正确保存,不会出现丢失、错误等情况 | 已登录的销售经理用户 | 中 | |
| 7.5.2 | 销售经理查看客户记录 | 能够正确查看对应客户的记录 | 低 | |||
2.其他测试需求
| 表3-9 其他测试需求 | |||
| 软件需求标识 | 测试需求 | ||
| 测试需求标识 | 测试要点 | 测试类型 | |
| 4.1.1 | 8.1.1 | 使用不同的软硬件环境测试该系统 | 兼容性测试 |
| 4.1.2 | 8.1.2 | 在正常的网络环境下,测试该系统各个模块的响应时间 | 负载测试 |
| 4.1.3 | 8.1.3 | 测试系统是否能够保证管理者和注册用户密码安全,分权限管理,数据库访问控制; | 安全性测试 |
| 4.1.4 | 8.1.4 | 系统维护与功能拓展是否方便 | 容量测试 |
| 4.1.5 | 8.1.5 | 系统界面分布是否合理,排版是否清晰整洁、简单易用,窗口大小是否会影响系统界面布局 | 界面测试 |
(三)掌握创建需求的过程
登录TestCenter后,选择测试需求。
(图3-1 选择测试需求)
(四)添加子需求和兄弟需求
根据需求树添加相应的子需求和兄弟需求。
(图3-2 添加子需求和兄弟需求)
下图分别给出了添加兄弟需求和子需求后的情况

(图3-3 添加子需求和兄弟需求)
(五)创建父需求和子需求并构建需求树
上述的原始测试需求分析与需求挖掘已经详细地描述了CRM客户关系管理系统的测试需求,我们在前面的基础上可以迅速的构建需求树。
(图3-4 构建需求树)
由于篇幅受限,上述的需求树并没有非常细致的描述每一个测试需求(只描述了每个父需求下有几个测试需求),但每一个测试需求均在前文的表格中列出。
(六)尝试需求文档的导入
在TestCenter中,提供了从需求文档中导入测试需求的方式。首先,我们需要下载相应的需求模板。
(图3-5 需求模板下载)
在下载的模板中添加需要的属性列后添加相应的测试需求数据。我们以系统桌面这个需求功能为例,excel表格中的数据为:
(图3-6 需求模板数据录入)
在TestCenter软件中,选择导入模板配置。

(图3-7 导入模板配置)
在弹出的窗口内,根据下载的需求模板第一行的各列,输入模板配置信息。

(图3-8 输入模板配置信息)
保存后即可进行导入,最终的结果为:

(图3-9 导入测试需求)
五、结果分析及总结
(1)测试需求的创建以什么作为依据?
·与待测系统相关的各种文档、资料,如需求规格说明书、会议纪要 、设计文档等。
·从客户或系统分析员获知的需求。
·业务背景资料,相关的法律法规等。
·培训,通过参加各类有关待测系统的培训获取的需求。
·已开发运行的系统,对于维护类的项目,测试需求介入时间较晚时,在编制测试需求时,若需求文档信息不全或不准确时,现有系统也是编制测试需求的重要依据。
·其他可以参考的需求。如以旧系统为原型,以全新的架构方式来设计或完善软件,那么旧系统的原有功能跟特性就成为了最有效的测试需求收集途径。
(2)怎么样快速导入被测模块的需求?
在TestCenter系统中,可以通过导入doc或xls文档的方式快速导入被测模块的需求。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el