『壹』 軟體工程有哪些原則
1、量兩次,切一次(Measure twice and cut once)
如果你只能從這篇文章中學到一個原則且最重要的一個,那麼就是這個。 開發人員,架構師和經理人經常因為個人情緒、以及其他問題而難以集中注意力。
就工程師來說,這個原則意味著選擇正確的解決方案,選擇正確的方法來解決問題,選擇正確的工具來解決問題,對建立的解決方案必須充滿信心。
選擇這里意味著投入一些思考,找到必要的資源,組建合適的團隊,思考設計,思考方法,設定任務,控制結果,並為此承擔責任。 這就是「活在當下」。 我認為我自己還沒有準備好用正確的詞彙來描述它。
2、不要重復自己(Don't Repeat Yourself)
這是一個相當簡單但非常有用的原則,它說在不同的地方重復同樣的事情是非常糟糕的。 首先,它涉及到進一步支持和修改代碼的必要性。 如果某個代碼片段在程序中的幾個地方被復制,那麼很有可能出現兩種災難性的情況:
當對源代碼進行哪怕是很小的改動時,您需要在幾個地方更改相同的代碼。 這需要額外的時間、精力和注意力,而這件事件通常也非常不容易。
第一項緊隨第二項。 團隊中的其他開發人員可能會意外地錯過其中一個更改(只合並了控制系統中的分支) ,並將面對應用程序中隨後出現的一系列錯誤。 這些 bug 可能會讓您感到沮喪,因為您已經聽說這樣的 bug 似乎已經被修復了。
在這方面,有一個建議ーー如果在清單中發現任何代碼超過兩次,則應以單獨的方式來處置。 這是通用做法。 事實上,即使再次遇到重復的bug,您也應該考慮創建一個單獨的方法。
3、奧卡姆剃刀(Occam』s Razor)
這是一個非常普遍的想法,它來自於哲學編程。 這個原則得名於奧克姆的英國修道士威廉。 這一原則表明: 」沒有必要,不得增加實體」。
在工程學中,這一原則被解釋為: 沒有必要創建不必要的實體。 因此,首先考慮添加另一個方法 / 類 / 工具 / 流程等的好處不見得總是一個好主意。 畢竟,如果您添加了另一個方法 / 類 / 工具 / 流程等等,除了增加復雜性之外,您沒有得到任何其他好處,那還有什麼意義呢?
4、保持足夠簡單(Keep It Simple Stupid )
這是一個與上面非常類似的原則,但它的含義略有不同。 這個原則要求代碼必須盡可能簡單,不能有復雜的結構,否則會使代碼的調試和維護復雜化。
此外,對於另一個程序員來說,理解代碼的邏輯將會更加困難,這反過來也將需要額外的時間和精力。 這就是為什麼您應該始終嘗試使用簡單的構造來盡可能多地解決問題,而不需要使用大量的分支、深層嵌套和過度重載的類結構。
通過這樣做,你將使自己和同事的生活更加輕松,因為復雜性會產生錯誤。 記住 Peter Hintiens 說過的話: 「簡單永遠比功能好」。
5、你不會需要它(You Aren』t Gonna Need It )
這是許多程序員都會遇到的問題。 從項目一開始就希望立即實現所有必要的(有時甚至是不必要的)功能。 也就是說,當開發人員從一開始就將所有可能的方法添加到類中並實現它們時,甚至可能在未來永遠不會使用它們。
因此,根據這個建議,首先,只實現您需要的東西,然後,如果必要的話,再擴展相應功能。 這樣,您就可以節省調試代碼的工作量、時間以及精力,而實際上這些代碼卻並不需要。
『貳』 成教〈軟體工程〉復習題答案,高分求救,謝謝大家(三)
軟體工程復習題
四、簡答題 1、可行性研究的任務是什麼? 首先需要進行概要的分析研究,初步確定項目的規模和目標,確定項目的約束和限制,把他們清楚地列舉出來。然後,分析員進行簡要的需求分析,抽象出該項目的邏輯結構,建立邏輯模型。從邏輯模型出發,經過壓縮的設計,探索出若干種可供選擇的主要解決方法,對每種解決方法都要研究它的可行性,可從以下三個方面分析研究每種解決方法的可行性。一技術可行性:對要開發項目的功能、性能、限制條件進行分析,確定在現有的資源條件下,技術風險有多大,項目是否能實現。二經濟可行性:進行開發成本的估算以及了解取得效益的評估,確定要開發的項目是否值得投資開發。三社會可行性:要開發的項目是否存在任何侵犯、妨礙等責任問題,要開發項目的運行方式在用戶組織內是否行得通,現有管理制度、人員素質、操作方式是否可行。 2、什麼是模塊的影響范圍?什麼是模塊的控制范圍?他們之間應該建立什麼關系? 一個模塊的作用范圍(或稱影響范圍)指受該模塊內一個判定影響的所有模塊的集合。一個模塊的控制范圍指模塊本身以及其所有下屬模塊(直接或間接從屬於它的模塊)的集合。一個模塊的作用范圍應在其控制范圍之內,且判定所在的模塊應在其影響的模塊在層次上盡量靠近。如果再設計過程中,發現模塊作用范圍不在其控制范圍之內,可以用「上移判點」或「下移受判斷影響的模塊,將它下移到判斷所在模塊的控制范圍內」的方法加以改進。 3、需求分析階段的基本任務是什麼?需求分析階段的基本任務是要准確的定義新系統的目標,為了滿足用戶需要,回答系統必須「做什麼」的問題。本階段要進行以下幾方面的工作:一問題識別。雙方確定對問題的綜合需求,這些需求包括:功能需求、性能需求、環境需求、用戶界面需求,另外還有可靠性、安全性、保密性、可移植性、可維護性等方面的需求。二分析與綜合,導出軟體的邏輯模型。分析人員對獲取的需求,進行一致性的分析檢查,在分析、綜合中逐步細化軟體功能,劃分成各個子功能。這里也包括對數據域進行分解,並分配到各個子功能上,以確定系統的構成及主要成份,並用圖文結合的形式,建立起新系統的邏輯模型。三編寫文檔。編寫「需求規格說明書」、編寫初步用戶使用手冊、編寫確認測試計劃、修改完善軟體開發計劃。 4、採用黑盒技術設計測試用例有哪幾種方法?這些方法各有什麼特點? 一等價類劃分。 等價類劃分是將輸入數據域按有效的或無效的(也稱合理的或不合理的)劃分成若干個等價類,測試每個等價類的代表值就等於對該類其它值的測試。 二邊界值分析。 該方法是將測試邊界情況作為重點目標,選取正好等於,剛剛大於或剛剛小於邊界值的情況,根據這些情況選擇測試用例。 三錯誤推測。 錯誤推測法沒有確定的步驟,憑檢驗進行。它的基本思想是列出程序中可能發生錯誤的情況,根據這些情況選擇測試用例。 四因果圖。 因果圖能有效的檢測輸入條件的各種組合可能會引起的錯誤。因果圖的基本原理是通過畫因果圖,把用自然語言描述的功能說明轉換為判定表,最後為判定表的每一列設計一個測試用例。 5、什麼是數據流圖?其作用是什麼?其中的基本符號各表示什麼含義?數據流圖簡稱DFD,是SA方法中用於表示系統邏輯模型的一種工具。它以圖形的方式描述數據在系統中流動和處理的過程,由於它只反映系統必須完成的邏輯功能,所以它是一種功能模型。數據流圖有四種基本圖形符號:「→」箭頭表示數據流;「○」圓或橢圓表述加工;「=」雙杠表示數據存儲;「」方框表示數據的源點或終點。 6、說明動態建模的過程。一準備腳本。動態分析從尋找事件開始,然後確定各對象的可能事件的順序。在分析階段不考慮演算法的執行,演算法是實現模型的一部分。二確定事件。確定所有外部事件。事件包括所有來自或發往用戶的信息、外部設備的信號、輸入、轉換和動作。三準備事件跟蹤表。把腳本表示成一個事件跟蹤表,對象為表中的列,給每一個對象分配一個獨立的列。四構造狀態圖。對各對象類建立狀態圖,反映對象接收和發送的事件,每個事件跟蹤都對應於狀態圖中一條路徑。 7、軟體維護的特點是什麼?主要體現在三個方面:<1>非結構化維護和結構化維護。軟體的開發過程對軟體的維護有很大的影響。若不採用軟體工程的方法開發軟體,則軟體只有程序而無文檔,維護工作非常困難,這是一種非結構化的維護。若採用軟體工程的方法開發軟體,則各階段都有相應的文檔,容易進行維護工作,這是一種結構化的維護。<2>維護的困難性。軟體維護的困難性是由於軟體需求分析和開發方法的缺陷。軟體生存周期中的開發階段沒有嚴格而有科學的管理和規劃,就會引起軟體運行時的維護困難。<3>軟體維護的費用。軟體維護的費用在總費用中的比重是在不斷增加的,這是軟體維護有形的代價。另外還有無形的代價,即要佔用更多的資源。軟體維護費用增加的主要原因是軟體維護的生產率非常低。 8、請說明軟體文檔的作用?軟體開發項目生存期各階段都包含哪些文檔?軟體文檔的作用是:提高軟體開發過程的能見度;提高開發效率;作為開發人員階段工作成果和結束標志;記錄開發過程的有關信息便於使用與維護;提供軟體運行、維護和培訓有關資料;便於用戶了解軟體功能、性能。軟體開發項目生存期各階段應包括得文檔以及與各類人員的關系如下:可行性研究報告、項目開發計劃、軟體需求說明書、數據要求說明書、測試計劃、概要設計說明書、詳細設計說明書、用戶手冊、操作手冊、測試分析報告、開發進度月報、項目開發總結、程序維護手冊(維護修改建議)。 9、什麼是確認測試?該階段有哪些工作?確認測試又稱有效性測試。它的任務是檢查軟體的功能與性能是否與需求規格說明書中確定的指標相符合。確認測試階段有兩項工作,進行確認測試與軟體配置審查。<1>確認測試一般是在模擬環境中運用黑盒測試方法,由專門測試人員和用戶參加的測試。<2>軟體配置審查的任務是檢查軟體的所有文檔資料的完整性、正確性。如果發現遺漏和錯誤,應補充和改正,同時要編排好目錄,為以後的軟體維護工作奠定基礎。 10、在劃分軟體生存周期階段時,應遵循的基本原則是什麼? 軟體生存周期的各個階段有不同的劃分。軟體規模、種類、開發方式、開發環境以及開發使用方法都影響軟體生存周期的劃分。在劃分軟體生存周期階段時,應遵循的一條基本原則是各階段的任務應盡可能相對獨立,同一階段各項目任務的性質盡可能相同,從而降低每個階段任軟體工程復習題
四、簡答題 1、可行性研究的任務是什麼? 首先需要進行概要的分析研究,初步確定項目的規模和目標,確定項目的約束和限制,把他們清楚地列舉出來。然後,分析員進行簡要的需求分析,抽象出該項目的邏輯結構,建立邏輯模型。從邏輯模型出發,經過壓縮的設計,探索出若干種可供選擇的主要解決方法,對每種解決方法都要研究它的可行性,可從以下三個方面分析研究每種解決方法的可行性。一技術可行性:對要開發項目的功能、性能、限制條件進行分析,確定在現有的資源條件下,技術風險有多大,項目是否能實現。二經濟可行性:進行開發成本的估算以及了解取得效益的評估,確定要開發的項目是否值得投資開發。三社會可行性:要開發的項目是否存在任何侵犯、妨礙等責任問題,要開發項目的運行方式在用戶組織內是否行得通,現有管理制度、人員素質、操作方式是否可行。 2、什麼是模塊的影響范圍?什麼是模塊的控制范圍?他們之間應該建立什麼關系? 一個模塊的作用范圍(或稱影響范圍)指受該模塊內一個判定影響的所有模塊的集合。一個模塊的控制范圍指模塊本身以及其所有下屬模塊(直接或間接從屬於它的模塊)的集合。一個模塊的作用范圍應在其控制范圍之內,且判定所在的模塊應在其影響的模塊在層次上盡量靠近。如果再設計過程中,發現模塊作用范圍不在其控制范圍之內,可以用「上移判點」或「下移受判斷影響的模塊,將它下移到判斷所在模塊的控制范圍內」的方法加以改進。 3、需求分析階段的基本任務是什麼?需求分析階段的基本任務是要准確的定義新系統的目標,為了滿足用戶需要,回答系統必須「做什麼」的問題。本階段要進行以下幾方面的工作:一問題識別。雙方確定對問題的綜合需求,這些需求包括:功能需求、性能需求、環境需求、用戶界面需求,另外還有可靠性、安全性、保密性、可移植性、可維護性等方面的需求。二分析與綜合,導出軟體的邏輯模型。分析人員對獲取的需求,進行一致性的分析檢查,在分析、綜合中逐步細化軟體功能,劃分成各個子功能。這里也包括對數據域進行分解,並分配到各個子功能上,以確定系統的構成及主要成份,並用圖文結合的形式,建立起新系統的邏輯模型。三編寫文檔。編寫「需求規格說明書」、編寫初步用戶使用手冊、編寫確認測試計劃、修改完善軟體開發計劃。 4、採用黑盒技術設計測試用例有哪幾種方法?這些方法各有什麼特點? 一等價類劃分。 等價類劃分是將輸入數據域按有效的或無效的(也稱合理的或不合理的)劃分成若干個等價類,測試每個等價類的代表值就等於對該類其它值的測試。 二邊界值分析。 該方法是將測試邊界情況作為重點目標,選取正好等於,剛剛大於或剛剛小於邊界值的情況,根據這些情況選擇測試用例。 三錯誤推測。 錯誤推測法沒有確定的步驟,憑檢驗進行。它的基本思想是列出程序中可能發生錯誤的情況,根據這些情況選擇測試用例。 四因果圖。 因果圖能有效的檢測輸入條件的各種組合可能會引起的錯誤。因果圖的基本原理是通過畫因果圖,把用自然語言描述的功能說明轉換為判定表,最後為判定表的每一列設計一個測試用例。 5、什麼是數據流圖?其作用是什麼?其中的基本符號各表示什麼含義?數據流圖簡稱DFD,是SA方法中用於表示系統邏輯模型的一種工具。它以圖形的方式描述數據在系統中流動和處理的過程,由於它只反映系統必須完成的邏輯功能,所以它是一種功能模型。數據流圖有四種基本圖形符號:「→」箭頭表示數據流;「○」圓或橢圓表述加工;「=」雙杠表示數據存儲;「」方框表示數據的源點或終點。 6、說明動態建模的過程。一準備腳本。動態分析從尋找事件開始,然後確定各對象的可能事件的順序。在分析階段不考慮演算法的執行,演算法是實現模型的一部分。二確定事件。確定所有外部事件。事件包括所有來自或發往用戶的信息、外部設備的信號、輸入、轉換和動作。三準備事件跟蹤表。把腳本表示成一個事件跟蹤表,對象為表中的列,給每一個對象分配一個獨立的列。四構造狀態圖。對各對象類建立狀態圖,反映對象接收和發送的事件,每個事件跟蹤都對應於狀態圖中一條路徑。 7、軟體維護的特點是什麼?主要體現在三個方面:<1>非結構化維護和結構化維護。軟體的開發過程對軟體的維護有很大的影響。若不採用軟體工程的方法開發軟體,則軟體只有程序而無文檔,維護工作非常困難,這是一種非結構化的維護。若採用軟體工程的方法開發軟體,則各階段都有相應的文檔,容易進行維護工作,這是一種結構化的維護。<2>維護的困難性。軟體維護的困難性是由於軟體需求分析和開發方法的缺陷。軟體生存周期中的開發階段沒有嚴格而有科學的管理和規劃,就會引起軟體運行時的維護困難。<3>軟體維護的費用。軟體維護的費用在總費用中的比重是在不斷增加的,這是軟體維護有形的代價。另外還有無形的代價,即要佔用更多的資源。軟體維護費用增加的主要原因是軟體維護的生產率非常低。 8、請說明軟體文檔的作用?軟體開發項目生存期各階段都包含哪些文檔?軟體文檔的作用是:提高軟體開發過程的能見度;提高開發效率;作為開發人員階段工作成果和結束標志;記錄開發過程的有關信息便於使用與維護;提供軟體運行、維護和培訓有關資料;便於用戶了解軟體功能、性能。軟體開發項目生存期各階段應包括得文檔以及與各類人員的關系如下:可行性研究報告、項目開發計劃、軟體需求說明書、數據要求說明書、測試計劃、概要設計說明書、詳細設計說明書、用戶手冊、操作手冊、測試分析報告、開發進度月報、項目開發總結、程序維護手冊(維護修改建議)。 9、什麼是確認測試?該階段有哪些工作?確認測試又稱有效性測試。它的任務是檢查軟體的功能與性能是否與需求規格說明書中確定的指標相符合。確認測試階段有兩項工作,進行確認測試與軟體配置審查。<1>確認測試一般是在模擬環境中運用黑盒測試方法,由專門測試人員和用戶參加的測試。<2>軟體配置審查的任務是檢查軟體的所有文檔資料的完整性、正確性。如果發現遺漏和錯誤,應補充和改正,同時要編排好目錄,為以後的軟體維護工作奠定基礎。 10、在劃分軟體生存周期階段時,應遵循的基本原則是什麼? 軟體生存周期的各個階段有不同的劃分。軟體規模、種類、開發方式、開發環境以及開發使用方法都影響軟體生存周期的劃分。在劃分軟體生存周期階段時,應遵循的一條基本原則是各階段的任務應盡可能相對獨立,同一階段各項目任務的性質盡可能相同,從而降低每個階務的復雜程度,簡化不同階段之間的聯系,有利於軟體項目開發的組織管理。
『叄』 軟體工程
自己的學到的 自己做啊!
不要總是依賴別人!不然你以後會後悔的!
『肆』 Therac-25案例的情況簡介
二、事故情況簡介
Therac 25一共售出了11台,5台配置在美國,6台在加拿大,1985年至1987年共發生了6次放射劑量大規模超標的嚴重事故,全部設備於1987年召回。對原設計方案作了重大修改,其中包括安裝防止軟體錯誤發生的硬體保護裝置。下面是這6次事件中的4個事件:
1、1985年6月,一名61歲的婦女,到Marietta 的Kennestone 腫瘤中心接受鎖骨部位的10兆電子伏特電子射線照射,治療中病人感到炙熱和疼痛,大聲喊叫,醫生Tim Still無法解釋,懷疑與過量輻射有關,並與AECL電話聯系。AECL工程師答復稱設備沒有發生超劑量的可能。隨後病人提出訴訟,病人由於遭受嚴重的燒傷,肩部和手臂被切除,但是訴訟也因為證據不足不能立案。
2、1985年7月,一個40歲女性子宮頸癌患者,在加拿大安大略 Hamilton接受Therac 25治療,治療劑量為200拉德,治療過程中機器停機,顯示出現出現『HTILT』錯誤。同時控制台顯示『No dose』(無劑量)和治療暫停,於是操作人員按鍵盤恢復繼續運行,同樣錯誤再次發生,在發生5次之後,機器進入懸掛狀態,進行了重啟動的操作。病人當時反應有強烈燒灼感和電擊麻刺感。該病人在5個月後死亡。據以後的分析,該病人在治療過程中實際受到15000拉德的輻射,對人體而言,輻射劑量達到1000拉德就已經是致命的了。
3、1986年3月,一個男性背部腫瘤患者,在美國東得克薩斯ETCC泰勒醫院接受Therac 25治療,治療模式為電子射線,劑量為180拉德,面積為10厘米×17厘米,操作人員對設備操作十分熟悉,迅速敲擊鍵盤,輸入相關數據,發現模式顯示為X(X射線),於是更改為E(電子射線),啟動機器,機器很快停機,顯示『Malfunction 54』,這個信息的含義在說明書中沒有明確定義,其解釋是能量已發射,可能過低或過高。控制台顯示為劑量過低,操作人員於是進行了恢復和重啟動的操作,這時治療艙內的病人已無法忍受,跳下床敲門,治療被迫終止。5個月後該病人死亡,據分析該病人接受了16000至25000 拉德的輻射。
4、1986年4月在上述事件發生三周之後,美國東得克薩斯ETCC為一個男性面部皮膚癌患者作Therac 25電子射線治療,劑量為180拉德,仍然由相同的操作人員操作,事件發生過程幾乎與上例完全相同,病人劇痛大聲叫喊。由於腦部受損,20天後死亡,據分析該病人接受了25000拉德的輻射。
三、故障診斷
放射治療議在美國從20世紀60年代開始使用以來,一直沒有發生過重大的事故,所以無論是患者、醫院或製造商,對於可能發生超劑量輻射事故毫無思想准備。1985年第一件事故發生並由患者提出訴訟後,設備製造方AECL完全否認故障出現的可能,由於廠方和醫院都缺乏必要的記錄,FDA完全無從著手調查。
1985年7月, Hamilton事故發生後,FDA督促AECL進行調查,AECL雖無法重現事故場景,他們已經開始懷疑事故可能是旋轉台固定位置微開關的瞬時故障引發,微開關的瞬時故障又追溯至軟體輸入數據錯誤。AECL為此作出了相應的改進,並通知醫院和FDA,聲稱:「分析表明新方案的風險率比舊方案降低了5個數量級」。
1986年美國東得克薩斯泰勒醫院連續兩次發生事故後,在操作人員和醫生的共同努力下,終於發現Therac 25的控制系統可能存在重大隱患。
1、Therac 25的軟體控制系統
從Therac 6開始,設備已經使用了計算機軟體控制,但是其主要控制功能由硬體電路承擔,軟體只起輔助作用。在設計Therac20和Therac25時,開發商聲稱,計算機控制系統是獨立設計的。實際上由於對Therac 6控制軟體的信任,這兩台設備都重用了Therac 6的主要控制軟體。
Therac 25的軟體控制系統的特徵是:
1)按定製的任務優先次序,循環運行。即「任務」按關鍵度順序執行,關鍵度高的任務,先於關鍵度低的任務執行。除了test & set (測試和設置)外,沒有其他同步運行的任務。
2)軟體由四個部件構成,分別是:
數據存儲:機器設置和病人治療數據;
中斷處理;
關鍵任務:檢測數據輸入、讀入編碼數據,查找運行參數,調用子程序,設置激勵機器彎曲的磁鐵(有8秒鍾的延遲),循環或延遲直至磁鐵設置完成,在設置治療時,執行治療;
非關鍵任務:由鍵盤處理,包括文字輸入,2數位共享數據變數編碼,在數據輸入完畢後樹立旗標。
2、泰勒醫院1986年4月Therac 25 事故場景的重現
ETCC泰勒醫院1986年4月Therac 25 事故發生後,ETCC立即停止Therac 25工作,並通知AECL。ETCC的醫生立即對事故進行了仔細的調查。由於機器的女操作員能夠確切記憶事故發生時設備實際操作過程,經過一段時間的努力,終於使錯誤信息『Malfunction 54 』信息得以重現。他們發現,在機器的編輯階段,數據的輸入速度是該錯誤出現的關鍵因素,也就是說,對於一個熟練的操作人員,在重復同樣的操作千百次之後,編輯速度越來越快,最終將使『Malfunction 54 』信息出現,即超劑量輻射事故發生。參加實驗的醫生是在經過了相當長的實踐後達到了臨界的編輯速度。次日對結果感到迷惑的AECL工程師來到現場,直到他在醫生和操作人員的訓練下使『Malfunction 54 』信息再次出現時,才接受了醫院的看法,並測量這時的輻射劑量已經達到飽和的25000拉德。
得到這個消息的美國芝加哥大學聯合輻射中心的醫生在他們的教學設備Therac 20上進行了實驗,兩個月後醫生們觀察到在學生實驗中經常出現保險絲燒毀和繼電器斷路的事件,經分析其實質與Therac 25故障完全相同,但是由於有硬體電路的保護,沒有造成任何嚴重的影響。
有了這一系列的實驗結果,Therac 25故障的原因最終得到確認。故障並不僅是由於一般的軟體錯誤造成,故障的根本原因是系統總體安全設計的問題。
四、教訓
事故原因確定後,所有的Therac 25停止使用,召回,重新修改設計,安裝硬體保護裝置。此後管理層、工程界、學術界進行了長時間的討論,對事故的教訓進行了探討,這個過程一直持續到90年代中期,各界人士觀點見仁見智。其中美國著名的安全性工程專家Leveson對事故的總結和認識最具系統性和代表性,本文的下述部分引用了她得出的一些主要結論。
1、任何事故的發生,很少是單純的,通常包含在諸多相互關聯事件構成的一個復雜網路中,涉及諸如技術、人文、組織等因素。這次導致Therac 25多次事故發生的重要原因在於沒有非常明確的證據的條件下,就確信事故的原因已經查明,例如將Hamilton事故中的微型開關作為事故的主要原因,並且忽略了對其他各種可能的相關因素的分析。另外一個錯誤的假定是認為,改正了一個軟體錯誤,就會預防事故今後發生,實際上軟體故障總是一個接一個地不斷暴露。
事故原因也經常被簡單地歸結為人為錯誤,其實,事故涉及的任何因素都可以貼上人為錯誤的標簽,甚至硬體的損耗失效也可以歸結為設計人員沒有提供必要的冗餘以及操作人員疏於維護和置換,將一個事故僅僅歸結為人為錯誤是沒有幫助的和無意義的
同樣無意義的是將事故的原因歸結為計算機錯誤和軟體錯誤。Therac 25 事故中的軟體確實存在問題,但它只是其中的一個因素,如果我們認為軟體是Therac 25事故的根本原因,那麼我們不得不得出結論,在今後為了預防類似的事故,必須構造出完美無缺的軟體,在任何環境中它不會出現非預期的工作方式,這顯然是不可能實現的。除此之外只好在所有系統中都不使用軟體。很明顯所有上述論點都過分悲觀。
我們必須用系統工程的觀點,從復雜系統事故的角度來分析面對的問題。對於Therac 25事故,涉及的因素包括:
管理缺位,缺乏確定的程序跟蹤所有報告的事故;
對軟體過分信任,已至刪除了所有的硬體互鎖裝置,使軟體成為可引發事故的單點失效;
低水平的軟體工程實踐;
不實際的風險評估和過分信賴評估的結果。
完全同樣的事故,今後不大可能重復發生,如果我們研究和改善與事故有關的各種因素,那麼就有可能預防類似的錯誤發生。
2、必須強調系統工程。在本案例中和其他工程發生的事故中,一個共同的錯誤在於對軟體過分信任。非軟體的專業人士似乎認為軟體是不會失效的,從而過分依賴計算機控制功能。其實軟體雖然不會發生如同硬體一樣的損耗失效,但是軟體的設計錯誤更難於發現和消除。硬體的失效模式一般是有限的,所以構建保護機構比較容易,從Therac 25得到的教訓是在實施計算機控制時不要刪除標準的硬體互鎖裝置。
硬體備份、互鎖和其他的安全保護器件,在許多不同的系統中現在已經被軟體置換,其中包括商用飛機、核電站和武器系統。在硬體互鎖裝置存在的地方,他們也常被軟體控制。在設計危險系統時,如果認為一個故障就足以導致嚴重事故,那就違反了系統工程的基本原理。軟體需要作為一個單獨的元件來處理,軟體不應該單獨承擔安全的職能,在系統設計中,必須避免單個軟體錯誤或軟體工程錯誤就足以造成災難性後果。
當前工程界的另外一個趨勢是忽略軟體,Therac 25的第一次安全分析,沒有包括軟體(雖然軟體幾乎承擔了全部的安全性責任),當問題出現後,分析者又將注意力完全集中在硬體上。調查軟體可能的影響不應成為事故分析的最後一個環節,事實上軟體錯誤可以導致硬體的瞬時故障,因為軟體給被控制的硬體發布指令。
在Therac 25 中,病人的反應成為衡量輻射程度的唯一實際指示。Therac 25完全依賴操作人員,沒有獨立的機構檢查操作是否正確,而機器本身也不能檢測大劑量輻射是否發生。Therac 25的離子室不能掌握高密度的電子束,在它們飽和的時候,顯示的是低輻射劑量。
任何一家公司在建造安全關鍵系統的時,應該進行核查實驗,一旦發現問題的任何線索,應該有既定的事故分析程序,醫生Tim Still 的第一個電話就應該促使Kennestone和AECL進行廣泛調查,第一件訴訟就應該立即啟動應急反應程序。每一個使用危險設備的企業都應該有危險記錄和跟蹤,同時使事故的報告和分析成為其質量控制過程的一部分,這不僅有助於事故的預防,而且可以降低保險費率,並在訴訟發生後提供背景資料。
最後,過分依賴安全性分析的數字結果是不明智的,在Hamilton事故發生、微開關故障改進後宣稱安全性提高了5個數量級是無法驗證的。
3、軟體工程不容忽視。Therac 25中包括了軟體編碼錯誤,這個問題在其他與計算機相關的一般事故中是少見的。一般計算機錯誤主要涉及需求、環境條件和系統狀態等。雖然實施軟體工程不能完全消除軟體中的錯誤,但是可以極大地減少錯誤。許多公司在他們的系統中使用軟體,但是並不象軟體工程師那樣嚴肅對待,下述軟體工程的基本原則在Therac 25中受到明顯的破壞:
·編制軟體文檔不應是一種事後行為;
·應該建立軟體質量保證體系和標准;
·應保持設計簡單性;
·如何得到錯誤信息,例如軟體核查試驗,應該從軟體設計開始時就制訂出方案;
·軟體應該在模塊級和軟體級進行廣泛的測試和分析,僅進行系統測試是不正確的;
·安全性必須構造入軟體系統,任何安全關鍵軟體項目必須包括特殊的安全性分析和設計程序,此外不管軟體錯誤是否存在,系統級安全性必須得到確切的保證。Therac 20 包含有導致泰勒事件的同樣軟體錯誤,但是硬體的互鎖消除了故障的後果。
在這里,我們還能夠獲得有關軟體重用的重要教訓。一般傾向認為重用軟體或使用商用現成軟體可以增加安全性,原因是該軟體已經廣泛使用過。其實重用軟體模塊並不能保證新系統的安全性,有時甚至會成為危險設計。安全性是系統的一個質量屬性,不完全等同於軟體質量,重新編寫新的軟體使其更加清楚、更加簡單,在許多情況下才能更加安全。
一個人學習了一門編程課程,在微機上編寫過程序,並不表明他已經具有開發安全關鍵軟體的能力。從事安全關鍵軟體開發需要進行專門的培訓。任何一個工程師都不能自動具備軟體工程師的能力。
用戶界面在Therac 25事件中受到了某種程度的關注,實際上它在這次事件中只有部分影響,雖然軟體的界面和這個軟體的其他部分一樣,存在改進的餘地。軟體工程師需要接受更多的界面設計培訓,從人-機工程的角度需要更多的數據輸入。必須著重指出在用戶友好界面和安全性方面存在著潛在沖突。用戶界面設計的一個目的是盡可能方便操作者使用,但是在Therac 25軟體中,操作的簡單性是以犧牲系統安全性為代價的。最後不僅在初始設計中必須考慮軟體和軟體界面的安全性,而且需要記錄決策理由,使得以後的變更有依據可查。
『伍』 軟體工程題
這個誰給你做啊~~~~~~~~
『陸』 軟體工程詳細設計實例
1.0概述 這部分提供對整個設計文檔的概述。描述了所有數據,結構,介面和軟體構件級別的設計。 1.1 目標和對象 描述軟體對象的所有目標。 1.2 陳述范圍 軟體描述。主要輸入,過程功能,輸出的描述,不考慮詳細細節。 1.3 軟體內容 軟體被置於商業或者產品線中,討論相關的戰略問題。目的是讓讀者能夠對「宏圖」有所了解。 1.4 主要系統參數 任何商務軟體或者產品線都包含軟體規定、設計、實現和測試的說明和規范。 2.0 數據設計 描述所有數據結構包括內部變數,全局變數和臨時數據結構。 2.1 內部軟體數據結構 描述軟體內部的構件之間的數據傳輸的結構。 2.2 全局數據結構 描述主要部分的數據結構。 2.3 臨時數據結構 為臨時應用而生成的文件的描述。 2.4 資料庫描述 作為應用程序的一部分,描述資料庫結構。 3.0 結構化和構件級別設計 描述程序結構。 3.1 程序結構 詳細描述應用程序所選定的程序結構。 3.1.1 結構圖 圖形化描述結構。 3.1.2 選擇性 討論其它可供考慮的結構。選定3.1.1中結構類型的原因。 3.2 構件描述 詳細描述結構中的每個軟體構件。 3.2.1 構件過程敘述(PSPEC) 描述構件的過程。 3.2.2 構件介面描述 詳細描述構件的輸入和輸出。 3.2.3 構件執行細節 每個構件的詳細演算描述。 3.2.3.1 介面描述 3.2.3.2 演算模型(e.g., PDL) 3.2.3.3 規范/限制 ]3.2.3.4 本地數據結構 3.2.3.5 在3.2.3.6設計中包含的執行結果 3.3 軟體介面描述 軟體對外界的介面描述 3.3.1機器對外介面 與其他機器或者設備的介面描述。 3.3.2系統對外介面 對其它系統、產品和網路的介面描述。 3.3.3與人的介面 概述軟體與任何人的界面。 4.0 用戶界面設計 描述軟體的用戶界面設計。 4.1 描述用戶界面 詳細描述用戶界面,包括屏幕顯示圖標、圖片或者類型。 4.1.1 屏幕圖片 從用戶角度描述界面。 4.1.2 對象和操作 所有屏幕對象和操作的定義。 4.2 界面設計規范 用戶界面的設計和實現的規范和標准。 4.3 可見構件 實現的GUI可見構件說明。 4.4 UIDS描述 用戶界面開發系統描述。 5.0約束、限制和系統參數 會影響軟體的規格說明、設計和實現的特殊事件。 6.0測試標准 測試策略和預備測試用例描述。 6.1 測試的類別 規定實施測試的類別,包括盡量詳細的描述。這里是針對黑盒測試現象的描述。 6.2期待軟體反饋 測試期待的結果描述。 6.3執行界線 特殊執行需要的說明。 6.4 重要構件確認 決定性構件或者需要特殊注意的構件的測試確認。 7.0附錄 設計說明的補充信息。 7.1系統可跟蹤矩陣 一個定期回歸系統規格跟蹤軟體需求的矩陣。 7.2 產品戰略 如果規格說明書是為一個產品設計的,描述相關的產品戰略。 7.3 使用分析演算法 描述所有分析活動所使用到的分析演算法。 7.4 補充信息 (如果有需要特別說明的)
『柒』 關於"銀行儲蓄管理系統"的軟體設計,請高手幫幫忙吧
【設計題目】:儲戶的存款單或取款單由業務員輸入系統,密碼由儲戶輸入。如果是存款,系統記錄帳號,存款人姓名,地址,存款類型,存款日期,利息等信息;如果是取款,計算利息,並列印利息清單給儲戶。
【設計目的】:通過對銀行儲蓄管理系統的分析,進一步理解和掌握面向對象方法論,尤其是面向對象的三個模型:對象模型、動態模型、功能模型。
【設計條件、軟體工具】:專業的資料庫管理系統,採用面向對象的方法。
【設計思想、演算法】:用面向對象方法分析上述系統,建立它的對象模型、動態模型、功能模型。
【設計過程,操作步驟說明】:
(一)建立對象模型
1. 確定類—&—對象
經分析本系統問題域及功能需求,得出主要的類—&—對象:總行、分行、營業廳(儲蓄所)終端、儲戶、帳戶、業務員、事務。
2. 確定關聯
(1) 總行由若干個分行組成;分行擁有一個營業廳、若干個儲蓄所;
(2) 分行僱用業務員;
(3) 儲戶擁有一個或多個帳戶;
(4) 分行處理針對帳戶的事務;分行維護帳戶;
(5) 業務員輸入針對帳戶的事務;
(6) 終端與用戶交互;
(7) 終端列印帳單;
3. 對象模型
(二)建立動態模型
1. 正常情況腳本(取款)
業務員將儲戶所填寫資料輸入儲蓄所終端;
終端要求儲戶輸入密碼;儲戶輸入對應帳號的正確密碼;
終端要求總行驗證密碼;總行要求分行核對儲戶密碼,然後通知終端密碼正確;
終端確認取款額在預先規定的限額內,然後要求決行處理這個事務;
總行把請求轉給分行;分行成功地處理完這項事務並返回該帳戶的新余額;
終端列印存摺和帳單;
業務員與儲戶交接現金、存摺和帳單。
異常情況腳本(取款)
業務員將儲戶所填寫資料輸入儲蓄所終端;
終端要求儲戶輸入密碼;儲戶不小心輸入錯誤密碼;
終端要求總行驗證密碼;總行在向有關分行咨詢後通知終端密碼有錯;
終端顯示「密碼錯」,並請儲戶重新輸入密碼;終端請總行驗證後知這次輸入的密碼正確;
儲戶改變主意不想取款了,業務員敲「取消」鍵;
業務員把存摺、取款單退回給儲戶。
正常情況腳本的事件跟蹤圖
儲戶終端總行分行
業務員輸入儲戶填寫資料
要求密碼
輸入密碼
請求驗證密碼
請求分行驗證密碼
密碼正確
業務員交接現金存摺帳單
儲戶取走現金存摺帳單
結束
(三)建立功能模型
1. 基本系統模型
2. 功能級數據流圖
【設計心得體會】:通過本實驗,使我更清晰地理解了面向對象方法論的分析和設計過程,對三種模型之間的關系更加清楚。通過對系統的對象模型的分析,理解到對象模型確實是三種模型中最重要、最關鍵的,只有對對象模型進行了較透徹的分析,才能清楚地得出其它兩個模型。
『捌』 軟體工程12
這個你可以去搜索嗎,來這里找,會有人跟你畫不,分出得又少
『玖』 軟體工程事件表是什麼
又是你,知識是別人的,還是要裝在自己腦子里才是自己的哈 軟體工程5、什麼是數據流圖?其作用是什麼?其中的基本符號各表示什麼含義?數據流圖