隨著計算機的到來[burk46],50年以來,我們的生活越來越依賴於計算機。計算機革命在更加迅猛的技術革命的推動下快速發展,現在,計算機的軟、硬體已經滲透到現代社會的方方面面。它已經整合到我們的手錶、手機、家用電器、建築、汽車甚至是飛機上。科技需要依靠高效能的硬體和高質量的軟體來取得進步和突破。我們幾乎可以看到,任何行業,汽車、航空、石油、電信、銀行、半導體、製藥,所有這些行業的基礎都是要高度依賴計算機來實現。
過去幾十年來,計算機密集型系統的大小和複雜度也在顯著增加,並且,毫無疑問的,這種趨勢還將持續下去。現代高度複雜的硬體/軟體系統在各種工業中也隨處可見,nasa,國防部、美國聯邦航空管理局、電信行業等,都看得到他們的身影。舉個例子,nasa的太空梭中就有大約500,000行軟體**在執行,而且在地面控制系統中的**還有大約3,500,000行。國際空間站阿爾法,即使在大規模縮減計畫後,想要驅動無數的硬體來完成導航、通訊和實驗功能,預計的軟體**量也在數百萬行。在電信領域,支撐電信運營商的軟體系統多達數百個,**量也數以百萬計。在航空工業領域,幾乎每個被送上天的儀器裝置都有它們自己的微處理器系統和可擴充套件的嵌入式軟體。大量複雜的軟硬體系統也存在於聯邦航空管理局先進的自動化系統中,這是一種新生代的航空控制系統。在我們的辦公室和家裡,如果沒有複雜的作業系統(比如windows)以及很多其他軟體包提供的各種各樣的應用軟體,我們的pc也就無法使用,而這些作業系統和軟體包的軟體**量也在一百萬行~五百萬行的級別。
當今對複雜軟硬體系統的需求增速遠遠超過對軟硬體系統的設計、實現、測試和維護能力。當對軟體的需求和依賴增加時,由軟體失敗導致的危機也會隨之增加。這些軟體失敗導致的問題可能會引起不方便(比如:家電故障),經濟損失(比如:銀行系統停工),甚至是生命代價(比如:飛機或者醫用系統失敗)。不用說,計算機系統的可靠性已經成為我們當代社會的乙個關注點。
在計算機革命中,軟/硬體的發展變得不太均衡:相對硬體來說,軟體有著並不十分穩固的基礎,卻被要求承擔更大的責任。軟體潛在整合特性允許系統設計者考慮更多更加巨集偉的多學科系統,這同時也增加了軟體元件的復用性,這對高度複雜系統設計來說也是非常重要的。然而,和高度發達的硬體技術形成鮮明對比的時,軟體相應的開發手段卻沒有跟上節奏,這體現在質量、生產率、成本以及效能方面。在二十世紀的後幾十年,計算機軟體系統已經成為導致多個系統[gray90]中斷的主要原因。所以,最近文學作品中也充滿了由於軟體導致的各種專案災難的恐怖事件。
軟體失誤也曾導致了一些高知名度專案受損。在nasa的「航海家」專案中,由於專案交付較晚而且deep space network能力被減弱,使得在接近天王星時變得非常危險。多個航天飛行任務也由於硬體、軟體的互動異常而推遲。國防部的專案中,由於軟體的故障,曾經導致afti/f16噴氣式戰鬥機的首飛推遲了一年時間,而且最初計畫的高階模式也沒乙個好使。一些軟體故障也影響到了民用可科學領域。如果不是因為資料分析軟體的「溢位」導致異常資料被過晚發現,南極洲上空的抽菸層空洞會被人們更早的在科學社群注意到。由於行李自動處理軟體的小故障,丹佛國際機場不得不在飛機已經佔滿場地和跑道的情況下停工一年。
更為不幸的是,軟體甚至可以殺人!保有量很大的therac-25放射**儀一直保持著完美的安全記錄,直到軟體導致它複雜的控制系統故障而在1985~2023年[lee92]奪取了好幾位病人的姓名。2023年10月26日,倫敦救護車輔助排程系統在系統安裝後隨即宕機,直接導致了這個每天處理約5000個緊急情況病人轉移排程請求的全球最大的救護車排程系統癱瘓。在高度自動化的航空領域,過去幾年間已經有多起飛機失事事故被認為是由計算機和飛行員之間的誤解導致。在某些情況下,experts擁有軟體責任,因為飛機在異常飛行期間,飛機沒有對飛行員的絕望的各種請求給出恰當的反應[這裡難道說的不是波音737max =。=]。
軟體異常也曾導致過非常嚴重的商業後果。2023年的1月15日,乙個新發布的交換系統軟體故障導致了主運營商的遠距離通訊網路大面積癱瘓,並且在2023年夏天[lee92],另外一系列的本地通話系統停工故障最終也查出是和軟體故障有關。這些嚴重的軟體故障導致上千需要依賴通訊服務來支撐業務的公司損失嚴重。
大量的軟體系統或者軟體包是通過相同或者相似的拷貝形式來進行分發和安裝,這使得這類軟體的故障影響更為廣泛。這就是為什麼連全世界最強大的軟體公司微軟對「殺手級bug」也心懷恐懼的原因,如果這類問題導致了數千萬級別的產品召回,這將使得該公司眾多產品的所有利潤都被輕而易舉的清零。為此,許多軟體公司也發覺到了保障軟體穩定性的成本同設計、實施構成了專案開發的大部分成本,也意識到了對軟體可靠性工程技術的系統方法的強烈需求。我們非常清楚的知道,開發軟體可靠性工程相關的技術對我們計算機工程師、軟體工程師以及多種其他學科的工程師的巨大挑戰,未來幾十年可能也是這種情況。
軟體可靠性工程圍繞著乙個重要的軟體屬性:穩定性。軟體可靠性的定義:在特定時間特定環境下軟體無故障操作的可能性[ansi91]。它是軟體質量的乙個方面,乙個多維的屬性,體現了客戶的對該軟體的滿意程度,例如功能性,可用性,效能,可服務性,容量,可安裝性,可維護性以及文件[grad87,grad92]。不管怎樣,由於軟體的不可靠會導致強大系統失效,甚至像therac-25那樣致命,軟體可靠性已經被普遍視為軟體質量的關鍵要素。進而它也就成了客戶滿意度的乙個潛在組成部分。實際上,在iso-9003中規定的質量指標僅包含了失敗率的描述:「……在最差情況下,應該有對應的指標來描述從使用者視角看到的故障或者缺陷報告……軟體**商應該收集資訊用來衡量軟體產品的質量」(see sec 6.4.1 of [iso91])。
案例1.1用來展示高嚴重故障對使用者滿意度的影響。
在[merce94],開始了一項基於對九個大型軟體專案調查的關於使用者滿意度因子的研究。這些專案都是每天都會用到的為大家提供**業務的電信系統。這項調查要求使用者對系統質量進行評估,評分在0~100之間。每個專案的平均軟體**量在100萬行左右。從收集到的故障報告來看(例如,現場故障報告),圖1.1顯示了被調查專案總體的質量分數,每個點表示高敏感故障報告的個數。
第一章 介紹Solr
章節包含 1.可被搜尋引擎處理的資料的型別 2.通用搜尋引擎使用案例 3.solr的關鍵組成部分 4.為什麼選擇solr 5.功能概要 隨著如社交 雲計算 移動應用 大資料等科技的快速發展,與之而來的計算量也是令人振奮的。其中軟體架構師所要面臨的乙個巨大的挑戰就是要處理來自基於全球龐大的使用者群產生...
第一章 Vue介紹
mvvm是前端檢視層的分層開發思想,主要把每個頁面,分層了m v和vm。其中,vm是mvvm思想的核心,因為vm是m和v之間的排程者 vue的基本 1 doctype html 2 html lang en 34 head 5 meta charset utf 8 6 meta name viewp...
第一章 Nginx介紹
web伺服器的基本功能 基於rest架構風格,以同一資源描述符 uri 或者同一資源定位符 url 作為溝通依據,通過http為瀏覽器等客戶端程式提供各種網路服務。apache的缺點 如果有數以萬計的併發http請求同時訪問,就會導致伺服器上消耗大量記憶體,作業系統核心堆成百上千的apache程序做...