SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5031|回复: 1

[推荐] 浅析RTC在金融行业对于System i上RPG代码进行版本管理的解决...

[复制链接]
发表于 2013-1-28 17:37:02 | 显示全部楼层 |阅读模式
本帖最后由 技术狂人 于 2013-1-28 17:58 编辑
! m+ ~" [& S& g2 u, N
% p- J! x  _1 E$ M; @/ e序关于 AS400 上的版本管理,不得不说的故事
% N; \6 ]# v8 U- e' k8 LAS400 系统生命力的顽强可能连它的发明者 IBM 都不曾想到,直到今天,在中国的金融和银行业,依然存在着非常广泛的 AS400 系统使用者。而对于在其上的版本管理,虽然有一些公司在绿屏上开发出相应的版本管理工具,但无法很好的实现诸如项目的并行开发、多流多组件支持、以及与需求、测试、产品发布的协同开发等需要。
9 X6 m" Q# ?# }) x  o8 w7 d: ?  M0 f/ D作为 AS400 以及后续 System i 系列的提供者,IBM 也一直在努力的为众多 AS400 上的开发者提供能够支持协同开发和版本管理的解决方案。在笔者与另一位同事郑如彬所写的《使用 RDp 与 RTC、ClearCase 进行 IBM Power 系统软件开发与版本管理》一文中,出于篇幅所限,我们仅简单介绍了使用 Rational Developer for Power 结合 Rational Team Concert 与 Clear Case 进行 IBM Power System 版本管理的解决方案,没有太多讲述 Rational Team Concert 与 Rational Developer for Power 在 AS400 上进行版本管理的各种场景,并且由于 IBM Rational 产品本身发展和支持的原因,在现有的条件下对于 Rational Developer for Power 与 Clear Case 的集成不作为主要推荐。  Z# ~% j: B- O) z0 t$ T9 f
对于使用 Rational Team Concert 在 AS400 上对于代码的管理,有太多的场景和真实项目实施起来的困惑,包括流和组件如何与库和源文件对应,组件的划分和 RDp 中的 i 项目,Rational Team Concert 在 AS400 上的代码推出和编译支持(关于这个问题我会在稍后的一篇文章中做详细讨论)。以上的这些困惑和来自于客户的实际问题,是促成我写这篇文章的原因。/ R2 K4 d- k! C$ J" w! s  G2 x) q
在本文中,我们将以 AS400 上最常见的 RPG 代码为例,介绍一些使用 Rational Developer for Power(简称为 RDp)与 Rational Team Concert(简称为 RTC)来进行版本管理的常用方案,希望能够对在 AS400 上的软件开发者有所帮助。  ^0 S" G! D: d; p; l, r1 O7 L. t6 y: D
本文中所使用的软件版本是:% G8 P1 n* P+ `  r+ L) \, P- W
  • Rational Developer for Power 8.5
  • Rational Team Concert v4.0 服务器与客户端
    : _8 x5 X& `0 }) ?3 ~5 l; u- n

2 `0 v( y. T' o5 Y1 Q
' [: P* Y! V% E. `
从 LIB、OBJECT、MEMBER 到 Stream 和 Component:来自 Rational Team Concert 版本管理的革新' U% ?- E  f9 i! y, u5 P
我们知道,AS400 的结构是 LIB->OBJECT->MEMBER(即:库 -> 对象 -> 成员),作为商业逻辑处理的经典代表,RPG 程序非常擅长对于数据的处理,数据定义加执行代码,就构成了一个 RPG 程序。数据定义包括了文件引用 ( 相当于 C 语言里面的 .h)、内部 DS 定义、普通常量等;执行代码包括主过程和子程序,即程序的主体与要调用的子函数。+ P9 r4 p% T' Z# K3 q; V! o- ~. Z
库 -> 对象 -> 成员的方式很好的帮助 AS400 系统构建了文件系统,作为对象中的一种文件,PF 的数据存在成员里。如果这个成员存的数据是程序的源文件,那就是 Source File 了。一般存源文件的成员都放在一个 PF 下,这个 PF 就是 SRCPF。SRCPF 下的成员经过编译以后变成一个 OBJ。* I' m: f& }! ~' m* k
这样的方式可以让开发者轻松编写 RPG 代码,但是对于使用 RTC 的版本管理员来说成为了一个难题。因为系统的版本管理员不知道是否应该将每一个 Source File(源文件)作为一个组件,每一个 LIB(库)作为一个流来存放代码,并根据开发要求打基线和利用基线进行回滚。+ _% Q& h  y9 v/ U: R, w0 \
作为软件源代码配置管理的实践者,Rational 从 Clear Case 起就专注于软件代码的版本管理。在 RTC 中,采用流(stream)和组件(component)结合的方式来进行版本管理。RTC 中的工作项(如:需求、任务、缺陷等)是实现工件之间追踪能力的核心。在 RTC 中,由工件串起了项目计划、配置管理和构建的链接,让开发团队可以方便地追溯需求、计划、变更、代码和构建之间的关系。
4 _) C& y* U1 i1 C8 r% ~0 p$ ]. xRTC 进行配置管理的基础是变更集(Change Set,如图 1 所示)。在 RTC 中,不再需要像 Clear Case 那样涉及繁琐的文件版本、分支和标签。RTC 设计了组件(Component)来存放开发中的工件,很好地与系统架构的组件相对应。变更集中记录了组件的变更历史。RTC 提供了工作空间(Repository Workspace)和流(Stream)实现个人和团队工作的独立性,并支持团队级别的并行开发。1 z+ o" w4 A* R4 S' a" K. D; n
同时 RTC 还为开发者提供了挂起(Suspend)和恢复(Resume)功能,将在个人级别提供了并行开发的可能。并且,RTC 还支持并行开发出现的冲突(Conflicts)解决,提供基线(Baseline)支持等。0 @+ |3 q/ D% o$ V% ?
2 E3 Z  u: j* W2 @
图 1. Rational Team Concert 中简单的流和组件,以及变更集的流向关系
/ S2 H4 a; B2 N; |6 R6 A' P+ Y
; b: R% D# |  j6 R- X( G; M7 B/ Q! c了解了这些 RTC 的基本功能,对我们在 AS400 上进行的版本管理非常有帮助。如之前我们所说,AS400 中采用了库 -> 对象 -> 成员的方式构建文件系统。所以传统基于绿屏的 AS400 版本管理工具都是在这个级别进行代码管理,并通过查看文件修改时间来协助判断。
. p5 h& t# {# m4 F如果想用 RTC 的版本管理功能,为 AS400 上的库和 SRCPF 设计好流和组件是做好配置管理的第一步。一般来说,由于 AS400 中库的独立性,在大多数情况中,可以选择根据项目的开发情况将一个库置于一个 RTC 的开发流上;如果采用 RTC 的三库管理模型(即由开发库、测试库和产品库来完成对开发团队、测试团队和产品团队的版本管理),测试库中可以有多个项目的开发流流入(即进行版本的集成与合并,有可能存在多个测试流,如系统集成测试流 SIT,用户验证测试流 UAT 等);并最终根据产品上线要求,将受控的测试库中代码交付到最终的产品库中。' J- ~& }( x, {6 c/ l, V1 O
对于 AS400 中的源文件 SRCPF 和其下成员经过编译以后生成的 OBJ,以及相关的数据文件,将每一个 SRCPF 放入一个组件有时候并不一定完全是一种好的方式。因为由于 RPG 代码大部分是面向过程进行编程,并没有办法遵循"松耦合、紧内聚"的方式进行代码编写,并且存在每一个 SRCPF 既有可能按实际业务划分,也有可能按照行为的类型(如银行间不同的交易)来编写的情况。有些客户的实际情况是一个库中存在几十个乃至上百个的 SRCPF;而相应的一个流上存在几十个组件,将会对于系统的配置管理员带来非常大的压力和挑战。
# M$ R; G: v2 h4 ~所以我们建议尽可能的根据 AS400 上 SRCPF 的相关性,遵循耦合关系划分并归纳至组件中的原则,来对 AS400 上的代码进行版本管理。如果在实际场景中,客户每一个 LIB 就能够完成一种业务功能,并且 LIB 下的 SRCPF 数量合适,甚至也可以将每一个 LIB 作为一个组件放入流中进行管理。组件的出现是为了让代码能够遵循松耦合紧内聚的方式,在最大的程度里采用版本基线化的方式得到重构与复用。所以只要是按照这个方式来划分组件,都是可以接受的。# n7 Q1 C/ J$ n+ b, U: S
需要注意的是,由于目前最新版本的 RTC v4.0 中不提供将同一项目下的不同目录(可简单认为与 AS400 下同一个库中的不同 SRCPF 对应)共享到同一个流中的不同组件,所以一旦将 AS400 的库 / 源文件和 RTC 中的流 / 组件划分好后,我们将需要在 RTC 与 RDp 集成的客户端中按照组件化的方式建立 system i 项目,来完成每一个 system i 项目对应到每一个组件,并最终共享到该流上的对应组件中。如下图所示:# ?" p% g9 M5 A0 H6 s6 d

% j; L: ^/ ^0 @) h/ L- T' @图 2. 在 RTC 与 RDp 集成的客户端中需要创建 system i 项目和 RTC 服务器中流上相对应的组件
/ L1 T# L, |  O. `, w1 S6 z8 [% T) f2 R8 t( s& N, ^: H+ Y1 m; w: i4 t
了解完这些背景后,我们将通过下面的三个小故事,向大家讲述 RTC 中 RPG 代码版本管理的那些事。
* o" ]2 \% [) N6 n- `4 V( F7 _
5 ?# E8 D$ [5 W5 J5 i组织级配置管理员小欧的故事) ^4 |! A: i) f% u, n- b4 i
用户故事介绍:作为曾经 RPG 绿屏时代的配置管理员和现在的 RTC 组织级配置管理员,我想使用 Rational Developer for Power 和 Rational Team Concert 将 IBM System Power(AS/400)上的 RPG 代码迁移到 RTC 服务器中进行版本管理,并将产品基线化
- F. ]1 \/ V7 ]【本故事中,我们假设组织级配置管理员小欧面对着一个如何将 IBM System i(AS/400)上存量的 RPG 代码迁移到 RTC 服务器中的产品库进行版本管理,创建产品的初始基线,准备交由公司的新一代核心系统项目组进行版本开发的场景】0 _3 d2 M# }$ c" w
周一上午的部门例会注定是无序而忙碌的,智慧银行的新一代核心系统明年初就要上线了,在本周的例会上,科技部领导把做好核心系统研发的版本管理纳入到今年科技部几大考核目标中。听到这个消息,作为整个核心研发 3 个项目组唯一的一名配置管理员(在绝大时间还是兼职地),小欧不知道应该是高兴还是苦闷。无论怎样,三个项目开发团队(核心、平台、外围)和二个测试团队(系统集成测试、业务验收测试),3 个月的时间,完成新一代核心系统的研发任务,并将 AS400 上的 RPG 源代码纳入版本管理是铁定要做的,只是,帮手呢?工具呢?小欧简直是完全没有头绪。& Z8 ~8 Y! h4 ^/ W  e( p, @
作为智慧银行的业务咨询合作伙伴,IBM 倒是向智慧银行科技部推荐了使用 Rational Developer for Power 和 Rational Team Concert 来在 AS400 上进行代码版本管理的解决方案。之前小欧还参加过为期一周的相关产品使用培训,只是当时没想到会这么快的用上,培训老师怎么讲,小欧同学怎么还,还不到一个月的时间就忘掉得干干净净了。这下等要动真格的时候,才发现完全是一头雾水。+ F& B  n1 ~8 I1 b
原来在 AS400 上,科技部倒是自己研发过一个简单的配置管理工具,通过检查 RPG 代码的 change time 时间和锁的机制,来完成基本配置管理功能。但是这种模式很难支持并行开发,对版本的回溯也会存在问题,代码的复用基本上就是拷贝粘贴。  }2 h3 D4 H. H
至于这回 IBM 工程师说,有一种可以通过组件的方式将代码组合起来,通过开发流、测试流和生产流进行带有流向的版本管理,小欧感觉有点神乎其神了,不会又是一切仅仅是听上去挺美吧?4 k! N3 x1 z: w: h$ V  t
答案将在一个月后揭晓。没有选择,没有退路,科技部老总已经下了死命令,一个月后的那个日子,AS400 上的所有代码必须纳入到新的版本管理中,以后 AS400 上每个开发组的代码,都将由组织级配置管理员(好像除了小欧也没有其他可替代的人选)和每个项目组的配置管理员(目前连影儿都还没有)来进行控制。: f% s6 z2 Y3 k' p" c2 y0 g
小欧知道,这一个月注定要发生太多的故事。没办法,只能硬着头皮上了。好在 IBM 还派了几个工程师协助小欧,小欧心想,临死也要拿他们当垫背的,谁让用的是 IBM 软件呢?
: I+ t; A; ^8 O/ [) A2 K" E头一周,在 IBM 工程师的帮助下,部署在 Linux 上的 RTC 服务器搭建好了,所使用的 DB2 数据库备份机制和脚步也都 ready 了,小欧开始发现 RTC 并没有想象中的那么难用,虽然之前从未用过 Eclipse 的 IDE,但是小欧居然也能八九不离十的在 RTC 和 RDp 集成客户端中的 i 项目、工作项、资源和 Jazz 管理这几个 Tab 页中切来切去的找到自己想要的东西。更何况基于 Jazz 平台的 RTC 居然还提供 Web 界面,打开一个浏览器,从基本的项目区域设置、创建用户,到对项目权限和角色的定义都可以完成。
/ P" i5 |6 i7 a( a8 L) t
9 o4 s( j' T2 {5 m) g' R图 3. 在 RTC 客户端中对项目区域的设置,对于在浏览器中也同样便捷$ C% l8 r  _8 a$ H# E" V2 U4 ^

( A6 w1 S! g* T) |
/ w1 b( z, e# A3 l$ x第一周很快就结束了,正当小欧一切感觉良好时,一个难题出现了。按照计划,小欧必须在第二周结束时完成对 RTC 流和组件的划分,并将 AS400 上现有代码导入到 RTC 中做好初始基线的版本。
5 J: P% f& X0 k% R+ X6 @流倒好说,反正开发、测试、生产一样一个也说得过去,再不成多加一个准生产(叫投产演练也可以)就足够大家用了,可是组件怎么划?按项目?按 source file?还是干脆就按库?好像都有点小问题。谁让咱们的代码当初就没有梳理好呢?由此看来,代码重构的必要性是无处不在的。
6 f6 {( o9 L/ ~# g为了这个问题,小欧茶不思饭不想了整整 3 天,中间还与相关的开发团队领导做了好几次沟通,才在最后时间确定了在目前这个使用 RTC 的初始阶段,将具有相近逻辑关系的 source file 并入相同组件,将难以关联的 source file 独立分配到每一个组件中,并把原来无法纳入版本管理的模块设计和开发文档,放入文档组件中,随同代码组件,一起进行版本管理。# g$ [( \) B& a1 r+ J1 [
5 K- d  ^: @+ k6 f+ F
图 4. 共享项目时,在 RTC 流上将代码分配至相应的组件中
4 f, Q' k+ }5 U
6 F! K8 a# p/ d: p6 ~/ F2 t( D$ p# Y$ _0 _% D
这样划分组件还有一个小欧没有对别人说出来的考虑,虽然在 IBM 工程师介绍组件、流、变更集和工作项这些曾经让他云里雾里的概念时,说过可以通过关联工作项的方式把相应的需求、设计、代码变更都串起来,完成整体开发链条的跟踪。但有些时候其实开发人员或者项目领导就只想看看这个版本的代码动过哪些 RPG 程序,而又有哪些设计文档因为这些程序做过修改,这样一个朴素的要求在没有关联工作项的时候,可以通过 RTC 中对比流中的不同快照就可以简单实现,非常快捷。
1 t7 R( t) S1 w- v1 S: d说干就干,在第二周的剩余时间里,小欧加班加点将现有 AS400 上的源代码,通过创建 i 项目,将其导入到 RTC 服务器中的产品库(作为一个流并拥有之前所建立的那些代码和文档组件),并且也把相应的设计文档纳入文档组件中,在产品库创建了项目的初始快照和基线。
1 i5 ]1 g2 _3 m- o, o; n7 l: g7 f0 v4 C  L% J8 E7 {2 ?
图 5. 在 RTC 项目中的流上打初始快照
2 M# ]" W+ m: d
3 b9 C; b/ V- x* n6 G- R& g( i& G  j/ ?! C/ H& u
为了便于读取权限的管理,小欧还将组件中的文件和文件夹设置了访问权限。这样,就可以保证只有相关的项目或者团队,才可以查看到那些只属于他们的文件或文件夹。
- _9 U! J% A0 `2 E+ J$ P当需要进行某一个项目开发时,小欧可以方便的通过选择组件将拥有产品库的流指向到某一个项目开发流中(在 RTC 中将流向指定后,通过鼠标点击拉扯流至"暂挂的变更"的 Tab 页,即可查看到流和流之间的变更),就可以将具有基线的代码和文档交给项目团队,进行代码开发。1 C8 E, E" Z) f
/ V. L0 F) h4 m1 T8 Y" s/ G8 T. p
图 6. 在 RTC 中设置组件里文件和文件夹的读访问权0 T2 i2 l  `) b3 R+ w
6 c2 [/ i7 y$ x9 f! L
一个月的时间转眼就过了一半,通过这两周的使用,小欧发现其实 RTC 在 AS400 上的版本管理并没有想象中的那样复杂,就是不知道等到第三周,要给项目组的配置管理员进行培训的时候,能不能让那些家伙们满意呢?. z* F, Z5 J( N# b9 S- A/ `1 b


1 T, l- g* s. M9 {) q; \5 N
! Q% b3 F( [3 J9 P0 L/ F项目组配置管理员小皮的故事, [# B% b2 B" }$ d( K. I' Z
用户故事介绍:作为兼职的项目组配置管理员,谁能告诉我怎样使用 Rational Team Concert 将本项目组的代码管理起来,并按时发布到集成测试流中
$ W! A, w* t) Z" S2 M  t; i2 t【本故事中,我们将介绍作为新一代核心系统项目中基础平台开发团队的兼职项目组配置管理员小皮,怎样使用 RTC 与 RDP 的客户端,将本项目组的代码通过基线化的方式管理起来,并按时发布到集成测试流中】0 f$ X7 o8 |& f6 x$ M- @; O
又是个新工具!小皮头都大了。作为项目组的核心开发人员,小皮加入智慧银行科技部的时间不长不短,刚好 5 年。这 5 年中,大大小小的工具从介绍到培训不下数十次,好像不买这些软件厂商的工具智慧银行的 IT 部就没法活一样。这不,智慧银行的新一代核心系统的上线时间都定死了,一堆又一堆的开发任务把小皮排的满满当当,可是项目组领导居然还让小皮去参加个什么 Rational Team Concert 版本管理培训。
/ J4 ]* b5 k8 d- M) u5 K原来那个绿屏上的那个版本管理小工具 Version ADM 就是小皮当年刚进科技部时,跟着当时的师傅一起开发出来的。虽然说功能上有些简陋,但好歹也算是麻雀虽小五脏俱全啊。况且 Version ADM 让组织级配置管理员小欧一个人管就全 ok 了,这回可好,非要上一个所谓的大而全的 Rational Team Concert,说句心里话,小皮心里是有抵触的,而且情绪不是一般的大,因为小皮不仅要完全之前分配的开发任务,还得兼职去搞项目组版本管理,本来就已经忙得不可开交,这还让不让人活了。0 ?: P3 ~* G' M
好在项目开始的头二周,小皮光看见小欧拉着几个 IBM 的工程师不是钻机房装机器,就是对着屏幕发呆(其实那会小欧还正在为组件划分的事情纠结,按理说小皮也应该参与),倒也没怎么来烦小皮。
/ X8 G$ H+ a0 }6 m( Q' x1 V只是这周开始变得不同了,上周五老板就把《关于项目组配置管理员使用 RTC 培训》的通知转给小皮,并且郑重告诉小皮必须在规定的时间内把项目组的版本管理配合小欧做好,不然就拉了整个科技部的后腿。可问题是小皮对在 RTC 使用的配置管理完全是一窍不通,就连什么是 RTC 也仅知道是个来自于 IBM 的软件。
9 k2 D" G8 ?. F1 J( {! G没办法,小皮只能硬着头皮参加小欧老师在第三周开设的项目组培训管理员培训。流、组件、i 项目让小皮和其他项目组配置管理员头疼不止,甚比当年刚开始学习 RPG 编程。. h6 X. {6 p: V( s
慢慢地,小皮先是学会了 RTC 和 RDp 客户端的安装,又学会如何从生产流中选择好本项目开发所需要的组件(当然需要在小欧授权的情况下),以及如何在 RTC 中建立自己项目组的项目区域和个人的存储库空间。
. _: K7 K2 G  ^( |, s/ ~- p, ~; J. r+ c$ ~( S- k5 D
图 7. RDp 8.5 安装时选择用于 i 的 RTC 客户端集成
$ H0 m  _- j2 ]2 b; N: g4 j9 e3 s/ R% U" t
1 n7 r4 P+ C4 J! \7 {- |! D' x  H
完成这些,小皮就可以通过在 RTC 中的存储库工作空间,来同步并合并项目组其他同事所开发出来的代码。
& B- y1 L2 c2 x3 o$ G5 Q5 F
  r; w- ?2 Y+ m& j9 Q8 S图 8. 在 RTC/RDp 客户端中新建存储卡工作空间,用于获取 RPG 代码, f4 j0 V% J0 V) n/ c& c

( A5 I( O2 T5 [7 J! M3 E% n由于有了代码和文档的组件化,小皮在进行 RPG 开发和修改设计时,就可以通过选择装入自己需要用到的组件,来快速搭建自己的开发环境。+ D( X$ G9 H3 @6 ~+ w$ }" W3 x8 l

: o+ P4 P* T, g+ g图 9. 在 RTC 中可以灵活选择需要装入的组件
2 A. X9 l# j" e- X: s& U6 t4 q, m' z- ^2 y; Z: S6 ^
由于每个开发团队所使用的 AS400 服务器和库都可能不一样,因此,小皮还向小欧了解到如何将从 RTC 服务器中获得的 i 项目,与 AS400 的实际机器和相关的开发库做关联。这样就可以将纳入版本管理的 RPG 代码推送到相关联的库中。
: [, c2 r* e: n) ^, L( e' _9 I
3 L# G, O* h$ ?' Z/ e图 10. 在 RTC 中将 i 项目与实际的 AS400 环境做关联
! O  G* S$ \' L5 E+ i0 Q8 k3 v5 _# ~. P

1 m* c$ H. \, i$ I1 C1 S# Y辛苦了整整一周后,小皮自己也想不到,居然可以像模像样地把这周项目组中所有的变更代码和相应的文档,在打完项目基线后,提交到 RTC 中的测试流里了。虽然有很多概念小皮还是一知半解,但小皮已经相信随着 RTC 使用的不断深入,自己这个项目组配置管理员最终不会成为那个拖后腿的人。
  J( C( A6 d+ q4 \+ K' B- W# G% V8 _: t/ D& h' w) }8 V4 e
图 11. 项目组配置管理员可以将本项目的变更提交至测试库
; [% k/ j/ C' i* I+ |2 m* ~3 W3 F* b9 {6 C& u
* 关于项目组配置管理员的那些事儿:5 c" n2 c, I! g# }* f2 j& `
项目组的配置管理员可以兼职,也可以全职来做。这取决于项目团队在配置管理的成熟度和领导对配置管理的重视程度(如是否愿意为项目组配置管理员设专岗)
* K; |7 Q* Q0 c! r2 u
6 y0 X1 R' q! e- f2 d/ e- |

% B, Z! u4 N$ _0 b/ \, T* t. `RPG 开发者小蔻的故事
用户故事介绍:开发者最光荣,作为一个 RPG 编程人员,我想使用 RDP 与 RTC 交付自己的代码,并且接受来自于其他开发者的程序变更
. S" W" h1 c$ `. r* y' B【本故事中,新一代核心系统项目组基础平台开发团队的开发人员小蔻,有着 3 年的 RPG 绿屏开发经验;对于小蔻来说,只用键盘的绿屏编程效率,要远大于基于 Eclipse 又是使用鼠标 + 键盘的 RTC/RDP 客户端。让我们一起来看看小蔻是如何在 RTC 与 RDP 客户端里中交付自己的代码】5 b0 Z- k. u$ n4 Y2 B5 {* M
大家都说小蔻的运气好。从学校研究生一毕业,小蔻同学就进入了著名的智慧银行科技部,成为了令人羡慕的 AS400 程序员。可是只有小蔻自己知道其中的辛苦,先不说 RPG 代码的语法,就光 AS400 上的那些命令,小蔻足足记了 3 个月。就这样过了整整一年,小蔻总算对 RPG 开发有了些感觉。! M1 [2 v( Y  y2 E
其实纯开发的技能是一方面,对智慧银行的业务理解才是最为重要的,不然光学会 RPG 的代码语法,看不懂业务逻辑,那问题会更严重了。头二年,小蔻同学没少为自己不懂业务犯下的代码错误挨领导批,由于 AS400 上版本管理存在的老大难问题,每当小蔻想找回从前的某个版本的代码时,只能四处求人,看看谁那里还存着她所需要的版本,好在小蔻人美嘴甜,基本上还都能找到。
) c+ p  U: T7 D" Y2 v一个月前的周例会上,智慧银行的科技部领导下了通知,要求在新一代核心系统的开发上应用 IBM 的一套版本管理软件。小蔻听完心里又喜又忧,喜的是终于不怕被人覆盖代码丢版本了,忧的是自己这么多年在绿屏上的开发,总算是顺风顺手了,这又要学习新的工具,而且新一代核心系统开发需要开发的代码量很大,时间又非常紧张,这些都是小蔻必须面对的问题。
2 t, t- z. A0 c& m/ e9 I好在小蔻所在项目组的项目经理并没有强制要求小蔻她们必须使用 IBM 的工具进行开发,想接着用绿屏可以接着用,只要在交付代码的时候使用 RTC/RDp 的 IDE,将 AS400 上的 RPG 代码同步回每个人开发机上的工作空间,再提交到项目组的开发流上就好。% v8 W+ n% F1 {. @8 Y3 H8 L- |8 D
只是在做 RTC 培训的时候刚好赶上小蔻同学不舒服,再加上又是流啊组件啊,和什么存储库工作空间,小蔻压根儿就没太听明白。等到项目开发一忙碌起来,更没人能够帮小蔻讲解这些本来也没有多少人懂得东西。- ?6 D& a" S6 n8 L8 |9 F1 f
没办法,小蔻只能再次麻烦项目组配置管理员小皮,每天到下班前半小时需要提交代码入库的时候,小蔻总会带点小零食到小皮的工位上,也不知道是美女的诱惑大还是零食的力量大,小皮总会三下五除二得帮小蔻搞定。渐渐的,别的同事有点什么代码检入出错,交付的时候关联不上工作项这些小问题,也都跑到小皮这里寻求帮助。6 L* t2 Z9 |/ D* @
这一来,可就苦了项目组配置管理员小皮,一边要完成自己那部分编码任务,一边还要帮助小蔻提交代码和解答大家的问题,简直忙的不可开交,每天晚上基本都要加班到 10 点才能回家。小蔻觉得这样老麻烦小皮,也不是长久之计,就在每天小皮帮她检入并交付代码的时候边看边学。这样过了几天,小蔻发现其实感觉原来复杂无比的 RTC 与 RDp 客户端也并不像原来那样难用了。
2 h' i5 U) n! N$ H7 g# x! ~% J( V# B首先,小蔻发现虽然 RTC 和 RDp 的 IDE 在安装的时候结合在一起,但其实有关 RPG 代码开发的内容全都在"i 项目"中,比如如何查看远程对象,创建 i 项目等;而关于流和组件的操作,以及与代码检入交付相关的操作,都可以在属于 RTC 的"工作项"页面中查看。! r8 I/ w$ H4 G, w: k9 {0 {* V

7 F3 k8 e/ Q7 k+ X, `图 12. 在 RTC 中可以灵活选择需要装入的组件% d+ T+ ?2 L- n  Y! J

* {4 y6 K7 N" V7 s) ~
- `- v1 A" U$ ?5 {* o! W4 f% ~; j从前小蔻在绿屏中开发时,采用 AS400 上锁的方式防止别人来修改 RPG 代码。而使用 RTC 后,发现如果在大家都使用 RTC/RDp 的情况下,是可以通过 RTC 中接受别人的代码变更后,再选择推送到 AS400 上相关联的库中进行代码调试与验证。RTC 从配置管理的角度来对代码进行接受变更、比较与合并变化的技术都已经非常成熟,只是小蔻还需要多加练习。$ C: I; g% P* a* S- w  e. F3 \

" T8 ^6 `  x' s% _图 13. 在 RTC 中也可以通过锁定方式来限制其他人员对资源的修改
- X& c3 W) ]7 ]- J0 a4 t1 @% [
由于在 RTC/RDp 中需要先在 i 项目中选择好关联的库,并通过鼠标选择需要处理的编译命令,将所选代码推送至 AS400 上,小蔻一开始还是感觉不如在绿屏中直接敲"14"来得快。不过当习惯 RTC/RDp 这种鼠标加键盘式的 IDE 后,小蔻感觉多了一种选择也没有什么不好。
* K; `# J$ q* B6 S/ K" j
* u5 X8 U8 d( G9 _. f8 e图 14. 在 i 项目视图中选择需要处理的编译命令, f$ R! `" J; |" |; e0 f4 t
# Q8 `, \& l+ M8 v8 j9 y

/ L7 m3 a. z3 j8 U3 x% W% {图 15. 通过调用命令将 RPG 代码推送至 AS400 相关联库中进行编译
1 ~" l! {% o$ f! P" f9 B. d8 Q7 d0 T6 @* h( i  j+ _( [# e
; r# z! y& z5 f! A# Z
慢慢地,小蔻同学习惯了每天上班第一件事就是打开 RTC 客户端,在工作项视图中看看有没有收到新的工作任务和定于今天必须交付的工作,以及其他同事前一天都交付了那些代码。并且小蔻也养成了每天都会先选择同步一下自己的工作空间的习惯,在接受来自其他人的代码后,小蔻会根据今天的工作安排,开始一天的开发活动。
6 i# p4 ?7 A0 @5 ]$ E" G5 m
9 k( j# @1 u! {1 O

. B" n% c7 v- }3 B! \写在故事后面的话+ R, s- O" ^: H6 T" i
如之前所说,为 AS400 中的 RPG 来划分流与组件,其实是做好版本管理最为重要的一步。至于如何划分,的确是一个仁者见仁智者见智的事情,读者完全没有必要局限在本文所说的这些场景中。& R! g9 A  \; r8 c8 y6 C: V
其实任何软件的版本管理,只要能够保证在某一开发的时间点,支持现有版本与历史的回滚,以及满足并行开发的要求,就足够了。而流和组件的划分仅仅是用来帮助我们完成这个目的,切不可为了流而流,这样就有些本末倒置了。RPG(Report Program Generator)语言的历史悠久,笔者对于 RPG 的研究极为肤浅。但只要有 RPG 的开发者存在,针对 AS400 上版本管理的需求就会存在。  C. W9 E' I/ I
关于在本文中没能涉及的 Cobol 语言与 C/C++ 语言的版本管理与持续集成,我们会在稍后的一篇文章中向读者做介绍。3 \7 @/ @- t( j5 H# @# g
1 x0 X  }/ X& d$ R+ P

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2013-1-28 17:44:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-4-21 14:36 , Processed in 0.232568 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表