第六章軟件工程_第1頁
第六章軟件工程_第2頁
第六章軟件工程_第3頁
第六章軟件工程_第4頁
第六章軟件工程_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章軟件工程6.1軟件工程概述

6.1.1基本概念*6.1.2生命周期6.2結構化分析與設計方法

6.2.1結構化分析與設計體系結構*6.2.2模塊評價體系6.3測試與調試的基本技術

6.3.1測試

6.3.3調試6.4軟件開發(fā)的新方法

6.4.1原型方法

6.4.2瀑布方法

6.4.3面向對象技術一、軟件工程的基本概念“軟件工程”一詞是1968年北大西洋公約組織的計算機科學家在當時聯(lián)邦德國召開的專門討論解決“軟件危機”的國際會議上正式提出并使用的,并由此誕生了一門新興學科——軟件工程學。“軟件工程學”是一門交叉學科,它涉及計算機科學、管理科學、工程學和數(shù)學。計算機科學培養(yǎng)的是計算機科學家,而軟件工程則是培養(yǎng)軟件工程師。1.什么是軟件工程

軟件工程IEEE定義:軟件工程是以系統(tǒng)的、規(guī)范的、定量的方法應用于軟件的開發(fā)、運營和維護,以及這些方法的研究。軟件工程學:研究軟件開發(fā)和維護的普遍原理與技術的一門工程學科。2.軟件工程的目標軟件工程的基本目標是:開發(fā)盡可能多的軟件產品;提高軟件的生產效率;滿足應用的功能需要;降低軟件開發(fā)成本。3.軟件工程的指導思想

為解決軟件危機,把“軟件”這種特殊商品的生產、管理過程納入傳統(tǒng)工程管理的軌道;用計算機科學中的最新成果應用于軟件工程中用管理學的原理和方法進行軟件生產管理用工程學的觀點進行核算,制定工程進度和實施方案用數(shù)學方法建立軟件的可靠模型和各種有效算法采用科學的方法進行軟件的開發(fā)和管理4.軟件工程基本原理著名軟件工程專家B.W.Boehm于1983年發(fā)表的一篇論文中提出了軟件工程的七條基本原理。他認為這七條原理是確保軟件產品質量和開發(fā)效率的最小準則集合。自1968年提出“軟件工程”的概念以來,專家學者又陸續(xù)突出了100多條關于軟件工程的準則。軟件工程七條基本原理(1)用分階段的生命周期計劃嚴格管理(2)堅持進行階段評審(3)實行嚴格的產品控制(4)采用現(xiàn)代程序設計技術(5)結果應能清楚地審查(6)開發(fā)小組人員少而精(7)承認不斷改進軟件工程實踐的必要性計劃、評審、控制、新、形、精、學5.軟件工程應用范圍大型程序要由若干個程序員小組承擔開發(fā),相互關系極其復雜,因此,必須自始至終堅持SE方法。個人程序、中小型或一般程序同開發(fā)人員之間的關聯(lián)較小,應用SE方法收效甚微。應用程序分類分類程序規(guī)模模塊數(shù)開發(fā)時間開發(fā)人數(shù)極小500行以下10~201~4周1人小1K~2K行25~501~6月1人中5K~50K行250~10001~2年2~5人大50K~100K行1000以上2~3年5~20人甚大1M行4~5年100~1000人極大1M~10M行5~10年2000~50006.傳統(tǒng)軟件工程模式70年代,計算機技術水平不高,開發(fā)工具少而且性能差。對于大型復雜問題的求解方法有很大的局限性影響。軟件工程采用的方法:把軟件生存周期劃分成若干個階段,每個階段的任務相對獨立,而且比較簡單,便于不同人員分工協(xié)作,從而降低整個軟件開發(fā)工程的困難程度。在實現(xiàn)每個階段的任務時,采用的是系統(tǒng)化的技術方法——結構化分析和結構化設計技術。傳統(tǒng)軟件工程模式的缺點:強調了分階段實施模塊化、結構化程序設計技術和方法,而忽視了人在軟件開發(fā)過程中的地位和作用。7.現(xiàn)代軟件工程模式

現(xiàn)代軟件工程是在傳統(tǒng)軟件工程模式的基礎上,為了強調人在系統(tǒng)開發(fā)中的作用,同時為了適應軟件新技術的發(fā)展趨勢而提出的。其基本要點是:以人為主,充分利用軟件開發(fā)方法及軟件開發(fā)工具;開發(fā)人員的組織管理對軟件開發(fā)成功與否至關重要;基于軟件組件的軟件開發(fā)技術。各種功能的可重用軟件組件不斷問世。這使得在軟件開發(fā)過程中編程工作量日趨減少,取而代之的是在設計好系統(tǒng)體系結構后,利用軟件組件構造或重構軟件系統(tǒng)。由于軟件組件是標準化設計、成品化生產的,極易構造使用,從而大大簡化了設計、編程、測試各個環(huán)節(jié)的工作量,提高了工作效率和生產效率。由于在軟件開發(fā)過程中最大限度地采用軟件組件,使得軟件開發(fā)過程變?yōu)橄到y(tǒng)分析、系統(tǒng)構造、系統(tǒng)測試的集成過程。6.1.2軟件生命周期

一、定義

為了更有效、更科學地組織和管理軟件生產;根據某一軟件從被提出并著手開始實現(xiàn),直到軟件完成其使命為止的全過程劃分為一些階段;稱這一全過程為軟件生命周期。軟件生命周期組成軟件生命周期問題定義可行性研究需求分析系統(tǒng)設計詳細設計編碼測試維護有機組合二、各個階段任務問題定義可行性研究需求分析軟件定義期系統(tǒng)設計詳細設計編碼測試軟件開發(fā)期

運行維護軟件維護期一般分為三個階段:1.軟件定義期

(1)問題定義

(1)這一階段的主要目的是確定問題的性質、工程目標以及規(guī)模。

(2)應力求使軟件開發(fā)人員、用戶以及使用部門負責人對問題的性質、工程目標與規(guī)模取得完全一致的看法。(2)可行性研究

(1)可行性研究的目的是進一步研究問題定義階段所定義的問題是否可解。

(2)通過復查系統(tǒng)的目標和規(guī)模,并研究現(xiàn)在正使用的系統(tǒng),從而導出試探性的解。

(3)從各方面分析物理系統(tǒng)的可行性,推薦一個可行方案,供有關部門審批。

(3)需求分析

任務:根據可行性研究階段提交的文檔,特別是從數(shù)據流圖,對目標系統(tǒng)提出清晰、準確和具體的要求,即要明確系統(tǒng)必須做什么的問題。(3)需求分析

確定對系統(tǒng)的綜合要求:功能要求、性能要求、運行要求。1對系統(tǒng)的數(shù)據要求進行分析:數(shù)據元素的分類和規(guī)范化,描繪實體之間的關系圖。2推導出系統(tǒng)的詳細模型系統(tǒng)。3修正開發(fā)計劃,并建立模型系統(tǒng)。42.軟件開發(fā)期

(1)系統(tǒng)設計

任務是劃分出構成系統(tǒng)的各物理元素(如程序、文件、數(shù)據庫、人工過程與文檔等)以及設計出軟件的結構(如確定模塊及模塊間的關系)功能分解推薦最佳方案選擇合理方案提出可選擇方案設計軟件結構16

5

4

3

2

制定測試計劃系統(tǒng)設計過程(2)詳細設計1任務是對系統(tǒng)做出精確的描述3結果是測試對象、測試結果符合預期結果2目標是要保證程序易讀易理解、易測試、易修改和易維護(3)編碼

編碼是將系統(tǒng)設計與詳細設計階段中的結果翻譯成用某種程序設計語言書寫的程序。編碼過程中有幾個因素對提高軟件質量有重大的影響。(3)編碼①選擇適當?shù)某绦蛟O計語言。②使程序內部有良好的文檔資料、規(guī)范的數(shù)據格式說明、簡單清晰的語句結構和合理的輸入輸出格式。③充分利用已有的軟件工具來幫助編碼,以提高編碼的效率和減少程序中的錯誤。(4)測試1.軟件測試是保證軟件可靠性的主要手段,它是軟件開發(fā)過程中最艱巨也是最繁重的工作。

2.測試的目的是要盡量發(fā)現(xiàn)程序中的錯誤,但絕不能證明程序的正確性。(4)測試與調試

3.調試不同于測試,調試主要是推斷錯誤的原因,從而進一步改正錯誤。

4.測試和調試是軟件測試階段的兩個密切相關的過程,通常是交替進行的。

3.軟件維護期

維護是軟件生命周期的最后一個階段,也是持續(xù)時間最長、付出代價最大的階段。軟件工程學的目的就在于提高軟件的可維護性,同時也要設法降低維護的代價。軟件維護分類(1)為糾正使用中出現(xiàn)的錯誤而進行的改正性維護。(2)為適應環(huán)境變化而進行的適應性維護。(3)為改進原有軟件而進行的完善性維護。(4)為將來的可維護和可靠而進行的預防性維護。6.2結構化分析與設計方法結構化開發(fā)方法是傳統(tǒng)的軟件系統(tǒng)開發(fā)方法。結構化開發(fā)方法的基本思想:把一個復雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍內。基本要點是:自頂向下逐步求精模塊化設計結構化編碼主程序員組織結構化設計SD6.2.1結構化方法的體系結構結構化方法的體系結構是:結構化分析(SA—StructuredAnalysis)結構化設計(SD—StructuredDesign)結構化程序設計(SP—StructuredProgramming)一、結構化分析SASA方法是建立在自頂向下、逐步求精思想基礎上的分析方法,SA方法是分析方法,基礎是自頂向下、逐步求精要點:分解和抽象:把復雜問題自頂向下逐層分解,再從分解出的對象中抽象出相對簡單的子問題。經過一系列分解和抽象,到最底層的問題已經是很容易求解的了。二、結構化設計SDSD方法是由IBM公司的Constentine等人花了十幾年時間研究出來的一種程序設計方法,發(fā)表于1974年。簡述:SD是一種用于概要設計的方法,與SA方法配合使用。(SD是用于概要設計的方法)目標:建立一個結構良好的軟件系統(tǒng)。SD方法的基礎:是數(shù)據流程圖,因此也稱為面向數(shù)據流的設計方法。三、結構化程序設計SPSP的思想最早是由著名計算機科學家E.W.Dijkstra提出的。1966年Bohm和Jacopin證明了只用三種基本結構就能實現(xiàn)任何一個入口,一個出口的程序;1977年IBM公司的Mills又進一步提出:“程序應該只有一個入口和一個出口。在長期程序設計的實踐中,SP方法不斷得以完善,使之成為開發(fā)傳統(tǒng)應用領域應用系統(tǒng)的主要方法之一。總結:軟件開發(fā)的基本原則自頂向下的系統(tǒng)結構開發(fā)原則這種方法的基本思想是,對一個復雜系統(tǒng)進行分解,由高度抽象到逐步具體的方法,形成一個樹形結構。在樹形結構中,每一層次都設計成獨立的模塊,每個模塊又都可以調用它的下屬模塊,因此,這是一種逐層分解的方式,也稱為層次結構。這種系統(tǒng)結構的優(yōu)點是,關系明了、簡單,各層次中的模塊之間聯(lián)系比較少,各模塊相對獨立,易于理解,便于修改。6.2.2.模塊獨立性評價

系統(tǒng)設計的質量主要反映在模塊的獨立性上。評價模塊獨立性的主要標準有兩個:一是模塊之間的耦合,它表明兩個模塊之間互相獨立的程度;二是模塊內部之間的關系是否緊密,稱為內聚。要求模塊之間的耦合盡可能地弱,即模塊盡可能獨立,而要求模塊的內聚程度盡量地高。耦合和內聚是一個問題的兩個方面,耦合程度弱的模塊,其內聚程度一定高。一、耦合模塊之間的耦合反映了模塊的獨立性,也反映了系統(tǒng)分解后的復雜程度。為了使系統(tǒng)各模塊之間相互影響盡可能地少,使系統(tǒng)簡單而易理解,應減少模塊之間的耦合程度。影響模塊之間耦合的主要因素有兩個:一是模塊之間的連接形式,二是模塊接口的復雜性。其中模塊之間的連接形式是影響模塊獨立性的最重要因素。模塊耦合的程度

按照耦合程度從弱到強,可以將模塊的耦合分為以下五級。①數(shù)據耦合②同構耦合③控制耦合④公用耦合⑤內容耦合二、內聚

內聚是對一個模塊內部元素之間功能上相互聯(lián)系強度的測量。模塊內聚度又稱為模塊強度。一個模塊的內聚度越高,與其他模塊之間的耦合程度也就越弱。內聚度分類內聚度從高到低可分為以下7類。①功能內聚②序列內聚③通信內聚④過程內聚⑤時間內聚⑥邏輯內聚⑦偶然內聚6.3軟件測試概述

6.3.1測試測試的重要性軟件測試的重要性及其與可靠性的密切聯(lián)系怎樣強調也不過分。這是一個典型事例:在美國的一次飛往火星的火箭發(fā)射中,因控制程序中的一個循環(huán)語句“DO5I=1,3”被誤認為是賦值語句“DO5I=1.3”,一點之差,使火箭發(fā)生爆炸,損失一千萬美元。目的發(fā)現(xiàn)軟件中隱藏的各種差錯。要糾正一種錯誤的看法:認為“測試是為了說明程序沒有問題”。恰恰相反,沒有找出錯誤的測試被認為是失敗的測試;而”成功的測試是能夠發(fā)現(xiàn)隱藏的差錯的測試“。如果為了證實程序是正確的而進行測試,就會設計一些不易暴露錯誤的測試方案;如果為了發(fā)現(xiàn)程序中的錯誤而進行測試,就會力求設計最能暴露錯誤的測試方案。結論:

由于測試目標是為了找出程序中的錯誤,因此,由程序設計者本人進行測試是不明智的。通常,測試分兩個階段;程序模塊編好后,程序員本人對該程序進行必要的測試,稱為“單元測試”,在整個系統(tǒng)都完成后,由專職測試人員對整個系統(tǒng)進行的測試稱為“系統(tǒng)綜合測試”。二、測試心理學分析測試

為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程調試

找出程序中的錯誤原因、位置并加以糾正可靠性

在給定時間內,軟件不發(fā)生錯誤的概率黑盒測試法

不考慮程序的內部結構和處理過程的測試,也稱為功能測試、數(shù)據驅動測試。只檢查程序功能是否滿足系統(tǒng)功能和規(guī)格說明書的要求,不管內部如何處理和如何實現(xiàn)。白盒測試法

按程序的內部邏輯結構和處理過程進行的測試,稱為結構測試、邏輯驅動測試。三、測試基本概念四、測試用例測試的關鍵問題是如何設計測試用例;它的組成:

測試用例=指定功能+測試數(shù)據+預期效果測試的基本原則:

1)在執(zhí)行程序前應該對期望的結果有明確的描述,測試后應對輸出進行仔細的檢查。(正確?)

2)不僅要選擇合理的輸入數(shù)據作為測試用例,還應選用不合理的輸入數(shù)據作為測試用例。

3)除了檢查程序是否做了應做的工作之外,還應檢查程序是否做了不應做的事。

4)應該長期保留所有的測試用例,直到該系統(tǒng)被廢棄不用為止。測試用例的設計設計測試用例的基本目標是:確定一組最有可能發(fā)現(xiàn)某個錯誤或某類錯誤的測試數(shù)據。測試方法:語句覆蓋判定覆蓋條件覆蓋條件組合覆蓋邊值分析五、邏輯(路徑)覆蓋(白盒法)

按程序的內部邏輯結構進行測試,為了衡量測試的覆蓋程度,建立下列標準(從低到高):語句覆蓋:每個語句都至少執(zhí)行一次判定覆蓋:對判別語句的每個分支至少要經過一次條件覆蓋:每個條件可能的值至少出現(xiàn)一次,及條件表達式中各個條件取兩個不同的值判定/條件覆蓋:使判定的”真“、”假“各執(zhí)行一次,還要使判定中每個條件取兩種不同的值條件組合覆蓋:使每個判定中的條件的各種組合都出現(xiàn)一次舉例

有一要測試的程序如下:

sub(a,b,x)

floata,b,x;

{floaty;if(a>1&&b=0)y=x/a;if(a=2||x>1)x=x+1;}結束程序邏輯結構圖開始

a>1&&b=0?

a=2||x>1?y=x/ax=x+1ABCDE1.語句覆蓋

執(zhí)行程序中的每個語句。為使程序中的每個語句都至少執(zhí)行一次,只需設計一個通過路徑ACE的輸入數(shù)據即可。選擇輸入數(shù)據為:a=2,b=0,x=3就可達到“語句覆蓋”的標準。2.判定覆蓋

對判別語句的每個分支至少要經過一次,為達到”判定覆蓋“的標準,則要經過路徑:ACD和ABE,為此,選用輸入數(shù)據為:a=3,b=0,x=0,走ACD路徑a=2,b=1,x=3,走ABE路徑

判定覆蓋比語句覆蓋嚴格。但還比較弱,例如,ABD路徑就沒走到。若把“X>1”錯寫成“X<1”,還是檢查不出來,它只有50%的機會去檢查X的值。3.條件覆蓋使判別中每個條件可能的值至少出現(xiàn)一次,及條件表達式中各個條件取兩個不同的值。程序中有4個條件:a>1,b=0,a=2,x>1。為達到“條件覆蓋”標準,需選用數(shù)據,使得在A點有a>1,a<=1,b=0,b<>0

在B點有a=2,a<>2,x>1,x<=1

為此選擇下列兩組測試數(shù)據:a=2,b=0,x=4走ACE路徑a=1,b=1,x=1走ABD路徑“條件覆蓋”比“判定覆蓋”強,因為要使每個條件都取到兩個不同的結果,而判定覆蓋不能保證這一點。4.判別組合覆蓋

使每個判定中的條件的各種組合都出現(xiàn)一次。滿足條件組合覆蓋的測試數(shù)據一定滿足判定、條件、條件/判定覆蓋。各種可能的組合共有八種:a>1,b=0a>1,b<>0a<=1,b=0a<=1,b<>0a=2,x=1a=2,x<=1a<>2,x>1a<>2,x<=1下面4組測試數(shù)據可以覆蓋上面8種條件組合:a=2,b=0,x=4覆蓋a=2,b=1,x=1覆蓋a=1,b=0,x=2覆蓋a=1,b=0,x=1覆蓋5.邊界值分析法經驗證明,在邊界處,程序最容易出問題。例如,在下標、數(shù)據結構、數(shù)組、循環(huán)等的邊界附近。有下列啟發(fā)式規(guī)則:若輸入條件規(guī)定值的個數(shù),則分別選取值的最大個數(shù)、最小個數(shù)以及接近最大、最小的個數(shù)作為測試用例;對輸入條件規(guī)定有值的范圍,則選用范圍邊界數(shù)及剛超出范圍的無效數(shù)作為測試用例;若輸入/輸出是有序集,則注意第一個和最后一個;對三角函數(shù)的自變量,注意特殊角度的值。通常設計測試用例總是將等價法和邊值法結合使用。6.模塊測試

可先用白盒法測試模塊的內部邏輯,再用黑盒法測試外部預期的結果。程序交出后,由測試工程師再以黑盒法為主進行測試。模塊測試測試評價模塊的下述特征:

模塊接口局部數(shù)據結構重要的執(zhí)行通路出錯處理通道影響上述各方面特征的邊界條件7.組裝測試組裝測試分為:漸增式和非漸增式。漸增式

逐漸將要測試的下一個模塊加進到已測試好的模塊中進行的測試。非漸增式

先測試每個模塊,再把所有模塊按設計要求組裝在一起的測試。6.3.2調試技術

輸出存儲器內容

特點:效率低、難定位、輸出的是靜止狀態(tài)的程序內容。加打印語句

特點:顯示的是程序的動態(tài)信息,大量的輸出,時間慢,可能引出新的問題。用調試工具

特點:動態(tài)調試,可自動執(zhí)行,是現(xiàn)代程序調試的有效工具。6.4軟件開發(fā)新技術6.4.1原型方法

原型法(prototypingapproach)是對軟件生命周期法的改進。原型法鼓勵用戶與軟件開發(fā)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論