• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    代碼生成FAQ

    發布: 2008-8-15 13:10 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 22次 | 進入軟件測試論壇討論

    領測軟件測試網
    關鍵字:代碼生成FAQ
    代碼生成是什么?

    代碼生成是使用程序生成代碼的一種技術。這些程序包括從很小的幫助性質的腳本,到創建大量完整應用程序中的業務邏輯模型。對于代碼生成應用軟件,并沒有一種固定的模式,可以使用命令行或者GUI,它們可以創建一種或多種程序語言的代碼,可以多次創建代碼。沒有固定的輸入和輸出。代碼生成的共同的特點就是生成器的輸出是代碼,這些代碼是可以通過手工編寫來完成的。

    代碼生成有哪些好處?

    代碼生成技術的帶來的好處可以總結為四個方面:

    1. 質量:通過代碼生成器生成的代碼的質量是由用來生成目標代碼的代碼和模版的質量決定的,當這些代碼和模版的質量提高時,重新生成的代碼的質量基于此也會提升。

    2. 一致性:由代碼生成器生成的代碼有很強的一致性,變量命名,方法命名,命名都通過相同的方式創建。這些使得生成的代碼便于使用和分層。

    3. 生產力:當代碼生成器第一次運行的時候,對于代碼生成技術的這一好處是很容易認識到的。你從輸入一些對輸出代碼的設計中所需的輸入開始,幾乎就在同時,你得到了你的設計所實現的代碼。無論怎樣,真正的高效率就在你運行生成器來創建基于設計的代碼時就開始了。你有幾次看見一個項目的需求沒有變化過?這就是基于變化的需求生成代碼的能力。

    4. 抽象:一些生成器基于目標代碼的抽象模型來創建代碼。比如:你可以創建一個sql Schema 和數據訪問層代碼,從xml中定義數據庫中的表,字段,關系和查詢。這種抽象的價值在于生成器可以重新定位以創建其他平臺上的代碼。這意味著你的業務邏輯和規則擁有了可移植性。而你不必為不同的平臺編寫代碼。

    對于代碼生成,為什么會有正反兩種觀點

    正面的一個觀點就是代碼生成在短期內提供了很多的好出!吧瘛苯洺诠こ掏耆斫饬舜a生成對他們所面對的問題的益處的時候。就象面向對象來到時的‘a-ha’一樣。這樣很容易造成一種“找到了銀彈”的想法,但是時間不久,就在不同的方向上出現了錯誤。代碼生成應當用在合適的地方。

    相反的,有一些工程師被代碼生成刺痛了。他們或者使用著生成器,或者使用著生成的代碼,而這些代碼正在慢慢的腐化,或者他們開發的生成器并沒有實際應用起來。不管什么原因,一些工程師確實不喜歡代碼生成。

    代碼生成的工作流程是怎樣的?

    根本的軟件開發流程就是:寫代碼-編譯-測試。我們寫下一些代碼,然后編譯(如果需要的話),然后測試,如果需要變更就重復這個周期。代碼生成的流程依賴于使用主動的或被動的代碼生成。主動代碼生成器創建的代碼,你可以不再編輯它們,或者你可以編輯特定的部分使其看起來就象是生成的一樣。被動代碼生成器一次創建代碼,然后你自己來編寫核心的內容。

    被動代碼生成的工作周期就是:運行生成器,然后對生成的代碼遵循編寫代碼-編譯-測試的流程。

    對于主動代碼生成器,你先運行生成器,然后編譯,測試輸出。在這一點上,如果你在生成的代碼中發現問題,你可以修改模版或者改變生成器的輸入來重新生成。如果問題是出現的手寫代碼部分,再遵循編寫-編譯-測試的流程。

    什么是主動和被動生成器?

    主動生成器創建的代碼你可以不用修改或者只修改那些在再生成周期內依然是安全的特定的標記部分。主動生成器的目的在于對于不同的輸入產生相同的輸出。

    被動生成器一次創建代碼,然后交給你去維護以使代碼可以長時間運行。

    被動生成器在開始的階段是高效的。但是主動生成的益處-代碼維護和可以修改模版中的bug,在被動生成中喪失了。

    什么東西使用生成器生成?

    代碼生成器可以用在很多不同類型的應用軟件開發中。最常用的在數據庫訪問和用戶界面上。

    最多的是用在數據庫訪問方面,因為數據訪問的代碼是重復性非常高的。另外,生成數據訪問層為提供了技術平臺的可移植性和平臺可移植的益處提供了標準。

    用戶界面編碼也有很大的重復性,所以它也成為生成器的通常的目標。另外,一個用戶界面生成器也可以提供多方面的實現,比如針對同一份定義,生成胖客戶端和瘦客戶端。

    生成器的下面是什么?

    象許多種技術一樣,代碼生成也有正反兩面,在你實現類似工具的同時,你應當確定已經掌握了這些要點。

    1. 文檔和訓練:你需要代碼生成器的文檔,來解釋生成器是怎樣工作的,怎樣來維護它,你還需要教會項目組的其他人生成器的價值所在和怎樣使用。

    2. 維護:在你的工作流程中添加一個生成器,就是在為你的應用環境添加一個新的工具,這意味著你將在這個工具的生命周期內發布和維護它。

    3. 復雜性:依賴于項目和生成器本身的復雜性,你得到一個巴洛克式設計的生成工具。也許這是一個有挑戰性的問題,可以說最好的生成器經常是很簡單的,可以把幾天的工作簡化成幾小時的宏。因此復雜性并不是生成器的必須的考量因素。

    理解生成器什么時候該用,什么時候不該用很重要。代碼生成不能替代面向對象設計。

    生成器的種類有哪些?

    對應用程序分類是困難的,特別是代碼生成器的多樣性。一種區分的方法是觀察生成器的輸入和輸出。在輸入端你可以使用代碼作為輸入,或者一個設計所描繪的一個抽象。在輸出端,你可以根據一些條件創建輸入,或者設計部分實現的新的代碼;蛘咴O計的完全實現的代碼且需求不會擴展。

    基于這樣的輸入和輸出,我們可以得到一些生成器的模型:

    1. Code munger:Code munger讀入代碼作為輸入,然后創建新的代碼作為輸出,這些新代碼可以部分的或者完全的依賴于生成器的設計,Xdoclet,從JavaDoc的代碼中的嵌入式注釋創建EJB的支持Beans,就是Code munger的一個例子。

    2. 內聯代碼增強器:這種模型讀入代碼作為輸入,以輸入代碼作為基礎創建新代碼,但是有一部分代碼基于原始代碼的設計擴展而來,嵌入式sql語言,比如Pro*C,就是內聯代碼增強器的例子。SQL是用C代碼寫的,生成器從實現了命令和查詢的C代碼中的sql擴展,創建C代碼。

    3. 混合代碼生成器:這種模型使用代碼作為輸入,然后使用輸入代碼為基礎創建新代碼,但是返回輸出代碼到輸入的文件中。向導經常就作為混合代碼生成器來實現。代碼中嵌入的特別的注釋,來定義生成器添加新代碼的范圍。

    4. 局部代碼生成器:局部代碼生成器使用一個抽象的定義來作為輸入,然后創建輸出代碼,用戶自己使用子類化來作擴展,以完整實現設計。

    5. 層生成器:這種類型的生成器從一個抽象的設計創建完整的輸出代碼集。這種代碼意味著使用“as-is”,不作任何擴展。這是目前開源和商業生成器最普遍的形式。

    對于代碼生成,開發者最關心哪些

    開發者對象代碼生成這類新的技術和工具有很多關注點。一些恐懼,擔心和懷疑。還有一些合理的擔心歸咎于當前或先前對于技術的經驗。我們希望在下面幾個方面有更多關注:

    1. 代碼生成想作的太多了:市場上很多代碼生成器都是Tier Generators(層生成器),這意味著它們被設計用來從一個代碼抽象模型創建大量的代碼。生成這么多的代碼需要被迫學習許多工具和輸出代碼。但是,這并不是唯一的一種生成器。除過一些小的方面,有許多小的生成器可以提供相同的益處。你可以創建自己的生成器來適應自己的要求。因為大多數目標更廣泛的商業化的生成器并不意味著比小的,有特定目標的生成器項目有更高的可用性。

    2. 代碼生成不能在現有代碼基礎上工作:這確實是個問題。層生成器趨向于為項目生成新的代碼,主要是因為這樣更容易命中目標。在現有框架下進行編寫代碼的工作意味著大規模的修改。用來創建代碼的模版適應它們來達到現有的標準。有一種工具,比如Codify,可以在現有代碼和新代碼情況下很好的工作。

    3. 輸出代碼的質量很差:生成代碼維護著質量的一致性級別。這個級別可以從壞到好,依賴于代碼的質量和用來創建代碼的模版。理想狀態下,質量很好,但是如果不是,仍然有一致性的好處。手寫的代碼的質量在項目進行期間趨向于不同,但是整體在提高。但是經常不是這種情況。邱吉爾被一個女人攻擊:“邱吉爾!你是個酒鬼!”。他回答說:“也許我是個酒鬼,但是你很丑,明天我會清醒,但是你依然很丑”。這樣的情況也出現在代碼生成器上。代碼生成器可以被編輯來創建一致的,好的代碼。但是人們采用手工的方式一直編寫著不一致的代碼。

    4. 代碼生成會吃掉我的工作:如果你的工作包含編寫大量的代碼。不妨嘗試下自動過程,你也許是對的。但是我們中的很多人進入這個行業是因為喜愛創建有趣的,可以幫助人們的程序。代碼生成幫助你更快的創建程序。所以對很多人來說代碼生成帶來了很多機遇。

    5. 代碼生成太復雜了:生成器關注于它所要創建的代碼的復雜性和生成關系的復雜性。它們可以很復雜,但是生成器的輸出比起一個靈活的運行時庫里的函數化的代碼來說,經常是很容易調試和維護的。盡管這樣沒錯,但是生成器的復雜度還時要注意的,不論是開發期間還是部署期間。. “you aren’t going to need it” (YAGNI)的原則要嚴格的用于生成器的設計和實現。

    6. 你不能生成X技術:任何文本文件都是可生成的。所以沒有什么不可能。一個問題就創建一個生成器和手寫代碼之間的投入產出的對比。舉個例子:生成器自己可以被生成,但是我假想它是復雜的項目

    7. 生成器是很好的起點,但是他們從不維護:這是非常合理的相法。有許多次我看到生成的代碼被手工改動!癉O NOT EDIT”的注釋依然存在于代碼中,很久都沒人理會。的確,這只能通過長期對開發者培訓如何維護生成的代碼來解決。但是也有一些實踐的觀點,就是從來不在代碼管理系統中保留生成的代碼。代碼生成是創建程序過程中的活躍部分。保證代碼從來沒有手工修改過,而且生成器經常維護或者丟棄。

    代碼生成和CASE工具有怎樣的關系?

    CASE工具,在80年代末和90年代初被夸大為“程序員的終結”。分析師可以使用可視化工具定義業務邏輯,而且生成器可以創建所有的程序代碼。在這方面,這些聲音更象是MDA,為那些時下流行的平臺,象J2EE,.NET,編譯UML到代碼。代碼生成的邊界和CASE工具的核心落在了同一個地方。使用生成器從抽象的定義創建應用程序。

    代碼生成的不同在于它是一種自下向上的,來減輕編碼工作量的方法。開發者為自己編寫工具來使他們的工作更簡單,CASE工具是自上向下的,它們企圖使用工具替代受過訓練的開發者。這是兩者在某些方面,但更是最根本的不同。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: faq FAQ 代碼


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>