軟件工程是指按照工程的規律來組織軟件的生產與開發。軟件工程化要求以軟件質量控制為核心,緊緊抓住軟件生產方法、需求分析、軟件設計、軟件生產工具、測試、驗證與確認、評審和管理等8個主要環節(圖1)。
軟件生產方法
軟件是產品。從產品的意義上說,所謂軟件開發應為軟件生產。軟件應采用工程化、結構化和規范化方法進行生產。軟件工程化是指使用軟件工程的理論、技術、要求和管理等來規范軟件開發過程中的全部活動。硬件生產已有一套成熟的工程化方法,軟件要向硬件學習,使軟件硬化,把軟件看作是軟件工廠中的產品。
軟件規范化是指在軟件生存周期中,軟件的生產活動必須嚴格遵循各項軟件規范和標準。經驗證明,沒有規范就沒有產品,也就沒有軟件。執行規范必須動真格。執行規范工作量是大些(工作量主要在文檔、審查、驗證、評審和管理上),但受益卻是明顯的。由于軟件開發過程規范提高了軟件質量,這樣不僅減輕了損失,而且還促進了軟件的生產進度,提高了軟件的生產率。
軟件結構化是指軟件生產過程中采用了結構化分析和結構化設計方法。
軟件需求分析
軟件需求分析的目的是使軟件設計人員和用戶之間進行全面和深入的溝通,以明確用戶所需的究竟是一種什么樣的軟件。需溝通的主要內容有:將要開發的軟件所涉及的概念、定義、目標、指標、功能、控制邏輯、算法、環境、時序、執行過程和特點等。通過需求分析產生的軟件規格說明書是此后軟件設計、調試和測試工作的基礎,是軟件評審、鑒定和驗收的依據之一。因此,需求分析是軟件生產中的一個首要步驟。一份軟件規格說明書的質量優劣,一方面取決于需要分析深入的程度,另一方面取決于系統分析員刻畫軟件需求的正確性、完整性、合理性和一致性達到的程度。
眾所周知,軟件怕修改,更怕需求變更。原因在于:
·軟件修改的工作量大,關鍵軟件的任何修改,必須經歷一個調試、測試、驗證與確認的步驟。
·花費的代價高,經試驗考核過的軟件,又要更改軟件需求,即使是只改了一個參數,也需要對更改的軟件作重復考核。有的實時控制系統一次試驗的代價是相當大的。
·軟件修改的牽涉面廣,往往有牽一發而動全身的問題。尤其是由多個分系統組成的系統 (例如軍事指揮的C3I系統),任何·一項修改均要考慮是否會影響其他的分系統。
軟件可靠性需求分析要求全面、細致和深入。
不難看出,軟件需求分析的過程,也是軟件設計方案的醞釀過程。通過分析應得出用戶需求的正確性、合理性和完整性的結論;同時,也應得出軟件付諸實現的可行性、可靠性和安全性的結論。軟件需求分析的銜接關系見圖2。
軟件設計
軟件也和硬件一樣,它的質量是設計出來的,生產出來的。其中,設計對軟件質量具有關鍵性的影響。設計的重要性可從圖3看出,其中(a)為經歷了設計步驟后的效果,在軟件使用和維修階段,軟件的問題少;反之,(b)為跳過設計步驟,到了使用和維修階段,軟件問題成堆,到了不可收拾的地步;谶@種情況,應強調:軟件設計未完成,不得轉入軟件編碼階段。
良好的軟件設計與所采用的軟件設計方法、設計工具和設計準則有關。軟件設計方法主要有面向數據流的設計、面向對象的設計和面向數據的設計方法等。這些方法均有其優缺點和不同的應用領域。目前,大多數嵌入式的實時控制軟件使用的是面向數據流的設計方法。該方法的目標是以一種全局的軟件觀點和體系結構設計的角度派生出程序結構。
面向數據流的設計又稱為結構化設計。它強調模塊化、層次化和自頂向下等設計思想。這些思想的根本目的是對復雜問題的解決采用一個簡化過程以獲得滿意的答案。通過這種簡化,縱有千頭萬緒也能理得清清楚楚。一個設計準則是要將復雜的問題簡化,切忌將簡單的問題復雜化。好的程序設計語言,無疑對設計高質量的軟件是有益的。例如,Ada語言,與一般語言比較,它所特有的一些語言成分旨在突出軟件可靠性和安全性,便于軟件維護,便于實行程序的層次式管理和提高程序的易讀性、高效性等。
軟件可靠性設計主要將軟件的檢錯、避錯、容錯和異常處理技術灌輸到軟件設計中去,設計時應處處關心:
·控制邏輯的完整性;
·軟件與硬件、軟件與軟件界面之間的協調性;
·人機交互的有效性;
·信息交換的正確性;
·設備控制的安全性;
·時序控制的合理性;
·數學運算中變量定義域的合法性。
軟件生產工具
軟件生產的主要工具是軟件試驗臺(Software Testbed) 或軟件開發平臺。在軟件需求分析的同時,就要考慮到這類軟件開發環境的創造。它應滿足下列要求:
(1)它的組成、結構、性能、功能和工作的方式與狀態,力求與實際系統一致。優點是:
·它與實際系統出現的故障現象是一樣的,便于故障隔離。
·軟件試驗臺與實際系統的軟件可彼此互相復制,便于軟件開發過程交替上升。
·具有互補性,試驗臺有局限性的問題可在實際系統解決;實際系統上有困難的,代價太大的檢測活動可在試驗臺上進行。
(2)配上多媒體工作站,提供軟件測試過程中綜合信息的顯示和生產真實工作環境中的音響效果。
(3)配備實時數據采集器。
(4)能支持實時與非實時兩種運行方式的調試活動。
軟件試驗臺是輔助軟件調試、測試、試驗和驗證的重要工具。在某種程度上可以得出這樣的結論:沒有軟件試驗臺就不能順利地開發出實時控制系統軟件。原因在于:
(1)這類復雜的軟件在實際系統上開發是不可能的,其代價太大,效率太低,效果太差。
(2)軟件開發是個做細致研究、分析和不斷探索的過程,軟件試驗臺能適應這種工作方式。
(3)它是軟件編程、調試、測試、集成和試驗的綜合環境。
(4)它是支持軟件原型化開發方法的重要手段。
一般來說,實時控制系統軟件的第一個原型是在軟件試驗臺上開發出來的。有了軟件原型,就有了與用戶深入討論、分析和確認軟件需求的基礎。實踐證明,經過軟件試驗臺測試通過的軟件,基本上能用于實際實時控制系統的系統聯調、測試、試驗和系統驗收。
文章來源于領測軟件測試網 http://www.kjueaiud.com/