第六篇:《功能测试与非功能测试:不止是“好不好用”》
大多数人对测试的第一印象就是“点一点看看功能正不正常”。但真正的软件测试远不止于此。除了功能测试还有一类同样重要的测试——非功能测试它关注的是软件“好不好用、快不快、安全不安全”。本文将带你分清功能测试与非功能测试并通过实例说明为什么后者常常决定产品的成败。一、功能测试做正确的事定义验证软件的各项功能是否按照需求规格正确实现。关注点输入→输出的对应关系业务流程能否走通数据能否正确存储、修改、删除异常处理是否合理如输入非法数据典型例子登录功能输入正确的用户名密码能登录成功输入错误的提示失败。购物车添加商品后购物车数量1删除商品数量减少。搜索输入关键词返回包含关键词的结果列表。测试方法主要是黑盒测试常用等价类划分、边界值分析、场景法等。二、非功能测试做得更好定义验证软件在功能之外的属性——即质量属性。关注点性能、安全、兼容性、可用性、可靠性、可维护性、可移植性等。为什么非功能测试至关重要一个功能完全正确的软件如果慢得像蜗牛、三天两头崩溃、一用就泄露隐私用户绝不会买单。三、常见非功能测试类型详解3.1 性能测试Performance Testing目标确保系统在预期负载下响应及时、资源使用合理。负载测试系统在正常并发如 1000 人同时在线下的响应时间例如95% 请求 2 秒。压力测试超过预期负载如 5000 人观察系统何时崩溃、如何崩溃优雅降级还是直接挂掉。稳定性测试长时间运行如 7x24 小时是否有内存泄漏、响应时间是否逐渐变慢。并发测试多个用户同时操作同一资源如秒杀是否出现数据错乱。典型案例某电商“双11”零点瞬间由于并发过高订单接口超时导致大量用户无法下单。这就是性能测试不足。3.2 安全测试Security Testing目标发现系统漏洞防止数据泄露、恶意攻击。常见测试点SQL注入能否在输入框里输入 ’ OR ‘1’1 绕过登录XSS跨站脚本能否在评论里插入 危害其他用户越权访问普通用户能否直接访问管理员的URL敏感信息泄露密码是否明文传输日志中是否打印了信用卡号典型案例某社交网站因未对用户ID做权限校验导致登录用户修改URL中的ID就能查看他人私密信息。3.3 兼容性测试Compatibility Testing目标确保软件在不同环境下正常运行。浏览器Chrome 没问题IE 11 呢很多政府网站仍需要支持 IE操作系统Windows 11 正常macOS 呢Android 14 可以Android 8 呢设备手机、平板、不同分辨率、不同屏幕比例。外部依赖数据库版本、第三方API版本。典型案例某移动应用在 iOS 17 上完美运行但在 iOS 16 上频繁闪退因为使用了新版本不支持的 API。3.4 可用性测试Usability Testing目标评估软件是否易学、高效、低错误率、用户满意。不通过自动化需要真实用户或专家评估。常见问题按钮太小容易点错、操作流程需要太多步骤、错误提示用户看不懂、没有撤销功能。典型案例某办公软件的功能菜单隐藏太深用户不知道如何导出PDF导致大量用户投诉。3.5 可靠性测试Reliability Testing目标验证系统在特定时间内无故障运行的概率。MTBF平均无故障时间、MTTR平均修复时间。测试方法长时间运行、注入故障如断网、断电、看系统是否能自动恢复。3.6 可移植性测试Portability Testing目标验证软件能否方便地迁移到不同环境。例如从 Windows 迁移到 Linux从 MySQL 迁移到 PostgreSQL。3.7 可维护性测试Maintainability Testing目标评估修复缺陷、添加新功能是否容易。代码是否模块化是否有足够的日志配置是否外置四、功能测试 vs 非功能测试对比表格五、实战测试一个“文件上传”功能功能测试能选择一个文件并上传。上传成功后显示“成功”提示。上传的文件能在服务器上找到。重复上传同一文件系统如何处理覆盖/重命名/拒绝上传一个超大文件如 10GB系统提示“文件过大”。非功能测试性能100 人同时上传大文件服务器 CPU 和带宽是否扛得住安全能否上传 .exe 或 .php 恶意文件能否通过文件名注入路径如 …/…/config.php兼容性在 Chrome、Firefox、Safari 上都能上传吗手机浏览器呢可用性上传进度条是否清晰错误提示是否友好能否拖拽上传可靠性上传过程中网络中断能否断点续传或给出明确提示六、为什么很多团队只重视功能测试原因需求文档主要描述功能非功能需求常常被忽略或写得很模糊如“系统要快”。功能缺陷容易重现而非功能缺陷如内存泄漏需要专业工具和环境。时间压力项目临近上线先保证功能跑通性能优化留到以后——然后就没有以后了。后果产品功能都实现了但用户因为太慢、总是崩溃、担心安全而弃用。七、小结功能测试是基础确保软件“能做该做的事”。非功能测试是升华确保软件“做得快、做得稳、做得安全、做得顺手”。优秀的测试策略必须两者兼顾。尤其是在金融、医疗、电商、社交等对性能和安全高要求的领域非功能测试应占据重要比重。