工作中经常会接触到外包的项目,并且需要维护。总体感觉是外包的项目代码质量很差,这是由于外包项目的成本决定的,参与项目开发的人员都是一些新手。总结来看,一个外包项目是否成功,在于后期的维护、扩展成本,而保证项目设计与代码质量的前提就是一定要有一个项目监理人员,负责审核项目的设计与代码质量。这个项目监理人员也可以外包,但一定要找有经验的架构师担任。
从最近的一个项目来谈,某电子商务公司,在前期没有技术团队,其订单系统等的管理是外包实现的,从使用情况看,除了操作界面比较难看之外,该有的功能都有了,在验收测试中也很难发现什么问题。但随着系统的使用,不断需要维护增加功能,问题就越来越明显了:
1. 出现串单现象:是由于使用的Struts1框架,但没有遵守FormBean的reset规范,后期维护的代码越来越多,问题也越来越多。
此问题是典型的项目设计问题,并且没有很好的文档说明
2. 数据库设计问题:日期类型都使用的字符串保存
此问题是典型的新手写代码问题,日期类型保存成字符串,无法保证第个程序员的保存格式(yyyy-MM-dd HH:mm:ss),同时严重影响了数据查询的效率
3. 数据库主键、外键设计问题
主键混乱,使用UUID,自增长类型等不统一,也增加了复杂性
外键设计混乱,比如订单的关联,只使用了唯一的订单号,而没有引入外键关联
4. Java代码中的类型问题:与金额相关的类型使用了double, float, int等,这也是典型的新手写代码问题,在Java代码中涉及金额的对象类型应该使用BigDecimal处理
5. 代码中的异常处理不完整
6. 代码中的日志输出没有使用Log框架
直接使用exception.printStackTrace(), system.out等输出,不利于日志的控制与查找
7. 代码中的事务管理混乱
8. JSP代码中到处都是<%%>Java Code
9. 系统的权限管理简单
只有简单的菜单显示的控制,没有对访问资源的权限管理(URL)
10. Java/Hibernate对象的创建不合理,比如外键的关联对象,集合对象等
11. 对象与数据的概念逻辑混乱:
比如父ID为空时,新手的设计是给父ID一个默认值(0, -1等),而实际就应该用空值NULL
以上只是最基本的问题,但是一个外包项目如果这几方面都处理的很好,足以是一个合格的外包项目了。