| 软件测试为什么存在?几个不得不面对的现实 | 当前位置: 首页> 学习中心> 小白入门> 详情 |
有人可能会问:开发工程师也是人,也很专业,为什么不能让他们自己把代码写好、把bug消灭在萌芽状态?答案是:在足够复杂的系统中,缺陷是不可避免的。 这是由几个客观现实决定的。
现实一:人脑无法穷举
一个简单的登录页面,有两个输入框(用户名、密码)和一个按钮。你猜猜这个页面有多少种可能的输入组合?
用户名可以是空、1个字符、50个字符、包含特殊符号、包含SQL注入语句、包含emoji、包含空格、包含中文、纯数字、纯字母……密码同理。再加上记住密码复选框的两种状态,忘记密码链接的点击行为,不同浏览器的渲染差异……组合数轻松达到数万甚至数十万。
没有人能在开发的时候就考虑到所有这些情况。开发者的注意力在“正常路径”上——输入正确的用户名和密码,点击登录,跳转到首页。但真实用户的行为远比“正常路径”丰富和诡异。
现实二:确认偏误是人的本能
心理学家早就证明,人天生倾向于寻找支持自己观点的证据,而忽略相反的证据。一个开发工程师花了三天写了一个模块,他的潜意识已经认定我写的是对的。让他自己来测,他会无意识地选择那些证明自己正确的测试数据,而绕开那些可能出问题的边界值。
这不是职业道德问题,这是人性。独立测试存在的价值之一,就是提供一双没有作者偏见的眼睛。
现实三:软件复杂度在指数级增长
一个典型的电商系统可能包含上百个微服务、数十个外部依赖、多种数据库、缓存层、消息队列、CDN……任何一个环节的异常都可能导致最终用户体验受损。在这种复杂度下,人肉保证质量已经不可能,必须有系统化的测试策略。
现实四:修复成本随时间指数增长
这是软件工程中最广为人知的一条规律:缺陷发现得越晚,修复成本越高。
需求阶段发现一个逻辑漏洞,改一下文档就行,成本接近于零。开发阶段发现,改几行代码。测试阶段发现,需要重现、提单、分配、修复、回归。而如果到了生产环境才被发现——除了上述所有成本,还要加上用户投诉、数据修复、紧急发布、公关危机,甚至法律诉讼。
所以测试不是在浪费开发的时间,恰恰相反,测试在省时间——把该花的代价花在早期,避免后期付出百倍千倍的代价。
更多软件测试相关推荐:
文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理