`
yiyeqinghuasoon
  • 浏览: 643473 次
文章分类
社区版块
存档分类
最新评论

企业定制软件开发的两个核心问题

 
阅读更多

2010-03-15 作者:taowen 来源:taowen的blog

企业定制软件开发不是计算机科学,需要解决的不是编译原理也不是组合数学。那么,企业定制软件开发的核心问题是什么?
越来越感觉到,从事一个领域不需要有特别深刻的理解,但起码要知道做这个领域的事情,需要解决的核心问题是什么。比如说,开发C/S结构软件,状态同步(C/S状态同步以及窗口之间的状态同步)就是核心问题之一,而开发B/S结构的软件,状态同步就不是那么核心的问题。如果事先知道需要有这些核心问题需要考虑,在日常应对接踵而来的具体的事务的时候,就能够把解决问题的层次抬到更宏观的层面。
目前而言,个人感觉企业定制软件开发的核心问题有两个:
1、如何保证所有参与者(包括客户在内的开发团队,以及最终用户)的沟通强度,使其能够满足完成开发目标的需要。
2、如何管理企业定制带来的软件自身内在的高复杂度,使得复杂度不会超过团队的维护能力范围。

在前面一篇介绍组织的Blog中,谈到了核心问题中的第一个,沟通强度问题。团队而言,刨去个人能力,最重要的就是人与人之间的沟通。没有好的沟通,即便团队的个体能力都超级强,也无法形成合力。但只要有好的沟通,至少可以做到人尽其用。假设一个标准人的生产力是1/day。某些特别强的人可以达到3/day。但是如果需要达到10/day的生产力才能在市场允许的时间下完成项目,那么就无法用一个人来完成之间事情,所以才会有团队存在的必要。但是有两个标准人,并不会达到1+1=2/day的生产力。可能只有1.5。有三个标准人,更加不会达到1+1+1=3/day的生产力,很有可能有1.8。那么是什么制约了团队的整体生产力,那就是沟通。当两个相关联的任务A和B是一个人做的时候,关于任务A的知识存在于左脑,关于任务B的知识存在于右脑。那么结合两个任务的知识把其组装起来的沟通效率就是大脑内部的电信号的速度。但是如何任务A是由Dev甲完成的,任务B是由Dev乙完成的,那么整合两个任务的效率就受到人嘴皮的震动频率的约束,受到表达能力的约束,受到理解能力的约束。有人研究过,两个人即便是面对面,传输的比特率也要低于最早的拨号式Modem。更不用说,有的时候开发团队是分布式的。在无法看到表情,肢体语言,无法共享白板,只能在越洋电话里听到声音,而且其中还有一方是非工作时间,在这种情况下,1+1几乎很难达到1/day的生产力。什么是高效的团队,就是能够让1+1的值尽可能大的团队。如何变得高效,让沟通变得更加高效。怎么样让沟通变得高效高强度?这就是我们要处理的核心问题。
第一个问题可以应用于所有的人的团队行为之中。人只要聚集成群,就会有沟通问题。所谓,有人的地方就有江湖。第二个问题则特定于企业定制软件开发。对于互联应用开发,也许复杂度的管理是其次的,最需要关注的是大用户量下的可扩展性。但是对于企业定制软件开发,由于业务自身的复杂度,导致了定制软件的复杂度。特别是业务的组合,导致的组合复杂性。假设在理想情况下,一个系统可以分解为模块A,B,C,其复杂度都是2。在复杂度管理良好的情况下 ,这些模块是被明确划分的,要理解A,只需要关注A,以及B与C少量与A交互的部分,也许理解的复杂度只是2 + 0.5.。但是在复杂度没有管理的情况下,所有的“逻辑”(也就是复杂度)都是随意地放置的。那么也就是没法办法保证,读A的逻辑只需要关注A,甚至这个A都是不存在的,你看到的知识一个系统,包含了A,B,C的功能,是完整的一块。这个时候要真正了解这个系统行为,可能就需要2 * 2 * 2 = 8这么高的代价了。随着模块(变量,方法,类,包,模块,Bundle)的增加,我们需要同时理解的东西也在不断增加。不去可以地管理复杂度,很有可能,我们需要了解一块功能,就需要把所有的代码都去阅读一遍。或者说,改动了一个方法,使得整个项目都需要重新被测试,因为没有地方是可以被信任的。如何管理复杂度?这就是我们要处理的核心问题。
有意思的事情是,这两个核心问题是重叠的。把人,角色等同于类,接口,都抽象地看成点。把沟通理解为人与人之间的联系问题。把复杂度也理解为类与类的依赖问题。那么沟通问题和复杂度的管理问题都是如何把这些点联上线,组成一个高效的图的问题。这个图,就是一张关于“依赖”的图。人与人之间的依赖,类与类之间的依赖,包与包之间的依赖。依赖的另外的一个名字就是Coupling。而我们追求的就是Cohesion。Coupling(耦合)/ Cohesion(内聚)这两个词的妙处在于,明白的人根据自己的经验,一看就点头。不明白的人,由于没有对应的经验,无论怎么解释,都是摸不着头脑。正是因为其“妙不可言”性,所以我可以说这两个词就是所有问题的答案(你也无法反驳)。但至少我们可以知道企业定制软件开发的核心问题其实就是一个:就是管理好人与人之间的Dependency,包与包之间的Dependency,使得信息可以在高度依赖的人与人之间快速传递(强调Coupling带来的消息传递的效率),而理解又可以局限在高度内聚的模块内部(强调Cohesion带来的维护便利),但同时又不能让某人过度被依赖倒置工作过劳死了,被依赖得越多要求其体能越好,对于包的内聚也一样,高内聚做到极致就是最小的编译单元(类?),又会导致包的粒度过小,使得包的数量变得巨大,失去了维护的便利性。我们需要做的,就是在To Depend or Not To Depend中,根据场景作出取舍。
那么抽象而言,无论是解决沟通问题还是复杂度问题都可以归纳为:
1、设置目标指标
2、度量现有的指标,观测现有的依赖图
3、做出依赖图的调整计划,并执行
4、观察指标的变化
5、重复步骤3,4,直到目标达到

但是问题是:
1、如何度量指标?沟通的效率?代码的质量?都很能度量。
2、如何观测现有的依赖图?包的依赖还可以观测,但是团队的协作是比较难观测的。
3、如何对依赖图做调整?重构?Change Agent?人不比代码那么容易改变。
4、如果指标不是简单数字,怎么比较?怎么知道指标是朝着目标发生变化?
这四个问题,几乎没有硬的科学问题。管理复杂系统的复杂度,可能是一门硬的科学。但是夹杂了人的因素的企业定制软件开发,一定不是一门硬的科学。那么,数学公式不是这些问题的答案。那么该朝哪个方向努力?

分享到:
评论

相关推荐

    UniEAP®包含开发工具、技术框架、通用技术组件和软件开发方法学,提供从需求、设计、开发、调试、部署到运维的应用全生命周期一站式服务,支撑IT应用的敏捷构建。

    UniEAP®家族产品围绕企业IT应用构建的两个核心业务“数据和流程”,关注应用构建的两个关键指标“效率和质量”,打造一个敏捷、高效的业务基础平台,家族产品包括: 平台优势 优秀的平台=卓越的技术+丰富的...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    6.1.3 JMS的两个重要版本 229 6.2 PTP类型的JMS 230 6.2.1 配置PTP的JMS服务器 231 6.2.2 PTP消息的发送 241 6.2.3 PTP消息的同步接收 244 6.2.4 PTP消息的异步接收 246 6.3 Pub-Sub类型的JMS 248 6.3.1 配置Pub-Sub...

    《Android Telephony原理解析与开发指南》_杨青平

    Android的基本通信功能是Android系统定制的核心模块,本书主要围绕Android Telephony和融合通信两个核心部分展开。Android Telephony部分从接打电话、网络服务、数据上网三个功能解析Telephony。 全书共10章,主要...

    新版Android开发教程.rar

    ANDROID 的推出后可能影响的产业包括移动电信业,软件开发业,手机制造业,在以消费者为核心的状 态 。 对消费者的影响 � 高档手机选择面增加。 � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从...

    PDM入门知识pdf下载

    新一代企业模型分析方法应当首先着眼于“标准企业职能”,通过组合和定制各个“标准企业职能”实现某个特定的企业、“虚拟企业”或企业联盟的综合信息模型。这个模型的最终产品便是PDM产品。 在近十几年的时间里...

    asp.net知识库

    通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到...

    短信猫:又称GSM MODEM,GSM猫,无线猫,短信模块,GSM模块

    短信猫二次开发包:短信猫厂商针对软件开发商短信应用提供的二次开发包,其底层是基于短信猫的AT指令,对于软件开发商只需要调用二次开发包或者控件中的API即可。基于多年的开发经验,为客户提供一套基于动态链接库...

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    界面库的效率是一个核心问题。糟糕的界面库效率会带来极坏的用户体验,这也应是公司在考虑一个界面控件类产 品时首要考虑的问题。可以通过以下几种方式来判断界面库类产品的效率:  拖拽窗口,观察是否有明显的...

    Xplorer2 功能强大资源管理器(带序列号)

    软件开发商:zabkat 语言:简体中文汉化版 软件介绍: 当你使用windows自带资源管理器你会不会感觉有很严重的延迟呢,相信这是很频繁的事,xplorer可以解决这个问题,该软件采用双面板设计,你可以将自己想用的功能...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改 Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放...

    ASP EXCEL导入SQL

    Rails框架(从版本1.2.x起)成为了第一个引入REST作为核心思想的主流网络软件开发框架。在Rails框架的充分利用了REST软件架构之后,人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了...

    TQ即时聊天软件免费版的

     TQ在线客服系统,基于IM技术开发,专门针对企业用户在线服务设计,属于客户端IM和WEB IM混合结构,坐席端使用客户端即时通讯,网页用户端,使用B/S架构的网页会话,可以避免当一个坐席接待多个用户时的速度问题。...

    大数据定义.doc

    对于企业组织来讲,大数据的价值体现在两个方面:分析使用和二次开发。对大数据进 行分析能揭示隐藏其中的信息,例如零售业中对门店销售、地理和社会信息的分析能提 升对客户的理解。对大数据的二次开发则是那些...

    视频差异检测器:基于opencv的视频比对工具

    Video-Diff-Detector是一个自动化的视频比对工具,它利用Python和OpenCV技术,能够同步两个视频源,检测并标注出它们之间的差异,并将这些差异记录下来,旨在提高视频分析的效率和准确性。 该工具的核心功能包括...

    天正建筑8.0免费下载(含注册机).exe

     建筑设计信息模型化和协同设计化是当前建筑设计行业的需求,TArch8在这两个领域也取得了重要成果,一是在建筑设计一体化方面,为建筑节能、日照、环境等分析软件提供了基础信息模型,同时也为建筑结构、给排水、...

    大数据心得体会(1).doc

    大数据纪元刚开始,产业界碰到的第一个核心问题 就是"大"的问题。做了几十年的数据仓库甚至海量并行处理的数据库都不能处理那么大 的数据,怎么办?需要范式切换.主要有三个方面,新型的数据与机器关系当中的第一条 ...

    大数据心得体会.doc

    大数据纪元刚开始,产业界碰到的第一个核心问题 就是"大"的问题。做了几十年的数据仓库甚至海量并行处理的数据库都不能处理那么大 的数据,怎么办?需要范式切换。主要有三个方面,新型的数据与机器关系当中的第一 ...

    卡巴斯基3[1].5瑞士版

    此外,卡巴斯基反病毒核心技术已被国际著名软件开发商 Aladdin、Nokia ICG、F-Secure、Sybari、G Data、Deerfield、Alt-N、Microworld 和 Borderware 等作为产品的安全解决方案集成到各自的产品中。 <br/> 现在...

Global site tag (gtag.js) - Google Analytics