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

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


尽管一说大家都能知道,甚至可以从书本上看到类似的例子,但是我还是看到了很多非常低级的错误存在在我们的产品中。 首当其冲的是连接池泄露,(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,多线程环境很难发现。类似这样的问题,只能通过对开发者的培训来解决了。


总体而言, 产品中的问题更多的都是人为原因, 而且一个有经验的开发者会避免很多这样的问题,一个初级的开发者,则会反复出现这些问题。需要在今后的工作中注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值