如何测试软件的稳定性其实是很难的,按照常规思路,只有长期的用户场景测试才能一定程度上保证软件的稳定性是可靠的,但并不能百分之百确定软件就是稳定的。软件测试本身就是由局限和尽头的,无穷的测试只能带来高成本的投入和无限期的计划延长。
其实,可以从反面角度来看待软件的稳定性,我们从一个简单的数学定理入手:
原命题成立,则逆否命题也成立。
原命题:软件没有明显缺陷,所以是足够稳定的
逆否命题:软件并不是很稳定,所以有明显的缺陷
假设原命题是正确的,那么你否命题应该也是正确的。
我们从原命题出发,很难说服团队去相信软件是足够稳定的,因为稳定的软件是没有明显缺陷的,没有数据的支撑和客观的事实,简单的例子就是,一我们不可能发现软件中所有的缺陷;二我们不可能花2~3个月不定地运行软件然后生成报告说经过长时间的实验软件十分稳定,时间不允许,就算时间允许我们也不敢保证3个月后程序是否还继续稳定如初。
从逆否命题出发会简单许多,我们可以短时间内投入足够的精力去想办法证明软件很不稳定,比如让软件在高负荷下持续运行,给不同的压力和并发请求,进行破坏操作等等,如果软件没有出现明显的缺陷那么说明原命题也是成立的,从这个角度思考就可以从容地解决软件稳定性验证的问题。
搞破坏比搞建设容易的多,这也是为什么会有混沌工程这么学说。