Category Archives: Project and Methodology

Project is On Risk

Acutely,  failed already!

如果单纯以按时交付作为衡量的指标,那这次版本迭代几乎是失败了。

事实上,目前的两次版本都失败了,平均超时60%左右。

事到如今,我不得不反思,项目做到如此地步的原因。

I1和I2:最主要的原因,恐怕是来自于苹果方面审核的未曾预料。

开发账户验证用了一个月,软件上架审核也将近三周,大量的时间和精力用在各种临时方案的救火之上,因此产品的细节关注降低。也未曾达到预期效果。

深层原因:两个关键外部风险在已经识别的情况下,关注度不够,责任不明确,同时由于流程方面的不熟悉,提前量做得也不够,最终没有留下适当的缓冲时间,非常被动。

软件质量:项目和产品是完全不一样的要求!

至少在项目管控上,对业务部门太弱势了。放弃了一些原则性的东西;

更主要是,上层的压力和某些同事好大喜功的个性严重压缩项目时间;

在具体执行上,又缺乏足够明确的计划,没有一以贯中的掌握;

过于关注技术和功能性,对商务和其他沟通没有纳入计划考虑。

救火:

继续坚持RFP的完整性与可行性;

项目计划中列入商务部分,同时加强内部沟通协调工作。

转移部分细节工作,重点控制关键指标达成情况。

随着项目成熟,尽快建立长效机制,避免商务问题造成过多的成本,延长项目周期,加快版本迭代。

七街开发报告1104

新技术是很好的事情。然而如何应用是另外一件事情。

新七街开发过程中最大的痛苦就是没有可供参考的例子。

REST的概念原本不是Java兴起的,仅有的RESTlet试图做的事情太多,Struts2是非常具有实验精神的框架。然而通过插件来实现的时候,文档上面就太痛苦了,只能遇到问题去mail list询问。虽然不是完全的语言不同,但误会也是常常发生。

不过,除去以上因为不成熟带来的种种不变,七街的REST开发模式还是很令人舒服的。

  1. MDA,模型驱动:因为完全的ORM,模型在整套架构里面举足轻重。好的模型除了3NF要求以外,应当满足:支持业务功能;保证数据完整性;可演化。后两者于模型质量是及其重要而相互制约。这种时候,经验可能更重要,但如果没有严格的实践过程,这种经验也无从获取。可演化是一个很有意思的概念,现在有提出数据库重构;包括RoR中也有工具来反映对数据库的变革。之所以没有全套使用Rails,并不是对现有技术的割舍不下。ORM不能解决关系模型中的问题。面向对象就完备性和理论而言,还无法和关系模型完全对照。关系模型的具体物理实现也差异巨大。再加上性能和数据安全的考虑,完全的ORM是难以令人信赖的,毕竟没有基于ORM的数据管理工具。
  2. 业务逻辑:业务逻辑会因为高质量的模型而得到异常的简化。而在业务逻辑实现的时候,一些有效而简单的工具包至关重要。按照契约式思想分解业务对象时,可以很简单的按照2:8原理分解重复逻辑,大幅降低开发代码量。更少的逻辑,更少的测试,就意味着更健壮的软件。
  3. 表现层:REST使得表现层可以随意组合。不同的数据展现方式,只需要一次业务逻辑实现。配合MDA,所有的信息都可以相互解耦。从而在一开始就重点实现业务功能,最快进入系统集成阶段。
  4. 低耦合的架构:基于Session和基于应用的变量与常量能够简单的存取;模块间相互独立的版本控制。虽然还没有达到一个理想的地步,但是下一步的改进也已经有章可循。第一阶段的主要目的在与尽可能的减少代码量,以此为目标来评价框架。

以上是种种好处,以下是种种不足:

除了美工与产品设计等难以短时间高质量的东西,还有很多问题有待解决:

  1. REST数据展现的方式:目前实现的三种 xhtml, json, xml 其中xhtml大概还需要大量工作符合各种标准,以及优化性能。json与xml从json-lib换到xstream又换回来,这些开源的组件的确有一些bug,目前使用的REST插件功能也过于简单虽然自己可以修改,但估计还会有许多的问题需要解决。另外,RSS以及ATOM应该也是必需的。
  2. 代码质量:单元测试覆盖率还远远不够。集成测试和压力测试也完全没有做。自动化工具的使用也仅仅是停留在第一个层面上。
  3. 代码重构:源码库已经积累了一段时间,重构也必须要提上日程了,只是目前重构的水平还亟待提高。
  4. 文档质量:虽然XP是不要太多文档的,但如果连路线图都不明确,那就是耽误时间了。

以上种种,时间和人手是大问题。

一些未来的可能性:

  1. ROA与SOA的比较。目前当然SOA在前,ROA完全没有成型的标准,难以产品化。不过ROA比SOA简单太多,再加上SOA虽有标准,但大多执行起来张冠李戴,良莠不齐,效果也将大打折扣。至少对于中小应用来讲ROA是完全胜任而迅速的,更提供了现成的API接口。
  2. 企业架构的复杂性在于,永远不会有一劳永逸的解决方案。这种情况下,技术型风险的控制是第一位的。在部分组件出错的情况下仍然可以进行业务处理是非常重要的。所以无论从架构或模型的设计上,都要求可查可控。数据审计是个必须重视的课题。
  3. 智能平台,Web3.0(semantic web)与数据挖掘。数据要素由数据结构、数据操作和完整性要求构成。换句话说,数据要可分辨,可计算,有效。因为在系统设计的各个阶段,从模型到系统IO,标准设计,互操作契约是第一位的。为了降低开发成本和风险,标准化是第一位的选择,其次是系统暗喻,再次是设计文档。系统暗喻也应当体现在设计文档中。

新七街开发进度小结 080913

完成了所有框架的搭设并且已经完成了论坛基本功能
用户基本管理 权限控制与分组

基础部分,通用模块经过三次重大调整,完成了ChainQuery以及相关的分页,延迟加载,排序等模块,估计进度80%
REST模式确定 为

http://www.example.org/namespace/con…para=paraValue 的格式
基于ModelDriven 结合REST 就实现了
http://www.example.org/namespace/controller.json
http://www.example.org/namespace/controller.xml

这样的数据访问接口,并且可以通过HttpBasic认证(之前有POC,此次还未测试)

数据部分,已经尝试转换基本用户数据成功

重要关注:帖子 主题 论坛分类 主题分类 附件

明天工作计划:

  1. 完成权限相关的细节功能
  2. 完成基本Tag模块

关于Hibernate数据库链接未释放的问题

一定要调用session的close或者release这样的方法。

如果使用Spring的HibernateTemplate,不妨写个HibernateCallback把琐碎的事情交给Spring来完成,毕竟涉及到多事务的问题,还是相对复杂的。

另外赞一下AST以及Hibernate的AST实现,对DSL有了新的想法

娱乐和实际是两回事啊

半夜上线,又华丽的看见苏拉的三连击。

从昨天开始,继续处理很多琐碎的小事情,因为是开发笔记,所以继续琐碎的记载。

昨天,不,前天做的第一件事情是更换主题。从黑色换成浅绿色为主的界面,背景为白色。界面的事情还有很多要做,不过可以慢慢来。

之前说过的Validation的问题,修正了代码之后还是没有解决,再加上默认的脚本也的确不怎么样,所以最后页面实时验证还是用jQuery来实现。发布之后考虑做个插件结合jQueryStruts2的验证关联。

因为要完全的定制页面的代码,所以选择了修改Struts2的模板,freemarker还是相当易学易用的;Struts2的componet标签也很好。借此,修改了附带的css_xhtml主题,去掉了大量的div标签,更合我心意。对比jsf等其他框架那种代码里面写标签的方式,Struts2真是太亲切了。开发模式中可以一边修改一边看结果,非常快捷。而且,经验告诉我们,优秀的缓存机制会让这种灵活没有任何的性能问题。继续BS一下JSF的大行其道。

完成了第一个简单分页的组件之后,发现了问题:之前一直用的JOTM实现的分布式数据库事务挂掉了。现象是Connection Pool降不下来,一会就达到最大值,程序陷入死锁。网上搜索没有太多结果,这个项目似乎已经多年没有更新了。

于是按照飞翔兄的提示,开心的去鼓浪屿吃馅饼去了。走了不少弯路之后还是找到了。吃的依然很开心。结果半夜回家的时候,我又迷路了。

后来放弃了分布式数据支持,原本是为了和原论坛程序配合,现在打算完全抛弃它,所以也没有必要了。换成了熟悉的c3p0,导入用户数据之后,点击页面。异常!Session is Closed!原来如此,当初娱乐写的分页代码有问题。关联Session的查询对象被带到了事务以外,所以当初连接没有释放,现在查询会话关闭。所以,没有在实际项目中用过的代码果然不值得信任啊。

永远不要破坏依赖层次,把数据层的对象带到了事务以外,就是错误的根源。

要修改这个就有点工作量了,所以暂时放到一边了。恩,明天继续。

顺便放上今天的若干夜景。

http://picasaweb.google.com/lazing/lWHnDD

胖子又喝多了。。。