这次做的项目,涉及到6个子系统的集成,其中有2个是遗留系统,4个是新开发的系统。我负责其中一个新系统
前期还是比较顺利,提前完成了开发计划,并进行了比较充分的代码检视、单元测试和内部测试。但是在进入接口联调和系统集成以后,就变得非常痛苦,这2周平均每天工作时间超过16个小时。但是整个系统还是没有稳定下来,还是有非常多的问题,而且每天的效率非常低,大部分的时间都是花在等待中
为什么这次在开发这么顺利的情况下,在项目后期却会陷入这么糟糕的局面?怎么样才可能比较顺利地完成一个较大的系统?我从项目启动的第一个环节开始,对每个过程进行反思
1、做好需求
现状:我认为这次的需求做得不到位。一方面猜想了比较多的需求,与客户却没有充分地沟通过,这就造成工作量的浪费。更糟糕的是为了满足太多的需求,也影响了系统的架构,造成系统架构的臃肿,这个在后面会详细说明。另一方面,或许有一些客户真正关注的需求,我们却没有实现,这个可能会给后期系统的推广造成困难。
原因分析:会出现上述的2方面问题,我觉得本质的原因就是和客户的沟通太少。需求基本都是凭空猜想,或者根据部门内业务专家的经验推断。虽然业务专家确实有比较高的业务水平,但是毕竟不能完全代表真正客户的想法。所以与客户的沟通太少,也没有积极地邀请客户参与到系统的每一轮阶段性展示活动中。这使得我们系统的需求做得比较糟糕。
总结:应该采用敏捷开发的方式,在尽量小的迭代周期内拿出系统的小版本给客户演示,按照先核心需求,再逐步丰满的方式,不断地调整需求。与客户充分沟通,既保证满足核心需求,又避免工作量的浪费
2、宁可没有架构师,也不要找一个扯淡的
现状:或许大公司都会有这样那样的政治因素,这次项目的所谓“架构师”就是一个大忽悠。
这个系统,估算是200左右的并发规模,可以认为相当于不存在并发问题;然后数据量的规模也不大。如果简单处理的话,可以是一个逻辑架构和物理架构都非常清晰明了的系统。我个人认为,就一个应用服务器+一个数据库服务器,就绰绰有余了。即使以后数据库压力大了,再上数据库集群不就行了。毕竟这是一个业务系统,不是一个互联网应用,根本就不存在并发和海量数据的问题。这样简单处理,我认为是合适的
但是这个“架构师”,整上的东西就很多了:
要先上2个数据库,一个存放业务数据,一个存放资源数据。这样2个数据库就要同步来同步去。这周另外1个小组,就为了这个同步的问题熬了一周的通宵
子系统之间要走所谓“服务框架”,其实就是对CXF的一个封装,没任何意义,纯粹引入复杂性。其实每个子系统开放一个Servlet都可以了。这个服务框架带来的问题,伴随6个子系统整个开发流程,开发时间至少增加1/4,没带来任何价值
然后来个日志框架,其实花半小时自定义一个Appender的扩展就可以解决问题
业务可能有变化的地方,整个OSGi。不好意思,开发已经延期2周了,现在大家都还没做出来。我说真有新功能,再发布一个升级的PATCH不行?何况这个系统就没热部署的需求,业务也很稳定,强行上个OSGi,这不是有病?
本来还要上分布式,幸好大领导终于意识到风险太大,制止了。。
关键是这位“架构师”,提出了上述种种方案之后,人没了?你找他谈实现,他就给你说原则。如是再三之后,我得出一个准确判断,这些方案,他自己就听说过名词。是干什么的?知道一点。怎么实现?不好意思
总结:架构要保持简单,一个数据库能解决的问题,就不要弄多个数据源同步。不准备开放给外系统调用的接口,就不要上web service。什么扯淡的分布式,OSGi,我就不评论了。当然我不是说这些技术不好,其实我对这些技术也非常感兴趣,但是毕竟是做系统,不是在玩过家家。用在合适的地方的技术,解决实际问题带来价值的技术,才是好技术。过度架构,就是200个兄弟的累死累活,就是系统的延期,就是项目跑不起来
3、其实做好上面的2项:分析清楚需求,不瞎做。保持适当架构,不折腾。一个系统到后期就不会像这次这么痛苦了,我认为上述2项是最重要的。后面的都是比较细节的问题
4、越早对齐数据库越好
服务端有2个数据库(Oracle),终端有1个数据库(SQLite),所以存在数据库字段不统一的问题。前期我们自己跑服务桩,啥问题没有,到了集成的时候,各种数据库字段对不齐,有的是类型不匹配,有的是长度限制不匹配,有的是非空约束不匹配,等等。大家都知道,到应用稳定以后,再去改数据库模型是相当痛苦的,因为从数据库字段,到模型对象,到DAO,都要改,不仅开发有工作量,测试也有工作量,越到后期,这个代价越大,所以应该尽早地对齐数据库
这个责任在我,是我系统集成经验不足造成的。这个教训我记住了
5、仅仅在文档层面对齐接口没用,对于涉及到多个子系统集成的项目,可以“接口驱动开发”
前期所有6个子系统,都是自己玩自己的。单元测试都不可谓不充分。也都模拟了实际场景,终端为了模拟测试业务场景,我还亲自写了一个完整的服务端桩。但是即使这样,到了集成的阶段,系统还是各种跑不起来。
其实前期领导就很重视对齐接口,每个子系统的负责人,花了一个星期来写接口文档,各子系统互相评审,并签字确认。到头来,没有用。因为实际运行的不是文档,是代码。文档虽然已经描述清楚了交互协议,每个字段也都对过了。但是接口太多,有的接口也相当复杂,在没有实际测试的情况下,谁也不能保证100%是按照文档来操作的,何况文档也不能保证是100%正确的,毕竟在开发过程中,变更是绝对会发生的,但是未必文档就能及时刷新并知会对方系统。
所以这种涉及到多个子系统集成的项目,我强烈认为应该以接口来驱动开发。每个子系统,首先实现接口。当然在开发早期,每个子系统内部的业务逻辑肯定没实现,不可能有真实业务数据,但是这种时候,可以先传递符合格式的假数据,照样可以让接口跑起来。这样到系统集成阶段,就节省了非常多的工作量。我敢保证效果绝对比这次好。
6、早点集成,不能拖到最后一起集成
这条其实和上一条强相关。这次项目基本做到了每天SVN上的代码是可运行的小迭代。但是都是每个子系统自己玩自己的。应该缩短集成的周期
当然由于每个子系统的开发进度不同,很难做到像单个子系统内部一样每日集成(我怀疑是根本不可能)。但是至少也应该可以做到半个星期或者一周集成一次。把集成的工作放到前面,可以更早的暴露问题,更早的调整。效果一定也比这次强
以上是本次项目过程中个人的一点总结。此外在代码层面,也有一些心得。包括Android应用的分发模式,Android应用的简单ORM框架,Android日志规范,接口设计,Android服务管理等。待系统集成完之后,再总结一下
分享到:
相关推荐
本文将详细介绍如何在Idea下处理多子项目及其内部引用子项目时进行打包的步骤,以及解决打包过程中可能出现的问题。 首先,我们需要理解Maven(Maven是Java项目的构建工具,用于自动化构建、依赖管理和项目信息管理...
1,支持vue多个子系统 2,支持每个子系统打包 3,支持每个子系统运行 4,提供各种node脚本
总结来说,高并发和多子系统设计提高了系统的处理能力和服务质量;配置化简化了开发和运维流程;任务入库定时处理优化了资源利用率和业务流程。理解并熟练应用这些概念,能帮助开发者构建更加健壮、高效的IT系统。
本文档是某学校智慧教育云平台(多子系统)建设方案规划书的知识点总结。该平台旨在构建一个智能化、数字化的教育云平台,以满足学校的教育需求。 系统建设背景 学校智慧教育云平台的建设背景是为了满足学校教育的...
这篇文档总结了集成电路工艺中的基础知识,主要聚焦于pn结的相关概念。 pn结是集成电路中的基本结构,由P型半导体和N型半导体相接合形成。在abrupt junction approximation(突变结近似)中,空间电荷区的电荷密度...
基于调制宽带转换系统(MWC),提出一种基于多子带信号采样和小波变换的宽带频谱感知方法。首先利用MWC实现宽带信号的低速率采样,得到子带信号;然后提出一种噪声功率及检测门限估计方法,再利用能量检测法实现对非...
5. **工程特点与难点**:项目中多子系统集成、与多个工序配合、高工程质量要求、复杂的使用功能、紧张的实施工期以及对实用性与售后服务的高要求是工程的主要挑战。 6. **项目管理机构**:项目管理团队由项目经理...
在多子阵的数字波束形成系统中,每个子阵可以工作在不同的频段,这提供了更大的灵活性来配置数字波束,使系统能够针对空间中的特定目标进行更精确的定位。另外,数字波束形成系统还可以实现方位和俯仰方向的二维测向...
### 总结 综上所述,NC65支持的多子表开发及其合计功能的实现涉及到前端界面的XML配置和后端逻辑处理。开发者需要根据实际需求灵活配置XML文件,并正确设置相关的属性值,以确保合计功能正常工作。此外,对于模板中...
系统集成了环境监测与远程报警功能,为用户提供了全面的安全保障。 从成本和维护的角度来看,该系统结构简单、安装和维护方便,并且成本较低,易于扩展和连接其他独立的子模块。在节约能源方面,控制模块可以通过...
MSB-MUSIC算法的核心思想是将多波束测深系统中的回波信号处理从阵元域转移到多子阵波束域进行。这样做可以有效降低运算量,并且能够显著降低信噪比门限,提高对海底散射体的方位估计准确性。算法基于海底目标的离散...
1. 云计算信息系统的概念:云计算信息系统是一种集成了智能信息处理技术的新型云计算系统,它可以实现接收端与发送端之间的闭环处理,引入了人工智能等仿生技术,因而具有感知和理解环境、区分不同目标、学习、推理...
总结来说,DMT系统通过最优功率分配和多子信道并行比特位加载技术,实现了对频谱资源的有效利用和传输性能的提升。这些技术对于现代高速通信网络,特别是DSL服务,至关重要,能够提供更稳定、更高效的数据传输服务。...
这可能包括单元测试、集成测试以及性能测试。 总的来说,NC5X多子表单据的开发是一项涉及数据模型设计、界面布局、脚本编程等多个环节的综合任务。理解这些基本概念并熟练运用,可以帮助开发者在NC平台上构建出高效...
单点登录技术的系统集成功能为当前企事业单位尤其是大型多子系统企业系统集成提供了完美的解决方案。它使得这些原有系统能够合理的集成起来,对外提供统一的界面风格和唯一的登录入口。单点登录只是一种功能概念,并...
多子直方图均衡微光图像增强及FPGA实现.pdf
这个是一篇关于OFDM最新的文章,是OFDM通信系统的多子带可变滤波器
MATLAB代码的提供使得理论知识能够转化为可执行的程序,有助于加深理解并应用于实际项目。对于希望掌握优化算法和MATLAB编程的读者,这是一份非常有价值的参考资料。通过阅读源代码和实验运行,不仅可以掌握樽海鞘...
在粒子群优化算法基础上,提出了基于聚类的多子群粒子群优化算法。该算法在每次迭代过程中首先通过聚类方法把粒子群体分成若干个子群体,然后粒子群中的粒子根据其个体极值和“子群”中的最优粒子更新自己的速度和...
python多子图-3柱状图-三目标绘制 SCI绘图