写了这么多年的软件,已经练就了一身铜墙铁壁,不吹牛的说,“我”写出来的代码基本没有什么 bug 。
更确切的说是在软件层面很少出现什么 bug,为什么,主要还是得益于严密的思维,丰富的经验积累,比如:
~ 传入的参数控制好边界,非法值的判断。
~ 所有的异常情况考虑周全,捕获到位。
~ 严格按照接口规范处理。
~ 返回码 /错误码处理到位。
~ 不写花里胡哨 /晦涩难懂的代码。
~ 谨慎处理并发 /异步 /回调。
~ 注意对象的生命周期,引用释放。
~ 写完一个功能,立马自测一遍。
...
这种防御式的编程模式,基本做到了滴水不漏。所以给出去的软件模块 99%都不会有问题。
然而 bug 终究会产生,这个时候“我”发现,大部分的 bug 都源自需求的混乱不勘,功能的杂乱堆叠,业务的纠缠不清。
所以,再强大的软件设计师,都会被不好的需求搞死。(比如考虑各种兼容性,比如强行让一只鱼飞上天)
这也是为什么再牛逼的操作系统也是 bug 连绵,补丁不断,因为需求太复杂了。
更确切的说是在软件层面很少出现什么 bug,为什么,主要还是得益于严密的思维,丰富的经验积累,比如:
~ 传入的参数控制好边界,非法值的判断。
~ 所有的异常情况考虑周全,捕获到位。
~ 严格按照接口规范处理。
~ 返回码 /错误码处理到位。
~ 不写花里胡哨 /晦涩难懂的代码。
~ 谨慎处理并发 /异步 /回调。
~ 注意对象的生命周期,引用释放。
~ 写完一个功能,立马自测一遍。
...
这种防御式的编程模式,基本做到了滴水不漏。所以给出去的软件模块 99%都不会有问题。
然而 bug 终究会产生,这个时候“我”发现,大部分的 bug 都源自需求的混乱不勘,功能的杂乱堆叠,业务的纠缠不清。
所以,再强大的软件设计师,都会被不好的需求搞死。(比如考虑各种兼容性,比如强行让一只鱼飞上天)
这也是为什么再牛逼的操作系统也是 bug 连绵,补丁不断,因为需求太复杂了。
