TWI579721B - 建立個人化程式設計模型的方法 - Google Patents
建立個人化程式設計模型的方法 Download PDFInfo
- Publication number
- TWI579721B TWI579721B TW105118343A TW105118343A TWI579721B TW I579721 B TWI579721 B TW I579721B TW 105118343 A TW105118343 A TW 105118343A TW 105118343 A TW105118343 A TW 105118343A TW I579721 B TWI579721 B TW I579721B
- Authority
- TW
- Taiwan
- Prior art keywords
- code
- modified
- programming
- transaction
- program
- Prior art date
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
本發明係有關於一種建立個人化程式設計模型的方法,尤其是指一種除了可以提供程式設計人員於程式設計的過程中選取適切的程式設計活動來提高程式碼的品質外,並可以藉由不建議的程式設計活動來降低程式碼的瑕疵,以能提供程式設計人員更便捷的開發技術,而在其整體施行使用上更增實用功效特性之建立個人化程式設計模型的方法創新設計者。
按,目前程式設計進行軟體開發的方式對於程式的正確性是透過於程式設計〔Coding〕與執行〔Execution〕來驗證程式的正確性〔Correctness〕,然而程式設計的能力則因人而異,所開發出來的軟體可能因為不當的設計〔Improper design〕而增加錯誤產生的機會,目前軟體開發人員對於此問題則是利用程式碼檢視〔Code Inspection〕的方式來確認程式碼的品質〔Quality of
Code〕,然而不論是透過執行或是程式碼檢視來確認程式碼的品質皆在程式碼完成後,這種檢視〔Inspection〕的方式屬於靜態的檢視〔Static Inspection〕,也就是針對已完成的程式碼進行分析,在程式設計的過程中除了程式的架構〔Structure〕外,設計步驟也是影響程式品質〔Quality〕的一大要素。
其中,就目前用於程式偵錯〔Debugging〕與瑕疵預防〔Defect Detection〕之技術而言,請參閱公告於92年6月1日之第535053號「電腦系統中搜尋錯誤程式碼的方法」,其提供一種電腦系統,其包含有一輸入系統及一輸出系統,該電腦系統中需除錯的程式碼有複數個指令,該輸入系統係用來指出程式碼中的錯誤變數,而該錯誤變數有一與期待值不同的錯誤值;該錯誤變數的錯誤集包含每一個與該錯誤變數相關的指令,且該錯誤集中的指令均給予一優先值來指出造成該錯誤變數產生的可能性;最後,該輸出系統依據優先值依序將該錯誤集中每一個指令顯示出來。該「電腦系統中搜尋錯誤程式碼的方法」主要是分析程式碼來找出程式碼中的錯誤,以分析變數〔Variables〕為主,而分析的方式是透過自動比對變數的輸出值〔Output〕與預期值〔Expectation〕,來了解程式碼的正確性,如果比對不正確,則依此來找出導致不正確的程式碼。
請再參閱公告於93年5月21日之第588238號「程
式除錯方法」,其是先在一待測程式中對應複數事件設置複數中斷點後,執行該待測程式以輸出其中之一中斷點的診斷碼,並由該診斷碼重設其相對應之事件的參數,最後則依據該重設後之參數執行該事件,使該事件進行錯誤處理,藉此來進行程式之錯誤處理功能及其完整性的測試。該「程式除錯方法」是在待測程式中安排多個中斷點〔breakpoints〕,接著執行該待測程式以輸出其中一個中斷點的診斷碼,再依照所輸出的診斷碼來重設〔Reset〕對應的事件參數,再以該參數執行對應的處理程式。這個方式也是需要於所完成的程式碼中插入中斷點。
請再參閱公告於93年5月21日之第588263號「應用於分散式網際網路的爪哇腳本語言程式錯誤處理方法」,分別對客戶端、伺服端以及傳輸通信協定提供一種錯誤處理程式以及執行程式的撰寫格式。客戶端、伺服端乃至於遠端呼叫程式於執行發生錯誤時,對應的錯誤處理程式均能以一延伸標記語言格式字串的形式,將發生錯誤的程式功能與檔案名稱以程式呼叫的逆順序傳遞至客戶端主程式錯誤處理堆疊。該「應用於分散式網際網路的爪哇腳本語言程式錯誤處理方法」主要是處理Java Script的除錯方法,主要的概念仍然是透過執行欲測試的程式,當錯誤發生時,再將程式呼叫的逆順序傳至處理程式,以進行處理,這種處理方式也是針對已完成的程式碼進行執行的測試。
請再參閱公告於96年1月21日之第I271617號
「自動識別電腦程式中的程式錯誤之技術」,其在一實施例中,一種用以自動地識別在一電腦程式中的一程式錯誤之方法包括接收一程式錯誤訊息,以指出在程式執行時已發生一新的程式錯誤,並產生新的程式錯誤之一程式堆疊軌跡,指出在程式中新的程式錯誤之源頭。一第一操作應用至新的程式錯誤之程式堆疊軌跡的至少第一部份,以產生與新的程式錯誤相關之一第一數字碼。比較與新的程式錯誤相關之第一數字碼與相關於先前已識別出的程式錯誤之一個或數個儲存的第一數字碼,以決定是否新的程式錯誤與該先前識別出的程式錯誤的至少之一錯誤相同。若是,備置與解決先前識別出的程式錯誤有關的儲存資料以用於解決新的程式錯誤。該「自動識別電腦程式中的程式錯誤之技術」乃著重於建立錯誤識別與處理的方法,主要係為建立程式執行時所產生的錯誤之關聯性,每次當新錯誤產生時,系統會傳出一個數字碼(String.hashCode( )),此數字碼會與處理的方式產生關連性並儲存,當後續有新的錯誤產生,而新產生的數字碼存在於資料庫中,則使用者可以由其中找出用於解決之前錯誤的處理方式。
請再參閱公告於98年6月1日之第I310494號「用於電腦系統中解決錯誤的方法、系統及物件」,係為一種用於找出並解決一叢集環境中的一錯誤的方法與系統。對該叢集(cluster100)設置至少一多重主控(multi-homed)節點(110)以及用於每個網路介面(112、114)的至少一閘道器(140)。心跳(heartbeat)訊息於預定週
期間隔中在對等節點與該閘道器之間傳送(202)。在任何節點或閘道器遺失一心跳訊息的情況中(204),一ICMP顯示指令(echo)被發出至每個網路介面之該叢集中的每個節點與閘道器(206)。如果用以回應該ICMP顯示指令之一節點遺失與一網路遺失皆未被確認,一應用程式層級封包查詢指令(ping)被送出(224)以判定與缺少該心跳訊息有關之錯誤是否為一暫時錯誤狀況(228)或一應用程式錯誤(230)。該「用於電腦系統中解決錯誤的方法、系統及物件」主要處理資訊傳送中遺失的錯誤,其方法並非直接檢查程式的錯誤,而是透過應用程式訊息的回報來診斷發生問題的地方,其中包含網路的錯誤或是應用程式本身的錯誤。
然而,上述各種方式雖可達到驗證程式正確性之預期功效,但也在其整體實際操作施行上發現,現行做法的主要缺點是程式碼設計完成後再檢視〔或執行〕,若發現設計不當時,則對於已完成的程式需要投入修改的成本〔Cost〕,其次是無法於設計前予以提醒,以致拖延設計的時程〔Schedule〕,致令其在整體操作施行上仍存在有改進之空間。
緣是,發明人有鑑於此,秉持多年該相關行業之豐富設計開發及實際製作經驗,針對現有之技術方法及缺失再予以研究改良,提供一種建立個人化程式設計模型的方法,以期達到更直覺的程式設計流程導引與更佳的程式碼品質之目的者。
本發明之主要目的在於提供一種建立個人化程式設計模型的方法,其主要係除了可以提供程式設計人員於程式設計的過程中選取適切的程式設計活動來提高程式碼的品質外,並可以藉由不建議的程式設計活動來降低程式碼的瑕疵,以能提供程式設計人員更便捷的開發技術,而在其整體施行使用上更增實用功效特性者。
本發明建立個人化程式設計模型的方法之主要目的與功效,係由以下具體技術手段所達成:其主要係包括有程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕、個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕與個人化的程式設計模型〔Personal Coding Activity Models,PCAM〕;其中:該程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕,主要蒐集與處理程式設計人員的程式設計活動與其所產出的程式碼之品質資訊〔Quality of Codes〕,所蒐集的程式設計活動包含修改的程式碼片段〔Modified Codes Fragments,MCF〕、編譯結果〔Compilation Results〕與執行結果〔Execution Results〕;
該個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕,其係利用由該該程式設計活動資訊蒐集步驟所選定的交易集〔Transaction Sets〕來找出程式設計人員在程式設計過程中較常出現的程式樣式〔Patterns〕;該個人化的程式設計模型〔Personal Coding Activity Models,PCAM〕,主要結合由程式設計人員的修改程式碼中找出的產出個人化程式設計樣式〔PCAP〕與其執行結果〔Results〕來建立個人化的程式設計模型〔PCAM〕,並利用該模型來評估後續程式碼產出的品質〔Quality of Codes〕,提供程式設計人員建議的程式設計活動〔Suggested Coding Activity〕與不建議的程式設計活動〔Avoided Coding Activity〕。
本發明建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集所蒐集之該修改的程式碼片段與該編譯結果是由開發工具〔IDE〕於使用者執行編譯時自動蒐集,而該執行結果則是由程式設計人員於執行後指定。
本發明建立個人化程式設計模型的方法,其中,該修改的程式碼片段〔MCF〕定義為一段包含修改過程式碼的連續程式碼〔Codes〕,該編譯結果〔Compilation Resu
lts〕則利用IDE工具對修改的程式進行編譯的結果,且僅蒐集程式碼修改片段〔MCF〕中之編譯成功的部份。
本發明建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集係於使用者的開發工具〔IDE〕中設置一個外掛程式〔Modified Code Retrieved Plug-in,MCRP〕,該外掛程式用於蒐集程式設計師的程式設計活動資訊,所蒐集的資訊則傳送到遠端的伺服器〔Server〕中;該外掛程式於每次程式設計人員完成修改〔Modified〕與儲存〔Saved〕時,會自動比對修改後與修改前的程式碼,並將修改的部分擷取出來,而所找出的修改的部分則包含新增〔Inserted code,INS〕、刪除〔Deleted code,DEL〕與修改〔Modified,MOD〕。
本發明建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集在修改的程式碼片段〔MCF〕的蒐集上使用3個參數來簡化蒐集的程序,分別為關鍵詞〔keywords〕、識別字〔identifiers〕以及範圍〔Range〕,該關鍵詞〔keywords〕為程式語言的關鍵字,一組關鍵詞集合〔keyword set〕預先定義於系統中,用於過濾出要蒐集的修改的程式碼片段;該識別字則是程式碼中所用到的變數〔variables〕與類別〔class〕、函數〔method〕。
本發明建立個人化程式設計模型的方法,其中,該程式設計
活動資訊蒐集用來產生交易〔Transaction〕的演算法如下〔範圍為r〕:A1.對於每個修改的程式碼c i,找到包含該程式碼的第一層方法〔Method〕或函式;B1.建立progMsg( )的程式結構樹〔Program Structure Tree,PST〕,並移除其中非出現在關鍵詞集合S K 與識別字集合S I 中的關鍵詞與識別字,並令依此所建的PST為pst i;C1.將此pst i以前序表示法表示成一有序字串的集合,並令此有序字串集合為p i;D1.如果此有序字串集合為p i的節點數〔nodes〕(不包含-1)小於(或等於r),則p i即選為交易〔Transaction〕,否則由此有序字串集合中挑出r個節點數〔nodes〕作為交易〔Transaction〕;E1.此步驟一直持續到所有的修改程式碼皆涵蓋在所選的交易中為止。
本發明建立個人化程式設計模型的方法,其中,於該步驟D1中,所述之修改的程式碼c i係位於交易的中間節點。
本發明建立個人化程式設計模型的方法,其中,於找出該個人化程式設計樣式需先指定最小支持度〔minimum sup
port〕s,假設所有關鍵詞與識別字的集合以I 1表示,則I 1=S K 1∪S I 1,用來產生關鍵詞與識別字的頻繁集〔large itemsets〕的演算法如下所示:A2.計算I 1中每個單一項目的支持度(不包含-1),計算方式為出現於transaction中的次數〔每個transaction僅計算一次〕,僅保留支持度大於s的項目,並以L 1表示第1階頻繁項目集〔first-level large itemset〕;B2.產生第2階有序的項目集〔second-level ordered itemset〕I 2=L 1×L 1,其中每個項目(l i,l j)的支持度則是視(l i,*,l j)出現在transaction中的次數,其中”*”表示l i與l j之間可以初現一個或是多個其他項目;C2.由A2與B2所產生第i組有序的項目集依照I i=L i-1×L 1的規則來產生,而第i階頻繁項目集Li則是由I i選出〔大於s者〕,此步驟一直重複到沒有頻繁項目集產生為止〔亦即L i+1為空集合〕。
本發明建立個人化程式設計模型的方法,其中,修改程式碼後的執行結果利用K-means分群法依屬性分成數個錯誤群〔defect cluster〕。
本發明建立個人化程式設計模型的方法,其中,用於產生該
個人化的程式設計模型的演算法如下所示,其中用於挑選規則的最小信賴度〔minimum confidence〕為c:A3.計算錯誤群內〔defect cluster〕E每個元素的支持度,並挑選支持度大於s的項目,並表示為L E;B3.計算L n×L E〔L n表示PCAP〕中所有項目的信賴度,並挑選信賴度大於c的項目,則此項目為所產生的規則〔rule〕,令其表示為R;其中r i L n×L E的支持度是由計算(l 1,...,l n)出現於交易集合中的次數而得,若一個規則r i的前項〔left-hand side〕出現次數為n t,而總交易數〔the number of transactions〕為m,且此規則r i出現於無錯誤交易的次數〔positive appearances〕為n p,則此規則r i的支持度為n t/m,且正面預測〔預測為無錯誤〕的信賴度為n p/n t,而所得到的規則可以表示為R={r 1,...,r n}可視為個人程式設計模型。
第一圖:本發明之程式設計活動資訊蒐集與分析架構示意圖
第二圖:本發明之程式設計活動資訊蒐集元件架構示意圖
第三圖:本發明之程式設計活動資訊自動蒐集介面示意圖
第四圖:本發明之修改程式碼片段示意圖
為令本發明所運用之技術內容、發明目的及其達成之功效有更完整且清楚的揭露,茲於下詳細說明之,並請一併參閱所揭之圖式及圖號:本發明主要係包括有程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕、個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕與個人化的程式設計模型〔Personal Coding Activity Models,PCAM〕;其中:一、該程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕:其主要蒐集與處理程式設計人員的程式設計活動與其所產出的程式碼之品質資訊〔Quality of Codes〕,請參閱第一圖本發明之程式設計活動資訊蒐集與分析架構示意圖所示,所蒐集的程式設計活動包含修改的程式碼片段〔Modified Codes Fragments,MCF〕、編譯結果〔Compilation Results〕與執行結果〔Execution Results〕,其中修改的程式碼片段與編譯結果則是由開發工具〔IDE〕於使用者執行編譯時自動蒐集,而執行結果則是由程式設計人員於執行後指定。
該修改的程式碼片段〔MCF〕定義為一段包含修改過程式碼的連續程式碼〔Codes〕,該編譯結果〔Compilation Results〕則利用IDE工具對修改的程式進行編譯的結果,該編譯結果包含編譯失敗〔Fail〕與編譯成功〔Successful〕,而本發明所蒐集的程式碼修改片段〔MCF〕則僅包含編譯成功的部份,該造成編譯失敗的錯誤則可以由編譯器〔Compiler〕直接找出並修正。
而請再一併參閱第二圖本發明之程式設計活動自動資訊蒐集元件架構示意圖所示,其係於使用者的開發工具〔IDE〕中設置一個外掛程式〔Modified Code Retrieved Plug-in,MCRP〕,該外掛程式用於蒐集程式設計師的程式設計活動資訊,所蒐集的資訊則傳送到遠端的伺服器〔Server〕中;該外掛程式於每次程式設計人員完成修改〔Modified〕與儲存〔Saved〕時,會自動比對修改後與修改前的程式碼,並將修改的部分擷取出來,而所找出的修改的部分則包含新增〔Inserted code,INS〕、刪除〔Deletedcode,DEL〕與修改〔Modified,MOD〕。
請再一併參閱第三圖本發明之程式設計活動資訊自動蒐集介面示意圖所示,當程式設計人員進行程式修改前先輸入欲修改的專案資訊,其User Information視窗,如果為瑕疵修正則選取瑕疵
編號〔Defect〕,若為需求則選取需求編號〔REQ〕,如此則當程式設計人員於編寫程式碼完成並按下儲存鍵〔Save〕,而編譯器檢查無語法錯誤時,程式設計活動資訊自動蒐集外掛程式〔MCRP〕便會自動擷取修改的部分,並傳送此資訊到所設定的Server中,該次修改後的執行結果亦由程式設計人員進行輸入與紀錄。
而在修改的程式碼片段〔MCF〕的蒐集上使用3個參數來簡化蒐集的程序,分別為關鍵詞〔keywords〕、識別字〔identifiers〕以及範圍〔Range〕,該關鍵詞〔keywords〕為程式語言的關鍵字,例如if、for、while等,一組關鍵詞集合〔keyword set〕預先定義於系統中,用於過濾出要蒐集的修改的程式碼片段;該識別字則是程式碼中所用到的變數〔variables〕與類別〔class〕或是函數〔method〕,例如基本型別〔Primitive type〕的變數int或類別〔class〕型別Vector。此步驟先將修改的程式碼片段依照前述的參數過濾出關鍵詞與識別字。
請參閱下列修改程式碼片段表單所示,如果修改行數為9,且關鍵詞集合為S K ={if,for,while},且識別字集合S I ={InfoMerge,PaoUtil,Vector},則其過濾後的字集,請再一併參閱第四圖本發明之修改程式
碼片段示意圖所示,為了便於產生個人化程式設計樣式〔PCAP〕,將所蒐集到的程式碼片段〔MCF〕表示成一個關鍵詞與識別字的有序集合〔Ordered Set〕,而為了表示程式碼片段〔MCF〕中各個元素的架構,在此集合中的S K 元素〔Keyeords〕表示向下一層〔如第四圖中的if與for〕,並利用“-1”表示往上一層,因此若範圍〔Range〕r取為7,則所得到的修改的程式碼片段可以表示為pt i={Paoutil,for,Vector,PaoUtil,if,InfoMerge,-1,PaoUti1,-1},其中“-1”表示往上一層,而此pt i則可視為用來找出個人化程式設計樣式〔PCAP〕的紀錄或是交易〔Transaction〕。
用來產生交易〔Transaction〕的演算法如下〔範圍為r〕:
A1.對於每個修改的程式碼c i,找到包含該程式碼的第一層方法〔Method〕或函式,如修改程式碼片段表單中的progMsg( )。
B1.建立progMsg( )的程式結構樹〔Program Structure Tree,PST〕,並移除其中非出現在關鍵詞集合S K 與識別字集合S I 中的關鍵詞與識別字,並令依此所建的PST為pst i。
C1.將此pst i以前序表示法〔preorder traversal〕表示成一有序字串的集合〔a sequence of strings〕,並令此有序字串集合為p i。
D1.如果此有序字串集合為p i的節點數〔nodes〕(不包含-1)小於(或等於r),則p i即選為交易〔Transaction〕,否則由此有序字串集合中挑出r個節點數〔nodes〕作為交易〔Transaction〕。
E1.此步驟一直持續到所有的修改程式碼〔modified codes〕皆涵蓋在所選的交易中為止。
其中,在上述步驟D1中,為確保所挑選的交易〔Transaction〕能包含修改的程式碼,因此在挑選時要確定位於修改的程式碼c i的前面與後面的節點數要相近,亦即修改的程式碼c i能儘量位於交易的中間節點。
經由上述演算法所挑選出的修改程式碼交易〔Transactions〕範例,如下所示,其中line表示修改的行數。
二、個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕:其係利用由該該程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕步驟所選定的交易集〔Transaction Sets〕來找出個人化程式設計樣式〔PCAP〕,其目的是透過找出程式設計人員在程式設計過程中較常出現的程式樣式〔Patterns〕。其用於找出該個人化程式設計樣式〔PCAP〕的演算法主要由資料探勘技術中的關聯性規則改進而來,因此需要先指定最小支持度〔minimum support〕s,假設所有關鍵詞與識別字的集合以I 1表示,則I 1=S K 1∪S I 1,用來產生關鍵詞與識別字的頻繁集〔large itemsets〕的演算法如下所示:
A2.計算I 1中每個單一項目的支持度〔support〕(不包含-1),計算方式為出現於修改程式碼交易〔transaction〕中的次數〔每個transaction僅計算一次〕,僅保留支持度大於s的項目,並以L 1表示第1階頻繁項目集〔f
irst-level large itemset〕。
B2.產生第2階有序的項目集〔second-level ordered itemset〕I 2=L 1×L 1,其中每個項目(l i,l j)的支持度〔support〕則是視(l i,*,l j)出現在修改程式碼交易〔transaction〕中的次數,其中”*”表示l i與l j之間可以初現一個或是多個其他項目。
C2.由A2與B2所產生第i組有序的項目集〔i-th ordered itemset〕依照I i=L i-1×L 1的規則來產生,而第i階頻繁項目集〔i-th largest itemset〕L i則是由I i選出〔大於s者〕,此步驟一直重複到沒有頻繁項目集產生為止〔亦即L i+1為空集合〕。
由上述包含修改紀錄的交易(Transaction)範例表所示,其中的S K 1={if,for}〔同時出現2次〕,S I 1={InfoMerge,PaoUtil}〔同時出現2次〕,則I 1包含4個項目{InfoMerge,PaoUtil,if,for},而I 1每個項目的支持度〔support〕分別為2/3、3/3、2/3與1/3,若s=0.6,則由於for的支持度僅1/3,故可以移除,因此L 1={InfoMerge,PaoUtil,if}。
而在該步驟B2中L 1主要是來自I 2=L 1×L 1,請參閱下
列I 2項目集所示,其係為由L 1所產生的項目集〔itemsets〕I 2所示,其中每個I 2項目所出現的次數表示有多少個交易〔transactions〕包含該項目,其中兩個項目(l i與l j)的相對階層位置〔relative position〕也要相同,用於比對兩項目的相對階層位置是計算兩者之間向下〔down level〕與向上〔up one level〕層級抵銷後的層級要相同,例如在{if,a 1,-1,for,a 2,-1,a 3}與{if,a 1,a 2,-1,a 3}中的if與a 3的相對位置為相同,而所找出的程式設計樣式〔pattern〕可以表示為{if,-1,a 3},當然樣式{if,-1,a 3}樣式{if,a 3}為不同的樣式。因此I 2項目若以s=0.6,則僅有(PaoUtil,*,if)保留,其他則移除,所找出的最後頻繁項目集L n即是程式設計人員在修改程式過程中頻繁出現的樣式〔patterns〕,此頻繁出現的樣式則可以視為個人化程式設計樣式〔PCAP〕。
三、個人化的程式設計模型〔Personal Codi
ng Activity Models,PCAM〕:其主要結合由程式設計人員的修改程式碼中找出的產出個人化程式設計樣式〔PCAP〕與其執行結果來建立個人化的程式設計模型〔PCAM〕,並利用該模型來評估後續程式碼產出的品質,提供程式設計人員建議的程式設計活動與不建議的程式設計活動。
如該個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕步驟所述,修改程式碼後的執行結果由程式設計人員進行紀錄的工作,而此執行結果可作為修改程式碼交易〔Transaction〕的執行結果〔Execution Results〕,而此執行結果可以指出當次修改活動是否沒問題,請參閱下列用於評估修改程式碼的屬性〔attributes〕表所示,其中嚴重性〔severity〕於發現問題時由程式設計人員決定,而問題形式〔defect_type〕則表示邏輯錯誤〔logic error〕或是資源錯誤〔resource error〕。
該個人化程式設計樣式〔PCAP〕可視為個人化程式設計
規則〔rule〕的前項〔left-hand side〕,而執行結果〔Execution Results〕可視為後項〔left-hand side〕,兩者可以產生個人化程式設計模型〔PCAM〕,要產生規則需要先將執行結果利用K-means分群法將其分成數個群〔clusters〕,例如D={d 1,...,d n}表示修改程式碼所產生的錯誤〔defects〕,而這些錯誤可以分成E={e 1,...,e m}等群〔defect cluster〕,則每個修改程式碼交易〔transaction〕可以表示成pst i=(a i1,...,a in;E i),其中E i E,表示該修改程式碼所產生的錯誤群〔defect clusters〕,請參閱下列交易與所產生的錯誤表列所示,其中d 1與d 3屬於群e 1,而d 2則屬於群e 2。
用於產生該個人化的程式設計模型〔PCAM〕的演算法如下所示,其中用於挑選規則的最小信賴度〔minimum confidence〕為c:
A3.計算錯誤群內〔defect cluster〕E每個元素的支持度〔support〕,並挑選支持度大於s的項目,並表示為L E。
B3.計算L n×L E〔L n表示PCAP〕中所有項目的信賴度,並挑選信賴度大於c的項目,則此項目為所產生的規則,令其表示為R。
其中r i L n×L E的支持度是由計算(l 1,...,l n)出現於交易集合中的次數而得,若一個規則〔rule〕r i的前項〔left-hand side〕出現次數為n t,而總交易數〔the number of transactions〕為m,且此規則r i出現於無錯誤交易的次數〔positive appearances〕為n p,則此規則r i的支持度為n t/m,且正面預測〔預測為無錯誤〕的信賴度為n p/n t,而所得到的規則可以表示為R={r 1,...,r n}即可視為個人程式設計模型〔Personal Coding Activity Models,PCAM〕。
因此,如上述交易與所產生的錯誤表列所示,若令s=0.3,且c=0.6,而錯誤群〔defect cluster〕為E={e 1,e 2},則因為e 1與e 2的支持度〔會產生e 1與e 2的交易〕分別為2/3與1/3〔大於0.3〕,而PCAP為L n={(PaoUtil,if)},因此L n×L E所產生的規則為(PaoUtil,if;e 1)與(PaoUtil,if;e 2),其信賴度分別為2/2與1/2,因此僅有(PaoUtil,if;e 1)得以保留,因為其信賴度大於0.6。
以下將本發明應用於財政部高雄關稅局所開發差勤管理系統(Attendance Management System for Kaohsiung Customs,AMS-KC)進行驗證實用性,此AMS-KC系統發展自2012/10至2013/03,請參閱下列修改程式碼的紀錄〔modified code fragments〕表所示,其中修改程式碼交易交易〔transaction〕的長度設為11,所使用的識別字〔identifiers〕包含類別名稱〔classes〕,若conn是類別DBConn,則conn.execsql(”insert...”)可表示為DBConn.execsql(S),其中S表示參數〔String〕,而execsql則為方法。
請參閱下列修改所產生的錯誤〔defects〕表所示,
其中dno表示編號,mno表示產生此錯誤的MCF〔modified code fragment〕,severity表示嚴重性,所蒐集的資料並經過標準化〔standardized〕與加權〔weighted〕以及分群處理。
請參閱下列所得到的交易〔identified transactions〕表所示,Transactions 1的執行結果為錯誤e 1或e 2,而Transactions 3與5則沒有產生錯誤。而本發明以0.8為最小信賴度〔minimum confidence〕以及0.05為最小支持度〔minimum support〕所建立的規則〔rules〕,請參閱下列執行結果規則表所示,其中PCAP表示規則的前項〔antecedent〕,而執行結果〔Result〕則表示規則的後項〔consequent〕,也就是修改程式碼片段如果符合Rule 1中的個人化程式設計樣式〔PCAP〕,則可能會產生如e 1與e 2的錯誤,而修改程式碼片段若符合Rule 3〔or 5〕則可能會產生e 1或e 2的錯誤,主要是因為Rules 3與5已經合併為規則{if*-1*if*Leave.chgV
als(S,S)}→{e 1|e 2}〔the consequent is e 1 or e 2〕。
藉由以上所述說明本發明之使用實施可知,本發明與現有技術手段相較之下,本發明主要係除了可以提供程式設計人員於程式設計的過程中選取適切的程式設計活動來提高程式碼的品質外,並可以藉由不建議的程式設計活動來降低程式碼的瑕疵,以能提供更直覺的程式設計流程導引,令程式設計人員更便捷的開發新技術,而在其整體施行使用上更增實用功效特性者。
雖然本發明已利用上述較佳實施例揭示,然其並非用以限定本發明,任何熟習此技藝者在不脫離本發明之精神和範圍之內,相對上述實施例進行各種更動與修改仍屬本發明所保護之技術範疇。
綜上所述,本發明實施例確能達到所預期之使用功效,又其所揭露之具體方法,不僅未曾見諸於同類產品中,於申請前文獻中
亦未發現有相同技術存在在先,誠已完全符合專利法之規定與要求,爰依法提出發明專利之申請,懇請惠予審查,並賜准專利,則實感德便。
Claims (9)
- 一種建立個人化程式設計模型的方法,其主要係包括有程式設計活動資訊蒐集〔Coding Activity Collection,CAC〕、個人化程式設計樣式〔Personal Coding Activity Patterns,PCAP〕與個人化的程式設計模型〔Personal Coding Activity Models,PCAM〕;其中:該程式設計活動資訊蒐集,主要蒐集與處理程式設計人員的程式設計活動與其所產出的程式碼之品質資訊〔Quality of Codes〕,所蒐集的程式設計活動包含修改的程式碼片段〔Modified Codes Fragments,MCF〕、編譯結果〔Compilation Results〕與執行結果〔Execution Results〕,該修改的程式碼片段〔MCF〕定義為一段包含修改過程式碼的連續程式碼〔Codes〕,該編譯結果〔Compilation Results〕則利用IDE工具對修改的程式進行編譯的結果,且僅蒐集程式碼修改片段〔MCF〕中之編譯成功的部份;該個人化程式設計樣式,其係利用由該該程式設計活動資訊蒐集步驟所選定的交易集〔Transaction Se ts〕找出程式設計人員在程式設計過程中較常出現的程式樣式〔Patterns〕;該個人化的程式設計模型,主要結合由程式設計人員的修改程式碼中找出的產出個人化程式設計樣式〔PCAP〕與其執行結果〔Results〕來建立個人化的程式設計模型〔PCAM〕,並利用該模型來評估後續程式碼產出的品質〔Quality of Codes〕,提供程式設計人員建議的程式設計活動〔Suggested Coding Activity〕與不建議的程式設計活動〔Avoided Coding Activity〕。
- 如申請專利範圍第1項所述建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集所蒐集之該修改的程式碼片段與該編譯結果是由開發工具〔IDE〕於使用者執行編譯時自動蒐集,而該執行結果則是由程式設計人員於執行後指定。
- 如申請專利範圍第1或2項所述建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集係於使用者的開發工具〔IDE〕中設置一個外掛程式〔Modified Code Retrieved Plug-in,MCRP〕,該外掛程式用於蒐集程式設計師的程式設計活動資訊,所蒐集的資訊則傳送到遠端的伺服器〔Server〕中;該外掛程式於每次程式設計人員完成修改〔Modified〕與儲存〔Sa ved〕時,會自動比對修改後與修改前的程式碼,並將修改的部分擷取出來,而所找出的修改的部分則包含新增〔Inserted code,INS〕、刪除〔Deleted code,DEL〕與修改〔Modified,MOD〕。
- 如申請專利範圍第3項所述建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集在修改的程式碼片段〔MCF〕的蒐集上使用3個參數來簡化蒐集的程序,分別為關鍵詞〔keywords〕、識別字〔identifiers〕以及範圍〔Range〕,該關鍵詞〔keywords〕為程式語言的關鍵字,一組關鍵詞集合〔keyword set〕預先定義於系統中,用於過濾出要蒐集的修改的程式碼片段;該識別字則是程式碼中所用到的變數〔variables〕與類別〔class〕、函數〔method〕。
- 如申請專利範圍第1項所述建立個人化程式設計模型的方法,其中,該程式設計活動資訊蒐集用來產生交易〔Transaction〕的演算法如下〔範圍為r〕:A1.對於每個修改的程式碼c i,找到包含該程式碼的第一層方法〔Method〕或函式;B1.建立progMsg( )的程式結構樹〔Program Structure Tree,PST〕,並移除其中非出現在關鍵詞集合S K 與識別字集合S I 中的關鍵詞與識別 字,並令依此所建的PST為pst i;C1.將此pst i以前序表示法表示成一有序字串的集合,並令此有序字串集合為p i;D1.如果此有序字串集合為p i的節點數〔nodes〕(不包含-1)小於(或等於r),則p i即選為交易〔Transaction〕,否則由此有序字串集合中挑出r個節點數〔nodes〕作為交易〔Transaction〕;E1.此步驟一直持續到所有的修改程式碼皆涵蓋在所選的交易中為止。
- 如申請專利範圍第5項所述建立個人化程式設計模型的方法,其中,於該步驟D1中,所述之修改的程式碼c i係位於交易的中間節點。
- 如申請專利範圍第1項所述建立個人化程式設計模型的方法,其中,於找出該個人化程式設計樣式需先指定最小支持度〔minimum support〕s,假設所有關鍵詞與識別字的集合以I 1表示,則I 1=S K 1∪S I 1,用來產生關鍵詞與識別字的頻繁集〔large itemsets〕的演算法如下:A2.計算I 1中每個單一項目的支持度(不包含-1),計算方式為出現於transaction中的次數〔每個transaction僅計算一次〕,僅保留支持度大於s的項 目,並以L 1表示第1階頻繁項目集〔first-level large itemset〕;B2.產生第2階有序的項目集〔second-level ordered itemset〕I 2=L 1×L 1,其中每個項目(l i,l j)的支持度則是視(l i,*,l j)出現在transaction中的次數,其中”*”表示l i與l j之間可以初現一個或是多個其他項目;C2.由A2與B2所產生第i組有序的項目集依照I i=L i-1×L 1的規則來產生,而第i階頻繁項目集L i則是由I i選出〔大於s者〕,此步驟一直重複到沒有頻繁項目集產生為止〔亦即L i+1為空集合〕。
- 如申請專利範圍第1項所述建立個人化程式設計模型的方法,其中,修改程式碼後的執行結果利用K-means分群法依屬性分成數個錯誤群〔defect cluster〕。
- 如申請專利範圍第1或8項所述建立個人化程式設計模型的方法,其中,用於產生該個人化的程式設計模型的演算法如下所示,其中用於挑選規則的最小信賴度〔minimum confidence〕為c:A3.計算錯誤群內〔defect cluster〕E每個元素的支持度,並挑選支持度大於s的項目,並表示為L E;B3.計算L n×L E〔L n表示PCAP〕中所有項目的信賴度,並 挑選信賴度大於c的項目,則此項目為所產生的規則,令其表示為R;其中r i L n×L E的支持度是由計算(l 1,...,l n)出現於交易集合中的次數而得,若一個規則r i的前項〔left-hand side〕出現次數為n t,而總交易數〔the number of transactions〕為m,且此規則r i出現於無錯誤交易的次數〔positive appearances〕為n p,則此規則r i的支持度為n t/m,且正面預測〔預測為無錯誤〕的信賴度為n p/n t,而所得到的規則可以表示為R={r 1,...,r n}即可視為個人程式設計模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW105118343A TWI579721B (zh) | 2016-06-13 | 2016-06-13 | 建立個人化程式設計模型的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW105118343A TWI579721B (zh) | 2016-06-13 | 2016-06-13 | 建立個人化程式設計模型的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI579721B true TWI579721B (zh) | 2017-04-21 |
TW201743229A TW201743229A (zh) | 2017-12-16 |
Family
ID=59240978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW105118343A TWI579721B (zh) | 2016-06-13 | 2016-06-13 | 建立個人化程式設計模型的方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI579721B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030167457A1 (en) * | 2002-03-01 | 2003-09-04 | Thompson Carol L. | System and method for providing an optimizer display tool |
TW201122809A (en) * | 2009-12-28 | 2011-07-01 | Tatung Co | Method and system for debugging |
TW201122808A (en) * | 2009-12-23 | 2011-07-01 | Tatung Co | Method and system for debugging program code |
TW201606463A (zh) * | 2014-05-08 | 2016-02-16 | 三菱電機股份有限公司 | 工程工具、程式編輯裝置及程式編輯系統 |
-
2016
- 2016-06-13 TW TW105118343A patent/TWI579721B/zh not_active IP Right Cessation
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030167457A1 (en) * | 2002-03-01 | 2003-09-04 | Thompson Carol L. | System and method for providing an optimizer display tool |
TW201122808A (en) * | 2009-12-23 | 2011-07-01 | Tatung Co | Method and system for debugging program code |
TW201122809A (en) * | 2009-12-28 | 2011-07-01 | Tatung Co | Method and system for debugging |
TW201606463A (zh) * | 2014-05-08 | 2016-02-16 | 三菱電機股份有限公司 | 工程工具、程式編輯裝置及程式編輯系統 |
Also Published As
Publication number | Publication date |
---|---|
TW201743229A (zh) | 2017-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8621417B2 (en) | Rule merging in system for monitoring adherence by developers to a software code development process | |
CN110928772B (zh) | 一种测试方法及装置 | |
US9251046B2 (en) | Method and system for generating and processing black box test cases | |
Mayvan et al. | Design pattern detection based on the graph theory | |
US20100050155A1 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
EP3674918B1 (en) | Column lineage and metadata propagation | |
WO2002005088A1 (en) | Method and apparatus for extracting knowledge from software code or other structured data | |
CN106293891B (zh) | 多维投资指标监督方法 | |
US10365995B2 (en) | Composing future application tests including test action data | |
CN107003931B (zh) | 将测试验证从测试执行分离 | |
US11436133B2 (en) | Comparable user interface object identifications | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN110633078B (zh) | 一种实现自动生成特征计算代码的方法及装置 | |
Oluwagbemi et al. | Automatic generation of test cases from activity diagrams for UML based testing (UBT) | |
US11119899B2 (en) | Determining potential test actions | |
Baker et al. | Detect, fix, and verify TensorFlow API misuses | |
TWI579721B (zh) | 建立個人化程式設計模型的方法 | |
CA2739762C (en) | Rule merging in system for monitoring adherence by developers to a software code development process | |
CN115454702A (zh) | 日志故障分析方法、装置、存储介质及电子设备 | |
Asaduzzaman | Visualization and analysis of software clones | |
CN105608006B (zh) | 一种基于概率模型的程序错误检测方法及系统 | |
Grechanik et al. | Differencing graphical user interfaces | |
CN112650796A (zh) | 一种自动化的应用数据收集、存储管理系统 | |
CN109992475A (zh) | 一种日志的处理方法、服务器及存储介质 | |
US20220334954A1 (en) | Automated verification of a test model for a plurality of defined bdd test scenarios |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |