天天看點

《系統分析與設計方法及實踐》一1.1 什麼是軟體

軟體分析與設計的主旨是以工程化的思想進行軟體開發,以便生産出高品質和高效率的軟體系統,即軟體分析與設計研究的基礎就是軟體。那麼,軟體是怎麼定義的呢?它有哪些特性呢?

軟體是計算機系統中與硬體系統相對應的部分,包括一系列程式、資料及其相關文檔的集合。在這裡,程式是按照特定順序組織的計算機資料和指令的集合;資料是使程式能正常執行的資料結構;文檔是與程式開發、維護和使用有關的圖文資料。軟體系統的核心是程式,而文檔則是軟體系統不可分割的組成部分。

《系統分析與設計方法及實踐》一1.1 什麼是軟體

要了解軟體的真正含義,首先需要了解軟體有哪些特性。人們利用結構化的思想創造出的軟體是邏輯的,而不是有固有形态的實體,是以,軟體具有以下特性:

1)複雜性:軟體是一個龐大的邏輯系統,比任何人類構造的其他産品都複雜,甚至硬體系統的複雜性和軟體系統比起來也是微不足道。軟體主要依靠人腦的“智力”構造出來,多種人為因素使得軟體難以統一化,增加了其複雜性。軟體的複雜性使得軟體難以了解、生産、維護,更難以對生産過程進行管理。

2)一緻性:軟體系統必須和運作軟體的硬體系統保持一緻,這是由軟體系統對硬體系統的依賴所決定的。如果硬體系統是“現有”的,那麼軟體系統必須與現有硬體系統對接。由于計算機的軟體和硬體是具有功能互換性的,是以也可能出現用軟體系統來替代硬體系統部分功能的情況。

3)抗磨損性:軟體系統的運作周期與一般的器械裝置系統截然不同,因為它不存在磨損和老化的問題。事實上,軟體不會磨損,但它卻會退化,是以,軟體在其生命周期中一般都需要進行多次維護。圖1-1給出了軟體系統的理想故障曲線和實際故障曲線。

4)易變性:軟體在生産過程中,甚至在投入運作之後,也可以再改變。軟體必然需要變化,這是軟體的特有屬性。改變軟體往往可以收到改變或者完善系統功能的效果,且比更換硬體系統容易,使得軟體系統易維護、易移植、易複用。但是,修改軟體導緻軟體始終在“變”,這種動态的變化不僅難以預測、難以控制,還可能對軟體的品質産生負面影響。

5)移植性:軟體的運作受計算機系統的影響,不同的計算機系統平台可能會導緻軟體無法正常運作,這裡就涉及軟體的可移植性了。好的軟體在設計時就考慮到軟體如何應用到不同的系統平台。

6)高成本性:軟體系統的開發是一個複雜的過程,顯然,軟體系統的成本非常高昂。

軟體的發展經曆了一個演化的過程,自從20世紀40年代生産出世界上第一台計算機後,伴随而生的就是程式。縱觀前後的幾十年,軟體的演化大緻經曆了4個階段:

1)程式設計階段(第一階段):從1946年到20世紀60年代初,是計算機軟體系統發展的初期,其主要特征是程式生産方式為個體手工方式。

2)程式系統階段(第二階段):從20世紀60年代初到70年代初,軟體工程學科誕生。當時,程式的規模已經很大,需要多人分工協作,程式的開發方式由個體生産發展到了小組生産,其開發與維護費用以驚人的速度增加。是以許多程式系統後來根本不能維護,最終導緻了嚴重的軟體危機。

3)軟體工程階段(第三階段):從20世紀70年代中期至80年代中期,軟體工程師把工程化的思想加入軟體系統的開發過程中,用工程化的原則、方法和标準來開發與維護軟體。

4)面向對象階段(第四階段):從20世紀80年代中期至今,面向對象的方法學受到了人們的重視,促進了軟體業的飛速發展,軟體産業在世界經濟中已經占有舉足輕重的地位。

随着計算機的普及,程式的穩健性和易讀性受到了廣泛的關注,于是,程式從個人按自己意圖創造的“藝術品”轉變成了能被廣大使用者接受的“工程化”産品。由于外部環境和使用者需求的不斷變化及軟體開發技術的不斷發展,注定了軟體系統隻有不斷的演化才能适應使用者的新需求。

從整個系統的角度看,開發軟體系統的目的是為了滿足使用者的需求,提高生産率,是以軟體系統的需求仍是軟體發展的動力。早期的程式開發者隻是為了滿足自己的需要,這種自給自足的生産方式仍然是其低級階段的表現。進入軟體工程階段以後,軟體系統的開發具有社會屬性,它要在市場中流通以滿足更多使用者的需要。

軟體演化過程的各個階段也有不同的特征,在這些階段中,軟體系統開發的範圍從隻考慮程式的編寫擴充到涉及整個軟體生命周期。

在軟體技術發展的第二階段,随着計算機硬體技術的不斷進步,人們要求軟體能與之相适應。然而軟體技術的進步一直未能滿足提出的要求,導緻問題不斷積累,形成了日益尖銳的沖突。這就導緻了軟體危機。

這場軟體危機主要表現在:軟體系統的規模越來越大,複雜度不斷增加,軟體系統的需求量也日益增大,且價格昂貴,供需差日益增大。而軟體系統的開發過程是一種高密集度的腦力勞動,軟體系統開發常常受挫,品質差,很難按照指定的進度表來完成指定的任務,軟體系統的研制過程很難管理,往往失去控制。軟體系統開發的模式及技術已經不能适應軟體系統發展的需要,是以導緻大量低品質的軟體湧向市場,部分軟體花費了大量的人力、财力,有的軟體系統甚至在開發過程中就夭折了。例如,倫敦股票交易系統當初預算4.5億英鎊,後來追加到7.5億英鎊,曆時五年,但最終還是失敗,導緻倫敦股票市場聲譽下跌。我們稱軟體開發和維護過程中所遇到的這種嚴重問題為軟體危機。

在軟體危機相當嚴重的背景下,軟體工程産生了。在引入工程化的思想後,人們總結了出現軟體危機的原因并提出了相應的解決對策。

在軟體開發的初期階段,需求提得不夠明确,或是未能得到确切的表達。開發工作開始後,軟體開發人員和使用者又未能及時交換意見,造成開發後期沖突的集中暴露。如果前期的需求分析不到位,認為軟體的開發僅僅是編寫程式,很有可能導緻後期開發的軟體達不到客戶的要求,并進一步導緻軟體的二次開發。

需求分析後,要做好軟體定義時期的工作,這樣可以在一定程度上降低軟體開發的成本,同時又在無形中提高了軟體的品質,畢竟軟體是一種商品,提高品質是軟體開發過程中的重中之重。

開發過程要有統一的、公認的方法論和規範指導,參加的人員必須按照規定的方法論進行開發。重視設計和實作過程的資料,不要忽視每個人的工作與其他人的接口,以便後期能夠較好地進行軟體的維護工作。由于軟體是邏輯部件,開發階段的品質較難衡量,開發過程管理和控制同樣不易實作,這就需要開發人員必須有統一的軟體開發理論來指導。

軟體工程師必須在測試階段做好充分的檢測工作,送出給客戶高品質的軟體。要借鑒軟體開發的經驗,積累與軟體開發有關的資料,確定開發工作按時完成。