軟件工程思想-軟件工程基本觀念_第1頁
軟件工程思想-軟件工程基本觀念_第2頁
軟件工程思想-軟件工程基本觀念_第3頁
軟件工程思想-軟件工程基本觀念_第4頁
軟件工程思想-軟件工程基本觀念_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 軟件工程基本觀念本章講述軟件工程的基本觀念,是關于軟件工程宏觀上的探討。如果你是軟件公司的老板,用不著在第一線工作,那么看這一章就夠了。但你一定要讓員工們相信不停地工作是人生最大的快樂,并且讓他們把本書看完。1.1節(jié)講述軟件工程的目標和常用的軟件工程模型。1.2節(jié)講述軟件開發(fā)的基本策略:“復用”、“分而治之”、“優(yōu)化折衷”,有助于指導實踐者選擇方法和產(chǎn)生新方法。1.3節(jié)例舉一些不正確的觀念,取材于早期軟件人員比較幼稚的想法,初學者可以引以為戒。1.4節(jié)探討一些有爭議的觀念??赐瓯菊?,要樹立這樣的信念:軟件開發(fā)過程中的坎坎坷坷,仿佛只是人臉的凹凸不平,用熱水毛巾一把就可抹平。讓我們高舉程序主義

2、、軟件工程思想的偉大旗幟,緊密團結(jié)在以Microsoft為核心的軟件公司周圍,沿著比爾·蓋茨的生財之道,不分白天黑夜地編程,把建設有中國特色的軟件產(chǎn)業(yè)的偉大事業(yè)全面推向21世紀。1.1 軟件工程的目標與常用模型軟件工程的目標是提高軟件的質(zhì)量與生產(chǎn)率,最終實現(xiàn)軟件的工業(yè)化生產(chǎn)。質(zhì)量是軟件需求方最關心的問題,用戶即使不圖物美價廉,也要求個貨真價實。生產(chǎn)率是軟件供應方最關心的問題,老板和員工都想用更少的時間掙更多的錢。質(zhì)量與生產(chǎn)率之間有著內(nèi)在的了解,高生產(chǎn)率必須以質(zhì)量合格為前提。如果質(zhì)量不合格,對供需雙方都是壞事情。從短期效益看,追求高質(zhì)量會延長軟件開發(fā)時間并且增大費用,似乎降低了生產(chǎn)率。

3、從長期效益看,高質(zhì)量將保證軟件開發(fā)的全過程更加規(guī)范流暢,大大降低了軟件的維護代價,實質(zhì)上是提高了生產(chǎn)率,同時可獲得很好的信譽。質(zhì)量與生產(chǎn)率之間不存在根本的對立,好的軟件工程方法可以同時提高質(zhì)量與生產(chǎn)率。軟件供需雙方的代表能在餐桌上談笑風生,歸功于第一線開發(fā)人員的辛勤工作。質(zhì)量與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對開發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率之間分個主次不可,那么應該是質(zhì)量第一,生產(chǎn)率第二。這是因為:(1)質(zhì)量直接體現(xiàn)在軟件的每段程序中,高質(zhì)量自然是開發(fā)人員的技術追求,也是職業(yè)道德的要求。(2)高質(zhì)量對所有的用戶都有價值,而高生產(chǎn)率只對開發(fā)方有意義。(3)如果一開始就追求高生產(chǎn)率,容易

4、使人急功近利,留下隱患。寧可進度慢些,也要保證每個環(huán)節(jié)的質(zhì)量,以圖長遠利益。軟件的質(zhì)量因素很多,如正確性,性能、可靠性、容錯性、易用性、靈活性、可擴充性、可理解性、可維護性等等。有些因素相互重疊,有些則相抵觸,真要提高質(zhì)量可不容易??!軟件工程的主要環(huán)節(jié)有:人員管理、項目管理、可行性與需求分析、系統(tǒng)設計、程序設計、測試、維護等,如圖1.1所示。人員管理項目管理維護測試程序設計系統(tǒng)設計可行性與需求分析圖1.1 軟件工程的主要環(huán)節(jié)軟件工程模型建議用一定的流程將各個環(huán)節(jié)連接起來,并可用規(guī)范的方式操作全過程,如同工廠的生產(chǎn)線。常見的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1.3),螺旋模型,

5、快速原型模型,形式化描述模型等等 Pressmam 1999, Sommerville 1992。維護測試程序設計系統(tǒng)設計可行性與需求分析圖1.2 軟件工程的線性模型 時間維護測試程序設計系統(tǒng)設計可行性與需求分析維護測試程序設計系統(tǒng)設計可行性與需求分析 進度 圖1.3 軟件工程的漸增式模型最早出現(xiàn)的軟件工程模型是線性模型(又稱瀑布模型)。線性模型太理想化,太單純,已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對象,未被留一絲惋惜。但我們應該認識到,“線性”是人們最容易掌握并能熟練應用的思想方法。當人們碰到一個復雜的“非線性”問題時,總是千方百計地將其分解或轉(zhuǎn)化為一系列簡

6、單的線性問題,然后逐個解決。一個軟件系統(tǒng)的整體可能是復雜的,而單個子程序總是簡單的,可以用線性的方式來實現(xiàn),否則干活就太累了。線性是一種簡潔,簡潔就是美。當我們領會了線性的精神,就不要再呆板地套用線性模型的外表,而應該用活它。例如漸增式模型實質(zhì)就是分段的線性模型,如圖1.3所示。螺旋模型則是接連的彎曲了的線性模型。在其它模型中都能夠找到線性模型的影子。套用固定的模型不是程序員的聰明之舉。比如“程序設計”與“測試”之間的關系,習慣上總以為程序設計在先,測試在后,如圖1.4(a)所示。而對于一些復雜的程序,將測試分為同步測試與總測試更有效,如圖1.4(b)所示。程序設計總測試程序設計測 試同步測試

7、(a) (b)圖1.4 (a)程序設計在先測試在后 (b)測試分為同步測試與總測試不論是什么軟件工程模型,總是少不了圖1.1中的各個環(huán)節(jié)。本書擗開具體的軟件工程模型,順序講述人員管理、項目管理、可行性與需求分析、系統(tǒng)設計、程序設計、測試,以及維護與再生工程。其中程序設計部分以C+/C語言為例。1.2 軟件開發(fā)的基本策略人們都有自己的世界觀和方法論,能自然而然地運用于生活和工作中。同樣,程序員腦子里的軟件工程觀念會無形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積累了相當多的方法,但這些方法不是嚴密的理論。實踐人員不應該教條地套用方法,更重要的是學會“選擇合適的方法”和“產(chǎn)生新方法”。有謀略

8、才會有好的戰(zhàn)術。幾千年前,我們的祖先就在打鬧之際寫下了很多心得體會,被現(xiàn)代人很好地運用于工業(yè)和商業(yè)。本節(jié)講述軟件開發(fā)中的三種基本策略:“復用”、“分而治之”、“優(yōu)化折衷”。1.2.1 復用復用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復用的對象可以是有形的物體,也可以是無形的成果。復用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因為人類總是在繼承了前人的成果,不斷加以利用、改進或創(chuàng)新后才會進步。所以當我們歡度國慶時,要搞清楚祖國遠不止50歲,我們今天享用到的財富還有上下五千年人民的貢獻。進步只是應該的,不進步則就可恥了。復用的內(nèi)涵包括了提高質(zhì)量與生產(chǎn)率兩者。由經(jīng)驗可知,在一個新系統(tǒng)中,大部分的

9、內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。一般地可以相信成熟的東西總是比較可靠的(即具有高質(zhì)量),而大量成熟的工作可以通過復用來快速實現(xiàn)(即具有高生產(chǎn)率)。勤勞并且聰明的人們應該把大部分的時間用在小比例的創(chuàng)新工作上,而把小部分的時間用在大比例的成熟工作中,這樣才能把工作做得又快又好。把復用的思想用于軟件開發(fā),稱為軟件復用。據(jù)統(tǒng)計,世上已有1000億多行程序,無數(shù)功能被重寫了成千上萬次,真是浪費哪。面向?qū)ο螅∣bject Oriented)學者的口頭禪就是“請不要再發(fā)明相同的車輪子了” 。將具有一定集成度并可以重復使用的軟件組成單元稱為軟構件(Software Component)。軟件復用可以表述

10、為:構造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟構件,即可組裝(或加以合理修改)成新的系統(tǒng)。復用方法合理化并簡化了軟件開發(fā)過程,減少了總的開發(fā)工作量與維護代價,既降低了軟件的成本又提高了生產(chǎn)率。另一方面,由于軟構件是經(jīng)過反復使用驗證的,自身具有較高的質(zhì)量。因此由軟構件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構件生產(chǎn)應用軟件的過程如圖1.5所示。軟件復用不僅要使自己拿來方便,還要讓別人拿去方便,是“拿來拿去主義”。面向?qū)ο蠓椒?,Microsoft公司的COM規(guī)范 Rogerson 1999,都能很好地用于實現(xiàn)大規(guī)模的軟件復用。查詢軟構件庫用構件建造新軟件定義所需構件集合應用軟件系統(tǒng)分解提取

11、構件 存在 創(chuàng)建新構件 構件不存在圖1.5 利用軟構件生產(chǎn)應用軟件的過程1.2.2 分而治之分而治之是指把一個復雜的問題分解成若干個簡單的問題,然后逐個解決。這種樸素的思想來源于人們生活與工作的經(jīng)驗,完全適合于技術領域。軟件人員在執(zhí)行分而治之的時候,應該著重考慮:復雜問題分解后,每個問題能否用程序?qū)崿F(xiàn)?所有程序最終能否集成為一個軟件系統(tǒng)并有效解決原始的復雜問題?軟件系統(tǒng)復雜問題 解決原始問題程序1子問題1 分解 集成程序2子問題2程序n子問題n圖1.6 軟件領域的分而治之策略圖1.6表示了軟件領域的分而治之策略。諸如軟件的體系結(jié)構設計、模塊化設計都是分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬

12、分硬治”。不像為了吃一個西瓜或是一只雞,揮刀斬成n塊,再把每塊塞進嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復雜問題的西瓜或是雞也就此消失了。1.2.3 優(yōu)化折衷軟件的優(yōu)化是指優(yōu)化軟件的各個質(zhì)量因素,如提高運行速度,提高對內(nèi)存資源的利用率,使用戶界面更加友好,使三維圖形的真實感更強等等。想做好優(yōu)化工作,首先要讓開發(fā)人員都有正確的認識:優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當優(yōu)化工作成為一種責任時,程序員才會不斷改進軟件中的算法,數(shù)據(jù)結(jié)構和程序組織,從而提高軟件質(zhì)量。著名的3D游戲軟件Quake,能夠在PC機上實時地繪制高度真實感的復雜場景。Quake的開發(fā)者能把很多成熟的圖形技術發(fā)揮

13、到極致,例如把Bresenham畫線、多邊形裁剪、樹遍歷等算法的速度提高近一個數(shù)量級。我第一次看到Quake時不僅感到震動,而且深受打擊。這個PC游戲軟件的技術水平已經(jīng)遠勝于我所見識到的國內(nèi)領先的圖形學相關科研成果。這對我們?nèi)找媸⑿械狞c到完止的研發(fā)工作真是莫大的諷刺。所以當我們開發(fā)的軟件表現(xiàn)出很多不可救藥的病癥時,不要怨機器差。真的是我們自己沒有把工作做好,寫不好字卻嫌筆鈍。就假設我們經(jīng)過思想教育后,精神抖擻,隨時準備為優(yōu)化工作干上六天七夜。但愿意做并不意味著就能把事情做好。優(yōu)化工作的復雜之處是很多目標存在千絲萬縷的關系,可謂數(shù)不清理還亂。當不能夠使所有的目標都得到優(yōu)化時,就需要“折衷”策略。

14、軟件中的折衷策略是指通過協(xié)調(diào)各個質(zhì)量因素,實現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副書記扮演和事佬的角色:“為了使整個組織具有最好的戰(zhàn)斗力,我們要重用幾個人,照顧一些人,在萬不得已的情況下委屈一批人”。軟件折衷的重要原則是不能使某一方損失關鍵的職能,更不可以象“舍魚而取熊掌”那樣拋棄一方。例如3D動畫軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消光照明計算,那么場景就會喪失真實感,3D動畫也就不再有意義了(如果人類全是色盲,計算機圖形學將變得異常簡單)。人都有惰性,如果允許濫用折衷的話,那么一當碰到困難,人們就會用拆東墻補西墻的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴正

15、的立場:在保證其它因素不差的前提下,使某些因素變得更好。下面讓我們用“優(yōu)化折衷”的策略解決“魚和熊掌不可得兼”的難題。問題提出:假設魚每千克10元,熊掌每千克一萬元。有個倔脾氣的人只有20元錢,非得要吃上一公斤美妙的“熊掌燒魚”,怎么辦?解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚”菜。剩下的那一分錢還可建立獎勵基金。1.3 一些不正確的觀念本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學者少犯相似的錯誤。觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標準與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題??陀^情況:好的參考書無疑能指導我們的工

16、作。充分利用書籍中的方法、技術和技巧,可以有效地解決軟件開發(fā)中大量常見的問題。但實踐者并不能因此依賴于書籍,這是因為:(1)現(xiàn)實的工作中,由于條件千差萬別,即使是相當成熟的軟件工程規(guī)范,常常也無法套用。(2)軟件技術日新月異,沒有哪一種軟件標準能長盛不衰。祖?zhèn)髅胤皆谀承╊I域很吃香,而在軟件領域則意味著落后。觀念之二:我們擁有最好的開發(fā)工具、最好的計算機,一定能做出優(yōu)秀的軟件??陀^情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán)境的是一群庸人,難保他們不干出南轅北轍的事情。觀念之三:如果我們落后于計劃,可以增加更多的程序員來解決??陀^情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人

17、多不見得力量大。如果給落后于計劃的項目增添新手,可能會更加延誤項目。因為:(1)新手會產(chǎn)生很多新的錯誤,使項目混亂。(2)老手向新手解釋工作以及交流思想都要花費時間,使實際開發(fā)時間更少。所以科學的項目計劃很重要,不在乎計劃能提前多少,重在恰如其分。如果用“大躍進”的方式奔向共產(chǎn)主義,只會產(chǎn)生倒退的后果。觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活的,隨時可以修改??陀^情況:對需求把握得越準確,軟件的修修補補就越少。有些需求在一開始時很難確定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價越少,修改越晚代價越大,就跟治病一樣道理。1.4 一些有爭議的觀念本節(jié)探討一

18、些有爭議的觀念,目的不在于得出“正確”或“錯誤”的評斷,而在于爭議會激發(fā)更多理性的思考。爭議之一:如果軟件運行較慢,是換一臺更快的計算機,還是設計一種更快的算法?整理觀點:如果開發(fā)軟件的目的是為了學習或是研究,那么應該設計一種更快的算法。如果該軟件已經(jīng)用于商業(yè),則需謹慎考慮:若換一臺更快的計算機能解決問題,則是最快的解決方案。改進算法雖然可以從根本上提高軟件的運行速度,但可能引入錯誤以及延誤進程。技術狂毫無疑問會選擇后者,因為他們覺得放棄任何可以優(yōu)化的機會就等于犯罪。類似的爭議還有:是買現(xiàn)成的程序,還是徹底自己開發(fā)?技術人員和商業(yè)人士常常會有不同的選擇。爭議之二:有最好的軟件工程方法,最好的編

19、程語言嗎?整理觀點:在軟件領域永遠沒有最好的,只有更好的。能解決問題的都是好方法或是好語言。程序員在最初學習Basic、Fortran、 Pascal、C、C+等語言時會感覺一個比一個好,不免有喜新厭舊之舉。而如今的Visual Basic、Delphi、Visual C+、Java等語言各有所長,真的難分優(yōu)劣。開發(fā)人員應該根據(jù)客觀條件,選擇自己熟悉的方法和語言,才能保證合格的質(zhì)量與生產(chǎn)率。程序設計是自由與快樂的事情,不要發(fā)誓忠于某某主義而自尋煩惱。爭議之三:編程時是否應該多使用技巧?整理觀點:就軟件開發(fā)而言,技巧的優(yōu)點在于能另辟蹊徑地解決一些問題,缺點是技巧并不為人熟知。若在程序中用太多的技巧,可能會留下隱患,別人也難以理解程序。鑒于一個局部的優(yōu)點對整個系統(tǒng)而言是微不足道的,而一個錯誤則可能是致命的。整理建議用自然的方式編程,少用技巧。狼三則的故事告訴我們“失敗的技巧通常是技倆”。當我們在編程時無法判斷是用了技巧還是用了技倆,那就少用。賣油翁的故事又告訴我們“熟能生

溫馨提示

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

評論

0/150

提交評論