很多企業已經建立了許多龐大的計算機管理系統,而且將不斷地推出新的系統。滿足經營的需求須不斷維護、改造計算機系統,但同時又要不影響現行生產,所以必須建立一整套機制來評價、控制和完成對系統的維護。在軟件維護過程中,提出程序與文檔合一的概念在軟件開發的同時建立動態文檔。
程序與文檔合一概念的提出
一、目前軟件的狀況
程序與文檔的形式分離,不僅是用各自獨立的形式存放,而且使用不同的工具在不同的時間里書寫和檢索。維護程序時不能方便地得到文檔的幫助,不能同步修改文檔。
程序與文檔的內容分離,由于程序與文檔采用不同的描述,既有計算機語言也有自然語言。維護過程中不能及時、一致地更新文檔或程序,使文檔不能準確地描述程序而幾乎成為廢紙甚至帶來負面價值。
軟件開發與維護的分離,絕大多數軟件在設計、開發時不太考慮以后可能的修改,加大了軟件維護的難度,而且使維護容易引入新的錯誤。
這些分離也表現在設計、開發的不同階段的文檔之間的不相容性,例如:需求分析說明書是紙上的東西,在概要設計階段不能很好地繼承、利用需求分析說明書,設計、編制概要設計時必須從零開始,需要重新分析、理解需求分析,這種思維上的脫節,不僅延緩開發進度、加重設計人員的負擔,而且由于理解上的不同導致不同階段描述的對象有許多不相容情況。這些分離使得文檔在系統的設計、開發、維護中的作用下降,這也是很多軟件人員不愿意編寫文檔的主要原因。
二、程序與文檔合一的概念提出
怎樣才是好的文檔系統呢?應當具備以下屬性:
1. 能夠準確地描述軟件、并且簡單易懂;
2. 能夠迅速錯誤定位、影響分析、修正設計;
3. 能夠提高軟件維護質量;
4. 能夠方便程序修改時理解程序。
為此提出了程序與文檔合一的概念。這概念使軟件成為真正意義上的軟件:程序+文檔,程序就是文檔,文檔集成在程序中。它要求在選擇開發環境時不僅要考慮環境對設計、開發的完美支持,而且要考慮對維護、文檔的支持;它要求軟件人員在設計、開發過程中要考慮維護問題、文檔問題;它要求程序與文檔存儲在同一位置、同一系統中;它要求使用相同工具進行程序與文檔的書寫、檢索;它要求在編寫和維護程序的同時形成文檔,在書寫文檔時編寫、維護程序。程序與文檔合一的概念不僅存在于系統的設計、開發階段而且存在于系統的維護階段,它貫穿軟件的生命周期。
動態文檔系統是建立在程序與文檔合一的概念基礎上的、文檔與程序一致的、簡單易懂的聯機文檔系統。它包括構件說明與數據描述、對構件與構件之間、構件與數據之間的關系進行的描述。動態文檔系統是提高了文檔的可用性、易用性和連貫性,使文檔更加有效,是解決維護問題的有效途徑。
動態文檔系統問題分析
需要解決的問題是:軟件文檔的內容劃分與獲取、文檔的存儲與維護、文檔的檢索、軟件文檔的生成打印。
一、軟件文檔的內容劃分成:語義文檔、結構文檔、過程文檔
語義文檔是對軟件的功能、概念、總體設計、流程、規約等用自然語言的描述,是軟件人員根據規范在使用CASE工具編寫并填入程序的文檔,它也是為更全面的解釋文檔而靈活加入的額外信息。
結構文檔是在軟件設計工具、開發環境中對象的屬性、構件間接口、構件間引用關系、軟件的結構等的描述。利用詞法、語法分析程序對整個系統的對象、構件進行識別、分析,獲取上述描述并形成表格文件。
過程文檔是對軟件的設計、編碼、維護過程中形成的過程描述和程序注釋,如設計目的、設計人、時間等說明,利用開發環境對軟件人員在設計、開發、維護過程中操作的記錄形成操作跟蹤。
二、程序與文檔的統一存儲與維護
根據程序與文檔合一的概念和文檔從程序中提取的要求,文檔必須存放在程序中,甚至文檔固有的源代碼中。結構如此的程序源代碼的存儲必須采用一種新技術—對象倉儲(Repository)技術,而不能采用流式文件,這樣才能使程序與文檔既結合又分離。程序與文檔結合在一個對象倉儲中,結合在統一的開發環境中;結合在修改代碼時可以同時修改文檔、修改文檔時可以同時人工檢查和修改程序,并在多次文檔生成而不會丟失手工輸入的文檔。程序與文檔應當分別存放在對象倉儲中的不同表或不同的字段中,在編譯與運行時分離。
三、文檔的檢索
對單個對象、構件文檔的檢索方式是若于文檔存放在一個對象倉儲中,它可以隨源代碼一起檢索和維護。這種檢索給分析和維護單個構件、對象提供文檔支持。建立多種視圖、編寫程序對整個系統進行文檔的檢索和獲取,完成對整個系統的分析,對整個系統進行實時文檔支持。這將在例子中較詳細的描述。
四、軟件文檔的生成打印
編寫程序檢索和獲取整個系統的文檔,按照國家軟件標準的文檔式樣建立文檔模板并將按模板生成文檔和利用文字處理軟件強大的功能進行創建、編輯文檔并打印。
根據上述分析,文檔分布和獲取對開發環境提出了要求:開發環境應該是設計工具、開發工具的集成,應該基于CASE技術、對象倉儲技術、構件技術、OLE技術。基于CASE技術的開發環境;設計、開發、維護過程中形成的文檔并植入程序代碼中,使文檔成為程序的一部分。基于對象倉儲技術的開發環境,將文檔與程序統一存儲在對象倉儲中方便檢索。基于構件技術的開發環境,便于識別、獲取構件,分析、形成結構文檔和過程文檔。基于OLE等技術使文檔可以很好地利用Word等文檔處理軟件。
動態文檔系統的一個應用實例
廣州電信科技開發有限公司自行設計、開發的名為九七系統的龐大的電信管理計算機系統自1997年投產驗收后,將長期用于生產,維護工作非常重要和緊迫。這為動態文檔系統提供了需求和試驗場所。在長期維護的過程中,體會到好文檔的重要性并提出了程序文檔合一的概念,這為動態文檔系統提供了理論基礎。九七系統是使用Uniface開發環境。這種開發環境采用了CASE技術、對象倉儲技術、構件技術,這為動態文檔系統提供了技術支撐。
一、廣州電信動態文檔系統的建立步驟
1. 理解Uniface、Oracle工具的開發環境,規劃語義文檔在各級對象中存放的表與字段,并根據工具的特性制定填寫的規則。
2. 尋找結構文檔、過程文檔在Uniface、Oracle工具中存放的表與字段。
3. 在設計、開發和維護軟件的過程中對這些表或字段按照規則進行填寫。
4. 建立一整套模板使文檔結構與信息源建立映像,包括:數據字典模板、設計文檔模板、結構文檔模板、開發過程文檔模板等。
5. 將這些模板組裝成文檔系統,并使它獨立于開發目標系統。
廣州電信動態文檔系統的組成可以分為文檔查詢、維護記錄查詢、文檔生成。
文檔查詢不僅包括構件說明與數據描述,而且包括對構件與數據之間的關系的描述,是實時的聯機文檔查詢系統。維護記錄查詢是對軟件維護過程中的各個環節進程進行記錄與追蹤,用于規范維護工作。它包括問題報告、問題分析、錯誤定位、維護設計、維護執行、確認測試、維護評審、維護提交、問題跟蹤等。文檔生成則是根據需要實時生成軟件設計說明書。
二、程序與文檔合一概念與動態文檔系統的意義
廣州電信動態文檔系統的基本任務是輔助錯誤定位、維護影響分析、記錄維護進程、生成文檔。使用Uniface的開發環境開發的,可以安裝在用Uniface開發的不同的應用系統中。該系統已經在九七計費系統的維護中發揮重要作用。
它推崇的程序與文檔合一的概念,提出文檔就是程序,程序就是文檔的思路,文檔融合在程序中的構思并已實現,這一概念指導了軟件人員進行有效地工作。合一的概念貫穿了設計、開發、維護整個軟件周期,保證了文檔之間的繼承性和一致性,在設計、開發每一階段是繼承前階段的程序和文檔的結果。這樣極大地消除了程序與文檔、文檔與文檔之間的不一致性,加快了軟件設計進度,提高了軟件開發、維護的質量。它是軟件工程在具體應用中的一種嘗試,它從程序文檔合一的角度出發,進一步規范軟件設計、開發、維護。程序文檔合一的概念為軟件開發環境發展提供了一種思路;設計更好的對象倉儲來滿足開發、維護人員對程序文檔合一的概念的需求。
動態文檔系統的局限與發展
廣州電信動態文檔系統有很大的局限性,只能用于Uniface或Oracle開發的系統中。目前的廣州電信動態文檔系統的構件的識別與獲取主要依賴開發工具提供的構件和構件的特征進行識別的。這種動態文檔系統難以在一些3GL工具—未使用對象倉儲技術、構件技術開發的軟件—中實現程序與文檔的合一與分離。大型軟件系統的環境是復雜的,往往采用了多種開發環境,如何對其他開發環境進行支持還要進行技術探討和實踐上的摸索。
另一個局限問題是目前的動態文檔系統描述的是程序文檔,其主要在編碼、維護的過程中進行建設,系統進入維護階段使用。如何使動態文檔系統不僅對軟件維護階段進行支持,而且對軟件的設計、開發階段進行更多的支持?一種可能的解決途徑是將軟件復用技術拓寬到包括文檔復用,包括程序復用、程序文檔復用和設計文檔復用,而且將動態文檔系統建立在基于這種軟件復用系統之上。