• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      反應(yīng)堆專業(yè)程序適應(yīng)性維護技術(shù)研究

      2013-11-06 10:19:58肖安洪楊大為
      機械設(shè)計與制造工程 2013年9期
      關(guān)鍵詞:編譯器適應(yīng)性代碼

      肖安洪,曾 輝,王 箏,楊大為,彭 輝

      (中國核動力研究設(shè)計院核反應(yīng)堆系統(tǒng)設(shè)計技術(shù)重點實驗室,四川 成都 610041)

      軟件維護是軟件生存周期的重要環(huán)節(jié),二十世紀六七十年代發(fā)生的“軟件危機”正是由于大量軟件不可維護引起,并由此興起軟件工程的概念[1]。國內(nèi)相關(guān)標準將國際電工委員會定義的5種軟件維護類型經(jīng)過合并整理,定義為:完善性維護、適應(yīng)性維護和改正性維護,其中適應(yīng)性維護是指為適應(yīng)軟件運行環(huán)境變化而作的修改[2]。通常我們稱軟件適應(yīng)性維護過程為程序移植。核反應(yīng)堆設(shè)計中采用了大量早期開發(fā)的專業(yè)程序,這些程序具有典型的“遺留軟件”特征:生命周期長、業(yè)務(wù)功能關(guān)鍵和質(zhì)量差[3]。隨著計算機硬件的快速發(fā)展,反應(yīng)堆專業(yè)程序的運行平臺逐漸停產(chǎn)、淘汰和退役,因此迫切需要將這些專業(yè)程序移植到現(xiàn)有主流計算平臺。此外,這類程序多是通過各種渠道從國外引進,移植工作只能由單位內(nèi)部技術(shù)人員完成,缺乏開發(fā)方的技術(shù)支持以及足夠的程序文檔,技術(shù)難度很大。因此應(yīng)用軟件工程理論對反應(yīng)堆專業(yè)程序適應(yīng)性維護過程進行研究,建立相應(yīng)的工作流程,可以規(guī)范維護過程,提高工作效率,并減少引入缺陷的風險。

      1 適應(yīng)性維護過程的建立

      軟件工程定義了許多過程模型用于軟件開發(fā)和維護,包括線性模型、原型模型、快速應(yīng)用開發(fā)模型、演化軟件過程模型等[3]。這些模型各有優(yōu)缺點,在此不一一贅述??傊诶碚撋弦⑼昝赖倪^程模型是不現(xiàn)實的,只能衡量人力、資源、時間等各種成本和風險因素,靈活運用過程模型概念來開展軟件項目。

      對于反應(yīng)堆專業(yè)程序適應(yīng)性維護而言,技術(shù)人員在程序現(xiàn)有框架約束下完成修改,使其運行于新平臺,需求明確,過程相對簡單,適宜采用線性模型,并在關(guān)鍵節(jié)點進行迭代。根據(jù)軟件工程化的相關(guān)理論,可以將反應(yīng)堆專業(yè)程序適應(yīng)性維護過程歸納為7個階段,如圖1所示。

      圖1 反應(yīng)堆專業(yè)程序適應(yīng)性維護過程

      2 各階段活動及要點

      2.1 策劃階段

      策劃階段的主要工作是識別用戶需求并確定程序移植目標平臺、移植總體技術(shù)路線、測試方案、工作計劃、投入人力資源和所需配套設(shè)備、識別風險因素并進行風險分析。其中關(guān)鍵活動是識別用戶需求并確定移植目標平臺,結(jié)合主流計算機技術(shù)以及當前軟硬件條件,從長遠發(fā)展和當前可行兩個方面綜合論證總體技術(shù)路線。

      2.2 準備階段

      準備階段應(yīng)完成以下幾個方面準備工作。

      2.2.1 系統(tǒng)環(huán)境準備

      系統(tǒng)環(huán)境準備包括服務(wù)器硬件、操作系統(tǒng)、編譯系統(tǒng)及庫文件等資源的準備,完成目標平臺的搭建。

      2.2.2 工具軟件準備

      需要準備的工具軟件包括源代碼分析工具、程序調(diào)試工具等。由于適應(yīng)性維護涉及到代碼修改,所以在條件允許的情況下應(yīng)部署配置管理系統(tǒng)對源代碼版本進行控制。

      2.2.3 資料準備

      反應(yīng)堆專業(yè)程序大多開發(fā)在早期的系統(tǒng)環(huán)境中,和現(xiàn)有系統(tǒng)環(huán)境差異顯著,所以系統(tǒng)資料和程序資料顯得尤為重要,包括操作系統(tǒng)命令腳本、編譯器相關(guān)資料、程序開發(fā)語言資料、程序開發(fā)手冊、編譯手冊等。

      2.3 代碼分析階段

      代碼分析主要是對程序的規(guī)模、函數(shù)調(diào)用及依賴關(guān)系、程序流程進行分析。代碼分析可以在人工分析基礎(chǔ)上配合使用輔助工具,提高準確性和效率。

      2.3.1 代碼總體分析

      分析掌握程序代碼所使用的編程語言及版本、代碼的規(guī)模(如代碼行數(shù)、注釋行數(shù)、子程序數(shù)、公用變量數(shù)等),可借助工具軟件完成,如STI Understand。

      2.3.2 靜態(tài)結(jié)構(gòu)分析

      靜態(tài)結(jié)構(gòu)分析主要對程序調(diào)用或依賴的庫文件、頭文件等進行分析,并在目標平臺進行相應(yīng)配置。通常核反應(yīng)堆專業(yè)程序依賴以下幾種庫文件、頭文件:操作系統(tǒng)級、編譯器級和程序自定義級。

      2.3.3 動態(tài)運行分析

      動態(tài)運行分析主要掌握程序運行流程及函數(shù)邏輯調(diào)用關(guān)系。程序動態(tài)運行分析有助于對程序移植過程中發(fā)現(xiàn)的錯誤進行定位及排查。程序動態(tài)運行結(jié)構(gòu)分析主要輸出成果為程序流程圖、程序邏輯結(jié)構(gòu)圖等。

      2.4 代碼移植階段

      代碼移植是適應(yīng)性維護的核心階段,其任務(wù)是將程序源代碼在目標平臺進行相應(yīng)修改;然后編譯、鏈接,得到目標程序;在目標平臺對目標程序進行運行、調(diào)試,并解決在修改、編譯、鏈接、運行、調(diào)試過程出現(xiàn)的錯誤。通常情況下編譯、鏈接合并進行,運行、調(diào)試也合并進行。代碼移植階段可以按照以下步驟進行。

      2.4.1 確定編譯、鏈接選項

      由于系統(tǒng)環(huán)境及編譯器差異等原因,程序在不同平臺進行編譯、鏈接時采用的選項不同,通過查閱相關(guān)編譯器文檔可以了解選項信息。例如Alpha平臺f77編譯器的編譯選項“-r8-i8”,作用是對浮點數(shù)和整數(shù)按雙精度進行編譯,而在Solaris平臺對應(yīng)選項為“xtypemap=real:64,integer:64”。

      2.4.2 建立編譯鏈接錯誤信息表

      確定選項后即可著手程序編譯鏈接。這個步驟的主要任務(wù)是記錄編譯過程中產(chǎn)生的錯誤和警告信息,并整理為錯誤信息表,表格包含的主要內(nèi)容包括信息類別、產(chǎn)生信息的位置、信息描述等。

      2.4.3 解決代碼編譯鏈接錯誤

      根據(jù)錯誤信息表定位到故障代碼,分析并確定錯誤原因,然后對代碼進行修改,直至消除所有錯誤。從筆者程序移植經(jīng)驗來看,編譯鏈接錯誤主要體現(xiàn)在3個方面:編譯鏈接選項、編程語言語法和引用庫文件。編譯鏈接選項錯誤可以通過查閱編譯器資料找到解決方法,編程語言語法錯誤也可以通過查閱程序開發(fā)語言手冊找到答案。

      下面以筆者在對早期Fortran程序移植過程中遇到的兩個典型語法問題為例進行說明。

      第一個是賦值問題,不同平臺編譯器對DATA賦值語句的解析不同,如對變量進行八進制賦值,Alpha平臺使用“DATA TEMP/OXXXX/”,而 Solaris平臺使用“DATA TEMP/O‘XXXX’/”。

      第二個是函數(shù)同名,新版本編程語言中內(nèi)置越來越多的內(nèi)部函數(shù),而早期程序中某些自定義函數(shù),其名稱可能已經(jīng)被用作內(nèi)部函數(shù),這種情況會導致莫名其妙的錯誤。如調(diào)用函數(shù)報參數(shù)不匹配錯誤,而檢查代碼發(fā)現(xiàn)調(diào)用函數(shù)時傳遞的參數(shù)類型和函數(shù)定義時的參數(shù)類型一致,這就有可能是該函數(shù)名已被用作內(nèi)部函數(shù),并有了不同的定義。這類問題的解決辦法就是將自定義函數(shù)改名。

      編譯鏈接過程中最難解決的問題是引用庫文件問題。庫文件是代碼通過編譯鏈接產(chǎn)生的,如果程序代碼引用了沒有源代碼的庫文件,對這個程序進行跨平臺移植就會遇到很大的問題,因為不同平臺的二進制文件結(jié)構(gòu)是不一樣的,庫文件也是二進制文件,因此不能將原運行平臺的庫文件直接拷貝至目標平臺使用,而沒有庫文件源代碼,就不能在目標平臺進行編譯鏈接產(chǎn)生庫文件。目前暫時還沒有很好的辦法能解決這樣的問題,除非重構(gòu)代碼,剝離程序?qū)煳募囊蕾?,但是花費的代價將更大。

      在對代碼進行修改過程中應(yīng)重視注釋的作用,注釋可以幫助理解編程思路。對修改的代碼也應(yīng)增加注釋以方便后來者閱讀程序,修改代碼的注釋內(nèi)容包括:修改者、修改時間、修改原因和修改的起止位置等;同時被修改的語句不能簡單刪除,而應(yīng)將其轉(zhuǎn)換為注釋語句予以保存,以便代碼后續(xù)使用者對比閱讀。

      2.4.4 調(diào)試、運行目標程序

      在經(jīng)過編譯、鏈接得到目標程序后,還需要驗證程序是否能正常運行,因此要對目標程序進行運行調(diào)試。目標程序只有在實際運行的時候才會將編譯鏈接符號、函數(shù)、變量等進行加載,鏈接的動態(tài)庫錯誤也只有在實際運行的時候才能體現(xiàn)。如果遇到運行調(diào)試錯誤,和解決編譯錯誤一樣,需要建立調(diào)試錯誤信息表,確定錯誤原因并提供解決方法,直至所有錯誤完全消除,這也涉及代碼的修改,因此應(yīng)注意添加和保存注釋。

      總之,代碼移植階段要完成程序的修改、編譯、鏈接、運行、調(diào)試等任務(wù),并且還應(yīng)同步編寫移植說明書,記錄代碼移植過程情況,對發(fā)現(xiàn)的具有普遍性的問題進行歸納總結(jié),以便后續(xù)工作的開展。程序移植和程序開發(fā)有很大不同,更需要良好的編程技巧和豐富的實踐經(jīng)驗,這些都需要在實際工作中進行總結(jié)和積累。

      2.5 測試階段

      適應(yīng)性維護是對原程序進行移植,對代碼的修改主要是修正語法等方面的錯誤,不會影響程序框架結(jié)構(gòu),修改代碼規(guī)模較小,因此相對來說測試需求比較簡單,使用基準例題對程序進行回歸測試即可。如果在測試階段發(fā)現(xiàn)問題,則應(yīng)回溯到代碼分析階段,查找分析原因,并通過修改代碼解決問題。

      在測試過程中需要準備測試記錄表,記錄測試人員、測試時間、測試例題及測試結(jié)果等信息,為程序驗收提供見證記錄。

      2.6 驗收階段

      適應(yīng)性維護的軟件產(chǎn)品應(yīng)參照軟件開發(fā)要求進行驗收。驗收由軟件維護人員和軟件使用人員共同參與完成。驗收過程應(yīng)評審程序的功能、相關(guān)文檔是否滿足要求,然后根據(jù)評審結(jié)果確定是否通過驗收,并填寫驗收報告。驗收報告應(yīng)包括以下方面:程序是否在指定的平臺上正常安裝運行、測試例題是否正確運行、交付物是否完整。軟件驗收后,應(yīng)將全部工作產(chǎn)品轉(zhuǎn)入產(chǎn)品庫進行歸檔。

      2.7 交付與過渡階段

      軟件通過驗收后由軟件維護人員部署在目標平臺,供用戶使用,并發(fā)布到相應(yīng)軟件庫中進行管理。此外還應(yīng)組織用戶進行程序的使用培訓。如條件允許應(yīng)為程序提供適用過渡期,在過渡期內(nèi)新舊平臺上的程序均可正常運行,便于用戶對不同平臺的運行過程及結(jié)果進行比較,及時發(fā)現(xiàn)問題。

      3 結(jié)束語

      通過對反應(yīng)堆專業(yè)程序的適應(yīng)性維護過程、工作內(nèi)容進行總結(jié)和分析,并應(yīng)用軟件工程理論和方法,建立了較規(guī)范的工作流程和方法。該項研究成果在國防技術(shù)基礎(chǔ)科研基金項目中開展應(yīng)用,完成了10余個反應(yīng)堆專業(yè)程序的移植,實踐證明可有效降低工作難度,提高工作效率,對提升移植軟件的質(zhì)量也起到了很大的積極作用。

      [1] 張海藩.軟件工程導論[M].3版.北京:清華大學出版社,1998.

      [2] 石柱.軟件工程標準手冊[M].北京:中國標準出版社,2004.

      [3] Pressman R S.軟件工程:實踐者的研究方法[M].鄭人杰,馬素霞,白曉穎,等譯.6版.北京:機械工業(yè)出版社,2007.

      猜你喜歡
      編譯器適應(yīng)性代碼
      谷子引種適應(yīng)性鑒定與篩選初報
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
      健全現(xiàn)代金融體系的適應(yīng)性之“點論”
      中國外匯(2019年23期)2019-05-25 07:06:20
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      大型飛機A380-800在既有跑道起降的適應(yīng)性研究
      固有免疫和適應(yīng)性免疫與慢性丙肝的研究進展
      通用NC代碼編譯器的設(shè)計與實現(xiàn)
      东城区| 舒城县| 长沙县| 台湾省| 富蕴县| 阿尔山市| 永春县| 鲁山县| 连南| 迁安市| 呼和浩特市| 巨野县| 巍山| 轮台县| 柳河县| 大冶市| 华阴市| 慈利县| 谢通门县| 纳雍县| 会理县| 广州市| 甘洛县| 阳山县| 色达县| 黄石市| 洛川县| 阳东县| 酒泉市| 龙山县| 桃源县| 苍山县| 成武县| 昭平县| 汉川市| 丹江口市| 德化县| 沅陵县| 祁门县| 浪卡子县| 南投市|