您的位置:首页 > 其它

产品开发中经常出现的低级错误

2012-08-24 10:52 288 查看
软件的发展有几十年了,自己从事软件开发也有十几年了,看上去软件产业逐步成为一个成熟的行业,有相应的规范,流程指导,有前人留下的经验以及教训,软件开发越来越正规化,然而,这更多的是对外行人说的,实际的现状是,软件行业存在的问题多多,软件作为一个高智力的产业,规模化的发展仍然任重道远。

尽管一说大家都能知道,甚至可以从书本上看到类似的例子,但是我还是看到了很多非常低级的错误存在在我们的产品中。 首当其冲的是连接池泄露,(connection leak),原因也非常简单,无非就是忘记关闭连接,但是几乎每次版本发布,都需要仔细验证,尤其是大数据,高并发的测试,很快就会发现问题。 比较典型的是,没有在finally块里面去关闭连接, 还有就是在构造函数里面去获取连接,再不就是在一个方法里用临时变量获取连接,并且没有关闭这些连接。 连接的使用是一个非常有技巧问题,一个好的设计模式, 或者是框架,有利于连接的管理,无论是session
per request,或者是每个方法去获取和释放连接,总之,一定要配对,在什么范围域里获取的连接,就在什么范围域去释放。

排名第二的是安全问题,在没有发生安全问题的时候,尽管大家都知道,但就是没有去关注,甚至抱着侥幸的心理,一旦问题发生,后悔晚矣。 就像CSDN发生过的密码泄露,看上去都不可思议,密码可以用明文存放,然而实际上就发生了。 有关安全的问题, 可以参考OWASP TOP10 issue, 很有意思的话题,常见的有注入(injection),例如sql injection,XSS,CRSF等, 这些问题都在我们的产品里面发现了, 有时候看看hacker编造的攻击数据,很有技巧。当然OWASP 也提供了相应的解决办法和指导,帮助我们构建更加安全的产品。

第三个就是测试,很多公司产品缺少测试,尤其是PSR 测试, 一些问题在普通测试中暴漏不出来, 一旦数据量,访问量提高,马上原型毕露。 从程序员的角度来说,在开发时一定要考虑到这些问题。产品目标用户是多少,扩展性如何,提前考虑好这些问题,才能有针对性的解决。

最后就是开发中不小心,不严谨引入的一些问题,例如equals, hashCode方法的作用,意义不清楚, 曾经碰到一个错误,在多线程环境下,非常难发现, 问题就在于HashTable里面的contains and containsKey,两个明显不同,但使用者没有注意,需要用containsKey的时候用了contains,多线程环境很难发现。类似这样的问题,只能通过对开发者的培训来解决了。

总体而言, 产品中的问题更多的都是人为原因, 而且一个有经验的开发者会避免很多这样的问题,一个初级的开发者,则会反复出现这些问题。需要在今后的工作中注意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: