“军工六性”是对指军工产品六个方面的要求,包括稳定性、维修性、测试性、安全性、保障性和环境适应性,也称之为通用质量特性。我结合软件的研发,介绍如下:
稳定性(可靠性):一把枪,总得能稳定地发挥自己的性能。对照到软件中,就是软件得表现稳定,操作的输出可预测。任由用户有意或无意地乱输入,系统总能给出正确的输出。这需要严谨的设计逻辑,和严谨到苛刻的代码编写规范,规范养成习惯,成为代码人(coder)的修养。
维修性:在规定使用条件下使用的可维修产品,在规定条件下并按规定的程序和手段实施维修时,保持或恢复能执行规定功能状态的能力。在战场上,坏了得好修。在软件上,出错了得容易定位Bug。这就要求出错时,有简洁清晰的提示信息(反倒:把错误消灭在肚子里,只告诉用户“发生了一个错误”,具体是啥错误,你猜;-),在日志上有足够的信息,能方便地定位错误位置,快速地验证和修复错误。
测试性:产品能及时并准确地确定其状态,并隔离其内部故障的一种设计特性。不用到真要修的程度,这个产品随时能告诉你,它是可工作还是不可工作、是性能完好还是性能下降。就像我们的手机电池显示电量百分比那样。软件需要对与自己相关的各种连接的资源和交换数据进行检测,第一时间发现和报告问题。比如SQL执行很慢,不监测就不知道,可以通过框架去监测。前面说的是自测,后面说的是被测。即软件操作的一切资源(如文件,网络,甚至另一个软件),都应该是可以模拟(Mock)的,这样可以把软件放到仿真环境中进行各种测试。
保障性:系统(产品)的设计特性和计划的 保障资源满足平时和战时使用要求的能力称保障性。不仅产品要好,还得好生产、好运输、好储存。不仅功能实现要正确,还要容易学习,操作方便,容易扩展,性能要好,兼顾美观。
安全性:产品所具有的不导致人员伤亡、系统毁坏、重大财产损失或不危及人员健康和环境的能力。计算机世界的安全是一个系统工程,不是把安全模块做好了就好了。而是要全流程安全。千里之堤,溃于蚊穴,任何一个的薄弱环节都可能成为入侵者的突破口。认为“加个防火墙就安全了”的这种思想就很不安全。
环境适应性:产品在其寿命期预计可能遇到的各种环境的作用下能实现其所有预期功能、性能和(或)不被破坏的能力。把常见的,极端的输入都考虑在内,采用严谨的逻辑来思考和推敲如何写代码,就能把这件听起来很难的事解决好。不能在极端情况下,系统处理结果不正确,比如用户输入一个数字后多敲了个空格,结果软件就多发或多收一倍的钱。排序算法不能因为遇到某些特定的数字,就要耗费比平时多得多的时间才能完成排序。
不要认为以上军工六性用在软件很牛逼,标准很高,而应该认为这是起码的要求。从现实来看,做到的还真不多,所以做到的还真牛逼。既要努力达到军工六性的要求,也要不局限于它,把眼光放高放远,才能做出更好的软件。现实可能骨感,理想必须丰满。
参考: