软件工程概述
學習時間
2021-03-15
學習內容
軟件工程概述
概述
軟件是一個抽象化,且不可觸摸的。它不受物質材料的限制,也不受物理定律或者加工過程的制約。但是軟件也正因為它不受自然條件的約束,使得軟件系統變得極為復雜,理解這個過程會很困難,也使得造價和維護的成本高昂。
專業化軟件開發
首先我們先對有關軟件工程的一些問題做一個匯總。
軟件工程的目的是支持專業化的軟件開發。其軟件產品有以下兩類
由軟件開發機構制作,在市場上公開銷售,可以獨立使用。比如微信、QQ、應用市場上的付費軟件等。
受特定客戶委托,由軟件承包商專門為這類客戶開發。比如電子設備控制系統等。
軟件的質量屬性
正確性(Correctness)
系統滿足規格說明和用戶目標的程度,即在預定環境下能正確地完成預期功能的程度。
如軟件有沒有按照需求規格來完成,計算出的結果是否正確,計算結果是否精確。
健壯性/魯棒性(Robustness)
健壯性是指在異常情況下(如硬件發生故障、輸入的數據無效或操作錯誤等),軟件能夠正常運行的能力。
健壯性有兩層含義:一是容錯能力,二是恢復能力。
容錯是指發生異常情況時系統不出錯誤的能力,對于應用于航空航天、武器、金融等領域的這類高風險系統,容錯設計非常重要。
而恢復則是指軟件發生錯誤后(不論死活)重新運行時,能否恢復到沒有發生錯誤前的狀態的能力。
例如:因輸入數據不正確,引起系統異常,這是容錯能力不高引起的健壯性問題;操作系統死機了,重啟后能夠正常使用,說明具有一定恢復能力,具有一定的健壯性;數據庫發生故障后,再次啟動時一般能夠恢復到正常的狀態,恢復能力比較好。
可靠性(Reliability)
軟件系統在一定的時間內無故障運行的能力。
可靠性是一個與時間相關的屬性,指的是在一定環境下,在一定的時間段內,程序不出現故障的概率,因此是一個統計量,通常用平均無故障時間(MTTF, mean-time to fault)來衡量。
可靠性不同于正確性和健壯性,軟件可靠性問題通常是由于設計中沒有料到的異常和測試中沒有暴露的代碼缺陷引起的。
例:由于某個地方數據庫連接沒有釋放,在長時間運行的時候,出現活動的數據庫連接數過多,造成系統越來越慢,甚至系統停止服務。
性能(Performance)
性能是指軟件及時提供相應服務的能力。具體而言,性能包括速度、吞吐量和持續高速性三方面的要求:
速度往往通過平均響應時間來度量;
吞吐量通過單位時間處理的交易數來度量;
持續高速性是指保持高度處理速度的能力。
效率(Efficiency)指軟件對CPU處理能力和存儲能力這兩大類計算機資源的使用效率。效率和性能反映了同一問題的“表”、“里”,性能為“表”,效率為“里”。
如系統運算一個報表,需要很長時間,這就是性能問題。
安全性(Security)
指軟件同時兼顧向合法用戶提供服務,以及阻止非授權使用軟件及資源的能力。
安全性既屬于技術問題又屬于管理問題。一般地,如果黑客為非法入侵花費的代價(考慮時間、費用、風險等多種因素)高于得到的好處,那么這樣的系統就可以認為是安全的。
例:有人可以訪問非授權的資源,這就是安全性問題。
易用性(Usability)
易用性是指用戶使用軟件的容易程度。
軟件的易用性要讓用戶來評價。
例:對于一般用戶而言,Windows的易用性比Linux的高。
可用性(Availability)
指的是產品對用戶來說有效、易學、高效、好記、少錯和令人滿意的程度,即用戶能否用軟件完成他的任務,效率如何,主觀感受怎樣。
ISO 9241-11國際標準對可用性作了如下定義:產品在特定使用環境下為特定用戶用于特定用途時所具有的有效性(effectiveness)、效率(efficiency)和用戶主觀滿意度(satisfaction)。其中:
有效性:用戶完成特定任務和達到特定目標時所具有的正確和完整程度;
效率:用戶完成任務的正確和完整程度與所使用資源(如時間)之間的比率;
滿意度:用戶在使用產品過程中所感受到的主觀滿意和接受程度。
互操作性(Interoperability)
指本軟件與其他系統交換數據和相互調用服務用以協同運作的難易程度。
例:利用Web Service增加軟件的互操作性。
易理解性(Understandability)
理解和使用系統的難易程度。
可擴展性(Extensibility)/靈活性(Flexibility)/適應性(Adaptability)/可伸縮性(Scalability)
反映軟件適應“變化”的能力。調整、修改或改進正在運行的軟件系統以適應新需求、變化了的需求的難易程度。
例:如報銷系統原來不需要總經理審批,現在要改為總經理審批,可擴展性強的系統不需要作太多調整;如用戶和數據量增加時,通過增加服務器來提高系統性能,這樣可伸縮性比較強。
可重用性(Resuability)
重用軟件或其中一部分的難易程度。
可測試性(Testability)
對軟件測試以證明其滿足需求規約的難易程度。
可維護性(Maintainability)
為修改Bug、增加功能、提高質量而診斷并修改軟件的難易程度。
可移植性(Portability)
軟件不經修改或稍加修改就可以運行于不同軟硬件環境的難易程度,主要體現為代碼的可移植性。
軟件工程
軟件工程中系統化的方法也叫做軟件過程,所有的軟件過程都包含4項基本活動:
客戶和工程師定義所要成產的軟件以及對其操作的一些約束。
軟件得以設計和編程實現。
軟件經過檢查,以保證他就是客戶所需要的
軟件隨不同的客戶和變化的市場需求而進行修改。
軟件工程與計算機科學和系統工程的關系
計算機科學研究的是支撐計算機和軟件系統的理論和方法,而軟件工程則研究軟件制作中的實際問題。計算機科學理論通常更適用于相對較小的程序。對于大型的或是復雜的需要用軟件解決的問題,計算機科學的經典理論不可能總是適用的。
系統工程是研究有關復雜系統的開發和進化的方方面面,此類系統中軟件起著重要的作用。系統工程涉及系統部署、策略和過程設計、系統實施,也包括軟件工程。系統工程人員的工作包括系統定義,定義他的總體體系結構,集成各個組件以完成整個系統,較少關注系統各組件(硬件、軟件等)的工程問題。
影響軟件的三個方面
軟件工程的多樣性
? 軟件工程是生產軟件的系統化的方法,它考慮了實際成本、進度、可靠性等問題,以及軟件生產者和消費者的需要。
不同類型的應用系統
? 系統類型邊界是模糊的,同時也可能是交叉的,每種類型軟件有不同的特征,需要不同的軟件工程技術。
軟件工程基本通用方法
使用有管理的和理解了的開發過程進行開發。
可依賴性和性能對所有類型的系統來說都很重要。
理解和管理系統描述和需求是很重要的。
盡可能高效地使用當前存在的資源。
軟件工程和Web
軟件組織的顯著變化導致了以網絡為基礎的系統設計的變化
軟件復用已成為構建基于Web的系統的主要技術。
指定系統的所有需求不切實際。
用戶界面受到Web瀏覽器能力的約束。
軟件工程人員的職業道德
軟件工程人員需要的職業道德
? ACM、IEEE(電氣和電子工程師協會)、和英國計算機協會等組織頒布了職業行為準則或職業道德準則:
總結:
軟件工程是一門涉及軟件生產的各個方面的一門工程學科
軟件產品不僅是程序,還包括相關文檔。軟件產品的基本屬性是可維護性、可靠性、信息安全性、效率及可接受性。
軟件過程包括開發軟件產品過程中的所有活動。軟件過程中的活動主要有:軟件描述、開發、有效驗證和進化。
軟件工程的基本概念普遍適用于所有類型的系統開發。這些基本概念包括軟件過程、可靠性、信息安全性、需求以及復用。
世界上是存在著許多類型的系統。每一種類型的系統的開發都需要一種與之相適應的軟件工程工具和技術。幾乎不存在普適的神奇的軟件設計和實現技術。
軟件工程的基本思想適用于所有的軟件系統。這些基本思想包括有管理的軟件過程、軟件的可依賴性和信息安全性、需求工程和軟件復用。
軟件工程人員對軟件工程行業和整個社會負有責任,不應該只關心技術問題。
職業協會頒布的行為準則規定了一系列協會成員應該遵守的行為標準。
聲明:
本文參考:
總結
- 上一篇: Python爬虫入门:初识爬虫
- 下一篇: JavaFX 的 UI 控件集 Cont