惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - 姜乂元

Notepad++ 使用 及 插件开发 记录 EverythingSDK中Everything.h转的Everything.pas 可以关闭显示器的软件 win10 x64 解决hlp文件打开问题 支持正则表达式更名的命令行工具 一个类似ALTRun的程序 一个测试程序迭代的故事04 一个测试程序迭代的故事03 一个测试程序迭代的故事02 一个测试程序迭代的故事01 Delphi5和Delphi7属性编辑器内存泄漏问题的解决 使用Calibre自带工具批量转换电子书格式 用批处理安装卸载程序 Delphi XE7试用记录2 Delphi XE7试用记录1 开发程序时在主要功能之外应当考虑的问题 开心网外挂 天下的导游一般般 使用delphi5加xkol开发的程序还真小。
一个测试程序迭代的故事05
姜乂元 · 2020-06-09 · via 博客园 - 姜乂元

第十三个需求 测试代码运行时间

有些测试,不仅需要判断是否可行,还需要判断运行效率如何。

测试前保存一下当前时间,测试后再保存一下测试后的时间,然后输出两个时间的差,就可以看到程序运行时间。增加的代码量不多,但是判断运行效率一般要比较多个方案,每个方案都添加这些代码,总量就多了。

这种三明治代码可以通过函数类型的参数,改变中间的代码。通用测试时间的部分写成一个函数放到根窗体中,把需要测试的代码写到一个函数中,然后把这个函数作为参数,传递给那个通用的函数。

测试程序把测试代码放到了Action中,所以把Action作为参数传递给那个通用的函数更加方便。

一般判断运行效率,都需要运行很多次,取平均值,所以通用的函数可以增加一个参数,表示运行多少次。

最终,只要把每种方案的测试代码写到对应的Action中,然后再写一个Action,用那个通用的函数去执行前面那些Action,就可以完成效率测试。

避免了重复输入代码,也避免了重复点击鼠标。

第十四个需求 探索新组件

有时需要测试新的组件,最直接的办法,放置组件,设置属性;再增加一些Action,调用组件的功能;然后运行,看组件的运行状况。

有的组件很复杂,需要设置很多属性,并且要考察不同属性之间的配合。这时候需要重复设置属性并运行,效率比较低。如果能在运行时设置属性,直接看到组件的变化,省去了编译运行工作,效率会提高不少。

实际上,窗体设计器就是运行时设置属性。能够在窗体设计器中使用的组件,都需要先安装,安装的组件成为Ide程序的一部分,才可以在窗体设计器中设置属性。

网上搜索了一下,已经有不少人做了很多工作,甚至写了组件,类似Ide的属性编辑器,可以设置关联的组件。

把这个组件放置在新窗体中,然后在根窗体中增加一个Action,显示这个新窗体,并将子窗体中的组件与这个组件关联,就可以在运行时设置属性,同时看到设置结果。

很好!

第十五个需求 不同版本IDE共用工程

在不同版本的Ide中,相同的代码不一定能够运行。还有时候虽然能够运行,但是结果不同。切换到新版本的Ide中,可以通过修改代码适应新版本,但是再切换到原来的Ide时,还需要把代码改回来,浪费了时间。

为每个版本的Ide创建一套独立的源代码,是一种可行方案。但这种方案需要在修改代码的时候,每个版本都修改一遍,很多工作是重复的。

条件编译

仅创建一套源代码,通过条件编译,适应不同版本的Ide,是一种更好的方案。仅适用于特定版本的代码,用条件编译包括起来,就不会影响其他版本Ide的编译。

Ide版本(实际是编译器的版本)信息不容易记忆,需要重新定义成容易记忆的符号,这个工作可以放在一个独立的Inc文件中,哪个单元需要使用版本信息,就插入这个inc文件。很多第三方组件,都包含一个类似的文件,可以直接拿来用。例如rxlib中的Rx.inc,jcl中的jedi.inc。

也可以为不同Ide版本创建一个工程,所有工程都共用单元文件,在不同版本的工程设置里设置一个特殊的符号,用这个特殊符号触发条件编译。这种方法更适合创建不同目的的可执行程序,或者创建组件。

Delphi5窗体处理工具

条件编译仅适用于单元文件,不适用于窗体文件。一般来说窗体文件可以通用,除非其中包括中文等非Ascii字符。Delphi5是一个分水岭,Delphi5以上使用另一种格式。

高版本的窗体文件需要转换一下非Ascii字符的编码,Delphi5才能打开。CnWinzard有一个功能可以转换,但一次只能转换一个,测试程序的窗体有很多,而且都含有中文(Action的标题),有点麻烦。

做一个命令行工具,可以批量转换,然后放到path路径中,转换版本时,在TotalCommander中按Ctrl+G,调出CMD终端窗口,键入这个程序名并回车,一次完成所有窗体的转换。

方便多了。