validation - 如何测试排名系统?
问题描述
假设我们一个班有 3 名学生并获得以下分数
================================================ | | 数学 | 英语 | 科学 | 排名 | |---------------------------------------------- |标记 | 60 | 40 | 80 | 2 | |---------------------------------------------- |约翰 | 40 | 30 | 50 | 3 | |---------------------------------------------- |爱丽丝 | 60 | 60 | 70 | 1 | ================================================
通常,排名是通过添加所有三个标记来决定的。查看上表,排名顺序为 Alice、Mark、John。
如果存在一个以学生分数作为输入并根据他们的排名给出学生姓名列表的系统,那么我如何证明系统为所有可能的数据集返回了正确的学生列表?
测试这样一个系统的方法应该是什么?当学生和科目的数量增加时,生成所有可能的数据组合将是详尽无遗的。
解决方案
鉴于这是黑盒测试,我会像这样处理测试任务:
- 验证排名是否确实适用于简单的数据集(烟雾测试)
- 当 2 个或更多学生得分相同时,验证排名是否有效
- 验证当数据集包含分数缺失、负分(如果可能!?)或分数大于允许值的学生时排名计算是否有效
- 鉴于上下文(学生和科目),我假设可以创建一个真实的数据集。验证这是否正确处理。
- 创建第二个数据集,其中学生和科目的数量不切实际(例如,比您的实际数据集大 100 %) - 尝试将其扔给它 :)
- 数据集缺少学生姓名,但该行存在学科标记
- 与上述相同,但缺少主题,但所有行都存在主题标记
- 一个没有分数但有学生和科目的数据集
根据我上面建议的测试,我不会担心所有可能的数据组合。不过,如果您有代码访问权限,像 xUnit 这样的单元测试工具可以帮助您测试所有可能的组合(如果您定义了参数)
希望这可以帮助 :)
推荐阅读
- java - 这里真的需要装饰器模式吗?
- puppeteer - 本地 html 的 puppeteer css 未显示
- hyperledger-fabric - 如何在应用前端配置 hyperledger composer 的多用户模式?
- javascript - 表格的每一行都有复选框。但是通过单击复选框,它没有选择该行文本值
- java - netty 服务器如何通过单个端口同时支持 Http 和 Https 协议?
- django - 单击时导航栏中的引导下拉菜单不显示下拉菜单
- java - 如果我关闭 PreparedStatement,数据库中的缓存会丢失吗?
- javascript - 如何让网页只显示一次?
- terraform - 使用 Terraform 在 AWS 上创建实例时出错
- html - 讲述人阅读空文档以获取纯文本信息模式弹出窗口