作者:admin 時間:2022-07-27
編者薦語:
軟件可靠性越來越受到企業和工程領域朋友的關注。讓我們通過王老師的文章,一起系統地對軟件可靠性做一個了解。
以下文章來源于永恒之地 ,作者徐步陌上行
在《可靠性工程師手冊》一書中,軟件可靠性的內容講得很少,對于沒有基礎的人可能不好理解,結合一些案例講解下,計劃一共5篇文章。
本文目錄:
一、軟件的基本概念
二、軟件的質量特性
三、軟件可靠性定義
四、軟件失效的原因
五、軟件缺陷的形成
六、軟件可靠性與硬件可靠性的區別
一、軟件的基本概念
軟件(software):指一系列按照特定順序組織的計算機數據和指令的集合。
軟件工程:指軟件開發、運行、維護和引退的系統方法。
軟件工程一直以來都缺乏一個統一的定義,很多學者、組織機構都分別給出了自己的定義。
一種比較好理解的定義認為:軟件工程是研究和應用如何以系統性的、規范化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。
軟件工程化:用系統工程方法處理軟件生存期的全部過程。本質是軟件過程工程化,將軟件的生存期過程分階段的劃分規范化,使其有較好的可視性,以便管理和控制,并能不斷改進。
系統工程是為了最好地實現系統的目的,對系統的組成要素、組織結構、信息流、控制機構等進行分析研究的科學方法。
實現軟件工程化之前,開發模式基本是作坊式開發。自編、自導、自演,整個過程別人不了解也無法介入,缺乏技術標準或規范,很少形成文檔。比如我經常寫一些軟件就是這樣。
而軟件工程化,設計、編程和測試分開,遵循有關標準和規范進行,整個過程透明、可控。
二、軟件的質量特性
書上并沒有這部分內容,但我們要做好軟件,還是得了解軟件的質量特性。
ISO/IEC 25010:2011標準中,表述的軟件質量特性模型如下,一共包含了8個特性,分別是功能適應性、性能效率、兼容性、易用性、可靠性、性、維護性、可移植性。每個特性下,又有一些子特性,一共31個子特性。
篇幅原因,每個子特性的具體定義我這里不羅列。我舉一些例子,來理解下大的層面:
功能適用性:軟件能夠正確、完整地實現用戶的需求,提供了相應的功能。
性能效率:在指定條件下,軟件對操作所表現出的時間特性(如響應速度)以及實現某種功能有效利用計算機資源(包括內存大小、CPU占用時間等)的程度。包括軟件執行的快慢,比如Excel,數據量一大就很慢。對資源需求多少,吃多少內存等等。容量,指最大限的滿足要求的程度,比如說12306網站在一秒內處理的最大請求。
兼容性:涉及共存和互操作性,共存要求軟件能給與系統平臺、子系統、第三方軟件等兼容,同時針對化和本地化進行了合適的處理?;ゲ僮餍砸笙到y功能之間的有效對接,涉及API和文件格式等。
兩個及兩個以上軟件進行信息交換,這個叫互操作性,比如我們使用的研發系統和測試系統,它們之間的信息交換。共存性,軟件不能對其他產品有害,比如3Q大戰時,人為的制造不共存,有你沒我,有我沒你。
易用性:對于一個軟件,用戶學習、操作、準備輸入和理解輸出所作努力的程度。主要包括易用好理解,能識別、易學習、好操作、對用戶錯誤進行保護、美觀、可訪問(例如說你有沒有考慮殘疾人怎么使用這個軟件)。說到易用,我就經常吐槽Creo軟件的界面實在是難看至,相比之下,UG就好看很多。
可靠性:不出故障地完成任務,有的容錯能力,出故障時易于恢復。本文第三章節會講到它的定義,這里先不講。
性:要求其數據傳輸和存儲等方面能確保其,包括對用戶身份的認證、對數據進行加密和完整性校驗,所有關鍵性的操作都有記錄(log),能夠審查不同用戶角色所做的操作。
軟件包括如下:保密,數據只能由授權人員訪問;完整,防止未經授權就被修改或訪問;不可抵賴,指能夠證明已經發生過的事情,日后不可抵賴;可審查,另一翻譯為責任,指的是誰的操作,能夠追溯到,比如說網上發帖,能夠通過IP追蹤到背后的人;真實性,比如你說你是個普通應用軟件,通過備案等等確實說明了你不是病毒。
這里我特意提一下,這個定義里的,指的是軟件本身的。由于軟件出bug,導致的整機產品出問題,是整機方面的,要區別一下。
維護性:當一個軟件投入運行應用后,需求發生變化、環境改變或軟件發生錯誤時,進行相應修改所做努力的程度。
簡單來說就是好維護,比如有模塊;可以復用,多個系統可以用;好分析、定位問題,問題找到了好更換。我舉個最簡單的例子,跟圓周率相關的代碼,我們常見的做法是前面先定義圓周率:
#define PI 3.14
后面的計算使用,就直接用PI,當想改變PI值時,只需要修改這里即可,而不是直接寫3.14,導致要修改時后面都得改一遍。這就是一個簡單的體現維護性的例子。
可移植性:把程序從一種硬件配置和(或)軟件系統環境轉移到另一種配置和環境時,需要的工作量多少。有一種定量度量的方法是:用原來程序設計和調試的成本除移植時需用的費用。比如說游戲《仙劍奇俠傳》,一開始只在電腦上,后來被移植到了手機上。
三、軟件可靠性定義
軟件可靠性是指軟件在規定條件下和規定時間內,不引起系統失效的能力。
書上并沒有做出多少解釋,這里我細化一些表述。
規定條件,包含的主要是使用者和使用方式。使用者包含了人、軟硬件環境。使用方式指使用的任務和功能,以及使用的頻度,我在括號里寫了軟件操作剖面。你可以理解為不同角色使用不同功能的頻率,在后面的軟件可靠性測試文章中,我會舉一個例子,使得大家明白軟件操作剖面是個什么意思,這篇文章不講。
時間一般有三種,分別是執行時間、日歷時間和時鐘時間。都什么意思?
執行時間:運行軟件時,計算機系統實際用于執行程序指令的時間。
日歷時間:以年月日計算的編年時間,軟件可能處于工作狀態,也可能不在工作狀態。
時鐘時間:從程序執行開始到程序執行結束完畢所經過的時鐘時間,包括等待時間,其它程序執行的時間,但計算機的停機時間不算在內。
接下來,我們理解幾個概念:
軟件可靠性中常用失誤、缺陷、故障和失效來描述故障的因果關系。那我們首先得搞懂這幾個概念。
失誤(mistake):指可能產生非期望結果的個人行為。一些典型失誤:誤解或遺漏了用戶的需求;軟件設計錯誤,沒有完整的實現軟件需求;程序設計錯誤。
缺陷(defect):指代碼中引起一個或者一個以上故障或失效的錯誤編碼,軟件缺陷是程序所固有的 。一些典型缺陷:數組越界使用;緩沖區溢出;算法實現不正確。
講得緩沖區溢出,多說幾句。緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用軟件中廣泛存在。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統宕機、重新啟動等后果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。
故障(fault):指在軟件運行過程中,缺陷在條件下導致軟件出現錯誤狀態,這種錯誤的狀態如果未被屏蔽,則會發生軟件失效。一些典型故障:資源泄露;遞歸調用(死循環);操作者意外輸入未知命令;在以前沒有考慮的條件下采取的意外路徑等。
失效(failure):指程序操作背離了程序的要求。
軟件故障的因果關系如下:
四、軟件失效的原因
軟件失效,是因為在運行過程中遇到了故障,這些故障的產生有內在和外在原因,可以用下面這個圖幫助理清。
我在上圖已經舉了一些例子。這里再講下一些案例:
例如偶然失誤,在一些需要計時的軟件中,如果我們選用了錯誤的計時,則隨著時間往后,累積誤差會越來越大。
比如我以前想做個水壓監測軟件,需要用到計時,我們對比幾個計時:
Timer控件,控件不能做計時,只能用于粗略計時,而且最小周期不能小于80MS。
GetTickCount()計時,返回從操作系統啟動所經過的毫秒數,返回的是DWORD類型,返回的值代表程序從啟動到如今走過的時間。只到55ms。DWORD類型的最大值為4294967295,折算成天是49.7。也就是說當服務程序連續跑了50天之后,再調用GetTickCount()的時候就會發生溢出。
imeGetTime:函數以毫秒計的系統時間。該時間為從系統開啟算起所經過的時間。
QueryPerformanceCounter,Windows 內部有一個精度非常高的定時器, 精度在微秒級。
RDTSC(Read Time Stamp Counter),直接利用Pentium CPU內部時間戳進行計時的高精度計時手段。由于目前的CPU主頻都非常高,因此這個部件可以達到納秒級的計時精度。(使用起來比較麻煩,且結果返回差值較大)
黑客攻擊案例:CSDN密碼外泄門
這個案例我記得特別清,親身經歷過。2011年12月,CSDN的系統遭到黑客攻擊,600萬用戶的登錄名、密碼及郵箱遭到泄漏。隨后,CSDN“密碼外泄門”持續發酵,天涯、世紀佳緣等網站相繼被曝用戶數據遭泄密。天涯網于12月25日發布致歉信,稱天涯4000萬用戶隱私遭到黑客泄露。
環境異常導致的失效:醫院X射線影響內存丟失
作者為醫院急救設計了一個相關程序,在實驗室運行良好,但是每次在醫院調試都出bug,作者只好到醫院去調試,而且是當著急救病人!??!經過漫長的測試終于發現,是由于醫院使用的X射線導致電腦內存總是丟失幾個 bit 的信息,而導致程序出問題,最終通過把電腦的內存用鉛板隔起來解決!
五、軟件缺陷的形成
軟件缺陷的形成與軟件開發過程各個階段活動都相關,可以簡述如下。
我舉一些實際的例子幫助大家理解:
用戶需求環節出錯:某出口機器,程序寫以50Hz去設計,實際當地使用為60Hz。規格書未明確60Hz要求。
軟件需求分析環節出錯:某需求描述,統計每次出水時間,當累計出水達到10分鐘后,停止出水。此時常溫水、冷水燈保持熄滅狀態,同時此三個按鍵無響應,其他觸摸按鍵可操作。需求不明確,程序員不好理解,理解錯誤。
軟件設計環節出錯:某設備按鍵開機10s后4s無反應,原因是軟件增加開機動畫
4s內不允許操作按鍵,但是計數器放到了開機10s后開始計數。
編碼環節出錯:某機器每周星期循環運行時,星期一不顯示,無法正常自動運行。原因:使用數組時,下標越界,定義了數組tab[7],但實際用到了tab[7];
軟件測試環節出錯:某機器電源鍵關閉電源后制冷功能無法關閉,測試時只關注了電源鍵關閉,顯示已關閉,未關注負載輸出未關閉的問題。
關于軟件測試環節出錯,我認為很大一個原因在測試用例的設計上存在不足。后面我單獨講講測試用例的設計。
開發高可靠的軟件,那就是要在這些環節中都控制好。
六、軟件可靠性與硬件可靠性的區別
軟件具有如下特點:
(1)無形性。產品沒有的形狀,其制作過程的可視性差。
(2)一致性。產品一旦成型后,無論復制多少份,均一致,無散差。
(3)不變性。軟件產品形成后,無論存放和使用多久,只要未經人為改動,就不會變化,不存在老化和損耗問題。
(4)易改進性。軟件產品通常比硬件產品容易改進。
(5)復雜性。軟件的運行路徑通常很多,特別是大型軟件,邏輯組合變化復雜,功能也相對復雜。
以上是本期分享內容,后續再講:軟件可靠性設計、軟件可靠性測試、常見測試用例的設計方法、軟件出問題的一些思考等內容。
以上文章來源于永恒之地 ,作者徐步陌上行
國可RFMEA
與傳統的FMEA分析方法和軟件相比,R-FMEA最大的特點是通過其七步的分析流程, 構建了關聯緊密的FMEA基礎數據關系,即FMEA主模型。通過FMEA主模型,工程人員可以根據需要構建簡單的或者復雜的FMEA分析, 并實現企業知識的積累和快速重用。
國可R-FMEA軟件支持免費在線使用,并保證數據。日前,R-FMEA V4.6已正式發布,歡迎感興趣的朋友在線申請
版權所有© 國可工軟科技有限公司 滬ICP備2020030271號