蔡萬豪
摘要:隨著計算機技術的蓬勃發展,對應的計算機軟件系統也變得越來越復雜,這樣也使得軟件系統的可靠性難以得到保證。軟件的可靠性對程序的運行起到著重要的作用,因此應該采取一種措施來保證較高的可靠性。本文簡單地闡述了軟件開發過程中可能出現的可靠性問題與相應的應對措施,以減少系統運行期間產生不必要的損失。
關鍵詞:軟件開發;程序;可靠性;技術分析
1.引言
計算機系統是有硬件和軟件組成,因此計算機系統的可靠性是由硬件可靠性和軟件可靠性綜合決定。軟件可靠性通常是指軟件在一定的條件時間完成預期功能的能力。軟件可靠性問題歸咎于在軟件開發過程中的一些人為不當措施所導致。用來衡量軟件可靠性的概率度量稱為可靠度,對于人們來說,軟件的可靠度越高越好,若軟件可靠度較低,總會給用戶的使用帶來極大的影響。
軟件可靠性與硬件可靠性降低的因素有所不同。硬件可靠性降低往往是因為硬件設備由于外界的物理因素和硬件隨時間推移的耗損導致的。而軟件可靠性是由軟件的開發過程導致的。軟件可靠性降低帶來的危害比較大,往嚴重的說,可靠性降低是有可能帶來像國家機密泄露、核泄漏同等危害事件。因此應該有一種措施來保證較高的可靠性,軟件可靠性測試是一種保證可靠性的方法之一,其中包括軟件設計可靠性目標的確定、軟件可靠性測試的計劃與執行和軟件可靠性測試結果的分析與反饋。通過這種嚴密的測試可以發現軟件產品存在的隱患,因此可以有效降低失效率,避免因軟件可靠性降低所導致的不必要的損失!
因此,從查閱的相關資料指出,計算機的可靠性與軟件開發過程具有密切關系。本文主要闡述在軟件開發的過程中如何通過一些方法使得計算機軟件及整個計算機系統的可靠性有所提高。
2.軟件開發過程
2.1相關定義
軟件開發定義:基于對人們的種種需求,程序員們會將這些需求盡可能的程序化,通過代碼的形式將其實現,這個過程就是所謂的軟件開發。軟件開發一般包括以下6個基本步驟:軟件的需求分析、軟件的概要設計、軟件的詳細設計,軟件的編碼實現、軟件產品的測試和最終的交付使用。
軟件可靠性定義:軟件可靠性是軟件產品在規定的條件下和規定的時間區間完成規定功能的能力。規定的條件是指直接與軟件運行相關的使用該軟件的計算機系統的狀態和軟件的輸入條件,或統稱為軟件運行時的外部輸入條件;規定的時間區間是指軟件的實際運行時間區間;規定功能是指為提供給定的服務,軟件產品所必須具備的功能。
2.2開發過程
(1)需求分析
需求分析是軟件開發整個流程中最為困難的一個步驟。其需要經過系統對用戶進行需求的提取,根據需求建立合適的邏輯模型,再進行需求的驗證。在此步驟中還需編寫《軟件產品需求規格說明書》作為軟件開發過程各項工作的基礎。在說明書編制過程中,就可能有降低計算機可靠性事件發生的風險,在需求分析的過程中,一定會有與相關人員的意見產生矛盾的情況出現,若不能理性地考慮哪方意見更加合理,就會對日后軟件的可靠性產生極大的影響。
(2)概要設計
在進行詳細設計之前,設計者需要對所要開發的軟件系統必要的概要設計,即系統設計。概要設計的內容包括軟件系統的處理流程、軟件系統的組織結構、軟件邏輯模塊劃分、軟件的功能分配、相應的數據結構與接口設計、軟件運行和出錯處理設計等,為后續的軟件詳細設計提供基礎。
(3)詳細設計
詳細設計就是針對系統的各個部分進行設計,并對此部分進行精確描述,以至于設計人員可以用具體的代碼將其實現。詳細設計就好比是樹的每一片葉子,精確描述就像是葉子上的葉脈清晰可見。在高中信息技術課本中的“模塊設計”也是運用這一思想實現的。與概要設計相似的是也要編寫《詳細設計規格說明書》。在高中學習Visual Basic語言時,經常會碰到一些由于未考慮特殊情況而導致程序出錯的問題,在軟件開發設計時也會有這樣的麻煩,從而導致軟件的可靠性降低。
(4)編碼實現
編碼過程就像字面那樣理解,就是將經過上述步驟的需求通過計算機能實現的語言進行編碼,從而在計算機上將需求實現。不過在此選擇何種語言是至關重要的,目前常用的計算機語言有java、c、c++、c#、vb.net、ruby、python、vba、javascrip等,每種語言的編程風格也是不同的,因此,就會出現對于同一需求使用不同編程語言下,所得到軟件產品的可靠度有所不同,這就要求開發者要充分了解計算機編程語言、開發工具的特性,才能選擇較好的軟件開發工具和編程語言,進而保證軟件產品的可靠性。
(5)軟件測試
軟件測試是為了發現蘊含在軟件開發過程中的一些安全隱患。在開展軟件測試時需用到實際的測試用例,即根據軟件設計前的規格說明與測試軟件的工具,并利用特定的測試用例去運行程序,以發現程序錯誤。若測試無誤,便編寫《測試分析報告》。一般來說,測試這一環節是保證軟件可靠性最關鍵的一步。經過測試之后的軟件可靠性會提高,這還是得取決于軟件系統的復雜程度,過于復雜的程序,測試的工程量較大,可能會有測試用例使用錯誤的事情發生,導致軟件的可靠度降低。
(6)交付使用
顧名思義,當一款軟件經過上述步驟被設計出來后,就會由開發商交付給用戶,供其使用。但是交付并不意味著已經結束對這款軟件的開發。對于軟件產品的文件工作,有些文件的編寫工作是需要在程序開發的若干個階段中持續進行,而且開發者們還要對軟件進行維護,發現其中尚未被發現、解決的漏洞,以用來提高軟件的可靠性。
3.軟件可靠性問題與可靠性方法
與軟件可靠性相對的就是硬件的可靠性,造成硬件可靠性較低是由于外界的物理因素和硬件隨時間推移而耗損導致的。借用經典的浴盆曲線來說,可以將硬件的失效分為三個時期“早期”“穩定期”“損耗期”,“早期”失效率高的原因是硬件從廠家生產出來時原來的零部件存在缺陷或者就是零部件或整體受到了外界像撞擊類似的物理因素的影響,使其迅速失效,導致硬件可靠性降低;“耗損期”失效率高的原因便是隨著時間的推移硬件本身就在耗損,達到一定程度后就失效了,從而導致硬件可靠性降低。而軟件原本就不是什么物質實體,它只是一堆代碼,因此軟件可靠性就不會像硬件可靠性那樣有著浴盆曲線。經過上述的軟件開發的過程之后,漏洞暫時并未被發現,軟件具有較好的可靠性,一旦漏洞被發現,這時軟件的可靠性就會降低,失效率升高,若開發商對漏洞進行修復,失效率又會下降,這就是軟件的“測試期”;軟件進入“穩定期”后,每次對軟件的升級均會造成失效率攀升,但最終又會降低,原因就是漏洞被不斷修復;軟件可靠性也有“衰退期”,當人們不再使用此軟件后,潛在的漏洞得不到修復,這也就會使軟件實際的失效率不斷升高,導致軟件實際的可靠性下降。
3.1軟件可靠性問題分析
3.1.1需求分析階段
(1)在進行需求陳述的時候,客戶并不能很明確地表達出自己的需求;
(2)客戶的需求在項目實施過程中不斷地發生變化,導致可靠性降低。
3.1.2軟件設計階段
(1)軟件設計體系死板
在進行軟件開發的過程中,軟件設計體系有時過于死板,體系難以改變,改變單一模塊卻會牽動其他的很多模塊,導致軟件其他模塊同時發生連鎖變動。
(2)軟件設計的脆弱性
軟件設計容易遭到破壞。在設計過程中新增加的功能會破壞之前的許多功能,使得設計整體的可靠性遭到破壞。
(3)不必要的復雜性
在設計階段,很容易產生過度設計的現象,導致大量人力物力的浪費。
3.1.3代碼編寫階段
(1)各個程序員之間各自為營,缺乏合作;
(2)部分工作人員對代碼掌握不熟練,沒能夠達到設計要求;
(3)設計人員之間的工作因缺乏溝通容易產生不必要的重復,在設計階段容易產生晦澀的表達,不易理解。
3.1.4測試階段
(1)在測試階段,員工的態度不夠積極;
(2)軟件實際測試是會受到諸如人力、財力、物力和技術所限制,如人員分配壓力導致人手不夠,這會導致軟件測試的局限。
3.2軟件可靠性技術分析
3.2.1需求分析階段
(1)在項目開始的初期,就要充分了解客戶的需求,確定明確的,向顧客敘述出項目的遠景,包括一些給客戶帶來的好處、出現的可能風險、一些系統所帶的獨有功能,然后讓讀者閱讀,保證雙方理解的一致性。
(2)向客戶方要求出明確的設計過程,并且為每個開發階段設定自己的轉折點,超過轉折點即不允許再改變;在設計即將完成的階段里,不允許非正式改變。
3.2.2軟件設計階段
(1)在設計階段邀請專家參與設計過程,以保證軟件系統的業務構架;
(2)在軟件設計階段,充分考慮開發的前瞻性;提前分配資源,讓測試人員提前參與。
3.2.3代碼編寫階段
(1)讓軟件開發人員互相評審,熟悉不同的工作,從而避免缺乏合作的缺陷;
(2)定期進行能力檢測,加強開發人員的知識培訓與知識共享,提高開發人員水平;
(3)避免直接復制粘貼代碼,一定要堅持設計回溯,對冗余的代碼及時重構,設計人員互相監督檢查;
(4)制定統一規范,保證從代碼到軟件外觀整體風格的統一。
3.2.4測試階段
(1)從員工內心加強重視測試的觀念,但是又不可完全依賴測試區發現問題;
(2)當認識到軟件測試存在局限性,因此一定要結合實際情況進行分階段測試,采用自動化測試手段,增強缺陷發現能力;
(3)建立完善的缺陷跟蹤流程。
4.結論
我國科技進步日新月異,我國的各種設備與產品也朝著高科技化,復雜化的道路上前進。但需要在這樣的大好前景下能注重細節,注重軟件開發的每一步過程,注重軟件可靠性,不要因為細節不足的問題而馬失前蹄,造成不該的損失。
參考文獻:
[1]周端,李小霞,徐陽揚.計算機系統可靠性設計研究[J].計算機與數字工程,2005,33(4):110-112.
[2]謝悅平,王新川.計算機系統可靠性問題的研究[J].河北科技大學學報,2001,22(3):10-13.
[3]高曉寧.計算機軟件可靠性分析及抗不可靠性方法[J].航空計算技術,2003,33(3):73-75.
[4]李永征.淺析計算機軟件可靠性的測試方法[J].軟件,2014(2):90-92.
[5]王潤芳,孫防,李鵬.淺析計算機軟件可靠性設計[J].才智,2011(36):26-27.
[6]劉磊.計算機軟件可靠性測試的具體措施分析[J].計算機光盤軟件與應用,2012(16):72-72.