在平台和产品合作开发的模式下,产品并不拥有全部代码。因此有些产品的问题,需要和平台代码联调,如果环境搭配对了,解决问题往往是比较容易的事情。但是没有调试环境下,仅仅静态查看代码就常常陷入僵局。
因此,环境安装是平台和产品程序员顺利高效合作的重要部分。这里面最为重要的是一键运行——拿来代码,打开工程,按Run——然后该干嘛干嘛。
但是现在的情况并不乐观。局部来自于delphi本身的设计不合理,也来自于我们对这个环境建立的过程不够重视。常常会遇到的问题是:
1. 需要目录来输出dcu文件和exe文件。包括 dcu/bin目录
2. 需要产品内的公用库。如函数库、类库、控件(常常还需要安装)。
3. 拿过来的文件和目录就是不完整的。
4. 需要自己建立数据库的连接。自己手工建立数据库,甚至是插入和修改数据。
5. 有些问题需要外部设备和硬件:比如软件狗
因应上面的问题,尽管说的是一键运行,但是涉及到的问题方方面面,其实是一个综合问题。我们考虑到以Want 工具为中心来解决它们:
1. want加入task来创建需要的目录
2. want加入task,在指定的仓库内export目录到当前工程的lib内
3. 因为源代码,库都在一个大目录内,因此需要解决问题时,一个目录一起丢过来就是,不存在文件不全的问题
4. 连接提出问题的程序员的中间件是一个简单的方法。更好的方法是提供问题的testcase,就只是运行这个testcase 就可以定位问题。
5. 提供设备的Mock:比如软件狗的Mock来模拟软件狗的运行。
仅仅是为了一键运行,在delphi内也是颇费思量,更不要说在delphi在平台模块化方案设计上经历的痛苦——我们花费了一周时间讨论,也没有很好的方法——现在明明有些是业务性的东西,也必须在平台内修改。因此最终的方法,还是迁移到dotnet上来。
引入want也要求目录结构更加规范合理,我们现在的做法通常是这样的:
src, 源代码
Lib,库
Test ,测试用例
Tool\want :want工具
Want.xml: want 任务文件
少用第三方控件。
采用svn export(subversion的导出工具)的方法,好处很多,包括“lib目录在svn内没有副本”,“ 开发者也不能改lib”,尽管“ 在客户端可能会有多个lib的副本”,不过现在这个缺点局限于客户端,而不会影响服务器。
这篇文章涉及到以下知识点:
1. TDD(Test-driven development 测试驱动开发),我们的书架上就有。以后随着trd和项目组合作的逐步深入,tdd的概念会越来越重要,进而成为每个程序员的必备工具箱之一。Testcase,Mock都是TDD的重要概念。
2. Delphi的自动化工具——Want 工具的使用。
3. Testcase中的Mock的概念。