1 軟件工程基本概念
計算機軟件是包括程序喧笔、數據及相關文檔的完整集合。
軟件的特點包括:
(1)軟件是一種邏輯實體龟再,具有抽象性书闸;
(2)軟件的生產與硬件不同,它沒有明顯的制作過程利凑;
(3)軟件在運行浆劲、使用期間不存在磨損、老化問題哀澈;
(4)軟件的開發(fā)牌借、運行對計算機系統(tǒng)具有依賴性,受計算機系統(tǒng)的限制割按,這導致了軟件移植的問題膨报;
(5)軟件復雜性高,成本昂貴适荣;
(6)軟件開發(fā)涉及諸多的社會因素现柠。
軟件按功能分為應用軟件、系統(tǒng)軟件束凑、支撐軟件(或工具軟件)晒旅。
軟件危機主要表現在成本、質量汪诉、生產率等問題废恋。
軟件工程是應用于計算機軟件的定義谈秫、開發(fā)和維護的一整套方法、工具鱼鼓、文檔拟烫、實踐標準和工序。簡單的說就是使軟件走向工程化迄本。軟件工程的核心思想是把軟件產品看作是一個工程產品來處理硕淑。
軟件工程包括3個要素:方法、工具和過程嘉赎。
軟件工程過程是把軟件轉化為輸出的一組彼此相關的資源活動置媳,包含4種基本活動:
(1)P(plan)——軟件規(guī)格說明;
(2)D(do)——軟件開發(fā)公条;
(3)C(check)——軟件確認拇囊;
(4)A(action)——軟件演進。
軟件生命周期:軟件產品從提出靶橱、實現寥袭、使用維護到停止使用退役的過程。
軟件生命周期分三個階段:軟件定義关霸、軟件開發(fā)传黄、運行維護,
主要活動階段是:
(1)可行性研究與計劃制定队寇;
(2)需求分析膘掰;
(3)軟件設計(概要設計和詳細設計);
(4)軟件實現英上;
(5)軟件測試炭序;
(6)運行和維護。
軟件工程的目標:在給定成本苍日、進度的前提下惭聂,開發(fā)出具有有效性、可靠性相恃、可理解性辜纲、可維護性、可重用性拦耐、可適應性耕腾、可移植性、可追蹤性和可互操作性且滿足用戶需求的產品杀糯。
基本目標:付出較低的開發(fā)成本扫俺;達到要求的軟件功能;取得較好的軟件性能固翰;開發(fā)軟件易于移植狼纬;需要較低的費用羹呵;能按時完成開發(fā),及時交付使用疗琉。
軟件工程的理論和技術性研究的內容主要包括:軟件開發(fā)技術和軟件工程管理冈欢。
軟件開發(fā)技術包括:軟件開發(fā)方法學、開發(fā)過程盈简、開發(fā)工具和軟件工程環(huán)境凑耻。
軟件開發(fā)環(huán)境或軟件工程環(huán)境是指全面支持軟件開發(fā)全過程的軟件工具的集合。
軟件工程管理包括:軟件管理學柠贤、軟件工程經濟學香浩、軟件心理學等內容。
軟件管理學包括人員組織种吸、進度安排弃衍、質量保證、配置管理坚俗、項目計劃等。
軟件工程基本原則:抽象岸裙、信息隱蔽猖败、模塊化、局部化降允、確定性恩闻、一致性、完備性和可驗證性剧董。
2 結構化分析方法
結構化方法的核心和基礎是結構化程序設計理論幢尚。
軟件定義階段中,可行性研究與計劃的制定是確定待開發(fā)目標和總的要求翅楼,給出它的功能尉剩、性能、可靠性以及接口等方面的可能方案毅臊,制定完成開發(fā)的實施計劃理茎。需求分析,對待開發(fā)軟件提出的需求分析并給出詳細的定義管嬉。
需求分析階段的工作:需求獲取皂林,需求分析,編寫需求規(guī)格說明書蚯撩,需求評審础倍。
需求分析方法有:
(1) ? ? ?結構化需求分析方法;
①面向數據結構的Jackson方法(ISD)胎挎;
②面向數據流的結構化分析方法(SA)沟启;
③面向數據結構的結構化數據系統(tǒng)開發(fā)方法(DSSD)忆家;
(2)面向對象的分析的方法(OOA)。
從需求分析建立的模型的特性來分:靜態(tài)分析和動態(tài)分析美浦。
結構化分析方法的實質:著眼于數據流弦赖,自頂向下,逐層分解浦辨,建立系統(tǒng)的處理流程蹬竖,以數據流圖和數據字典為主要工具,建立系統(tǒng)的邏輯模型流酬。
結構化分析的常用工具:數據流圖币厕;數據字典;判定樹芽腾;判定表旦装。
(1)數據流圖(DFD圖):描述數據處理過程的工具,是需求理解的邏輯模型的圖形表示摊滔,它直接支持系統(tǒng)功能建模阴绢。
①加工(轉換)——圓框,輸入數據經加工變換產生的輸出艰躺。
②數據流——箭頭呻袭,沿箭頭方向傳遞數據的通道,一般在旁邊標注數據流名腺兴。
③存儲文件(數據源)——雙橫線左电,表示處理過程中存放各種數據的文件。
④源页响、潭——方框篓足,表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實體闰蚕。
(2)數據字典:對所有與系統(tǒng)相關的數據元素的一個有組織的列表昔榴,以及精確的敦冬、嚴格的定義丧荐,使得用戶和系統(tǒng)分析員對于輸入莫绣、輸出、存儲成分和中間計算結果有共同的理解诗鸭。
數據字典是結構化分析的核心染簇。
(3)判定樹:從問題定義的文字描述中分清哪些是判定的條件,哪些是判定的結論强岸,根據描述材料中的連接詞找出判定條件之間的從屬關系锻弓、并列關系、選擇關系蝌箍,根據它們構造判定樹青灼。
(4)判定表:與判定樹相似暴心,當數據流圖中的加工要依賴于多個邏輯條件的取值,即完成該加工的一組動作是由于某一組條件取值的組合而引發(fā)的杂拨,使用判定表描述比較適宜专普。
軟件需求規(guī)格說明書的特點:①正確性; ②無岐義性弹沽; ③完整性檀夹; ④可驗證性;
⑤一致性策橘; ⑥可理解性炸渡; ⑦可修改性; ⑧可追蹤性丽已。
3 結構化設計方法
軟件設計是確定系統(tǒng)的物理模型蚌堵。
軟件設計是開發(fā)階段最重要的步驟,是將需求準確地轉化為完整的軟件產品或系統(tǒng)的唯一途徑沛婴。系統(tǒng)設計人員和程序設計人員應該在反復理解軟件需求的基礎上吼畏,給出軟件結構、模塊的劃分嘁灯、功能的分配以及處理流程宫仗。
軟件設計的基本目標是用比較抽象概括的方式確定目標系統(tǒng)如何完成預定的任務。
從技術觀點來看旁仿,軟件設計包括軟件結構設計、數據設計孽糖、接口設計枯冈、過程設計。
①結構設計:定義軟件系統(tǒng)各主要部件之間的關系办悟。
②數據設計:將分析時創(chuàng)建的模型轉化為數據結構的定義尘奏。
③接口設計:描述軟件內部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信病蛉。
④過程設計:把系統(tǒng)結構部件轉換成軟件的過程描述炫加。
從工程管理角度來看,軟件設計分兩步:概要設計和詳細設計铺然。
軟件設計的一般過程:軟件設計是一個迭代的過程俗孝;先進行高層次的結構設計;后進行低層次的過程設計魄健;穿插進行數據設計和接口設計赋铝。
軟件設計的基本原理是:(1)抽象; (2)模塊化沽瘦; (3)信息隱蔽革骨; (4)模塊獨立性农尖。
衡量軟件模塊獨立性使用耦合性和內聚性兩個定性的度量標準。
耦合性是模塊見相互連接的緊密程度的度量良哲。耦合程度取決于各個模塊之間接口的復雜程度盛卡、調用方式以及哪些信息通過接口。
內聚性是一個模塊內部各個元素間彼此結合的緊密程度的度量筑凫。
在程序結構中各模塊的內聚性越強滑沧,則耦合性越弱。優(yōu)秀軟件應高內聚漏健,低耦合嚎货,有利于提高模塊的獨立性。
軟件概要設計的基本任務是:
(1)設計軟件系統(tǒng)結構蔫浆;(2)數據結構及數據庫設計殖属;(3)編寫概要設計文檔;(4)概要設計文檔評審瓦盛。
在結構圖中洗显,模塊用一個矩形表示,箭頭表示模塊間的調用關系原环。
可以用帶注釋的箭頭表示模塊調用過程中來回傳遞的信息挠唆。
還可用帶實心圓的箭頭表示傳遞的是控制信息,空心圓箭心表示傳遞的是數據嘱吗。
結構圖的基本形式:基本形式玄组、順序形式、重復形式谒麦、選擇形式俄讹。
結構圖有四種模塊類型:傳入模塊、傳出模塊绕德、變換模塊和協(xié)調模塊患膛。
典型的數據流類型有兩種:變換型和事務型。
變換型系統(tǒng)結構圖由輸入耻蛇、中心變換踪蹬、輸出三部分組成。
事務型數據流的特點是:接受一項事務臣咖,根據事務處理的特點和性質跃捣,選擇分派一個適當的處理單元,然后給出結果亡哄。
詳細設計:是為軟件結構圖中的每一個模塊確定實現算法和局部數據結構枝缔,用某種選定的表達工具表示算法和數據結構的細節(jié)。
常見的過程設計工具有:
圖形工具(程序流程圖(PFD)、N-S圖愿卸、 PAD圖灵临、),表格工具(判定表)趴荸,語言工具(PDL)儒溉。
程序流程圖中:箭頭為控制流、方框為加工步驟发钝、菱形為邏輯條件顿涣。
4 軟件測試
軟件測試定義:使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預期結果與實際結果之間的差別酝豪。
軟件測試的目的:發(fā)現錯誤而執(zhí)行程序的過程涛碑。
軟件測試方法:靜態(tài)測試和動態(tài)測試。
靜態(tài)測試包括代碼檢查孵淘、靜態(tài)結構分析蒲障、代碼質量度量。不實際運行軟件瘫证,主要通過人工進行揉阎。
動態(tài)測試:是基本計算機的測試,主要包括白盒測試方法和黑盒測試方法背捌。
白盒測試:也稱結構測試或邏輯測試毙籽。在程序內部進行,主要用于完成軟件內部操作的驗證毡庆。白盒測試主要考慮內部的邏輯結構坑赡。主要方法有邏輯覆蓋、基本路徑測試么抗。
黑盒測試:也稱功能測試或數據驅動測試垮衷。是在軟件接口處進行,完成功能驗證乖坠。黑盒測試完全不考慮程序內部的邏輯結構和內部特性,只依據程序的需求和功能規(guī)格說明刀闷,檢查程序的功能是否符合它的設計要求熊泵。主要診斷功能不對或遺漏、界面錯誤甸昏、數據結構或外部數據庫訪問錯誤顽分、性能錯誤、初始化和終止條件錯施蜜,用于軟件確認測試卒蘸。主要方法有等價類劃分法、邊界值分析法、錯誤推測法缸沃、因果圖等恰起。
驅動測試相當于被測模塊的主程序,它接收測試數據趾牧,并傳給被測模塊检盼,輸出實際測試結果。
軟件測試過程一般按4個步驟進行:
單元測試翘单、集成測試吨枉、驗收測試(確認測試)和系統(tǒng)測試。
單元測試是對模塊(程序單元)進行哄芜,靜態(tài)動態(tài)均有貌亭,動態(tài)時以白盒為主輔之以黑盒。
集成測試是測試认臊、組裝軟件圃庭。
確認測試的任務是驗證軟件的功能和性能及其他特性是否滿足了需求規(guī)格說明中的各項需求以及軟件配置是否完全正確,先用黑盒美尸。
5 程序的調試
程序調試的任務是診斷和改正程序中的錯誤冤议,主要在開發(fā)階段進行。
程序調試的基本步驟:
(1)錯誤定位师坎;
(2)修改設計和代碼恕酸,以排除錯誤;
(3)進行回歸測試胯陋,防止引進新的錯誤蕊温。
軟件調試可分為靜態(tài)調試和動態(tài)調試。靜態(tài)調試主要是指通過人的思維來分析源程序代碼和排錯遏乔,是主要的設計手段义矛,而動態(tài)調試是輔助靜態(tài)調試。
主要調試方法有:
(1)強行排錯法盟萨;
(2)回溯法凉翻;
(3)原因排除法。
?