官术网_书友最值得收藏!

1.2 課后習題詳解

1什么是軟件危機?它有哪些典型表現(xiàn)?為什么會出現(xiàn)軟件危機?

答:(1)軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。

(2)軟件危機的典型表現(xiàn):

對軟件開發(fā)成本和進度的估計不準確;

用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生;

軟件產(chǎn)品的質(zhì)量往往靠不??;

軟件常常是不可維護的;

軟件通常沒有適當?shù)奈臋n資料;

軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升;

軟件開發(fā)跟不上計算機應(yīng)用迅速普及深入的趨勢。

(3)軟件危機出現(xiàn)的原因:

客觀原因

a.軟件是計算機系統(tǒng)中的邏輯部件,缺乏“可見性”,因此管理和控制軟件開發(fā)過程相當困難。

b.軟件維護通常意味著改正或修改原來的設(shè)計,因此軟件較難維護。

c.軟件規(guī)模龐大,而程序復雜性將隨著程序規(guī)模的增加而呈指數(shù)上升。

主觀原因

a.存在與軟件開發(fā)和維護有關(guān)的許多錯誤認識和做法。

b.對用戶要求沒有完整準確的認識就匆忙著手編寫程序。

c.開發(fā)人員只重視程序而忽視軟件配置的其余成分(文檔和數(shù)據(jù)等)。

d.軟件開發(fā)人員輕視維護。

2假設(shè)自己是一家軟件公司的總工程師,當把圖1-13給手下的軟件工程師們觀看,告訴他們及早發(fā)現(xiàn)并改正錯誤的重要性時,有人不同意這個觀點,認為要求在錯誤進入軟件之前就清除它們是不現(xiàn)實的,并舉例說:“如果一個故障是編碼錯誤造成的,那么,一個人怎么能在設(shè)計階段清除它呢?”應(yīng)該怎么反駁他?

圖1-13 引入同一變動付出的代價隨時間變化的趨勢

答:可以從以下兩方面來反駁他:

(1)在軟件開發(fā)的不同階段進行修改需要付出的代價是很不相同的。在軟件“已經(jīng)完成”時再引入變動,當然需要付出更高的代價。在后期引入一個變動比在早期引入相同變動所需付出的代價高2~3個數(shù)量級。

(2)發(fā)生在編碼時期的錯誤極有可能是在需求分析階段由于操作不當產(chǎn)生的,所以必須及時消除錯誤,否則,到了后期軟件運行和維護階段再回過頭來修改,將會付出更大的代價。

3什么是軟件工程?它有哪些本質(zhì)特性?怎樣用軟件工程消除軟件危機?

答:(1)軟件工程定義:

采用工程的概念、原理、技術(shù)和方法來開發(fā)與維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效地維護它,這就是軟件工程。

(2)軟件工程本質(zhì)特征:

軟件工程關(guān)注于大型程序的構(gòu)造;

軟件工程的中心課題是控制復雜性;

軟件經(jīng)常變化;

開發(fā)軟件的效率非常重要;

和諧地合作是開發(fā)軟件的關(guān)鍵;

軟件必須有效地支持它的用戶;

由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品。

(3)消除軟件危機的方法:

應(yīng)該對計算機軟件有一個正確的認識;

應(yīng)該充分認識到軟件開發(fā)是一種組織良好、管理嚴密、各類人員協(xié)同配合、共同完成的工程項目;

應(yīng)該推廣使用在實踐中總結(jié)出來的開發(fā)軟件的成功的技術(shù)和方法,并且研究探索更好更有效的技術(shù)和方法;

應(yīng)該開發(fā)和使用更好的軟件工具。

4簡述結(jié)構(gòu)化范型和面向?qū)ο蠓缎偷囊c,并分析它們的優(yōu)缺點。

答:(1)結(jié)構(gòu)化范型

要點

結(jié)構(gòu)化范型屬于傳統(tǒng)方法學。傳統(tǒng)的軟件開發(fā)方法大部分采用瀑布模型。這種模型要求每一階段都以前一階段形成的文檔為基礎(chǔ)完成工作。每一階段將要完成時,都要求開發(fā)人員進行驗證或確認。

優(yōu)點

a.把軟件生命周期劃分成若干相對獨立、簡單的階段,便于不同人員分工協(xié)作,降低開發(fā)的困難程度。

b.開發(fā)過程中采用科學的管理技術(shù)和良好的技術(shù)方法,且在每個階段結(jié)束之前都進行嚴格的審查,保證了軟件的質(zhì)量,提高了軟件的可維護性;

c.大大提高了軟件開發(fā)的成功率和生產(chǎn)率。

缺點

a.不適用于軟件規(guī)模龐大、或者對軟件的需求是模糊的或會隨時間變化而變化的情況。

b.結(jié)構(gòu)化范型技術(shù)把數(shù)據(jù)和操作人為地分離成兩個獨立的部分,增加了軟件開發(fā)與維護的難度。

(2)面向?qū)ο蠓缎?/p>

要點

a.把對象作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構(gòu)件。

b.把所有對象劃分成各種對象類。

c.繼承性。

d.對象彼此之間僅能通過傳遞消息互相聯(lián)系。

優(yōu)點

a.降低了軟件產(chǎn)品的復雜性;

b.提高了軟件的可理解性;

c.簡化了軟件的開發(fā)和維護工作;

d.提高了軟件的可重用性。

缺點

面向?qū)ο笮阅鼙让嫦蜻^程低。

5根據(jù)歷史數(shù)據(jù)可以進行如下的假設(shè)。對計算機存儲容量的需求大致按下面公式描述的趨勢逐年增加:M=4080e0.28(Y-1960),存儲器的價格按下面公式描述的趨勢逐年下降:P1=0.3×0.72Y-1974(美分/位),如果計算機字長為16位,則存儲器價格下降的趨勢為:P2=0.048×0.72Y-1974(美分/字)。在上列公式中y代表年份,M是存儲容量(字數(shù)),P1和P2代表價格?;谏鲜黾僭O(shè)可以比較計算機硬件和軟件成本的變化趨勢。要求計算:

(1)在1985年對計算機存儲容量的需求估計是多少?如果字長為16位,這個存儲器的價格是多少?

(2)假設(shè)在1985年一名程序員每天可開發(fā)出10條指令,程序員的平均工資是每月4000美元。如果一條指令為一個字長,計算使存儲器裝滿程序所需用的成本。

(3)假設(shè)在1995年存儲器字長為32位,一名程序員每天可開發(fā)出30條指令,程序員的月平均工資為6000美元,重復(1)、(2)題。

答:(1)在1985年對計算機存儲容量的需求,估計是:M=4080e0.28(1985-1960)=4080e7=4474263(字)。如果字長為16位,則這個存儲器的價格是:P=0.048×0.72(1985-1974)×4474263=5789(美元)

(2)如果一條指令的長度為一個字,則使存儲器裝滿程序共需4474263條指令。如果每月有20個工作日,則每人每月可開發(fā)200條指令。需要的工作量是:4474263/200=22371(人月)。程序員的月平均工資是4000美元,開發(fā)出4474263條指令的成本是:22371×4000=8948400(美元)。

(3)在1995年對存儲容量的需求估計為:M=4080e0.28(1995-1960)=4080e9.8=73577679(字),如果字長為32位,則這個存儲器的價格是:P=0.003×32×0.72(1995-1974)×73577679=7127(美元)。如果一條指令的長度為一個字,則使存儲器裝滿程序共需73577679條指令。如果每月有20個工作日,則每人每月可開發(fā)600條指令。需要的工作量是:73577679/600=122629(人月)。開發(fā)出成本是:122629×6000=735776790(美元)。

6什么是軟件過程?它與軟件工程方法學有何關(guān)系?

答:(1)軟件過程是為了開發(fā)出高質(zhì)量的軟件產(chǎn)品所需完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。軟件過程定義了運用技術(shù)方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)軟件變化必須采取的管理措施,以及標志完成了相應(yīng)開發(fā)活動的里程碑。

(2)軟件過程是軟件工程方法學的三個重要組成部分之一。軟件工程方法學的三個要素為:方法、工具和過程。

7什么是軟件生命周期模型?試比較瀑布模型、快速原型模型、增量模型和螺旋模型的優(yōu)缺點,說明每種模型的適用范圍。

答:軟件生命周期模型是軟件開發(fā)的全部過程、活動和任務(wù)的結(jié)構(gòu)框架。軟件生命周期模型能清晰、直觀地表達軟件開發(fā)全過程,明確規(guī)定了要完成的主要活動和任務(wù),用來作為項目開發(fā)的基礎(chǔ)。

(1)瀑布模型

優(yōu)點

a.可強迫開發(fā)人員采用規(guī)范的方法;

b.嚴格地規(guī)定了每個階段必須提交的文檔;

c.要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證;

d.對文檔的約束,使軟件維護變得容易一些,且能降低軟件預(yù)算。

缺點

a.瀑布模型是由文檔驅(qū)動的;

b.缺乏對于需求變更和項目變化的適應(yīng)性;

c.用戶只有在生命周期的后期才能看到結(jié)果;

適用范圍

適用于用戶需求明確、完整、無重大變化的軟件項目開發(fā)。

(2)快速原型模型

優(yōu)點

a.克服了瀑布模型的缺點,對于需求變更具有更好的適應(yīng)性;

b.開發(fā)費用低、開發(fā)周期短且對用戶更友好。

缺點

a.客戶與開發(fā)者對原型理解不同;

b.本質(zhì)是快速,沒有考慮軟件的總體質(zhì)量和可維護性,最終產(chǎn)品質(zhì)量較差;

c.不利于開發(fā)人員的創(chuàng)新。

適用范圍

a.對所開發(fā)的領(lǐng)域比較熟悉而且有快速的原型開發(fā)工具;

b.項目招投標時,可以以原型模型作為軟件的開發(fā)模型;

c.進行產(chǎn)品移植或升級時,或?qū)σ延挟a(chǎn)品原型進行客戶化工作時。

(3)增量模型

優(yōu)點

a.能在較短時間內(nèi)向用戶提交可完成部分工作的產(chǎn)品;

b.逐步增加產(chǎn)品功能,可以使用戶有較充裕的時間學習和適應(yīng)新產(chǎn)品。

缺點

a.要求軟件體系結(jié)構(gòu)必須是開放的。

b.增量模型的靈活性很容易退化為邊做邊改模型,從而使軟件過程的控制失去整體性。

c.增量模型本身是自相矛盾的。它一方面要求開發(fā)人員把軟件看作一個整體,另一方面又要求開發(fā)人員把軟件看作構(gòu)件序列,每個構(gòu)件本質(zhì)上都獨立于另一個構(gòu)件。

適用范圍

a.進行已有產(chǎn)品升級或新版本開發(fā);

b.對完成期限嚴格要求的產(chǎn)品;

c.對所開發(fā)的領(lǐng)域比較熟悉而且已有原型系統(tǒng)。

(4)螺旋模型

優(yōu)點

a.有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個重要目標;

b.減少了過多測試或測試不足所帶來的風險;

c.在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質(zhì)區(qū)別。

缺點

a.軟件開發(fā)人員需要具備豐富的風險評估經(jīng)驗和專門知識,如果未能夠及時標識風險,會造成重大損失;

b.過多的迭代次數(shù)會增加開發(fā)成本,延遲提交時間。

適用范圍

適用于內(nèi)部開發(fā)的大規(guī)模軟件項目。

8為什么說噴泉模型較好地體現(xiàn)了面向?qū)ο筌浖_發(fā)過程無縫和迭代的特性?

答:“噴泉”這個詞體現(xiàn)了面向?qū)ο筌浖_發(fā)過程迭代和無縫的特性。噴泉模型的開發(fā)流程圖中代表不同階段的圓圈相互重疊,表示兩個活動之間存在交迭;而面向?qū)ο蠓椒ㄔ诟拍詈捅硎痉椒ㄉ系囊恢滦?,保證了在各項開發(fā)活動之間的無縫過渡。在一個階段內(nèi)的向下箭頭代表該階段內(nèi)的迭代(或求精)。

9試討論Rational統(tǒng)一過程的優(yōu)缺點。

答:(1)優(yōu)點

提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基于組件的體系結(jié)構(gòu)、可視化軟件建模、驗證軟件質(zhì)量以及控制軟件變更等方面、針對所有關(guān)鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導,并確保全體成員共享相同的知識基礎(chǔ)、它具有簡潔和清晰的過程結(jié)構(gòu),為開發(fā)過程提供了較大的通用性。

(2)缺點

RUP只是一個開發(fā)過程,并沒有涵蓋軟件過程的全部內(nèi)容,例如它缺少關(guān)于軟件運行和支持等方面的內(nèi)容,此外,它沒有支持多項目的開發(fā)結(jié)構(gòu),在一定程度上降低了在開發(fā)組織內(nèi)大范圍實現(xiàn)重用的可能性。

10Rational統(tǒng)一過程主要適用于何種項目?

答:適用于大型的需求不斷變化的復雜軟件系統(tǒng)項目。

11說明敏捷過程的適用范圍。

答:敏捷過程具有對變化和不確定性的更快速、更敏捷的反應(yīng)特性,而且在快速的同時仍然能夠保持可持續(xù)的開發(fā)速度。因此適用于商業(yè)競爭環(huán)境下對小型項目提出的有限資源和有限開發(fā)時間的約束。

12說明微軟過程的適用范圍。

答:適用于商業(yè)環(huán)境下具有有限資源和有限開發(fā)時間約束的小型項目。

主站蜘蛛池模板: 榕江县| 固安县| 安多县| 呼伦贝尔市| 枣阳市| 海盐县| 德昌县| 玉环县| 察雅县| 新巴尔虎左旗| 健康| 西乡县| 安阳市| 五大连池市| 蒙城县| 喀喇| 淮南市| 响水县| 翼城县| 新和县| 姜堰市| 铁岭县| 苍梧县| 嘉义市| 哈尔滨市| 盈江县| 仙居县| 西峡县| 镇平县| 池州市| 龙井市| 尚义县| 沿河| 讷河市| 泾源县| 那曲县| 德格县| 明溪县| 东阿县| 舟山市| 涟源市|