軟件工程思想1
綜合能力考核表詳細(xì)內(nèi)容
軟件工程思想1
第一章 軟件工程基本觀念 本章講述軟件工程的基本觀念,是關(guān)于軟件工程宏觀上的探討。如果你是軟件公司的 老板,用不著在第一線工作,那么看這一章就夠了。但你一定要讓員工們相信不停地工 作是人生最大的快樂,并且讓他們把本書看完。 1.1節(jié)講述軟件工程的目標(biāo)和常用的軟件工程模型。1.2節(jié)講述軟件開發(fā)的基本策略: “復(fù)用”、“分而治之”、“優(yōu)化——折衷”,有助于指導(dǎo)實(shí)踐者選擇方法和產(chǎn)生新方法。1.3節(jié) 例舉一些不正確的觀念,取材于早期軟件人員比較幼稚的想法,初學(xué)者可以引以為戒。 1.4節(jié)探討一些有爭議的觀念。 看完本章,要樹立這樣的信念:軟件開發(fā)過程中的坎坎坷坷,仿佛只是人臉的凹凸不平 ,用熱水毛巾一把就可抹平。讓我們高舉程序主義、軟件工程思想的偉大旗幟,緊密團(tuán) 結(jié)在以Microsoft為核心的軟件公司周圍,沿著比爾·蓋茨的生財(cái)之道,不分白天黑夜地 編程,把建設(shè)有中國特色的軟件產(chǎn)業(yè)的偉大事業(yè)全面推向21世紀(jì)。 1.1 軟件工程的目標(biāo)與常用模型 軟件工程的目標(biāo)是提高軟件的質(zhì)量與生產(chǎn)率,最終實(shí)現(xiàn)軟件的工業(yè)化生產(chǎn)。質(zhì)量是軟 件需求方最關(guān)心的問題,用戶即使不圖物美價(jià)廉,也要求個(gè)貨真價(jià)實(shí)。生產(chǎn)率是軟件供 應(yīng)方最關(guān)心的問題,老板和員工都想用更少的時(shí)間掙更多的錢。質(zhì)量與生產(chǎn)率之間有著 內(nèi)在的聯(lián)系,高生產(chǎn)率必須以質(zhì)量合格為前提。如果質(zhì)量不合格,對供需雙方都是壞事 情。從短期效益看,追求高質(zhì)量會(huì)延長軟件開發(fā)時(shí)間并且增大費(fèi)用,似乎降低了生產(chǎn)率 。從長期效益看,高質(zhì)量將保證軟件開發(fā)的全過程更加規(guī)范流暢,大大降低了軟件的維 護(hù)代價(jià),實(shí)質(zhì)上是提高了生產(chǎn)率,同時(shí)可獲得很好的信譽(yù)。質(zhì)量與生產(chǎn)率之間不存在根 本的對立,好的軟件工程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。 軟件供需雙方的代表能在餐桌上談笑風(fēng)生,歸功于第一線開發(fā)人員的辛勤工作。質(zhì)量 與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對開發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率 之間分個(gè)主次不可,那么應(yīng)該是質(zhì)量第一,生產(chǎn)率第二。這是因?yàn)椋海?)質(zhì)量直接體現(xiàn) 在軟件的每段程序中,高質(zhì)量自然是開發(fā)人員的技術(shù)追求,也是職業(yè)道德的要求。(2) 高質(zhì)量對所有的用戶都有價(jià)值,而高生產(chǎn)率只對開發(fā)方有意義。(3)如果一開始就追求 高生產(chǎn)率,容易使人急功近利,留下隱患。寧可進(jìn)度慢些,也要保證每個(gè)環(huán)節(jié)的質(zhì)量, 以圖長遠(yuǎn)利益。 軟件的質(zhì)量因素很多,如正確性,性能、可靠性、容錯(cuò)性、易用性、靈活性、可擴(kuò)充 性、可理解性、可維護(hù)性等等。有些因素相互重疊,有些則相抵觸,真要提高質(zhì)量可不 容易啊! 軟件工程的主要環(huán)節(jié)有:人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序 設(shè)計(jì)、測試、維護(hù)等,如圖1.1所示。 圖1.1 軟件工程的主要環(huán)節(jié) 軟件工程模型建議用一定的流程將各個(gè)環(huán)節(jié)連接起來,并可用規(guī)范的方式操作全過程 ,如同工廠的生產(chǎn)線。常見的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1 .3),螺旋模型,快速原型模型,形式化描述模型等等 [Pressmam 1999, Sommerville 1992]。 圖1.2 軟件工程的線性模型 時(shí)間 進(jìn)度 圖1.3 軟件工程的漸增式模型 最早出現(xiàn)的軟件工程模型是線性模型(又稱瀑布模型)。線性模型太理想化,太單純 ,已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對象 ,未被留一絲惋惜。但我們應(yīng)該認(rèn)識到,“線性”是人們最容易掌握并能熟練應(yīng)用的思想 方法。當(dāng)人們碰到一個(gè)復(fù)雜的“非線性”問題時(shí),總是千方百計(jì)地將其分解或轉(zhuǎn)化為一系 列簡單的線性問題,然后逐個(gè)解決。一個(gè)軟件系統(tǒng)的整體可能是復(fù)雜的,而單個(gè)子程序 總是簡單的,可以用線性的方式來實(shí)現(xiàn),否則干活就太累了。線性是一種簡潔,簡潔就 是美。當(dāng)我們領(lǐng)會(huì)了線性的精神,就不要再呆板地套用線性模型的外表,而應(yīng)該用活它 。例如漸增式模型實(shí)質(zhì)就是分段的線性模型,如圖1.3所示。螺旋模型則是接連的彎曲了 的線性模型。在其它模型中都能夠找到線性模型的影子。 套用固定的模型不是程序員的聰明之舉。比如“程序設(shè)計(jì)”與“測試”之間的關(guān)系,習(xí)慣 上總以為程序設(shè)計(jì)在先,測試在后,如圖1.4(a)所示。而對于一些復(fù)雜的程序,將測 試分為同步測試與總測試更有效,如圖1.4(b)所示。 (a) (b) 圖1.4 (a)程序設(shè)計(jì)在先測試在后 (b)測試分為同步測試與總測試 不論是什么軟件工程模型,總是少不了圖1.1中的各個(gè)環(huán)節(jié)。本書擗開具體的軟件工 程模型,順序講述人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測 試,以及維護(hù)與再生工程。其中程序設(shè)計(jì)部分以C++/C語言為例。 1.2 軟件開發(fā)的基本策略 人們都有自己的世界觀和方法論,能自然而然地運(yùn)用于生活和工作中。同樣,程序員 腦子里的軟件工程觀念會(huì)無形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積 累了相當(dāng)多的方法,但這些方法不是嚴(yán)密的理論。實(shí)踐人員不應(yīng)該教條地套用方法,更 重要的是學(xué)會(huì)“選擇合適的方法”和“產(chǎn)生新方法”。有謀略才會(huì)有好的戰(zhàn)術(shù)。幾千年前, 我們的祖先就在打鬧之際寫下了很多心得體會(huì),被現(xiàn)代人很好地運(yùn)用于工業(yè)和商業(yè)。本 節(jié)講述軟件開發(fā)中的三種基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”。 1.2.1 復(fù)用 復(fù)用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復(fù)用的對象可以是有形的 物體,也可以是無形的成果。復(fù)用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因?yàn)槿祟惪偸?在繼承了前人的成果,不斷加以利用、改進(jìn)或創(chuàng)新后才會(huì)進(jìn)步。所以當(dāng)我們歡度國慶時(shí) ,要搞清楚祖國遠(yuǎn)不止50歲,我們今天享用到的財(cái)富還有上下五千年人民的貢獻(xiàn)。進(jìn)步 只是應(yīng)該的,不進(jìn)步則就可恥了。 復(fù)用的內(nèi)涵包括了提高質(zhì)量與生產(chǎn)率兩者。由經(jīng)驗(yàn)可知,在一個(gè)新系統(tǒng)中,大部分的 內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。一般地可以相信成熟的東西總是比較可靠的 (即具有高質(zhì)量),而大量成熟的工作可以通過復(fù)用來快速實(shí)現(xiàn)(即具有高生產(chǎn)率)。 勤勞并且聰明的人們應(yīng)該把大部分的時(shí)間用在小比例的創(chuàng)新工作上,而把小部分的時(shí)間 用在大比例的成熟工作中,這樣才能把工作做得又快又好。 把復(fù)用的思想用于軟件開發(fā),稱為軟件復(fù)用。據(jù)統(tǒng)計(jì),世上已有1000億多行程序,無 數(shù)功能被重寫了成千上萬次,真是浪費(fèi)哪。面向?qū)ο螅∣bject Oriented)學(xué)者的口頭禪就是“請不要再發(fā)明相同的車輪子了” 。 將具有一定集成度并可以重復(fù)使用的軟件組成單元稱為軟構(gòu)件(Software Component)。軟件復(fù)用可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使 用已有的軟構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。復(fù)用方法合理化并簡化了 軟件開發(fā)過程,減少了總的開發(fā)工作量與維護(hù)代價(jià),既降低了軟件的成本又提高了生產(chǎn) 率。另一方面,由于軟構(gòu)件是經(jīng)過反復(fù)使用驗(yàn)證的,自身具有較高的質(zhì)量。因此由軟構(gòu) 件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過程如圖1.5所示。 軟件復(fù)用不僅要使自己拿來方便,還要讓別人拿去方便,是“拿來拿去主義”。面向?qū)?象方法,Microsoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實(shí)現(xiàn)大規(guī)模的軟件復(fù)用。 存在 構(gòu)件不存在 圖1.5 利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過程 1.2.2 分而治之 分而治之是指把一個(gè)復(fù)雜的問題分解成若干個(gè)簡單的問題,然后逐個(gè)解決。這種樸素 的思想來源于人們生活與工作的經(jīng)驗(yàn),完全適合于技術(shù)領(lǐng)域。軟件人員在執(zhí)行分而治之 的時(shí)候,應(yīng)該著重考慮:復(fù)雜問題分解后,每個(gè)問題能否用程序?qū)崿F(xiàn)?所有程序最終能 否集成為一個(gè)軟件系統(tǒng)并有效解決原始的復(fù)雜問題? 解決原始問題 分解 集成 圖1.6 軟件領(lǐng)域的分而治之策略 圖1.6表示了軟件領(lǐng)域的分而治之策略。諸如軟件的體系結(jié)構(gòu)設(shè)計(jì)、模塊化設(shè)計(jì)都是 分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個(gè)西瓜或是一 只雞,揮刀斬成n塊,再把每塊塞進(jìn)嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復(fù)雜 問題的西瓜或是雞也就此消失了。 1.2.3 優(yōu)化——折衷 軟件的優(yōu)化是指優(yōu)化軟件的各個(gè)質(zhì)量因素,如提高運(yùn)行速度,提高對內(nèi)存資源的利用 率,使用戶界面更加友好,使三維圖形的真實(shí)感更強(qiáng)等等。想做好優(yōu)化工作,首先要讓 開發(fā)人員都有正確的認(rèn)識:優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當(dāng)優(yōu) 化工作成為一種責(zé)任時(shí),程序員才會(huì)不斷改進(jìn)軟件中的算法,數(shù)據(jù)結(jié)構(gòu)和程序組織,從 而提高軟件質(zhì)量。 著名的3D游戲軟件Quake,能夠在PC機(jī)上實(shí)時(shí)地繪制高度真實(shí)感的復(fù)雜場景。Quake的 開發(fā)者能把很多成熟的圖形技術(shù)發(fā)揮到極致,例如把Bresenham畫線、多邊形裁剪、樹遍 歷等算法的速度提高近一個(gè)數(shù)量級。我第一次看到Quake時(shí)不僅感到震動(dòng),而且深受打擊 。這個(gè)PC游戲軟件的技術(shù)水平已經(jīng)遠(yuǎn)勝于我所見識到的國內(nèi)領(lǐng)先的圖形學(xué)相關(guān)科研成果 。這對我們?nèi)找媸⑿械狞c(diǎn)到完止的研發(fā)工作真是莫大的諷刺。所以當(dāng)我們開發(fā)的軟件表 現(xiàn)出很多不可救藥的病癥時(shí),不要怨機(jī)器差。真的是我們自己沒有把工作做好,寫不好 字卻嫌筆鈍。 就假設(shè)我們經(jīng)過思想教育后,精神抖擻,隨時(shí)準(zhǔn)備為優(yōu)化工作干上六天七夜。但愿意 做并不意味著就能把事情做好。優(yōu)化工作的復(fù)雜之處是很多目標(biāo)存在千絲萬縷的關(guān)系, 可謂數(shù)不清理還亂。當(dāng)不能夠使所有的目標(biāo)都得到優(yōu)化時(shí),就需要“折衷”策略。 軟件中的折衷策略是指通過協(xié)調(diào)各個(gè)質(zhì)量因素,實(shí)現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副 書記扮演和事佬的角色:“…為了使整個(gè)組織具有最好的戰(zhàn)斗力,我們要重用幾個(gè)人,照 顧一些人,在萬不得已的情況下委屈一批人”。 軟件折衷的重要原則是不能使某一方損失關(guān)鍵的職能,更不可以象“舍魚而取熊掌”那 樣拋棄一方。例如3D動(dòng)畫軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消 光照明計(jì)算,那么場景就會(huì)喪失真實(shí)感,3D動(dòng)畫也就不再有意義了(如果人類全是色盲 ,計(jì)算機(jī)圖形學(xué)將變得異常簡單)。 人都有惰性,如果允許濫用折衷的話,那么一當(dāng)碰到困難,人們就會(huì)用拆東墻補(bǔ)西墻 的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴(yán)正的立場 :在保證其它因素不差的前提下,使某些因素變得更好。 下面讓我們用“優(yōu)化——折衷”的策略解決“魚和熊掌不可得兼”的難題。 問題提出:假設(shè)魚每千克10元,熊掌每千克一萬元。有個(gè)倔脾氣的人只有20元錢,非 得要吃上一公斤美妙的“熊掌燒魚”,怎么辦? 解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚 ”菜。剩下的那一分錢還可建立獎(jiǎng)勵(lì)基金。 1.3 一些不正確的觀念 本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學(xué)者少犯相似的錯(cuò)誤。 觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標(biāo)準(zhǔn)與示例,可以幫助 我們解決軟件開發(fā)中遇到的任何問題。 客觀情況:好的參考書無疑能指導(dǎo)我們的工作。充分利用書籍中的方法、技術(shù)和技巧, 可以有效地解決軟件開發(fā)中大量常見的問題。但實(shí)踐者并不能因此依賴于書籍,這是因 為:(1)現(xiàn)實(shí)的工作中,由于條件千差萬別,即使是相當(dāng)成熟的軟件工程規(guī)范,常常也 無法套用。(2)軟件技術(shù)日新月異,沒有哪一種軟件標(biāo)準(zhǔn)能長盛不衰。祖?zhèn)髅胤皆谀承?領(lǐng)域很吃香,而在軟件領(lǐng)域則意味著落后。 觀念之二:我們擁有最好的開發(fā)工具、最好的計(jì)算機(jī),一定能做出優(yōu)秀的軟件。 客觀情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán) 境的是一群庸人,難保他們不干出南轅北轍的事情。 觀念之三:如果我們落后于計(jì)劃,可以增加更多的程序員來解決。 客觀情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見得力量大。如果給落后于計(jì)劃的 項(xiàng)目增添新手,可能會(huì)更加延誤項(xiàng)目。因?yàn)椋海?)新手會(huì)產(chǎn)生很多新的錯(cuò)誤,使項(xiàng)目混 亂。(2)老手向新手解釋工作以及交流思想都要花費(fèi)時(shí)間,使實(shí)際開發(fā)時(shí)間更少。所以 科學(xué)的項(xiàng)目計(jì)劃很重要,不在乎計(jì)劃能提前多少,重在恰如其分。如果用“大躍進(jìn)”的方 式奔向共產(chǎn)主義,只會(huì)產(chǎn)生倒退的后果。 觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活 的,隨時(shí)可以修改。 客觀情況:對需求把握得越準(zhǔn)確,軟件的修修補(bǔ)補(bǔ)就越少。有些需求在一開始時(shí)很難確 定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價(jià)越少,修改越晚代價(jià)越大,就 跟治病一樣道理。 1.4 一些有爭議的觀念 本節(jié)探討一些有爭議的觀念,目的不在于得出“正確”或“錯(cuò)誤”的評斷,而在于爭議會(huì) 激發(fā)更多理性的思考。 爭議之一:如果軟件運(yùn)行較...
軟件工程思想1
第一章 軟件工程基本觀念 本章講述軟件工程的基本觀念,是關(guān)于軟件工程宏觀上的探討。如果你是軟件公司的 老板,用不著在第一線工作,那么看這一章就夠了。但你一定要讓員工們相信不停地工 作是人生最大的快樂,并且讓他們把本書看完。 1.1節(jié)講述軟件工程的目標(biāo)和常用的軟件工程模型。1.2節(jié)講述軟件開發(fā)的基本策略: “復(fù)用”、“分而治之”、“優(yōu)化——折衷”,有助于指導(dǎo)實(shí)踐者選擇方法和產(chǎn)生新方法。1.3節(jié) 例舉一些不正確的觀念,取材于早期軟件人員比較幼稚的想法,初學(xué)者可以引以為戒。 1.4節(jié)探討一些有爭議的觀念。 看完本章,要樹立這樣的信念:軟件開發(fā)過程中的坎坎坷坷,仿佛只是人臉的凹凸不平 ,用熱水毛巾一把就可抹平。讓我們高舉程序主義、軟件工程思想的偉大旗幟,緊密團(tuán) 結(jié)在以Microsoft為核心的軟件公司周圍,沿著比爾·蓋茨的生財(cái)之道,不分白天黑夜地 編程,把建設(shè)有中國特色的軟件產(chǎn)業(yè)的偉大事業(yè)全面推向21世紀(jì)。 1.1 軟件工程的目標(biāo)與常用模型 軟件工程的目標(biāo)是提高軟件的質(zhì)量與生產(chǎn)率,最終實(shí)現(xiàn)軟件的工業(yè)化生產(chǎn)。質(zhì)量是軟 件需求方最關(guān)心的問題,用戶即使不圖物美價(jià)廉,也要求個(gè)貨真價(jià)實(shí)。生產(chǎn)率是軟件供 應(yīng)方最關(guān)心的問題,老板和員工都想用更少的時(shí)間掙更多的錢。質(zhì)量與生產(chǎn)率之間有著 內(nèi)在的聯(lián)系,高生產(chǎn)率必須以質(zhì)量合格為前提。如果質(zhì)量不合格,對供需雙方都是壞事 情。從短期效益看,追求高質(zhì)量會(huì)延長軟件開發(fā)時(shí)間并且增大費(fèi)用,似乎降低了生產(chǎn)率 。從長期效益看,高質(zhì)量將保證軟件開發(fā)的全過程更加規(guī)范流暢,大大降低了軟件的維 護(hù)代價(jià),實(shí)質(zhì)上是提高了生產(chǎn)率,同時(shí)可獲得很好的信譽(yù)。質(zhì)量與生產(chǎn)率之間不存在根 本的對立,好的軟件工程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。 軟件供需雙方的代表能在餐桌上談笑風(fēng)生,歸功于第一線開發(fā)人員的辛勤工作。質(zhì)量 與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對開發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率 之間分個(gè)主次不可,那么應(yīng)該是質(zhì)量第一,生產(chǎn)率第二。這是因?yàn)椋海?)質(zhì)量直接體現(xiàn) 在軟件的每段程序中,高質(zhì)量自然是開發(fā)人員的技術(shù)追求,也是職業(yè)道德的要求。(2) 高質(zhì)量對所有的用戶都有價(jià)值,而高生產(chǎn)率只對開發(fā)方有意義。(3)如果一開始就追求 高生產(chǎn)率,容易使人急功近利,留下隱患。寧可進(jìn)度慢些,也要保證每個(gè)環(huán)節(jié)的質(zhì)量, 以圖長遠(yuǎn)利益。 軟件的質(zhì)量因素很多,如正確性,性能、可靠性、容錯(cuò)性、易用性、靈活性、可擴(kuò)充 性、可理解性、可維護(hù)性等等。有些因素相互重疊,有些則相抵觸,真要提高質(zhì)量可不 容易啊! 軟件工程的主要環(huán)節(jié)有:人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序 設(shè)計(jì)、測試、維護(hù)等,如圖1.1所示。 圖1.1 軟件工程的主要環(huán)節(jié) 軟件工程模型建議用一定的流程將各個(gè)環(huán)節(jié)連接起來,并可用規(guī)范的方式操作全過程 ,如同工廠的生產(chǎn)線。常見的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1 .3),螺旋模型,快速原型模型,形式化描述模型等等 [Pressmam 1999, Sommerville 1992]。 圖1.2 軟件工程的線性模型 時(shí)間 進(jìn)度 圖1.3 軟件工程的漸增式模型 最早出現(xiàn)的軟件工程模型是線性模型(又稱瀑布模型)。線性模型太理想化,太單純 ,已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對象 ,未被留一絲惋惜。但我們應(yīng)該認(rèn)識到,“線性”是人們最容易掌握并能熟練應(yīng)用的思想 方法。當(dāng)人們碰到一個(gè)復(fù)雜的“非線性”問題時(shí),總是千方百計(jì)地將其分解或轉(zhuǎn)化為一系 列簡單的線性問題,然后逐個(gè)解決。一個(gè)軟件系統(tǒng)的整體可能是復(fù)雜的,而單個(gè)子程序 總是簡單的,可以用線性的方式來實(shí)現(xiàn),否則干活就太累了。線性是一種簡潔,簡潔就 是美。當(dāng)我們領(lǐng)會(huì)了線性的精神,就不要再呆板地套用線性模型的外表,而應(yīng)該用活它 。例如漸增式模型實(shí)質(zhì)就是分段的線性模型,如圖1.3所示。螺旋模型則是接連的彎曲了 的線性模型。在其它模型中都能夠找到線性模型的影子。 套用固定的模型不是程序員的聰明之舉。比如“程序設(shè)計(jì)”與“測試”之間的關(guān)系,習(xí)慣 上總以為程序設(shè)計(jì)在先,測試在后,如圖1.4(a)所示。而對于一些復(fù)雜的程序,將測 試分為同步測試與總測試更有效,如圖1.4(b)所示。 (a) (b) 圖1.4 (a)程序設(shè)計(jì)在先測試在后 (b)測試分為同步測試與總測試 不論是什么軟件工程模型,總是少不了圖1.1中的各個(gè)環(huán)節(jié)。本書擗開具體的軟件工 程模型,順序講述人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測 試,以及維護(hù)與再生工程。其中程序設(shè)計(jì)部分以C++/C語言為例。 1.2 軟件開發(fā)的基本策略 人們都有自己的世界觀和方法論,能自然而然地運(yùn)用于生活和工作中。同樣,程序員 腦子里的軟件工程觀念會(huì)無形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積 累了相當(dāng)多的方法,但這些方法不是嚴(yán)密的理論。實(shí)踐人員不應(yīng)該教條地套用方法,更 重要的是學(xué)會(huì)“選擇合適的方法”和“產(chǎn)生新方法”。有謀略才會(huì)有好的戰(zhàn)術(shù)。幾千年前, 我們的祖先就在打鬧之際寫下了很多心得體會(huì),被現(xiàn)代人很好地運(yùn)用于工業(yè)和商業(yè)。本 節(jié)講述軟件開發(fā)中的三種基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”。 1.2.1 復(fù)用 復(fù)用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復(fù)用的對象可以是有形的 物體,也可以是無形的成果。復(fù)用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因?yàn)槿祟惪偸?在繼承了前人的成果,不斷加以利用、改進(jìn)或創(chuàng)新后才會(huì)進(jìn)步。所以當(dāng)我們歡度國慶時(shí) ,要搞清楚祖國遠(yuǎn)不止50歲,我們今天享用到的財(cái)富還有上下五千年人民的貢獻(xiàn)。進(jìn)步 只是應(yīng)該的,不進(jìn)步則就可恥了。 復(fù)用的內(nèi)涵包括了提高質(zhì)量與生產(chǎn)率兩者。由經(jīng)驗(yàn)可知,在一個(gè)新系統(tǒng)中,大部分的 內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。一般地可以相信成熟的東西總是比較可靠的 (即具有高質(zhì)量),而大量成熟的工作可以通過復(fù)用來快速實(shí)現(xiàn)(即具有高生產(chǎn)率)。 勤勞并且聰明的人們應(yīng)該把大部分的時(shí)間用在小比例的創(chuàng)新工作上,而把小部分的時(shí)間 用在大比例的成熟工作中,這樣才能把工作做得又快又好。 把復(fù)用的思想用于軟件開發(fā),稱為軟件復(fù)用。據(jù)統(tǒng)計(jì),世上已有1000億多行程序,無 數(shù)功能被重寫了成千上萬次,真是浪費(fèi)哪。面向?qū)ο螅∣bject Oriented)學(xué)者的口頭禪就是“請不要再發(fā)明相同的車輪子了” 。 將具有一定集成度并可以重復(fù)使用的軟件組成單元稱為軟構(gòu)件(Software Component)。軟件復(fù)用可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使 用已有的軟構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。復(fù)用方法合理化并簡化了 軟件開發(fā)過程,減少了總的開發(fā)工作量與維護(hù)代價(jià),既降低了軟件的成本又提高了生產(chǎn) 率。另一方面,由于軟構(gòu)件是經(jīng)過反復(fù)使用驗(yàn)證的,自身具有較高的質(zhì)量。因此由軟構(gòu) 件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過程如圖1.5所示。 軟件復(fù)用不僅要使自己拿來方便,還要讓別人拿去方便,是“拿來拿去主義”。面向?qū)?象方法,Microsoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實(shí)現(xiàn)大規(guī)模的軟件復(fù)用。 存在 構(gòu)件不存在 圖1.5 利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過程 1.2.2 分而治之 分而治之是指把一個(gè)復(fù)雜的問題分解成若干個(gè)簡單的問題,然后逐個(gè)解決。這種樸素 的思想來源于人們生活與工作的經(jīng)驗(yàn),完全適合于技術(shù)領(lǐng)域。軟件人員在執(zhí)行分而治之 的時(shí)候,應(yīng)該著重考慮:復(fù)雜問題分解后,每個(gè)問題能否用程序?qū)崿F(xiàn)?所有程序最終能 否集成為一個(gè)軟件系統(tǒng)并有效解決原始的復(fù)雜問題? 解決原始問題 分解 集成 圖1.6 軟件領(lǐng)域的分而治之策略 圖1.6表示了軟件領(lǐng)域的分而治之策略。諸如軟件的體系結(jié)構(gòu)設(shè)計(jì)、模塊化設(shè)計(jì)都是 分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個(gè)西瓜或是一 只雞,揮刀斬成n塊,再把每塊塞進(jìn)嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復(fù)雜 問題的西瓜或是雞也就此消失了。 1.2.3 優(yōu)化——折衷 軟件的優(yōu)化是指優(yōu)化軟件的各個(gè)質(zhì)量因素,如提高運(yùn)行速度,提高對內(nèi)存資源的利用 率,使用戶界面更加友好,使三維圖形的真實(shí)感更強(qiáng)等等。想做好優(yōu)化工作,首先要讓 開發(fā)人員都有正確的認(rèn)識:優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當(dāng)優(yōu) 化工作成為一種責(zé)任時(shí),程序員才會(huì)不斷改進(jìn)軟件中的算法,數(shù)據(jù)結(jié)構(gòu)和程序組織,從 而提高軟件質(zhì)量。 著名的3D游戲軟件Quake,能夠在PC機(jī)上實(shí)時(shí)地繪制高度真實(shí)感的復(fù)雜場景。Quake的 開發(fā)者能把很多成熟的圖形技術(shù)發(fā)揮到極致,例如把Bresenham畫線、多邊形裁剪、樹遍 歷等算法的速度提高近一個(gè)數(shù)量級。我第一次看到Quake時(shí)不僅感到震動(dòng),而且深受打擊 。這個(gè)PC游戲軟件的技術(shù)水平已經(jīng)遠(yuǎn)勝于我所見識到的國內(nèi)領(lǐng)先的圖形學(xué)相關(guān)科研成果 。這對我們?nèi)找媸⑿械狞c(diǎn)到完止的研發(fā)工作真是莫大的諷刺。所以當(dāng)我們開發(fā)的軟件表 現(xiàn)出很多不可救藥的病癥時(shí),不要怨機(jī)器差。真的是我們自己沒有把工作做好,寫不好 字卻嫌筆鈍。 就假設(shè)我們經(jīng)過思想教育后,精神抖擻,隨時(shí)準(zhǔn)備為優(yōu)化工作干上六天七夜。但愿意 做并不意味著就能把事情做好。優(yōu)化工作的復(fù)雜之處是很多目標(biāo)存在千絲萬縷的關(guān)系, 可謂數(shù)不清理還亂。當(dāng)不能夠使所有的目標(biāo)都得到優(yōu)化時(shí),就需要“折衷”策略。 軟件中的折衷策略是指通過協(xié)調(diào)各個(gè)質(zhì)量因素,實(shí)現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副 書記扮演和事佬的角色:“…為了使整個(gè)組織具有最好的戰(zhàn)斗力,我們要重用幾個(gè)人,照 顧一些人,在萬不得已的情況下委屈一批人”。 軟件折衷的重要原則是不能使某一方損失關(guān)鍵的職能,更不可以象“舍魚而取熊掌”那 樣拋棄一方。例如3D動(dòng)畫軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消 光照明計(jì)算,那么場景就會(huì)喪失真實(shí)感,3D動(dòng)畫也就不再有意義了(如果人類全是色盲 ,計(jì)算機(jī)圖形學(xué)將變得異常簡單)。 人都有惰性,如果允許濫用折衷的話,那么一當(dāng)碰到困難,人們就會(huì)用拆東墻補(bǔ)西墻 的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴(yán)正的立場 :在保證其它因素不差的前提下,使某些因素變得更好。 下面讓我們用“優(yōu)化——折衷”的策略解決“魚和熊掌不可得兼”的難題。 問題提出:假設(shè)魚每千克10元,熊掌每千克一萬元。有個(gè)倔脾氣的人只有20元錢,非 得要吃上一公斤美妙的“熊掌燒魚”,怎么辦? 解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚 ”菜。剩下的那一分錢還可建立獎(jiǎng)勵(lì)基金。 1.3 一些不正確的觀念 本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學(xué)者少犯相似的錯(cuò)誤。 觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標(biāo)準(zhǔn)與示例,可以幫助 我們解決軟件開發(fā)中遇到的任何問題。 客觀情況:好的參考書無疑能指導(dǎo)我們的工作。充分利用書籍中的方法、技術(shù)和技巧, 可以有效地解決軟件開發(fā)中大量常見的問題。但實(shí)踐者并不能因此依賴于書籍,這是因 為:(1)現(xiàn)實(shí)的工作中,由于條件千差萬別,即使是相當(dāng)成熟的軟件工程規(guī)范,常常也 無法套用。(2)軟件技術(shù)日新月異,沒有哪一種軟件標(biāo)準(zhǔn)能長盛不衰。祖?zhèn)髅胤皆谀承?領(lǐng)域很吃香,而在軟件領(lǐng)域則意味著落后。 觀念之二:我們擁有最好的開發(fā)工具、最好的計(jì)算機(jī),一定能做出優(yōu)秀的軟件。 客觀情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán) 境的是一群庸人,難保他們不干出南轅北轍的事情。 觀念之三:如果我們落后于計(jì)劃,可以增加更多的程序員來解決。 客觀情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見得力量大。如果給落后于計(jì)劃的 項(xiàng)目增添新手,可能會(huì)更加延誤項(xiàng)目。因?yàn)椋海?)新手會(huì)產(chǎn)生很多新的錯(cuò)誤,使項(xiàng)目混 亂。(2)老手向新手解釋工作以及交流思想都要花費(fèi)時(shí)間,使實(shí)際開發(fā)時(shí)間更少。所以 科學(xué)的項(xiàng)目計(jì)劃很重要,不在乎計(jì)劃能提前多少,重在恰如其分。如果用“大躍進(jìn)”的方 式奔向共產(chǎn)主義,只會(huì)產(chǎn)生倒退的后果。 觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活 的,隨時(shí)可以修改。 客觀情況:對需求把握得越準(zhǔn)確,軟件的修修補(bǔ)補(bǔ)就越少。有些需求在一開始時(shí)很難確 定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價(jià)越少,修改越晚代價(jià)越大,就 跟治病一樣道理。 1.4 一些有爭議的觀念 本節(jié)探討一些有爭議的觀念,目的不在于得出“正確”或“錯(cuò)誤”的評斷,而在于爭議會(huì) 激發(fā)更多理性的思考。 爭議之一:如果軟件運(yùn)行較...
軟件工程思想1
[下載聲明]
1.本站的所有資料均為資料作者提供和網(wǎng)友推薦收集整理而來,僅供學(xué)習(xí)和研究交流使用。如有侵犯到您版權(quán)的,請來電指出,本站將立即改正。電話:010-82593357。
2、訪問管理資源網(wǎng)的用戶必須明白,本站對提供下載的學(xué)習(xí)資料等不擁有任何權(quán)利,版權(quán)歸該下載資源的合法擁有者所有。
3、本站保證站內(nèi)提供的所有可下載資源都是按“原樣”提供,本站未做過任何改動(dòng);但本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。
4、未經(jīng)本網(wǎng)站的明確許可,任何人不得大量鏈接本站下載資源;不得復(fù)制或仿造本網(wǎng)站。本網(wǎng)站對其自行開發(fā)的或和他人共同開發(fā)的所有內(nèi)容、技術(shù)手段和服務(wù)擁有全部知識產(chǎn)權(quán),任何人不得侵害或破壞,也不得擅自使用。
我要上傳資料,請點(diǎn)我!
管理工具分類
ISO認(rèn)證課程講義管理表格合同大全法規(guī)條例營銷資料方案報(bào)告說明標(biāo)準(zhǔn)管理戰(zhàn)略商業(yè)計(jì)劃書市場分析戰(zhàn)略經(jīng)營策劃方案培訓(xùn)講義企業(yè)上市采購物流電子商務(wù)質(zhì)量管理企業(yè)名錄生產(chǎn)管理金融知識電子書客戶管理企業(yè)文化報(bào)告論文項(xiàng)目管理財(cái)務(wù)資料固定資產(chǎn)人力資源管理制度工作分析績效考核資料面試招聘人才測評崗位管理職業(yè)規(guī)劃KPI績效指標(biāo)勞資關(guān)系薪酬激勵(lì)人力資源案例人事表格考勤管理人事制度薪資表格薪資制度招聘面試表格崗位分析員工管理薪酬管理績效管理入職指引薪酬設(shè)計(jì)績效管理績效管理培訓(xùn)績效管理方案平衡計(jì)分卡績效評估績效考核表格人力資源規(guī)劃安全管理制度經(jīng)營管理制度組織機(jī)構(gòu)管理辦公總務(wù)管理財(cái)務(wù)管理制度質(zhì)量管理制度會(huì)計(jì)管理制度代理連鎖制度銷售管理制度倉庫管理制度CI管理制度廣告策劃制度工程管理制度采購管理制度生產(chǎn)管理制度進(jìn)出口制度考勤管理制度人事管理制度員工福利制度咨詢診斷制度信息管理制度員工培訓(xùn)制度辦公室制度人力資源管理企業(yè)培訓(xùn)績效考核其它
精品推薦
- 1暗促-酒店玫瑰靜悄悄地開 369
- 2終端陳列十五大原則 381
- 3專業(yè)廣告運(yùn)作模式 342
- 4****主營業(yè)務(wù)發(fā)展戰(zhàn)略設(shè)計(jì) 375
- 5中小企業(yè)物流發(fā)展的對策 394
- 6主顧開拓 482
- 7主動(dòng)推進(jìn)的客戶服務(wù) 342
- 8專業(yè)媒體策劃與購買 372
- 9中遠(yuǎn)電視廣告CF 417
下載排行
- 1社會(huì)保障基礎(chǔ)知識(ppt) 16695
- 2安全生產(chǎn)事故案例分析(ppt 16695
- 3行政專員崗位職責(zé) 16695
- 4品管部崗位職責(zé)與任職要求 16695
- 5員工守則 16695
- 6軟件驗(yàn)收報(bào)告 16695
- 7問卷調(diào)查表(范例) 16695
- 8工資發(fā)放明細(xì)表 16695
- 9文件簽收單 16695