軟件測試自動化之測試腳本語言雜談
我這個人比較喜歡把繁瑣機械的事情自動化,而為很多小事情寫C/C++程序還是比較麻煩的。因為是編譯型語言,所以修改必須編譯成二進制文件,除了二進制文件還要保留源碼和工程。萬一哪天找不到源碼了又得重寫。腳本語言則沒有這些問題,寫完了源碼,直接丟給解釋器執行即可,完全沒有編譯的煩惱。正是因為這些原因,我經常使用各種腳本語言。
有的時候,寫腳本之前會猶豫,那么多腳本語言,用哪種好呢?常常是用某種寫好了,過了些天覺得還是用另一種好,結果又寫一遍。我想問題的關鍵在于很好的區別各種語言的優缺點,根據各自的特點覺得其適合于何種應用。所以正好今天有空 ,索性對各種腳本做個透徹的比較。
我用過的腳本語言主要是 Tcl/Tk, Perl, VBS/VBA這幾種,以下一一描述吧。
Tcl/Tk
Tcl 的最大特點我覺得就其語法格式極其簡單甚至可以說僵化,純粹的 [命令 選項 參數] 形式,名副其實的 Tool Command Language。不過正因為如此,學習掌握起來就極為容易了,而且這種形式上的簡單卻大大簡化了解析器的復雜性,使得對Tcl 腳本的支持非常容易實現,這些應該也是大多數EDA工具采用Tcl 為其腳本環境的原因吧。但另一方面說,這種形式的簡單不太對一些很喜歡使用語法技巧的人的胃口。
Tcl 的另一特點就是通過Tk對跨平臺用戶界面的支持了,一來有豐富的用戶界面元素,二來又可以跨平臺。這兩點合在一起就非常吸引人了,難怪很多流行的EDA工具也采用Tk來實現其用戶界面了,比如Mentor的ModelSim。不過就ModelSim的使用經驗來看,Tk界面似乎不太穩定,而且個人認為Tk 用戶界面有些難看:p
效率方面,我覺得Tcl是很慢的,不過既然是腳本語言,這也是通病,就算比其他腳本慢一般也不會太在意。
Perl
Perl 我覺得是腳本語言當中,語法,功能,效率三方面的贏家。
Perl的語法源自C/C++,所以對于為數眾多的C/C++程序員來說,上手非常容易。而且設計者在設計之初就特別考慮了語法的靈活性和多樣性,目標就是使其能夠媲美自然語言,正是這種考慮成就了今天Perl語法的靈活而多樣。
在數據類型和動態性方面,Perl也支持的不錯。
功能上,Perl的擴展模塊之多可說是腳本之最,雖然Perl本身沒有用戶界面支持,但是通過Tk擴展包完美地嵌入了Tk,彌補了這方面的缺憾。
效率方面,Perl解釋器的執行速度是比較快的,而且可以通過PerlCC等轉為C程序編譯為本地執行文件,這就大大超越了一般腳本所能提供的運行效率。
VBS/VBA
出于對VB語言的厭惡,我對VBS/VBA一直不怎么順眼,我一直覺得拘泥于BASIC這種早期的語言衍生出來的Visual Basic天生就不會如C/C++般好用。也許很多人會強調VB的簡易性,動態性和功能的豐富。但簡易性和動態性,我可以去用腳本語言,功能的話,只能用在Win32平臺上的VB能夠走多遠呢?而其運行效率更是不能和C/C++相比。所以說VB其實就是編譯型語言和腳本語言結合的產物。若不是微軟的大力推廣,這門語言很難到達現在這個高度。
VBS是VB的一個腳本化版本,彌補命令行功能的缺陷。VBA則是作為諸如 Office 之類的應用程序當中的腳本環境。我對他們的評價如同VB。這兩種語言都只能用于特定環境,遠不及Tcl的通用性。
總結一下以上的敘述,我覺得選腳本語言的時候要考慮幾個方面:
1. 是否需要某種特殊的功能?
文字處理是否復雜?如果很復雜,Perl是最好的字處理語言,如果不太復雜,Tcl足夠處理了。
是否需要用戶界面?需要的話,Tcl/Tk是唯一選擇,不過既然Perl可以內嵌Tk,那用Perl也沒問題。
是否需要通過OLE操作其他軟件?OLE的最佳排檔是VB,但是Perl也通過Win32::OLE包提供了完整的OLE支持。
2。使用環境是否有要求?
如果在某個應用程序內部使用,自然是使用其支持的腳本環境最為方便了。比如要操作Office文檔,用其內部提供的VBA是最方便的。不過如果程序能夠提供外部接口,比如Office文檔也可以通過外部OLE接口操作,功能等同VBA,這時這個要求就不是那么重要了。
3。語言的通用性
我想大多數人還是希望只用一種語言解決所有問題的,個人覺得擔當這個人物的最佳人選是Perl。盡管Perl本身不支持界面,不支持OLE,但是他提供的豐富的Package足以對付各種應用。而且我最習慣用的就是Perl,畢竟寫了多年的C/C++, 所以還是Perl的語法寫來舒服一些。
不過Tcl的地位仍然無法被取代,芯片領域幾乎所有的EDA工具都只提供了Tcl腳本環境,而且不提供諸如OLE的外部接口。對于這些應用,Tcl是唯一可選的語言。至于VBS/VBA, 我在發現其可以被Perl替代之后就再也沒有用過他們,可以拋棄。
所以,最終結論:在日常應用當中,Perl是王者。但專用領域,如EDA工具環境中,Tcl無可替代。
原文轉自:http://www.anti-gravitydesign.com