软件开发的核心
- - 博客园_知识库 「我们一直这样做开发,时间做久了,便忘了当初的本意. 有关软件系统开发,我们谈些什么. 我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程. 我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化). 我们谈规模,大容量、高并发、大数据.
有人问我软件开发最重要的是什么?
答曰:可测性。
如何定义可测性?
答曰:程序一旦有问题就会显著暴露出来的特性。
这是否会影响程序的稳定性?
答曰:错的就是错的,错误一旦被隐藏,就会成为长久的暗疮,并在未来带来各种稀奇古怪的问题,将增加长久的维护成本。如果有问题就当时当地的暴露出来,就会被解决掉,从而使得软件自内而外的健康,逻辑正确。这样的软件是易于长期维护的。
这是否会增加开发成本?
答曰:有问题就暴露,确实会在开发初期带来一些麻烦,因为程序动辄assert或者coredump,迫使开发者不断修复各种问题。但是一旦模块稳定了,就是自内而外的逻辑正确,没有隐藏任何错误,这对长期维护而言,是降低了成本。因为逻辑正确的东西,不会引起各种稀奇古怪的问题。而稀奇古怪的问题是最消耗维护成本的。
如何增加程序的可测性?
答曰:依据不同的语言和工具有不同的做法。总体而言是做逻辑正确的事情,不要怕return false,不要怕crash,不要用bug数量来衡量kpi。对C/C++而言,可以对各种输入做检查,然后对各种意外做出反应和记录(比如写日志,assert false,return false,甚至退出);对java和c#而言,就是及时return false、抛exception以及不要乱吃exception(实际上我建议只在ui层吃exception,因为正常运行的时候,底层通常不该出异常的)。