题记:记得上次Interview时,boss问我对软件质量的理解。我说,对于企业级产品来说是稳定。对于个人级产品来说,就是易用性。boss讲,应该以是不是满足客户需求来衡量软件的质量;今天上午,陪同事去面试,问“你会从哪些方面考虑软件可能存在的缺陷”,同事答道“功能性,易用性”(PS:同事是个新人,刚入行两三个月,能想到易用性,出乎我的意料) --- 这两个问题,一个从正面,一个从反面,考证了一个测试人员对软件质量的理解。想起两周前看的这篇《Software Quality Characteristics》,为了加深自己的理解,献丑翻译一下。
浏览下面的列表,同时结合你所测试的产品/功能的实际,添加属于你自己的特定条目,构造出一份属于你自己的列表来。
功能性(Capability).这个产品有没有提供有价值的功能?
- 完整性(completeness):客户所预期的所有重要功能有没有已经实现。
- 准确性(Accuracy):产品中的任一输出,计算都是正确的,并以有效数字呈现给用户。
- 高效性(Efficiency):以一种高效的方式来执行操作(别做那些不希望你做的)。
- 交互性(Interoperability):产品中的不同特性(功能点)以最佳的方式交互。
- 并发性(Concurrency):如同其他进程一样,可以并发执行多个任务。
- 数据不可知(Data agnosticism):支持所有可能的数据格式,并能处理好异常。
- 可扩展性(Extensibility):客户或其他第三方能够添加新的特性,或则根据自己的需要做定制。
可靠性(Reliability).确信产品在许多不同的场景下都可以正常使用
- 稳定性(stability):产品不应该导致系统崩溃,正确处理异常和脚本错误。
- 健壮性(robustness):产品能够妥善处理那些可预期、不可预期的错误。
- 压力处理(stress handling):系统是怎么处理那些超出限制的情况。
- 可恢复性(recoverability):当发生一次致命错误以后,产品是否可恢复、继续使用。
- 数据完整性(data integrity):产品中的各种数据从始至终都是完整的。
- 安全性(safety):对于那些有恶意企图的人,是不是可以把它拒之门外。
- 灾难恢复(disaster recovery):如果最坏,最坏的情况发生了
- 可信赖(trustworthiness):产品的行为是不是一致的,可预期的,可信赖的。
易用性(Usability).这个产品很容易上手吗?
- 功能可见性(affordance):产品吸引人们去发现这个产品可能的功能。
- 直觉(intuitiveness): 容易理解和解释这个产品可以干些什么。
- 极简主义(minimalism):产品的内容,或外观没有重复冗余。
- 易学性(learnability):容易上手,能够快速简单的学习如何使用这个产品。
- 易记性(memorability):一旦你学习了如何使用某个功能,就不会忘记。
- 可发现性(discoverability):通过UI上面点点,便能够了解产品信息和功能。
- 可操作性(operability):一个有经验的使用者可以很快的执行一些常用的操作。
- 互动性(interactivity):产品的状态易于理解,通过GUI/API能够交互。
- 可控(control):用户感觉对于程序的整个过程都是可控的。
- 清晰(clarity):描述清晰,详尽,没有歧义。
- 错误(errors):提供出错提示,很难出错,一旦出错便能够修复。
- 一致性(consistency):从始至终产品的行为都是一致的。
- 程序的剪裁能力(tailorability):默认值和行为能够灵活的修改。
- 可访问性(accessibility):这个产品能尽可能多的为更多人使用,符合应用程序访问标准。
- 文档(documentation):提供覆盖功能点的帮助文档。
魅力(charisma).你的产品有吗
- 唯一性(uniqueness):产品是否可辨认,有一些别人没有的。
- 满意度(satisfaction):你用完这个产品后感觉怎样?
- 专业性(professionalism):产品是否具备专业品质,符合需求。
- 吸引力(attractiveness):产品的所有方面都很吸引眼球。
- 好奇心(curiosity):用户是否感兴趣,愿意尝试产品的方方面面。
- 入迷(entrancement):当使用这个产品时,有没有入迷,全身心投入其中。
- 大肆宣全(hpye):这个产品有没有使用一些最新的技术、想法
- 预期(expectancy):产品超出预期,满足了一些你都不知道的需求。
- 态度(attitude):产品和它的信息以一种正确的态度,语言和你交流。
- 故事(story):产品的开始,构造,或则使用过程中,有没有一些引人注意的故事。
安全(security). 产品对于那些不受欢迎的使用是否有足够的保护呢
- 身份验证(authentication):为用户提供识别
- 授权(authorization):产品能够处理授权的用户可以看到些什么,做些什么
- 隐私(privacy):没经授权的用户不能访问数据
- 安全漏洞(security holes):产品不应该引入社会工程学漏洞
- 保密(secrecy):产品不应该暴露底层系统的信息。
- 刀枪不入(invulnerability):能够抵挡得住渗透企图。
- 病毒免疫(virus-free):不要传播病毒,或则看上去像是在传播病毒。
- 抵制盗版(piracy resistance):不得非法复制,发布软件,或代码。
- 合规(compliance):是否符合产品应该遵守的安全规范。
性能(performance). 你的产品响应够快吗?
- 功能(capacity):在不同环境下(如,网络环境比较差的时候),产品是否有很多限制。
- 资源利用率(resource utilization):对于cpu,内存,磁盘,及其他资源的占用是适当的。
- 响应(responsiveness): 一个操作的响应是可以接受的。
- 可访问(availability):当应该能访问的时候,就要能访问。
- 吞吐量(throughput):产品能够处理大数据量。
- 耐力(endurance): 产品能够长时间运行。
- 可伸缩性(scalability):横向,纵向拉伸产品,会怎么样
IT-bility。 产品是否容易安装,维护,售后支持
- 系统需求(system requirments):在正确的配置下能够运行,同时对于那些缺少组件等不同情况,也能处理。
- 安装(installability):产品能够安装在特定平台了,并留下痕迹。
- 升级(ungrades): 在不丢失配置,设定的情况下,升级到新版本。
- 卸载(uninstallation):当卸载产品时,和产品有关的文件,资源是否都已删除(用户的,或系统的文件除外)。
- 配置(configuration):安装是否可配,比如安装在不同路径下以适应客户需求。
- 部署(deployability):能不能由it 部门这对不同用户,环境进行部署
- 可维护性(maintainablity):产品及其组件是否容易维护,客户支持。
- 易测(testability):客户是否方便有效地测试已经部署的产品。
兼容性(compatibility). 产品和其他软件、环境的交互如何
- 硬件兼容性(hardware compatibility):产品在合适的硬件上可以运行。
- 操作系统兼容性(operating system compatibility):产品可以在指定操作系统版本上运行,符合典型行为。
- 应用程序兼容性(application compatibility):产品,及其数据能够和客户常用的一些其他程序共存。
- 配置兼容性(configuration compatibility):产品的配置和系统其它配置能够融合。
- 向后兼容性(backward compatibility):当前版本能做的任何之前一个版本能做的事情
- 向前兼容性(forward compatibility):是否能够应用一些将来版本可能用到的组件,接口?
- 易于维护(sustainability):如 节省能源,便于开关,省电模式、远程连接
- 标准一致性(standards conformance):产品遵守应用标准,规章,法律、伦理
内部软件质量特性
下面列出的这些特性并不为最终的用户所直接接触,但对于一个成功的产品而言,这些是同等重要的。
可支持性(supportability):客户的使用过程中的问题是否能够得到支持呢?
- 标识(identifiers):是否很容易的辨认软件的各个部分、软件版本,或特定的错误。
- 诊断(diagnostics):无论客户的环境如何,都能够找出产品的配置,日志等细节。
- 故障排除(troubleshootable):是否能够很容易的定位错误(如,log文件)、获得帮组。
- 调试(debugging):当需要时,能否观察到软件内部状态。
- 多用途(versatility):除了当初设计的使用场景,是否还有其他途径使用这个软件。
可测性(testability):是否容易检查、测试这个产品
- 可追溯性(traceability):产品以一定格式、一定等级记录产品的行为。
- 可控性(controllability):能独立的设置状态、对象、变量
- 可观察性(observability):能够观察被测试的部分。
- 可监控性(monitorability):产品能给出提示,它现在在干嘛、怎么做的
- 隔离性(isolateability):能够独立测试各个module.
- 稳定性(stability):软件的改动是可控的,不会太频繁。
- 自动化(automation):是否有公开的,或隐藏的借口可用。
- 信息(information):明确测试人员需要掌握的信息。
- 可审核性(auditability):产品,及其它产生的文件能够被验证
可维护性(maintainability).产品是否能以最小的代价维护和扩展
- 弹性(flexibility):可以根据用户需求来改变产品。
- 可扩展性(extensibility):在将来是否能够很容易的添加新功能。
- 简单化(simplicity):代码不要太复杂,测试的设计、执行、评估不要太晦涩。
- 可读性强(readability):代码的注释要全面,便于阅读和理解。
- 透明性(transparency):底层结构是否很好理解。
- 模块化(modularity):代码是否分成几个可管理的部分。
- 重构(refactorability): 满足单元测试吗
- 便于分析(analyzability):提供一些线索来发现defects.
可移植性(portability):把产品迁移到其他软件可行吗
- 重用(reusability):产品的部分代码是否可以在其他地方使用?
- 适应性(adaptability):是否能够改变产品以适应不同的环境呢
- 兼容性(compatibility):产品是否遵守通用接口和官方标准呢
- 国际化(L18N):是否很容易的翻译这个产品呢
- 本地化(L10N):产品的所有部分符合特定文化/国家的要求。
- UI 健壮性(user interface-roustness):翻译完以后,产品的外观是否同样美观。