用Delphi2005和DUnit搭建敏捷开发平台

原创 2005年01月03日 22:54:00

之前用的是Java那一套东西,有Eclipse什么都搞定了。现在因为要用Delphi改一个即时通讯软件的缘故,想着怎么能把重构和单元测试那一套搬到Delphi这边来。书上说给现有的代码加单元测试能够加深对代码的理解,并且可以作为改善代码的基础,这不正是我要做的事情吗?于是,为了搭建这么一个敏捷平台,我以Delphi2005和DUnit进行了一点小小的尝试,并把结果记录于下,与大家分享。

1、下载Delphi2005
因为Borland公司在中国不出售专业版本,鉴于架构师和企业版的天价,所以只能从网络上下载一个D版的做个人使用。Delphi2005体积比较大,而且Update1也需要CD,所以推荐用BT下载2CD版本。种子的地址如下:
http://www.delphifans.com/SoftView/821.html

2、下载Delphi2005的sp1
据说打过这个补丁之后能快一些,但是这个补丁安装起来可慢了,还需要用光盘。下载地址如下:
http://www.delphifans.com/SoftView/970.html

3、下载DUnit
https://sourceforge.net/projects/dunit/

4、安装Delphi2005+sp1
注意一下keygen中有一个register以及安装的时候一定要同时安装.net和win32版本的delphi,C#builder则无所谓。因为如果只安装win32版本会导致重构功能不可用(这是delphi2005的一个bug,表现就是用重构的时候出现.net的异常窗口)。

5、精简Delphi2005
因为上一步的时候同时安装了.net版本,导致delphi启动的时候变得非常慢。这个可以通过修改注册表,删掉一些IDE的包来实现。具体的做法是在Delphi的快捷方式目标后面加上参数-rxxx,也就是BDS.exe -rxxx。这个xxx任由你指定,然后你就会在HKEY_CURRENT_USER/Software/Borland/xxx(这个就是你选定的名字xxx)/3.0/Known IDE Packages中发现那些该死的包。注意不能和网络上别的win32纯化分子那样删得太干净了,那样重构就没法用了。我自己试验多次之后得出的一个比较精简的列表如下
"$(BDS)//Bin//vclmenudesigner90.bpl"="(Untitled)"
"$(BDS)//Bin//win32debugproide90.bpl"="(Untitled)"
"$(BDS)//Bin//htmide90.bpl"="HTML Designer Package"
"$(BDS)//Bin//iteidew3290.bpl"="Borland Integrated Translation Environment for Win32"
"$(BDS)//Bin//SrcManIDE90.bpl"="(Untitled)"
"$(BDS)//Bin//todoide90.bpl"="Borland ToDo"
"$(BDS)//Bin//htmlhelp290.bpl"="Borland HtmlHelp Viewer"
"$(BDS)//Bin//idefilefilters90.bpl"="IDE File filters"
"$(BDS)//Bin//startpageide90.bpl"="Borland Start Page IDE Package"
"$(BDS)//Bin//refactoride90.bpl"="Borland Core Refactoring Package"
"$(BDS)//Bin//dbkdebugide90.bpl"="(Untitled)"
"$(BDS)//Bin//exceptiondiag90.bpl"="(Untitled)"
"$(BDS)//bin//deployide90.bpl"="Deployment Manager"
"$(BDS)//Bin//plugview90.bpl"="Pluggable Tree View Package"
"$(BDS)//Bin//coreproide90.bpl"="Core IDE Pro Package"
"$(BDS)//Bin//IDETools90.bpl"="Build Tools"
"$(BDS)//Bin//unittestide90.bpl"="(Untitled)"
"$(BDS)//Bin//historyide90.bpl"="(Untitled)"
"$(BDS)//Bin//htmltidy90.bpl"="HTML Tidy Formatter"
"$(BDS)//Bin//HTMLFmt90.bpl"="HTML Internal Formatter"
"$(BDS)//Bin//mlcc90.bpl"="Markup Language Code Completion Package"
"$(BDS)//Bin//delphivclide90.bpl"="Delphi VCL Designer IDE Package"
"$(BDS)//Bin//delphicoreproide90.bpl"="(Untitled)"
"$(BDS)//Bin//win32debugide90.bpl"="(Untitled)"
"$(BDS)//Bin//htmlide90.bpl"="(Untitled)"
"$(BDS)//Bin//delphide90.bpl"="Delphi Win32 IDE Personality"
"$(BDS)//Bin//mtspro90.bpl"="(Untitled)"
"$(BDS)//Bin//mtsent90.bpl"="(Untitled)"
"$(BDS)//Bin//iteidenet90.bpl"="Borland Integrated Translation Environment for .NET"
"$(BDS)//Bin//NetImportWiz90.bpl"="(Untitled)"
"$(BDS)//Bin//DataExplorer90.bpl"="(Untitled)"
虽然启动还是有些慢,不过总算能忍受了。

6、编译并安装DUnit
用你知道的办法把DUnit编译成dcu,放入你指定的目录。并把该目录添加到Delphi的Tools->Environment Options->Delphi Options->Library-win32的Library Path中。
另外把DUnit.exe给编译出来

7、建立工程
我推荐的方式是写Delphi程序的时候把界面和后台分开,具体就是开两个项目,一个普通的VCL项目,一个DLL项目。不,不,我的意思并不是让你用DLL这种方式来共享代码。这个DLL项目包含文件是所有后台的内容,以及对后台的测试。产生的DLL给DUnit用,DUnit能够从其中读出测试并运行。而实际上GUI部分的那个工程是包含了所有的文件的,也就是说分与其说分两个工程,不如说是在原来的单个工程的基础上加上了一个专门用于测试的DLL工程。
项目分为三块:GUI,Core,TestCore。工程一包括GUI+Core,工程二包括Core+TestCore。工程一的输出是Win32Exe程序。工程二输出是Win32Dll程序。
然后可以把这两个工程放到一个Project Group中。

8、编写测试
工程一和普通写Dephi程序没有什么两样,要记得把GUI的功能分出来后台,让后台Testable。测试都是写在工程二中的,我把工程二的名字就叫做Core。下面就在Core中添加一个最基本的测试,检查1+1是不是等于2。
建立TestCase

unit TestBasic;

interface

uses
  TestFramework;

type
  TBasic = class
  public
    function Add(a, b: integer): integer;
  end;

  TTestBasic = class(TTestCase)
  private
    FBasic: TBasic;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestAdd;
  end;

implementation

function TBasic.Add(a, b: integer): integer;
begin
  Result := a + b;
end;

procedure TTestBasic.SetUp;
begin
  FBasic := TBasic.Create;
end;

procedure TTestBasic.TearDown;
begin
  FBasic.Free;
end;

procedure TTestBasic.TestAdd;
begin
  CheckEquals(2, FBasic.Add(1, 1));
end;

initialization
  RegisterTest('', TTestBasic.Suite);

end.

修改Core.bdsproj(KAO,什么古怪的后缀啊)
把begin end.改成
exports
  RegisteredTests name 'Test';
end.
并在Uses部分添加TestFramework。

DUnit就是通过这个export的函数在dll中找出我们注册的TestCase的。

9、运行DUnit
把DUnit添加到Tools菜单下吧,那样方便许多。只是参数不好填写。我没有用里面的macro,直接填了绝对路径。如果你和我一样这样直接填的绝对路径,那么从Tools菜单下选DUnit就能直接看到一个测试列表了,点运行就会看到一个绿灯亮起了。
如果你不是把DUnit添加到Tools菜单,那么就要从File->Load Test的文件选择窗口中找到Core项目编译出来的dll,core.dll。

————

至此重构功能和单元测试都有了。剩下的就是给既有代码添加测试,然后慢慢重构的事情了。

JSAAS敏捷开发平台

1. 敏捷开发平台简介 红迅JSAAS敏捷开发平台是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的企业级的数据IT一体化的业务管理平台工具,它基于流行的JAVA开源技术上构建...
  • redxun_cn
  • redxun_cn
  • 2017年11月29日 15:40
  • 517

【火星人敏捷开发云】上线之一:看板驱动模式

前段时间火星人敏捷开发云做了Beta测试,已经上线运行了,网址位于:http://scrum.org.cn/,可以点击里边的沙盘项目体验一下。先介绍一下最简单的看板驱动模式,demo1~demo3中的...
  • cheny_com
  • cheny_com
  • 2014年01月23日 11:16
  • 6265

敏捷开发- 怎么验收敏捷故事

转自: http://www.cnblogs.com/dyllove98/archive/2012/04/10/2441254.html     接着上篇 "估算故事"讲,故...
  • IBelieve1974
  • IBelieve1974
  • 2017年06月15日 11:25
  • 267

51编程C#敏捷开发框架源码

51编程C#敏捷开发框架源码 C#敏捷开发框架源码特点 1.基本多层抽象工厂模式架构设计, 2.支持Access、Sql Server、Oracle、Sqlite、MySql等多种常见数据库 3.动态...
  • lovegonghui
  • lovegonghui
  • 2015年11月17日 08:31
  • 626

敏捷开发有什么好处?

原文地址:敏捷开发有什么好处?作者:苗得雨 软件开发方法一直处在不断发展过程中。在诸多方法中,敏捷开发以其能持续满足不断变化的用户需求正在受到越来越多人的重视,从中小项目开始进入大型开发项目,近几年来...
  • u011741233
  • u011741233
  • 2013年08月19日 18:21
  • 3594

Scrum敏捷开发之角色

在Scrum中有三种角色:产品负责人Product Owner,Scrum Master和Scrum团队,他们的职责分别是: 产品负责人(Product Owner) 确定产品的功能和完成时...
  • xiaoxian8023
  • xiaoxian8023
  • 2014年02月22日 23:56
  • 6515

适合APP的开发模式——敏捷开发

传统的软件开发模式需要经历问题评估、计划解决方案、设计系统架构、开发代码、测试、部署和使用系统、维护解决方案等过程,如下图↓ 采用传统软件开发模式的最大问题是开发周期过长,迭代速度慢。移动互联网...
  • myhead756
  • myhead756
  • 2016年08月29日 15:22
  • 1570

敏捷开发实践(5)-有些工具不得不用

做敏捷开发,贵在敏捷,如何敏捷?我们需要一系列成熟的工具去帮助我们敏捷。 这篇文档不写技术,就是纯粹地说工具,介绍我们实施scrum过程中,起到关键作用的工具。 1、Jira或物理看板 ...
  • shan9liang
  • shan9liang
  • 2014年04月15日 21:00
  • 5258

什么叫敏捷开发?

前言        软件开发是一种对人类智慧的管理,对人大脑思维的“工厂化”管理。人是有感情的、有情绪的、变化的、相对独立的工作单元,这与冰冷的机器是不可比的,所以在中国的历史上,管理人是最难的工作;...
  • chenleixing
  • chenleixing
  • 2015年04月19日 14:49
  • 10150

项目管理---敏捷开发---到底要不要写文档?

开发要有开发文档(需求文档、数据库设计、概要设计)、开发计划(甘特图、燃尽图)、测试计划(时间、地点、人员、任务模块分配、禅道bug提交管理)都应该有一个时间段,在大家的一起商量之下可以每个人做到心中...
  • lishehe
  • lishehe
  • 2014年04月04日 08:13
  • 7963
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Delphi2005和DUnit搭建敏捷开发平台
举报原因:
原因补充:

(最多只允许输入30个字)