你的位置:首页 > ASP.net教程

[ASP.net教程]信息系统实践手记3


说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题。笔者对其中比较典型的加以收集,描述,归纳和分享。

摘要:介绍一下业务相关的代码优化(比较抽象,偏系统分析和设计)。

正文

 

系列随笔目录:信息系统实践手记 (http://www.cnblogs.com/taichu/p/5305603.html)

作者:太初

转载说明:请指明原作者,连接,及出处。

 

1.问题出现

如前面2次手记提到的这个既有视频也有GIS的业务结合的客户端,它的确有些瑕疵,要开发的面面俱到,毫无问题的确难而又难。这次又遇到了其实可以泛泛的归为“面向方面的编程”的问题。问题的出现其实是一个研发老大难的问题,可以抽象为经典的几个步骤,如下:

  • 一开始做客户端软件原型;没啥问题;
  • 开始逐渐的添加单一的功能来迎合场景需求(independent);没啥问题;
  • 功能开始多起来,场景也多起来了,开发人员从1个变为2个,4个,6个,而且是三地开发;代码开始有不少冗余,但是还能用;
  • 为了扑到现场拿项目,产品经理只关心快速的功能实现,基本无法留时间重构和优化,大框架勉强优秀支撑主体,细腻的代码细节开始走上不归路;代码冗余加剧;
  • 开始出现张三为实现功能A而改动代码块K,完成后导致功能B失效,回归测试投入大量人力,高手介入发现代码冗余问题,开始抱怨;
  • 勉强经过添油加醋,让产品经理(敏捷研发流程是PO决定人力)认识到问题严重,然后开始同意做细腻的代码剥离;也就是今天的主题;

获得了人力支持,挑选了高手1枚,普通开发1枚(其他高手还要应付主线新开发和现场定制开发呢!),带上系统和测试各一枚,开始剥离代码,原理不再集中序数,步骤如下:

 

2.问题出现

  • 会诊启动:先找(系统,开发,测试)会诊问题,明确解决路径和目标,以及大致时间要求和尺度;
  • 检视源码:开发先集中review相关代码块,做到心中熟悉(功能上百个,十来人开发多年,早就忘记谁开发过啥,有记录也忘记代码了);
  • 场景梳理:测试从test角度,按照功能的不同,区分不同的入口,以及功能展现的不同场景,将他们像一条线索一样联系起来,顺利为文档;
  • 场景分类:从以前一味的实现大量功能,到现在按照场景的类别区分出来几种典型的场景{T1,T2,...,Tn},符合:
    • Tx之间的独立性:Tx之间不互相依赖的,使用上可以在时空重叠使用的而互不影响的;这会影响到:
      • 客户端代码角度上:Tx的代码片段应该独立,它们不应该分享公共变量,以便互不影响,同时呈现GUI
      • 服务器代码角度上:要考虑Tx的功能接口互相独立,各自运行;(但一般来说,SERVER的设计原则总是“service on demand”以及“independent”,而无论是否因为Tx独立而额外的给予照顾)
    • Tx之间的依赖性:在Tx的同类场景内,几种细分的功能或业务不能同时展现GUI
      • 客户端代码角度上:Tx的同类场景只能单选,代码上可以共享公共变量,比如共享公共的缓存CACHE结构等,而且往往应该在框架上特别做成共享的。
      • 服务器代码角度上:要考虑对Tx一类的场景提供服务的时候,鉴权,状态变迁,各种约束,以免出现场景混乱和互相影响。
  • 剥离代码:按不同业务场景,开始剥离代码,对客户端代码做检视,扫描实体动作代码依赖的“内存缓存,数据结构,上下文依赖等程序片段和元素”,然后该复制拷贝的复制拷贝,该用框架整合管理的就整合起来。(我们服务器设计的比较好,已经达标,不用剥离)。
  • 代码测试:剥离后,可先开发层面自己做MT(模块测试),然后打包后给测试同事做SIT(系统集成测试),最终将分支合并到主线(如果觉得可以控制得住版本和发布节奏,可以不拉主线,直接开发,就省去了合并分支的麻烦,但风险是有一段时间可能难于发版本,这是软件工程和敏捷开发其他方面的内容,另篇详述,这里不提。

 

3.后记

这里的剥离其实算是重构的一种,对敏捷开发来说重构是极其重要的内涵,而重构最大的秘诀就是master(敏捷教练);

一个优秀的master是一个:

  • 是一个非常熟悉开发的人(其实应该是从一个开发或测试高手演变而来);
  • 是一个善于找“茬”的人;
  • 是一个喜欢“折腾”的人;
  • 是一个完美主义者;
  • 是一个宁可得罪PO(Product Owner)和研发团队,也要守住“程序之魂”的人;
  • 当然,master最好还是一个,测试老法师,开发老法师,沟通老法师,设计老法师,架构老法师,文档老法师,XX老法师;

祝福全天下用身体实践着敏捷开发的所有master们!

 

[END]