1
      
      
     
    
    
     关于本文档
    
   
    
     详细的描述在推行软件配置管理的可行性,以及各类软件配置工具的比较,结合本中心的实际特点,分析适合本中心使用的软件配置工具。
    
   
    
    
   
    
     本文档由陆国暾撰写,要详尽了解相关软件配置工具的具体性能数据,请参阅该软件出品公司技术文档。
    
   
    
    
    
    
    
     
      
       
        
         2
         
         
        
       
       
        现状简述
       
      
     
    
   
    
     
      现有的软件配置管理工具
     
     
      (SCM Tools)
     
    
    
     
      大致有如下几个品种:
     
     
     
    
   
    
     
      
       (1)
       
       
      
     
    
    
     
      IBM—ClearCase (CC);
     
    
   
    
     
      
       (2)
       
       
      
     
    
    
     
      Microsoft—Visual Source Safe (VSS);
     
    
   
    
     
      
       (3)
       
       
      
     
    
    
     
      Borland—StarTeam (ST)
     
    
   
    
     
      
       (4)
       
       
      
     
    
    
     
      Open Source–Concurrent Versions System (CVS);
     
    
   
    
     
      
       (5)
       
       
      
     
    
    
     
      Hansky—Firefly;
     
    
   
    
     该份可行性报告即为以上
    
    
     5
    
    
     种配置管理工具的评估报告,其侧重点针对本中心的实际情况,结合各个开发部门的操作系统,开发流程,项目规模,易用性,价格,与其他管理系统的良好的结合性等等方面来进行考虑。
    
   
    
     
      进行软件配置管理的目的:
     
     
     
    
   
    
     一、权限控制(
    
    
     Access Control
    
    
     )
    
    
     
    
    
     权限控制对
    
    
     SCM
    
    
     工具来说至关重要。一方面,既然是团队开发,就可能需要限制某些成员的权限;特别是大项目往往牵扯到子项目外包,到最后联调阶段会涉及到很多不同的单位,更需要权限管理。另一方面,权限控制也减小了误操作的可能性,间接提高了
    
    
     SCM
    
    
     工具的可用性(
    
    
     Usability
    
    
     )。
    
    
     
    
    
     现有的
    
    
     SCM
    
    
     工具,在权限控制方面差异很大,也说明了大家都在探索更有效的权限控制的方法。透过不同权限控制方法的差异,我们不难看到其共性:其核心概念是行为(
    
    
     Action
    
    
     )、行为主体、行为客体。
    
    
     
    
    
     行为主体:即用户(
    
    
     User
    
    
     )。用户组(
    
    
     User Group
    
    
     )并不是行为主体,但它的引入大大方便了权限管理。
    
    
     
    
    
     行为客体:即项目和项目成员(
    
    
     Member
    
    
     )。不管从
    
    
     SCM
    
    
     工具的开发者还是使用者的角度,项目和项目成员都是不同的行为客体。
    
    
     
    
    
     行为:即由主体施加在客体之上的特定操作,签入和签出是再典型不过的例子。
    
    
     
    
    
     三个核心概念搞清之后,就可以讨论权限的概念了。
    
    
     
    
    
     权限是这样一个四元向量:
    
    
     (
    
    
     主体,客体,行为,布尔值
    
    
     )
    
    
     。即,
    
    
     “
    
    
     主体在客体上施加某种行为是否被获准
    
    
     ”
    
    
     。
    
    
     
    
    
     由此看来,权限控制的基本工作就是负责维护主体集合、客体集合、行为集合、权限向量集合。其中,行为集合是固定不变的(在
    
    
     SCM
    
    
     工具开发之时已确定),其它三种集合都是动态变化的。
    
    
     
    
    
     二、版本控制(
    
    
     Version Control
    
    
     )
    
    
     
    
    
    
    
     SCM
    
    
     工具记录项目和文件的修改轨迹,跟踪修改信息,使软件开发工作以基线(
    
    
     Baseline
    
    
     )渐进方式完成,从而避免了软件开发不受控制的局面,使开发状态变得有序。
    
    
     
    
    
    
    
     SCM
    
    
     工具可以对同一文件的不同版本进行差异比较,可以恢复个别文件或整个项目的早期版本,使用户方便地得到升级和维护必需的程序和文档。
    
    
     
    
    
    
    
     SCM
    
    
     工具内部对版本的标识,采用了版本号(
    
    
     Version Number
    
    
     )方式,但对用户提供了多种途径来标识版本,被广泛应用的有版本号、标签(
    
    
     Label
    
    
     )和时间戳(
    
    
     Time Stamp
    
    
     )。多样灵活的标识手段,为用户提供了方便。
    
    
     
    
    
     三、增强的版本控制(
    
    
     Enhanced Version Control
    
    
     )
    
    
     
    
    
     快照(
    
    
     Snapshot
    
    
     )和分支(
    
    
     Branch
    
    
     )以基本的版本控制功能为基础,使版本控制的功能又更进一步增强。
    
    
     
    
    
     快照是比版本高一级的概念,它是项目中多个文件各自的当前版本的集合。快照使恢复项目的早期版本变得方便,它还支持批量签入(
    
    
     Check in
    
    
     )、批量签出(
    
    
     Check out
    
    
     )和批量加标签(
    
    
     Label
    
    
     )等操作。总之,快照是版本控制的一种增强,使版本控制更加方便高效。
    
    
     
    
    
     分支允许用户创建独立的开发路径,我们认为分支的典型用途有二。第一,分支和合并(
    
    
     Merge
    
    
     )一起,是支持并行开发(
    
    
     Concurrent Development
    
    
     )的有力支持。第二,分支支持多版本开发,这对发布后的维护尤其有用。比如客户报告有打印
    
    
     bug
    
    
     ,小组可能从某个还未引入打印
    
    
     bug
    
    
     的项目版本引出一个分支,最终分布
    
    
     ā
    
    
     一个
    
    
     bug
    
    
     修订版。分支是版本控制的另一种增强。
    
    
     
    
    
     版本控制和增强的版本控制是
    
    
     SCM
    
    
     工具其它功能的基础。
    
    
     
    
    
     四、变更管理(
    
    
     Change Management
    
    
     )
    
    
     
    
    
    
    
     SCM
    
    
     工具提供有效的问题跟踪(
    
    
     Defect Tracking
    
    
     )和系统变更请求(
    
    
     System Change Requests (SCRs)
    
    
     )管理。通过对软件生命周期各阶段所有的问题和变更请求进行跟踪记录,来支持团队成员报告(
    
    
     Report
    
    
     )、抓取(
    
    
     Capture
    
    
     )和跟踪(
    
    
     Track
    
    
     )与软件变更相关的问题,以此了解谁改变了什么,为什么改变。
    
    
     
    
    
     变更管理有效地支持了不同开发人员之间,以及客户和开发人员之间的交流,避免了无序和各自为政的状态。
    
    
     
    
    
     五、独立的工作空间(
    
    
     Independent Workspaces
    
    
     )
    
    
     
    
    
     开发团队成员需要在开发项目上协同、并发地工作,这样可以大大提高软件开发的效率。沙箱(
    
    
     Sandbox
    
    
     )为并行开发提供了独立的工作空间,在有的
    
    
     SCM
    
    
     工具中也称为工作目录(
    
    
     Working Folder
    
    
     )。
    
    
     
    
    
     使用沙箱(
    
    
     Sandbox
    
    
     ),开发人员能够将所有必要的项目文件拷贝到私有的一个树型目录,修改在这些副本上进行。一旦对修改感到满意,就可以将修改合并(
    
    
     Merge
    
    
     )到开发主线(
    
    
     Main Line
    
    
     )上去;当然,如果该文件只有该成员一人修改,只需将修改过的文件签入(
    
    
     Check In
    
    
     )到主项目中即可。
    
    
     
    
    
    
    
     “
    
    
     并发和共享是同一事物的不同方面
    
    
     ”
    
    
     ,并发的私有工作空间共享同一套主项目(
    
    
     Mater Project
    
    
     )文件,因此有必要让所有团队成员拥有得知项目当前状态的能力。
    
    
     SCM
    
    
     工具提供刷新(
    
    
     Refresh
    
    
     )操作,某位团队成员可以使其他团队成员在主项目文件上所做的变更,在自己沙箱的图形用户界面上反应出来。
    
    
     
    
    
     六、报告(
    
    
     Report
    
    
     )
    
    
     
    
    
     为保证项目按时完成,项目经理必须监控开发进程并对发生的问题迅速做出反应。报告功能使项目经理能够随时了解项目进展情况;通过图形化的报告,开发的瓶颈可以一目了然地被发现;标准的报告提供常用的项目信息,定制报告功能保证了拥有适合自己需求的信息。
    
    
     
    
    
     七、过程自动化(
    
    
     Process Automation
    
    
     )
    
    
     
    
    
    
    
     SCM
    
    
     工具使用事件触发机制(
    
    
     Event Trigger
    
    
     ),即让一个事件触发另一个事件产生行为,来实现过程自动化。比如,让
    
    
     “
    
    
     增加项目成员
    
    
     ”
    
    
     操作自动触发
    
    
     “
    
    
     产生功能描述表(
    
    
     Form
    
    
     )
    
    
     ”
    
    
     操作,开发人员填制该文件的功能描述表,规范开发过程。
    
    
     
    
    
     过程自动化不仅可以缩短复杂任务的时间,提高了生产率,而且还规范了团队开发的过程,减少了混乱。
    
    
     
    
    
     八、管理项目的整个生命周期
    
    
     
    
    
     从开发、测试、发布到发布后的维护,
    
    
     SCM
    
    
     工具的使命
    
    
     “
    
    
     始于项目开发之初,终于产品淘汰之时
    
    
     ”
    
    
     。
    
    
     SCM
    
    
     工具应预先提供典型的开发模式的模板,以减少用户的劳动;另一方面,也应支持用户自定义生命周期模式,以适应特殊开发需要。
    
    
     
    
    
     九、与主流开发环境的集成
    
    
     
    
    
     将版本控制功能与主流集成开发环境(
    
    
     IDE
    
    
     )集成,极大地方便了软件开发过程。从集成开发环境的角度看,版本控制是其一项新功能;从
    
    
     SCM
    
    
     工具的角度看,集成开发环境充当了沙箱的角色。
    
    
    
   
    
     
      
       3
       
       
      
     
     
      产品比较
     
    
   
    
     陆国暾根据本中心的具体情况,结合各个产品的特性和自身使用情况,特对个产品横向比较如下:
    
   
    
     (红色代表经考察对于本中心特别重要的需求)
    
    
    
   
| 
         | 
         | 
         | 
         | 
         | 
         | 
| 
         | 
         | 
         | 
         | 
         | 
         | 
| 
         | 
         | 
         | 
         | 
         | 
         | 
| 
         | 
         | 
         | 
         | 
 | 
 
