产品开发中经常出现的低级错误
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,多线程环境很难发现。类似这样的问题,只能通过对开发者的培训来解决了。
总体而言, 产品中的问题更多的都是人为原因, 而且一个有经验的开发者会避免很多这样的问题,一个初级的开发者,则会反复出现这些问题。需要在今后的工作中注意。
尽管一说大家都能知道,甚至可以从书本上看到类似的例子,但是我还是看到了很多非常低级的错误存在在我们的产品中。 首当其冲的是连接池泄露,(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,多线程环境很难发现。类似这样的问题,只能通过对开发者的培训来解决了。
总体而言, 产品中的问题更多的都是人为原因, 而且一个有经验的开发者会避免很多这样的问题,一个初级的开发者,则会反复出现这些问题。需要在今后的工作中注意。
相关文章推荐
- 开发人员经常犯一些低级错误如何解决
- IOS-17-百度地图开发经常出现的错误和注意点
- Android开发中出现的低级错误之没有android jar包
- 〖强暴贴〗号称全国最大开发者网络的CSDN多次出现低级错误, 验证码形同虚设, 开发人员竟是MVP!
- SPring Hibernate 整合学习开发出现的错误
- 安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结
- 在windows开发react-native android应用程序出现的错误
- 关于用eclipse开发android经常出现R异常问题
- 新手开发android容易出现的错误(不断更新中...)
- iOS开发笔记:编译时出现的错误和解决办法
- ODP.NET 开发 出现 ORA-12154: TNS:could not resolve the connect identifier specified 错误
- C语言经常出现的错误提示
- Mongodb常见错误与解决方法小结(Mongodb中经常出现的错误)
- Android开发常见错误(3):使用retrofit+rxjava更新UI出现卡顿
- Android开发,相机拍摄并返回时,部分手机出现横竖屏切换的错误处理。
- 开源项目中经常出现的七种错误
- 注解开发低级错误Error resolving template....
- [置顶] Android开发之模拟器genymotion安装apk出现错误: Install_failed_invalid_URI
- anroid开发遇到问题:跳转出现错误 the application xxx has stopped unexpectedly
- 安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结