实战每晚构建(上)

1、前言

整个每晚构建平台包括两大子系统:构建系统和构建信息显示系统。构建系统用ANT构建脚本实现;构建信息显示系统是个典型的web应用。两者都采用了面向对象的分析和设计技术。

需求定义的阅读应该以用户为主,文档撰写者为辅,需求定义完成的标志是两者达成了一致;分析章节的阅读应是文档撰写者帮助用户阅读,使用户理解并相信分析模型是能解决用户的问题的;设计章节的阅读主要是系统实现者,除了要求可实现性外,设计模型还要和分析模型有很强的继承性和一致性。

整个文档分为上中下三篇,上篇主要讲述需求定义和分析模型。

2、每晚构建的定义和作用

构建是从代码库中取出一个开发中的软件项目的所有最新代码,放在一个干净的环境下面,编译源代码文件,连接,安装和测试,并记录整个过程中所有日志的动作系列。

构建平台是一个构建和构建信息展示的系统。

每晚构建主要是指在开发活动不太激烈的情况下,尽量不要干扰开发者的正常开发工作,保证每天执行构建一次。

在《cvs和nightlybuild技术》一书中提到了每晚构建的作用:

每个模块有一部分成果集成一部分成果可以大大地降低集成风险,加强模块间协作性错误的诊断,降低整个系统的不确定性,可以更好地定位错误从而加快开发速度,促使模块间的接口规范而增强团队合作,每天都有新系统新成绩是对每位项目组成员的一个重要激励。

除了这些作用之外,我们还可以从每晚构建中为项目管理提供额外的信息:

3、需求定义

关于需求定义的文档我们一般称之为《需求规格说明书》,这个文档的任务在于比较明确地确定项目的目的和范围,提出功能需求和非功能需求,功能需求也叫行为需求,一般可以用用例来描述,如果所有需求的全集我们称为问题域,则功能需求我们可以称之为问题域的本质。软件研发公司一般都有《需求规格说明书》的框架,规定了书写需求定义文档的”纲”,下面就普遍格式对需求进行描述。

1.目的和范围

每晚构建平台是提供一个自动化的信息系统,用来辅助构建者构建系统,尽量做到自动化,最大化地减轻构建者的工作负担;记录构建过程的详细记录,给项目经理、组织层次的软件开发过程改进人员评估和管理软件开发项目提供相关数据,为项目成员和组织领导增加软件项目开发的透明度。

2.术语

构建信息关心者是关心构建过程的记录信息的人员,包括项目经理、过程改进人员、项目成员和组织领导。

3.用例

根据我们前面的构建平台的定义,实现这样的系统主要有两个用例和两种角色。如下图:

  1. 用例一:构建

    名称:构建
    级别:user goal
    范围:每晚构建平台
    主要角色:构建者
    前提:主要角色已登录

    成功场景:

    1. 构建者要求系统从代码库中取出某个项目的所有源代码
    2. 构建者编译连接所有源代码,系统产生项目软件
    3. 构建者要求安装构建出的项目软件,系统安装软件
    4. 构建者测试软件,系统测试并记录测试信息

     

    扩展:
    * 系统出错:
    *.1系统保存出错信息

  2. 用例二:浏览构建信息

    名称:浏览构建信息
    级别:user goal
    范围:每晚构建平台
    主要角色:构建信息关心者
    前提:已执行构建

    成功场景:

    1. 构建信息关心者进入构建信息地址
    2. 系统显示所有的构建信息的目录
    3. 相应信息选择感兴趣的构建信息
    4. 系统显示相应的信息

     

    扩展:
    * 系统出错:
    *.1系统保存出错信息

4.技术

  1. 要求用web技术,采用j2ee体系;
  2. 采用cvs open souce系统作为项目源代码版本控制工具;
  1. 数据字典

    构建信息:构建出的产品;单元测试日志(成功与否,失败则要提供相应失败原因);单元测试的覆盖率;构建过程的日志;项目组成员的工作量(代码行数)和项目源代码树中各个目录和非二进制文件的行数;项目源代码树。

  2. 其他需求
    1. 尽量采用第三方开源代码软件;
    2. 尽量使构建用例自动化;
    3. 能构建多个项目;
    4. 实现用java 语言写的项目的构建,但要考虑未来对c,c++程序的构建的扩展。

4、系统分析

系统分析要对问题空间的本质进行分析造模,形成”要做什么”的深刻了解,尽可能地和用户达成共识。我这里既使用了传统的造模工具也利用了面向对象分析的方法学来产生文档。这一节中我首先对这些需求所涉及的子系统进行定位,看看他们之间的关系,这里我把这种分析称为上下文分析;然后看看我们关心的子系统数据流如何,得出数据流图;最后我分析每晚构建平台的”类”模型。本节所有内容的全体构成了对需求的分析模型。

1.系统上下文分析

通过分析,我们可以看出整个每晚构建平台的运作由6个实体构成,它们之间的关系如系统关系图所示。

构建系统完成需求定义中的软件项目的构建工作,它从CVS系统中获取项目源代码,并对源代码进行编译连接安装和测试工作,产生的构建信息通知给构建信息展示系统,构建信息关心者通过构建信息展示系统浏览构建信息。用蓝色标记表示的为本平台的组成部分。

2.数据流程图

下面的数据流程图更好地更详细地理解了需求,从这个流程图可知,构建系统主要和CVS系统打交道,并会生成构建信息供构建信息展示系统使用。构建系统由取出项目代码、产生项目度量数据、编译连接安装测试删除和编译连接安装(发布版)四个任务组成;构建信息展示系统和构建信息关心者打交道,主要完成浏览构建信息的任务。用黄色线条表示的存储单元”项目源代码目录”是个临时存储单元。

最后需指出的是本分析模型实现的用例一为全自动版本,是比较符合”最大化的减轻构建者工作负担”的需求的。

类模型

  1. 类BuildAdmin,ProjectBuild是project类的子类,因为从某种意义上来说,它们两者都是项目,不把OSScheduler类列为project类的子类是因为OSScheduler类很简单,可能是操作系统的一行脚本或者一行配置。

    另外BuildAdmin负责所有ProjectBuild服务execute方法的执行,所以它和ProjectBuild的关系为一个复合关系;OSScheduler类要启动BuildAdmin的execute方法,所以OSScheduler和BuildAdmin有单向关系。

    另外构建信息存放的位置是本平台的关键,为了让所有的类对这些位置有一个共同的视图,BuildInfoLog类是其它类的父类。

  2. 类描述

    经过分析不难知道,所有的构建信息用非结构化数据来描述比较合适。在这里可以做一个决策:要求他们是独立的,也就是说进入相应的信息地址,它们可以自我显示;需求定义要求用www的方式浏览这些信息,所以同时要求他们对普通的browser是可浏览的。我们没必要用类来描述这些信息。

    构建显示信息系统只有一个类来显示构建信息目录:每晚构建显示类(NightlyBuild)

    另外从上下文图和数据流程图,我们可以得到我们构建系统的类:操作系统定时服务(OSScheduler),构建管理服务(BuildAdmin),应用项目构建服务(ProjectBuild)。

    两个系统之间有一个定义构建信息存放位置的类BuildInfoDir,这个类定义了两个系统之间的协议。

    注意书写约定:
    ${变量名}为取变量名所代表的值的含义。

    1. 构建信息存放位置类
      类名 构建信息存放位置类 类英文名 BuildInfoDir
      成员变量
      变量名 变量说明
      nightly_Build_Tags 保存所有的构建标签,是构建标签列表
      logTopDir 保存构建管理服务运行的日志的目录
      statCVSTopDir 保存了所有应用项目的项目度量结果的顶层路径
      projectLogTopDir 保存了所有应用项目构建服务实例运行日志的顶层路径
      testCoverTopDir 保存了所有应用项目的测试覆盖率计算结果的顶层路径
      distTopDir 保存了所有应用项目的发布版的顶层路径
      testTopDir 保存了所有应用项目的测试结果的顶层路径
      方法
      方法名 参数 执行步骤 方法说明

    2. 每晚构建显示类

      类名 每晚构建显示类 类英文名 NightlyBuild
      成员变量
      变量名 变量说明
      方法
      方法名 参数 执行步骤 方法说明
      list_ Buildinfo_table . (1)读取nightly_Build_Tags内容,格式化显示每个构建标签指示的构建信息目录。 .

    3. 操作系统定时服务

      类名 操作系统定时服务 类英文名 OSScheduler
      成员变量
      变量名 变量说明
      方法
      方法名 参数 执行步骤 方法说明
      excute .
      1. 利用系统当前时间形成日志文件名;
      2. 执行BuildAdmin的excute()方法,并把BuildAdmin的正常输出和错误输出记录到日志文件名中;
      3. 保存日志文件到${logTopDir}指定的目录中。
      启动构建管理服务并记录日志

    4. 构建管理服务

      类名 构建管理服务 类英文名 BuildAdmin
      成员变量
      变量名 变量说明
      cvsroot 保存了cvsroot环境变量
      buildDir 保存了临时存放应用项目源代码的路径
      方法
      方法名 参数 执行步骤 方法说明
      cvs_check_out 应用项目cvs系统中的名字
      1. 利用cvsroot 登录cvs系统;
      2. 执行 指令,把参数制定的应用项目源代码取出并放在成员变量 指定的目录/项目名字/目录下。
      从cvs中取出项目源代码
      statcvs
      1. module:应用项目cvs系统中的名字;
      2. project_Build_Tag:每个项目的当前构建标签
      (1) 对源代码进行项目度量,并把结果放在${statCVSTopDir}目录下的${project_Build_Tag}目录下。 对源代码进行度量
      execute . 对每一个应用项目执行:
      1. cvs_check_out
      2. statcvs
      3. 执行ProjectBuild的execute()方法
      .

    5. 应用项目构建服务

      类名 构建管理服务 类英文名 BuildAdmin
      成员变量
      变量名 变量说明
      project_Build_Tag 保存了当前正在构建的项目由项目名称和当前系统时间组成的构建标签
      方法
      方法名 参数 执行步骤 方法说明
      test_project .
      1. 为测试而编译连接源代码;
      2. 安装测试版产品;
      3. 测试产品;
      4. 计算测试覆盖率;
      5. 输出测试结果到 指定目录下的 目录下;
      6. 输出测试覆盖率结果到 指定目录下的 目录下;
      .
      dist_project .
      1. 编译连接源代码;
      2. 安装发布版产品到 指定目录下的 目录下。
      .
      execute .
      1. 执行test_project方法
      2. 执行dist_project方法
      3. 把两个方法的日志合并成一个日志文件,命名为 ,并把其放在 指定的目录下。
      .
    1. 构建场景
      • 1.操作系统定时服务类开始执行;
      • 1. 1启动BuildAdmin对象的execute方法
      • 针对每个被管理的项目,执行下列步骤:
      • #begin
      • 1.1.1根据当前系统时间和项目名称生成该项目的构建标签,并记录构建标签
      • 1.1.3以构建标签为参数生成项目的ProjectBuild对象
      • 1.1.2调用cvs_check_out方法,从cvs系统中取出该项目的源代码
      • 1.1.3执行statcvs方法,生成项目度量数据并保存到相应的位置
      • 1.1.4调用该ProjectBuild对象的execute方法,完成项目的测试和安装,并产生相应的构建信息
      • #end
    2. 浏览构建信息场景

      我们已经说过,各个构建信息能实现在browser中的自我展示,所以Nightlybuild对象只需通过某种格式显示各个构建信息的目录,构建信息请求者可以通过这些目录请求各个构建信息。

      1.NightlyBuild对象接到浏览构建信息的请求,通过对自己保存的构建信息目录和构建标签列表组织构建信息目录。

5、文档书写辅助工具

  1. word 文档书写排版工具
  2. powerpoint,图片组织绘画工具
  3. visio 绘制数据流图,ER图等的工具
  4. rational rose,绘制UML图形的工具
  5. windows 附件中的画图来截取图片
  6. 操作系统的全屏打印功能

参考资料

  • 进一步学习面向对象的系统分析和设计:《面向对象的系统分析和设计》Ronald J. Norman
  • 《实用面向对象软件工程教程》殷人昆 田金兰 马晓勤 译
  • 良好的用例编写风格可以从这里获得:《编写有效用例》 Alistair Cockburm
  • 进一步理解cvs和nightlybuild技术的相关背景资料:《cvs和nightlybuild技术》 杨锦方
  • cvs源代码版本系统在:http://www.cvshome.org/
  • statcvs 项目工作量分析工具在:http://statcvs.sf.net/
  • clover测试覆盖率分析工具在: http://www.cortexebusiness.com.au/
  • ant构建工具在:http://ant.apache.org/
  • junit单元测试工具在:http://www.junit.org/
  • apache web程序测试工具在:http://jakarta.apache.org/cactus/

 

龚永生,热衷J2EE技术,主要研究门户系统软件。
地址(addr): 北京市海淀区上地信息产业基地开拓路7 联想大厦
邮编 100085
电话(tel): 010-62986638-5749
手机(mobile): 13910304330
传真(fax): 010-62975824
URLADD:http://www-128.ibm.com/developerworks/cn/java/l-bulid-nightly

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91744 人正在系统学习中 相关资源:本草纲目下载李时珍本草纲目查询软件版v1.4_本草纲目pdf彩图版…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年3月26日
下一篇 2009年3月26日

相关推荐