《係統分析與設計方法及實踐》一1.1 什麼是軟件
1.1 什麼是軟件
軟件分析與設計的主旨是以工程化的思想進行軟件開發,以便生產出高質量和高效率的軟件係統,即軟件分析與設計研究的基礎就是軟件。那麼,軟件是怎麼定義的呢?它有哪些特性呢?
1.1.1 軟件定義與特性
軟件是計算機係統中與硬件係統相對應的部分,包括一係列程序、數據及其相關文檔的集合。在這裏,程序是按照特定順序組織的計算機數據和指令的集合;數據是使程序能正常執行的數據結構;文檔是與程序開發、維護和使用有關的圖文資料。軟件係統的核心是程序,而文檔則是軟件係統不可分割的組成部分。
要理解軟件的真正含義,首先需要了解軟件有哪些特性。人們利用結構化的思想創造出的軟件是邏輯的,而不是有固有形態的實體,所以,軟件具有以下特性:
1)複雜性:軟件是一個龐大的邏輯係統,比任何人類構造的其他產品都複雜,甚至硬件係統的複雜性和軟件係統比起來也是微不足道。軟件主要依靠人腦的“智力”構造出來,多種人為因素使得軟件難以統一化,增加了其複雜性。軟件的複雜性使得軟件難以理解、生產、維護,更難以對生產過程進行管理。
2)一致性:軟件係統必須和運行軟件的硬件係統保持一致,這是由軟件係統對硬件係統的依賴所決定的。如果硬件係統是“現有”的,那麼軟件係統必須與現有硬件係統對接。由於計算機的軟件和硬件是具有功能互換性的,所以也可能出現用軟件係統來替代硬件係統部分功能的情況。
3)抗磨損性:軟件係統的運行周期與一般的器械設備係統截然不同,因為它不存在磨損和老化的問題。事實上,軟件不會磨損,但它卻會退化,因此,軟件在其生命周期中一般都需要進行多次維護。圖1-1給出了軟件係統的理想故障曲線和實際故障曲線。
4)易變性:軟件在生產過程中,甚至在投入運行之後,也可以再改變。軟件必然需要變化,這是軟件的特有屬性。改變軟件往往可以收到改變或者完善係統功能的效果,且比更換硬件係統容易,使得軟件係統易維護、易移植、易複用。但是,修改軟件導致軟件始終在“變”,這種動態的變化不僅難以預測、難以控製,還可能對軟件的質量產生負麵影響。
5)移植性:軟件的運行受計算機係統的影響,不同的計算機係統平台可能會導致軟件無法正常運行,這裏就涉及軟件的可移植性了。好的軟件在設計時就考慮到軟件如何應用到不同的係統平台。
6)高成本性:軟件係統的開發是一個複雜的過程,顯然,軟件係統的成本非常高昂。
1.1.2 軟件的演化
軟件的發展經曆了一個演化的過程,自從20世紀40年代生產出世界上第一台計算機後,伴隨而生的就是程序。縱觀前後的幾十年,軟件的演化大致經曆了4個階段:
1)程序設計階段(第一階段):從1946年到20世紀60年代初,是計算機軟件係統發展的初期,其主要特征是程序生產方式為個體手工方式。
2)程序係統階段(第二階段):從20世紀60年代初到70年代初,軟件工程學科誕生。當時,程序的規模已經很大,需要多人分工協作,程序的開發方式由個體生產發展到了小組生產,其開發與維護費用以驚人的速度增加。因此許多程序係統後來根本不能維護,最終導致了嚴重的軟件危機。
3)軟件工程階段(第三階段):從20世紀70年代中期至80年代中期,軟件工程師把工程化的思想加入軟件係統的開發過程中,用工程化的原則、方法和標準來開發與維護軟件。
4)麵向對象階段(第四階段):從20世紀80年代中期至今,麵向對象的方法學受到了人們的重視,促進了軟件業的飛速發展,軟件產業在世界經濟中已經占有舉足輕重的地位。
隨著計算機的普及,程序的穩健性和易讀性受到了廣泛的關注,於是,程序從個人按自己意圖創造的“藝術品”轉變成了能被廣大用戶接受的“工程化”產品。由於外部環境和用戶需求的不斷變化及軟件開發技術的不斷發展,注定了軟件係統隻有不斷的演化才能適應用戶的新需求。
從整個係統的角度看,開發軟件係統的目的是為了滿足用戶的需求,提高生產率,因此軟件係統的需求仍是軟件發展的動力。早期的程序開發者隻是為了滿足自己的需要,這種自給自足的生產方式仍然是其低級階段的表現。進入軟件工程階段以後,軟件係統的開發具有社會屬性,它要在市場中流通以滿足更多用戶的需要。
軟件演化過程的各個階段也有不同的特征,在這些階段中,軟件係統開發的範圍從隻考慮程序的編寫擴展到涉及整個軟件生命周期。
1.1.3 軟件危機
在軟件技術發展的第二階段,隨著計算機硬件技術的不斷進步,人們要求軟件能與之相適應。然而軟件技術的進步一直未能滿足提出的要求,導致問題不斷積累,形成了日益尖銳的矛盾。這就導致了軟件危機。
這場軟件危機主要表現在:軟件係統的規模越來越大,複雜度不斷增加,軟件係統的需求量也日益增大,且價格昂貴,供需差日益增大。而軟件係統的開發過程是一種高密集度的腦力勞動,軟件係統開發常常受挫,質量差,很難按照指定的進度表來完成指定的任務,軟件係統的研製過程很難管理,往往失去控製。軟件係統開發的模式及技術已經不能適應軟件係統發展的需要,因此導致大量低質量的軟件湧向市場,部分軟件花費了大量的人力、財力,有的軟件係統甚至在開發過程中就夭折了。例如,倫敦股票交易係統當初預算4.5億英鎊,後來追加到7.5億英鎊,曆時五年,但最終還是失敗,導致倫敦股票市場聲譽下跌。我們稱軟件開發和維護過程中所遇到的這種嚴重問題為軟件危機。
1.1.4 軟件危機的解決途徑
在軟件危機相當嚴重的背景下,軟件工程產生了。在引入工程化的思想後,人們總結了出現軟件危機的原因並提出了相應的解決對策。
在軟件開發的初期階段,需求提得不夠明確,或是未能得到確切的表達。開發工作開始後,軟件開發人員和用戶又未能及時交換意見,造成開發後期矛盾的集中暴露。如果前期的需求分析不到位,認為軟件的開發僅僅是編寫程序,很有可能導致後期開發的軟件達不到客戶的要求,並進一步導致軟件的二次開發。
需求分析後,要做好軟件定義時期的工作,這樣可以在一定程度上降低軟件開發的成本,同時又在無形中提高了軟件的質量,畢竟軟件是一種商品,提高質量是軟件開發過程中的重中之重。
開發過程要有統一的、公認的方法論和規範指導,參加的人員必須按照規定的方法論進行開發。重視設計和實現過程的資料,不要忽視每個人的工作與其他人的接口,以便後期能夠較好地進行軟件的維護工作。由於軟件是邏輯部件,開發階段的質量較難衡量,開發過程管理和控製同樣不易實現,這就需要開發人員必須有統一的軟件開發理論來指導。
軟件工程師必須在測試階段做好充分的檢測工作,提交給客戶高質量的軟件。要借鑒軟件開發的經驗,積累與軟件開發有關的數據,確保開發工作按時完成。
最後更新:2017-08-17 14:32:40
上一篇:
Java 9 中的 9 個新特性你知道嗎
下一篇:
《機器人編程實戰》一一1.1 定義機器人的7個標準
puts 和 printf %s【gets 和 %s姐妹篇】
java 快速開發平台 二次開發 項目利器 springmvc SSM後台框架源碼
Android 自定義控件開發入門(一)
WCF技術剖析之十一:異步操作在WCF中的應用(上篇)
統計分析SQL Server Profiler 跟蹤的SQL
.NET三層架構解析
Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
《麵向機器智能的TensorFlow實踐》TensorFlow與機器學習基礎
驚心動魄!程序員們說這些時刻再也不想經曆了
軟件大會分享PPT:麵向開發和DBA的Oracle 12c新特性