程序错误(英语:Bug),或称漏洞,是程序设计中的术语,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。
以上摘自维基百科。但是在开发中,定义为正式上线前。bug 一般是容许的。而且根据程序员自有的自负缺点,很少能测出自己的bug。所幸还有qa(质量保障)把关。
开发过程中bug是容许的。线上环境 出bug,就叫事故。事故是不能容忍的。
如何避免事故?达到零事故?
首先从产品设计上要严谨,也就是从需求上,需求研讨会是必要的。而且必须重视,很多无用功都是从这里开始的。自然伴随着bug的存在。
第二,产品需求文档。辅助开发清楚的知道要做成什么。即使没有,也要明确的需求。产品经理,一定要清楚自己要什么。开发中,很多时候 产品经理都不知道要什么,或者说不清,或者自相矛盾。这很浪费时间,时间是开发中最大的成本吧?在这种情况下,急着上线,急着出产品,基本上是bug满天飞,不宕机就是好的。还有,产品本身有时候提出来的就有逻辑漏洞。这产品经理、开发、测试,基本上都跑不了。也就是会全线挨罚了。
第三,在项目管理上,开发流程上要严谨。这块有好多要说的。
3.1 qa一点要有。这是最后一道防线。
3.2. 开发不允许接触生产环境和测试环境。任何人都不允许对生产环境数据库进行修改和删除操作。CTO也不行。DBA除外。
3.3 做好代码权限管理。这倒不是怕有内鬼偷代码。而是会出问题的。比如提交了logback.xml ,导致日志塞满硬盘。这测试很难测出。直接禁止提交到svn就好了。这一点,机器比人值得信任。
3.4 写测试用例。一套完整的测试,能省很多事情。跑一次test,几乎所有bug都会暴露了。当然,测试用例如果也有bug,,,
3.5 做code review。可以看出很多bug。
3.6 统一代码风格。这一点很难做到。前期投入成本很高。后期收益很大。
3.7 在工程上,分好模块,分好层,能减少很多bug。底层不依赖上层,底层更抽象,上层更具体。因为vo一直都在变。而且vo不要复用。每个方法都保证可靠。而不依赖调用者。bug往往出现在这里。
第四,回归测试要测好。
第五,将所有都依赖都控制在可控范围内。。比如用某云。结果某云挂了或者光缆被挖断了。这都是不可控的。
我们做不到零bug,甚至做不到零事故。但是,可以趋近于零。