第一篇:軟件工程
軟件工程—心得體會(huì)
摘要
本文結(jié)合基層實(shí)踐教學(xué)的實(shí)際情況和現(xiàn)實(shí)需要,系統(tǒng)地總結(jié)了《軟件工程》實(shí)踐教學(xué)的特征,詳細(xì)分析了實(shí)踐教學(xué)過程存在的問題,并提出了該課程實(shí)踐教學(xué)改革的新格式。
關(guān)鍵字:軟件工程,教學(xué)素質(zhì),軟件開發(fā),實(shí)踐,實(shí)驗(yàn)
正文
通過這學(xué)期的“軟件工程”這門課,我拓寬了知識(shí)面,鍛煉了能力,綜合素質(zhì)得到較大的提高。我覺得在大四安排這門課的學(xué)習(xí),其主要目的,在于在課堂中學(xué)到的理論知識(shí)與實(shí)際的結(jié)合,尤其是觀察、分析、解決問題的實(shí)際工作能力。軟件工程是一門研究用工程化方法構(gòu)建和維護(hù)有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科。它涉及到程序設(shè)計(jì)語言,數(shù)據(jù)庫,軟件開發(fā)工具,系統(tǒng)平臺(tái),標(biāo)準(zhǔn),設(shè)計(jì)模式等方面。在1968年第一次提出了軟件工程的概念,至今軟件工程已經(jīng)走過了30多年的歷程。在不斷發(fā)展的過程中,人類越來越加注重在軟件的開發(fā)中應(yīng)該按工程化的方法進(jìn)行開發(fā),并注重進(jìn)行軟件項(xiàng)目工程的管理。在現(xiàn)代社會(huì)中,軟件應(yīng)用于多個(gè)方面,典型的軟件比如有電子郵件,嵌入式系統(tǒng),人機(jī)界面,辦公套件,操作系統(tǒng),編譯器,數(shù)據(jù)庫,游戲等。同時(shí),各個(gè)行業(yè)幾乎都有計(jì)算機(jī)軟件的應(yīng)用,比如工業(yè),農(nóng)業(yè),銀行,航空,政府部門等,這些應(yīng)用促進(jìn)了經(jīng)濟(jì)和社會(huì)的發(fā)展,使得人們的工作更加高效,同時(shí)提高了生活質(zhì)量。
中國(guó)的軟件行業(yè)規(guī)模不是很大,有些軟件公司在軟件制作上,也只是采用了一些軟件工程的思想,與大規(guī)模的工業(yè)化大生產(chǎn)比較還是有一定的差距,原因有管理體制的問題,市場(chǎng)問題,政策問題,也有軟件工程理論不全面和不完善的問題。所以軟件工程的研究和應(yīng)用,以及中國(guó)軟件行業(yè)的進(jìn)一步發(fā)展,都需要一定的既有軟件工程的理論基礎(chǔ)和研究能力,又有一定的實(shí)踐經(jīng)驗(yàn)的軟件工程技術(shù)人員來推動(dòng)。軟件工程的前途是光明的。軟件服務(wù)外包屬于智力人才密集型現(xiàn)代服務(wù)業(yè)。大量著名外包企業(yè)落戶寧波。主要就業(yè)去向包括軟件外包與服務(wù)企業(yè)、信息產(chǎn)品與服務(wù)企業(yè),擔(dān)任程序員、軟件測(cè)試員、項(xiàng)目經(jīng)理等工作崗位
軟件工程是計(jì)算機(jī)領(lǐng)域發(fā)展最快的學(xué)科分支之一,國(guó)家非常重視軟件行業(yè)的發(fā)展,對(duì)軟件人才的培養(yǎng)給予了非常優(yōu)惠的政策。本專業(yè)培養(yǎng)掌握計(jì)算機(jī)軟件基本理論知識(shí),熟悉軟件開發(fā)和管理技術(shù)、能夠在計(jì)算機(jī)軟件領(lǐng)域中從事軟件設(shè)計(jì)、開發(fā)和管理的高級(jí)人才。軟件工程的七條原理:用分階段的生命周期計(jì)劃嚴(yán)格管理、堅(jiān)持進(jìn)行階段評(píng)審、實(shí)行嚴(yán)格的產(chǎn)品控制、采納現(xiàn)代程序設(shè)計(jì)技術(shù)、結(jié)果應(yīng)能清楚地審查、開發(fā)小組的人員應(yīng)少而精、承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性。根據(jù)這幾條原理,不僅要積極采納新的軟件開發(fā)技術(shù),還要注意不斷總結(jié)經(jīng)驗(yàn),收集進(jìn)度和消耗等數(shù)據(jù),進(jìn)行出錯(cuò)類型和問題報(bào)告統(tǒng)計(jì)。這些數(shù)據(jù)既可以用來評(píng)估新的 軟件技術(shù)的效果,也可以用來指明必須著重注意的問題和應(yīng)該優(yōu)先進(jìn)行研究的工具和技術(shù)。
第二篇:軟件工程
2.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)化——折衷”。
2.2.1復(fù)用
復(fù)用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復(fù)用的對(duì)象可以是有形的物體,也可以是無形的成果。復(fù)用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因?yàn)槿祟惪偸窃诶^承了前人的成果,不斷加以利用、改進(jìn)或創(chuàng)新后才會(huì)進(jìn)步。所以當(dāng)我們歡度國(guó)慶時(shí),要搞清楚祖國(guó)遠(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é)者的口頭禪就是“請(qǐng)不要再發(fā)明相同的車輪子了”。
將具有一定集成度并可以重復(fù)使用的軟件組成單元稱為軟構(gòu)件(Software Component)。軟件復(fù)用可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。復(fù)用方法合理化并簡(jiǎn)化了軟件開發(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ū)ο蠓椒ǎ琈icrosoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實(shí)現(xiàn)大規(guī)模的軟件復(fù)用。
2.2.2分而治之
分而治之是指把一個(gè)復(fù)雜的問題分解成若干個(gè)簡(jiǎn)單的問題,然后逐個(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)域的分而治之策略。諸如軟件的體系結(jié)構(gòu)設(shè)計(jì)、模塊化設(shè)計(jì)都是分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個(gè)西瓜或是一只雞,揮刀斬成n塊,再把每塊塞進(jìn)嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復(fù)雜問題的西瓜或是雞也就此消失了。
2.2.3優(yōu)化——折衷
軟件的優(yōu)化是指優(yōu)化軟件的各個(gè)質(zhì)量因素,如提高運(yùn)行速度,提高對(duì)內(nèi)存資源的利用率,使用戶界面更加友好,使三維圖形的真實(shí)感更強(qiáng)等等。想做好優(yōu)化工作,首先要讓開發(fā)人員都有正確的認(rèn)識(shí):優(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ù)雜場(chǎng)景。Quake的開發(fā)者能把很多成熟的圖形技術(shù)發(fā)揮到極致,例如把Bresenham畫線、多邊形裁剪、樹遍歷等算法的速度提高近一個(gè)數(shù)量級(jí)。我第一次看到Quake時(shí)不僅感到震動(dòng),而且深受打擊。這個(gè)PC游戲軟件的技術(shù)水平已經(jīng)遠(yuǎn)勝于我所見識(shí)到的國(guó)內(nèi)領(lǐng)先的圖形學(xué)相關(guān)科研成果。這對(duì)我們?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ì)算,那么場(chǎng)景就會(huì)喪失真實(shí)感,3D動(dòng)畫也就不再有意義了(如果人類全是色盲,計(jì)算機(jī)圖形學(xué)將變得異常簡(jiǎn)單)。
人都有惰性,如果允許濫用折衷的話,那么一當(dāng)碰到困難,人們就會(huì)用拆東墻補(bǔ)西墻的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴(yán)正的立場(chǎng):在保證其它因素不差的前提下,使某些因素變得更好。
下面讓我們用“優(yōu)化——折衷”的策略解決“魚和熊掌不可得兼”的難題。
問題提出:假設(shè)魚每千克10元,熊掌每千克一萬元。有個(gè)倔脾氣的人只有20元錢,非得要吃上一公斤美妙的“熊掌燒魚”,怎么辦?
解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚”菜。剩下的那一分錢還可建立獎(jiǎng)勵(lì)基金。
2.3一些不正確的觀念
本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學(xué)者少犯相似的錯(cuò)誤。
觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標(biāo)準(zhǔn)與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題。
客觀情況:好的參考書無疑能指導(dǎo)我們的工作。充分利用書籍中的方法、技術(shù)和技巧,可以有效地解決軟件開發(fā)中大量常見的問題。但實(shí)踐者并不能因此依賴于書籍,這是因?yàn)椋海?)現(xiàn)實(shí)的工作中,由于條件千差萬別,即使是相當(dāng)成熟的軟件工程規(guī)范,常常也無法套用。(2)軟件技術(shù)日新月異,沒有哪一種軟件標(biāo)準(zhǔn)能長(zhǎng)盛不衰。祖?zhèn)髅胤皆谀承╊I(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í)可以修改。
客觀情況:對(duì)需求把握得越準(zhǔn)確,軟件的修修補(bǔ)補(bǔ)就越少。有些需求在一開始時(shí)很難確定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價(jià)越少,修改越晚代價(jià)越大,就跟治病一樣道理。
2.4一些有爭(zhēng)議的觀念
本節(jié)探討一些有爭(zhēng)議的觀念,目的不在于得出“正確”或“錯(cuò)誤”的評(píng)斷,而在于爭(zhēng)議會(huì)激發(fā)更多理性的思考。
爭(zhēng)議之一:如果軟件運(yùn)行較慢,是換一臺(tái)更快的計(jì)算機(jī),還是設(shè)計(jì)一種更快的算法?
作者觀點(diǎn):如果開發(fā)軟件的目的是為了學(xué)習(xí)或是研究,那么應(yīng)該設(shè)計(jì)一種更快的算法。如果該軟件已經(jīng)用于商業(yè),則需謹(jǐn)慎考慮:若換一臺(tái)更快的計(jì)算機(jī)能解決問題,則是最快的解決方案。改進(jìn)算法雖然可以從根本上提高軟件的運(yùn)行速度,但可能引入錯(cuò)誤以及延誤進(jìn)程。技術(shù)狂毫無疑問會(huì)選擇后者,因?yàn)樗麄冇X得放棄任何可以優(yōu)化的機(jī)會(huì)就等于犯罪。
類似的爭(zhēng)議還有:是買現(xiàn)成的程序,還是徹底自己開發(fā)?技術(shù)人員和商業(yè)人士常常會(huì)有不同的選擇。
爭(zhēng)議之二:有最好的軟件工程方法,最好的編程語言嗎?
作者觀點(diǎn):在軟件領(lǐng)域永遠(yuǎn)沒有最好的,只有更好的。能解決問題的都是好方法或是好語言。程序員在最初學(xué)習(xí)Basic、Fortran、Pascal、C、C++等語言時(shí)會(huì)感覺一個(gè)比一個(gè)好,不免有喜新厭舊之舉。而如今 的Visual Basic、Delphi、Visual C++、Java等語言各有所長(zhǎng),真的難分優(yōu)劣。開發(fā)人員應(yīng)該根據(jù)客觀條件,選擇自己熟悉的方法和語言,才能保證合格的質(zhì)量與生產(chǎn)率。
程序設(shè)計(jì)是自由與快樂的事情,不要發(fā)誓忠于某某主義而自尋煩惱。
爭(zhēng)議之三:編程時(shí)是否應(yīng)該多使用技巧?
作者觀點(diǎn):就軟件開發(fā)而言,技巧的優(yōu)點(diǎn)在于能另辟蹊徑地解決一些問題,缺點(diǎn)是技巧并不為人熟知。若在程序中用太多的技巧,可能會(huì)留下隱患,別人也難以理解程序。鑒于一個(gè)局部的優(yōu)點(diǎn)對(duì)整個(gè)系統(tǒng)而言是微不足道的,而一個(gè)錯(cuò)誤則可能是致命的。作者建議用自然的方式編程,少用技巧。
《狼三則》的故事告訴我們“失敗的技巧通常是技倆”。當(dāng)我們?cè)诰幊虝r(shí)無法判斷是用了技巧還是用了技倆,那就少用。《賣油翁》的故事又告訴我們“熟能生巧”,表明技巧是自然而然產(chǎn)生的,而不是賣弄出來的。賣油翁的絕技是可到中央電視臺(tái)表演的,而他老人家卻謙虛地說:“沒啥沒啥,用熟了而已”。
爭(zhēng)議之四:軟件中的錯(cuò)誤是否可按嚴(yán)重程度分等級(jí)?
作者觀點(diǎn):在定量分析時(shí),可以將錯(cuò)誤分等級(jí),以便于管理。微軟的一些開發(fā)小組將錯(cuò)誤分成四個(gè)等級(jí) [Cusumano 1996],如表1.1所示。
一級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致軟件崩潰。
二級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致一個(gè)特性不能運(yùn)行并且沒有替代方案。
三級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致一個(gè)特性不能運(yùn)行但有替代方案。
四級(jí)嚴(yán)重:錯(cuò)誤是表面化的或是微小的。
表1.1 錯(cuò)誤的四個(gè)等級(jí)
上述分類是非常技術(shù)性的,并不是普適的。假設(shè)某個(gè)財(cái)務(wù)軟件有兩個(gè)錯(cuò)誤:錯(cuò)誤A使該軟件死掉,錯(cuò)誤B導(dǎo)致工資計(jì)算錯(cuò)誤。按表1.1分類,錯(cuò)誤A屬一級(jí)嚴(yán)重,錯(cuò)誤B屬二級(jí)嚴(yán)重。但事實(shí)上B要比A嚴(yán)重。工資算多了或者算少了,將會(huì)使老板或員工遭受經(jīng)濟(jì)損失。而錯(cuò)誤A只使操作員感到厭煩,并沒有造成經(jīng)濟(jì)損失。另一個(gè)示例是操作手冊(cè)寫錯(cuò),按表1.1分類則屬四級(jí)嚴(yán)重,但這種錯(cuò)誤可能導(dǎo)致機(jī)毀人亡。
開發(fā)人員應(yīng)該意識(shí)到:所有的錯(cuò)誤都是嚴(yán)重的,不存在微不足道的錯(cuò)誤。這樣才能少犯錯(cuò)誤。
2.5小 結(jié)
軟件工程學(xué)科發(fā)展到今天,已經(jīng)有了很多方法和規(guī)范,學(xué)之不盡。本章只在宏觀上討論了軟件工程的一些
思想,更具體的內(nèi)容將在后面的章節(jié)論述。無論是什么好方法,貴在理解與靈活運(yùn)用,而不可當(dāng)成靈丹妙藥,不象“吃了腦黃金或腦白金,就能使一億人先聰明起來”。
3程序員與程序經(jīng)理
工作在第一線的軟件開發(fā)人員是程序員和程序經(jīng)理,他們決定著軟件的命運(yùn)。良好的程序員隊(duì)伍和出色的管理是軟件項(xiàng)目成功的必要條件。管理不是管制,不是去卡住人家的脖子,因?yàn)槌绦騿T不是一群野鴨子。管理的目的是讓大家一起把工作做好,并且讓各人獲得各自的快樂和滿足。當(dāng)一個(gè)組織被出色地領(lǐng)導(dǎo)時(shí),雇員甚至不知道他們已被領(lǐng)導(dǎo)。在項(xiàng)目完成時(shí),他們會(huì)自豪地說:“看看我們通過努力取得的成績(jī)吧”。所以管理者不能老惦記著自己是一個(gè)官,而應(yīng)時(shí)刻意識(shí)到自己是責(zé)任的主要承擔(dān)者。
我們經(jīng)常會(huì)聽到有經(jīng)理頭銜的人在高談闊論:“編程我不會(huì),做個(gè)項(xiàng)目還不easy?派個(gè)人去搞系統(tǒng)分析,回頭再叫幾個(gè)程序員把需求譯成程序,不就OK了嗎?”
不懂英語的人準(zhǔn)以為easy和OK是貶義詞。要讓軟件項(xiàng)目失敗很容易,只要符合下列條件之一即可:
(1)項(xiàng)目經(jīng)理對(duì)軟件一無所知;
(2)技術(shù)負(fù)責(zé)人對(duì)編程不感興趣;
(3)真真編寫代碼的程序員是臨時(shí)雇用的。
如果上述三個(gè)條件同時(shí)具備,就請(qǐng)放心失敗好了。
讓我們少幻想自己是比爾·蓋茨,先當(dāng)好程序員和程序經(jīng)理再說。
3.1了解程序員
早期的程序員干活能從軟件直通硬件,個(gè)個(gè)生猛無比。又因他們的作息時(shí)間、言行舉止與常人不太一樣,久而久之就給人們留下了“神秘”、“孤僻”的印象。如今軟件行業(yè)被炒得熱火朝天,有能耐的程序員即便躲在大山岙的軍工廠里也能被挖出來。而更多原本不是程序員的人操起幾本“速成”、“二十一天通”等書籍也加入了這個(gè)行業(yè)。現(xiàn)在國(guó)內(nèi)號(hào)稱有上百萬程序員,這支大軍魚龍混雜,已搞不清那些是正規(guī)軍,那些是民兵游擊隊(duì)了。
第三篇:《軟件工程》
《軟件工程》課程分析
本課程是軟件技術(shù)專業(yè)學(xué)生必修的一門專業(yè)必修課。根據(jù)培養(yǎng)軟件開發(fā)人員的需要,本課程的任務(wù)是使學(xué)生通過本課程的學(xué)習(xí),了解軟件項(xiàng)目開發(fā)和維護(hù)的一般過程,掌握軟件開發(fā)的傳統(tǒng)方法和最新方法。能在軟件工程的理論指導(dǎo)下,開發(fā)一個(gè)小型管理系統(tǒng),為今后從事軟件工程實(shí)踐打下良好的基礎(chǔ)。
一、課程分析
(一)教學(xué)計(jì)劃的制定和教學(xué)內(nèi)容的選取
根據(jù)培養(yǎng)應(yīng)用技能型人才的總目標(biāo),制訂本專業(yè)教學(xué)計(jì)劃,課程的教材配套,教學(xué)、實(shí)驗(yàn)、實(shí)訓(xùn)、課程設(shè)計(jì)大綱和指導(dǎo)書等教學(xué)文件齊全,近幾年來引入了現(xiàn)代教學(xué)技術(shù)手段,已初步建設(shè)、形成了具有特色的全套課堂教學(xué)和實(shí)驗(yàn)教學(xué)課件。
根據(jù)該課程的基本教學(xué)要求和特點(diǎn),結(jié)合學(xué)時(shí)的安排,從教材的整體內(nèi)容出發(fā),有側(cè)重地進(jìn)行取舍,篩選出學(xué)生必須掌握的基本教學(xué)內(nèi)容,較好地解決了教學(xué)中質(zhì)量與數(shù)量的矛盾。
(二)教學(xué)方法分析
由于該課程是用于指導(dǎo)軟件開發(fā)的,和實(shí)踐聯(lián)系非常緊密。所以采用了理論聯(lián)系實(shí)際的方法進(jìn)行授課。一方面,讓學(xué)生模擬軟件公司的項(xiàng)目小組進(jìn)行軟件開發(fā);一方面,對(duì)學(xué)生進(jìn)行適時(shí)的理論指導(dǎo)。既調(diào)動(dòng)了學(xué)生的積極性,又讓學(xué)生了解了該課程的理論內(nèi)容,收到了一舉兩得的效果。具體教學(xué)過程如下:
第一步:模擬軟件公司的開發(fā)項(xiàng)目小組,分組,分設(shè)角色(項(xiàng)目經(jīng)理、用戶、需求人員、設(shè)計(jì)人員、程序員、測(cè)試人員、軟件安裝培訓(xùn)維護(hù)人員),確定開發(fā)題。讓每個(gè)小組的學(xué)生聚在一起,在項(xiàng)目經(jīng)理的組織下通過調(diào)研、討論來制定自己小組的開發(fā)題目,大家感覺就象在軟件公司實(shí)習(xí)一樣,非常新鮮,感興趣。每個(gè)學(xué)生都積極主動(dòng)的去完成自己應(yīng)承擔(dān)的那部分工作。
第二步:模擬軟件項(xiàng)目開發(fā)全過程的各個(gè)階段,進(jìn)行相關(guān)的理論授課和實(shí)際開發(fā)。即對(duì)軟件開發(fā)的每一階段,首先按照教材內(nèi)容進(jìn)行理論授課,然后讓學(xué)生參照授課內(nèi)容進(jìn)行實(shí)際的軟件開發(fā)實(shí)踐。
在此階段結(jié)束后,每班召開一個(gè)模擬方案論證會(huì),由各開發(fā)小組選出代表上臺(tái)講解本組的開發(fā)方案,其他同學(xué)模擬用戶對(duì)開發(fā)方案提出意見。由于大家對(duì)模擬方案論證會(huì)非常感興趣,發(fā)言積極踴躍,論證會(huì)結(jié)束后,每個(gè)小組的設(shè)計(jì)方案都得到了很好的補(bǔ)充和完善。
第三步:學(xué)期末各小組提交各自完成的軟件系統(tǒng)及開發(fā)文檔,并進(jìn)行總結(jié)演示,由任課教師進(jìn)行講評(píng)。
抽象理論課的教學(xué)應(yīng)理論聯(lián)系實(shí)際,讓學(xué)生在實(shí)際應(yīng)用中掌握抽象的理論,在興趣中學(xué)習(xí),達(dá)到我們高職的雙向型培養(yǎng)目標(biāo)。
二、存在的問題與希望
在上述的教學(xué)中,雖然實(shí)現(xiàn)了理論聯(lián)系實(shí)際,但也存在著一些問題,比如每個(gè)項(xiàng)目小組中總有個(gè)別同學(xué)存在依賴心理,不參與項(xiàng)目開發(fā),最后抄襲別的同學(xué)的項(xiàng)目成果,自己得不到實(shí)際的鍛煉,影響了大三的畢業(yè)設(shè)計(jì)和日后的軟件開發(fā)。另外,如果該課程只上課,沒有實(shí)訓(xùn)的話,實(shí)驗(yàn)課時(shí)太少,學(xué)生很難全面完成一個(gè)系統(tǒng)的開發(fā)。
第四篇:軟件工程
1.軟件工程:是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的工程學(xué)科
2.軟件危機(jī):是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題
3.軟件過程:是為了開發(fā)出高質(zhì)量的軟件產(chǎn)品所需完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟
4.軟件生命周期:是指從軟件定義、開發(fā)、使用、信息”。此外,系統(tǒng)還應(yīng)該具有“定時(shí)取樣生理信號(hào)”、“更新日志”和“產(chǎn)生病情報(bào)告”的功能。為了分析病人生理信號(hào)是否超出了醫(yī)生規(guī)定的安全范圍,應(yīng)該存儲(chǔ)“患者安全范圍”信息。此外,定時(shí)記錄病人生理信號(hào)所形成的“患者日志”,顯然也是一個(gè)數(shù)據(jù)存 儲(chǔ)。
23.軟件危機(jī)有那些典型表現(xiàn)?
(1)央一個(gè)索引號(hào))。
針對(duì)若干個(gè)不同的NAME重復(fù)執(zhí)行上述命令序列。
?測(cè)試系統(tǒng)非正常操作的測(cè)試數(shù)據(jù) ①用過長(zhǎng)的關(guān)鍵字作為命令b的參數(shù):例如,b(reliability software and hardware combined)
預(yù)期的輸出:系統(tǒng)截短過長(zhǎng)的關(guān)鍵字,例如,上列命令中的關(guān)鍵字可能性被截預(yù)期的輸出:X=1,Y=20,Z=3 ④ 3個(gè)判定表達(dá)式依次為假、真、真 輸入:A=1,B=40,C=60 預(yù)期的輸出:X=1,Y=20,Z=30 ⑤ 3個(gè)判定表達(dá)式依次為真、假、假 輸入:A=20,B=1,C=1 預(yù)期的輸出:X=10,Y=2,Z=3 ⑥ 3個(gè)判定表達(dá)式依次為真、假、真 輸入:A=20,B=1,C=60 對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。維護(hù)到淘汰的全過程
5.軟件工程環(huán)境:方法與工具的結(jié)合,加上配套的軟、硬件支持稱為軟件工程環(huán)境
6.模塊:是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?.模塊化:是按規(guī)定的原則將一個(gè)大型軟件分為一個(gè)個(gè)較小的、相對(duì)獨(dú)立但又相關(guān)的模塊
8.耦合:是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量
9.內(nèi)聚:標(biāo)志著一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度
10.結(jié)構(gòu)程序設(shè)計(jì):如果一個(gè)程序的代碼塊只有一個(gè)入口和一個(gè)出口,則稱這個(gè)程序是結(jié)構(gòu)化的11.實(shí)現(xiàn):通常指編碼和測(cè)試
12.軟件可靠性:是指程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運(yùn)行地概率
13.集成測(cè)試:是測(cè)試和組裝軟件的系統(tǒng)化技術(shù) 14.軟件維護(hù):是指軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過程
15.對(duì)象:在應(yīng)用領(lǐng)域中有意義的、與所解決的問題有關(guān)系的任何事物
16.對(duì)象模型:表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)
17.功能模型:表示變化的系統(tǒng)的“功能”性質(zhì) 18.面向?qū)ο蠓治觯壕褪浅槿『驼碛脩粜枨蟛⒔栴}域精確模型的過程
19.重用:是指同一事物不作修改或者稍加改動(dòng)就多次重復(fù)使用
20.可行性分析包括:技術(shù)可行性、經(jīng)濟(jì)可行性、操作可行性
21.北京某高校可用的電話號(hào)碼有以下幾類:校內(nèi)電話號(hào)碼由 4 位數(shù)字組成??定義上述電話號(hào)碼
電話號(hào)碼=[校內(nèi)電話號(hào)碼|校外電話號(hào)碼]
校內(nèi)電話號(hào)碼=非零數(shù)字+ 3 位數(shù)字 //后面繼續(xù)定義 校外電話號(hào)碼=[本市號(hào)碼|外地號(hào)碼] 本市號(hào)碼=數(shù)字零+8 位數(shù)字
外地號(hào)碼=數(shù)字零+3 位數(shù)字+8 位數(shù)字 非零數(shù)字=[1|2|3|4|5|6|7|8|9] 數(shù)字零=0位數(shù)字=3{數(shù)字}3//3 至 3 個(gè)數(shù)字 8 位數(shù)字=非零數(shù)字+7 位數(shù)字 7 位數(shù)字=7{數(shù)字}7 數(shù)字=[0|1|2|3|4|5|6|7|8|9]
22.目前住院的病人主要由護(hù)士護(hù)理,這樣做不僅需要大量護(hù)士??寫出問題定義,分析可行性 從問題陳述可知,本系統(tǒng)數(shù)據(jù)源點(diǎn)是“病人”和“護(hù)士”,他們分別提供生理信號(hào)和要求病情報(bào)告的信息。進(jìn)一步分析問題陳述,從系統(tǒng)應(yīng)該“定時(shí)記錄病人情況以形成患者日志”這項(xiàng)要求可以想到,還應(yīng)該有一個(gè)提供日期和時(shí)間信息的“時(shí)鐘”作為數(shù)據(jù)源點(diǎn)。從問題陳述容易看出,本系統(tǒng)的數(shù)據(jù)終點(diǎn)是接收警告信息和病情報(bào)告的護(hù)士。系統(tǒng)對(duì)病人生理信號(hào)的處理功能主要是“接收信號(hào)”、“分析信號(hào)”和“產(chǎn)生警告
(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常
發(fā)生。
(3)軟件產(chǎn)品的質(zhì)量往往靠不住。(4)軟件常常是不可維護(hù)的。(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例
逐年上升。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計(jì)算
機(jī)應(yīng)用迅速普及深入的趨勢(shì)
25.銀行計(jì)算機(jī)存儲(chǔ)系統(tǒng)的工作過程大致如下:??請(qǐng)用數(shù)據(jù)流圖描繪本系統(tǒng)的功能,并用實(shí)體—聯(lián)系圖描繪系統(tǒng)中的數(shù)據(jù)對(duì)象 26.復(fù)印機(jī)的工作過程大致如下:未接到復(fù)印命令時(shí)處于閑置狀態(tài)??請(qǐng)用狀態(tài)轉(zhuǎn)換圖描繪復(fù)印機(jī)的行為
27.用面向數(shù)據(jù)流的方法設(shè)計(jì)下列系統(tǒng)的軟件結(jié)構(gòu)
(1)機(jī)票預(yù)定系統(tǒng)(2)患者監(jiān)護(hù)系統(tǒng) 28.耦合包括數(shù)據(jù)耦合、控制耦合、公共環(huán)境耦合、內(nèi)容耦合29.內(nèi)聚包括功能內(nèi)聚、順序內(nèi)聚、通信內(nèi)聚、過程內(nèi)聚、時(shí)間內(nèi)聚、邏輯內(nèi)聚、偶然內(nèi)聚
30.美國(guó)某大學(xué)有200名教師,校方與教師工會(huì)剛剛簽訂一項(xiàng)協(xié)議。按照協(xié)議??
31.畫出下列偽代碼的流程圖,計(jì)算它的環(huán)形復(fù)雜度
?
32.某圖書館有一個(gè)使用CET
終端的信息檢索系統(tǒng),該系統(tǒng)有下列4個(gè)基本檢索命令:
(1)設(shè)計(jì)測(cè)試數(shù)據(jù)以全面系統(tǒng)的正常操作
(2)設(shè)計(jì)測(cè)試數(shù)據(jù)以測(cè)試系統(tǒng)的非正常操作
解:?測(cè)試系統(tǒng)正常操作的測(cè)試數(shù)據(jù) ①順序執(zhí)行下列3個(gè)命令:b(KEYWORD)s(L)d(N)
其中KEYWORD是正確的關(guān)鍵字;L是執(zhí)行命令b后在屏幕上顯示的約20個(gè)行號(hào)中的一個(gè)(至少應(yīng)該使L分別為第一個(gè)、最后一個(gè)和中央一個(gè)行號(hào));N是執(zhí)行命令s后列出的索引號(hào)中的一個(gè)(至少應(yīng)該使N分別為第一個(gè)、最后一個(gè)和中央一個(gè)索引號(hào))。
針對(duì)若干個(gè)不同的KEYWORD重復(fù)執(zhí)行上述命令序列。
②順序執(zhí)行下列2個(gè)命令:f(NAME)d(N)
其中,NAME是已知的作者姓名;N是執(zhí)行命令f后列出的索引號(hào)中的一個(gè)(至少應(yīng)該使N分別為第一個(gè)、最后一個(gè)和中
短為reliability software
②用不正確的關(guān)鍵字作為命令b的參數(shù):例如,b(AARDVARK)
預(yù)期的輸出:顯示出最接近的匹配結(jié)果,例如,執(zhí)行上列命令后可能顯示 1.AARON,JULES(book)③用比執(zhí)行命令b后列出的最大行號(hào)大1的數(shù)作為命令s的參數(shù)
預(yù)期的輸出:“命令s的參數(shù)不在行號(hào)列表中”
④用數(shù)字和標(biāo)點(diǎn)符號(hào)作為命令b和命令f的參數(shù)
預(yù)期的輸出:“參數(shù)類型錯(cuò)”
⑤用字母字符作為命令s和命令d的參數(shù) 預(yù)期的輸出:“參數(shù)類型錯(cuò)”
⑥用0和負(fù)數(shù)作為命令s和命令d的參數(shù) 預(yù)期的輸出:“參數(shù)數(shù)值錯(cuò)” ⑦命令順序錯(cuò):例如,沒執(zhí)行命令b就執(zhí)行命令s,或沒執(zhí)行命令s就執(zhí)行命令d 預(yù)期的輸出:“命令順序錯(cuò)”
⑧命令語法錯(cuò):例如,遺漏命令名b、s、d或f;或命令參數(shù)沒用圓括號(hào)括起來 預(yù)期的輸出:“命令語法錯(cuò)” ⑨命令參數(shù)空:例如,b()、s()、d或f()
預(yù)期的輸出:系統(tǒng)提供默認(rèn)參數(shù)或給出出錯(cuò)信息
⑩使用拼錯(cuò)了的作者姓名作為f的參數(shù) 預(yù)期的輸出:“找不到這們作者的著作”
33.(2)答:經(jīng)驗(yàn)表明,在類似的程序中,單位長(zhǎng)度
里的錯(cuò)誤數(shù)ET/IT近似為常數(shù)。美國(guó)的一些統(tǒng)計(jì)數(shù)字告訴我們,通常
0.5X10-2≤ ET/IT ≤2X10-2
也就是說,在測(cè)試之前每1000條指令中大約有5~20個(gè)錯(cuò)誤。
假設(shè)在該程序的每1000條指令中有10個(gè)錯(cuò)誤,則估計(jì)在對(duì)它進(jìn)行測(cè)試期間將發(fā)現(xiàn)的錯(cuò)誤數(shù)為
5000X10/1000=50(個(gè))(3)① 使3個(gè)判定表達(dá)式之值全為假 輸入:A=1,B=1,C=1 預(yù)期的輸出:X=1,Y=2,Z=3 ② 使3個(gè)判定表達(dá)式之值全為真 輸入:A=20,B=40,C=60 預(yù)期的輸出:X=10,Y=20,Z=30 ① 3個(gè)判定表達(dá)式之值全為假 輸入:A=1,B=1,C=1 預(yù)期的輸出:X=1,Y=2,Z=3 ② 3個(gè)判定表達(dá)式依次為假、假、真 輸入:A=1,B=1,C=60 預(yù)期的輸出:X=1,Y=2,Z=30 ③ 3個(gè)判定表達(dá)式依次為假、真、假 輸入:A=1,B=40,C=1
預(yù)期的輸出:X=10,Y=2,Z=30 ⑦ 3個(gè)判定表達(dá)式依次為真、真、假 輸入:A=20,B=40,C=1 預(yù)期的輸出:X=10,Y=20,Z=3 ⑧ 3個(gè)判定表達(dá)式全為真 輸入:A=20,B=40,C=60 預(yù)期的輸出:X=10,Y=20,Z=30 34.軟件的可維護(hù)性與哪些因素有關(guān):軟件的可理解性、可測(cè)試性、可修改性、文檔描述符合要求、用戶文檔簡(jiǎn)潔明確、系統(tǒng)文檔完整并且標(biāo)準(zhǔn)
35.面向?qū)ο蠓椒ㄊ且环N運(yùn)用對(duì)象、類、繼承、封裝、聚合、消息、多態(tài)等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。
面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)是:符合人們習(xí)慣的思維方式、穩(wěn)定性好、可重用性好、可維護(hù)性好、容易開發(fā)大型的軟件產(chǎn)品
第五篇:軟件工程
填好發(fā)給我!!
一、填空題:
1.面向?qū)ο蠓治龅哪康氖菍?duì)客觀世界的系統(tǒng)進(jìn)行 __________________,對(duì)象就是客觀世界的;
2.軟件工程方法學(xué)包括:工程環(huán)境建立、方法、工具和過程;
3.思想概括起來,就是以人為本,最優(yōu)先要做的是通過盡早地、持續(xù)地交付有價(jià)值的軟件來使客戶滿意;
4.UML是指,是用于建立面向?qū)ο笙到y(tǒng)模型的標(biāo)記方法;
5.需求分析的基本任務(wù)是和一起完全弄清用戶對(duì)系統(tǒng)的確切需求,確切地講就是系統(tǒng)做什么的問題;
6.的目的就是用最小的代價(jià)在的時(shí)間內(nèi)確定該軟件項(xiàng)目是否能夠開發(fā),是否值得去開發(fā);
7.在眾多的軟件工程環(huán)境的影響中,和是最重要的。
8.是對(duì)系統(tǒng)不同版本進(jìn)行標(biāo)識(shí)和跟蹤的過程,主要分為版本的訪問與同步控制、。
9.模塊的耦合性分為四種類型:據(jù)耦合、、、;
10.軟件工程學(xué)的主要內(nèi)容包括和。
二、選擇題:
1.軟件維護(hù)的困難主要原因是()
A.費(fèi)用低B.人員少
C.開發(fā)方法的缺陷D.維護(hù)難
2.模塊(),則說明模塊的獨(dú)立性越強(qiáng)。
A.耦合越強(qiáng)B.扇入數(shù)越高C.耦合越弱D.扇入數(shù)越低
3.指出PDL是下列哪種語言()。
A.偽碼B.高級(jí)程序設(shè)計(jì)語言
C.中級(jí)程序設(shè)計(jì)語言D.低級(jí)程序設(shè)計(jì)語言
4.在進(jìn)行軟件測(cè)試時(shí),首先應(yīng)當(dāng)進(jìn)行(),然后再進(jìn)行組裝測(cè)試,最后再進(jìn)行有效性測(cè)試。
A.單元測(cè)試B.集成測(cè)試C.確認(rèn)測(cè)試D.組合測(cè)試
5.軟件測(cè)試的目的是()。
A. 評(píng)價(jià)軟件的質(zhì)量B.發(fā)現(xiàn)軟件的錯(cuò)誤
C. 找出軟件的所有錯(cuò)誤D.證明軟件是正確的6.軟件設(shè)計(jì)階段分為()。
A.邏輯設(shè)計(jì)與功能設(shè)計(jì)B.模型設(shè)計(jì)和功能設(shè)計(jì)
C.結(jié)構(gòu)設(shè)計(jì)和模塊過程設(shè)計(jì)D.?dāng)?shù)據(jù)庫設(shè)計(jì)和文件設(shè)計(jì)
7.結(jié)構(gòu)化設(shè)計(jì)方法是面向()的設(shè)計(jì)。
A.?dāng)?shù)據(jù)流B.?dāng)?shù)據(jù)編碼
C.?dāng)?shù)據(jù)庫D.?dāng)?shù)據(jù)結(jié)構(gòu)
8.程序的三種基本控制結(jié)構(gòu)是()。
A.過程、子程序和分程序
B.順序、選擇和重復(fù)
C.遞歸、堆棧和隊(duì)列
D.調(diào)用、返回和轉(zhuǎn)移
9.系統(tǒng)定義明確之后,應(yīng)對(duì)系統(tǒng)的可行性進(jìn)行研究,可行性研究應(yīng)包括(A.軟件環(huán)境可行性、技術(shù)可行性、經(jīng)濟(jì)可行性、社會(huì)可行性
B.經(jīng)濟(jì)可行性、技術(shù)可行性、操作可行性
C.經(jīng)濟(jì)可行性、社會(huì)可行性、系統(tǒng)可行性
D.經(jīng)濟(jì)可行性、實(shí)用性、社會(huì)可行性
10.?dāng)?shù)據(jù)字典包括()個(gè)條目。
A.2B.3C.4D.
5三、名詞解釋題:
1.需求分析?
2.軟件危機(jī)?
3.軟件生存周期模型?
4.系統(tǒng)測(cè)試?
5.結(jié)構(gòu)化分析?
。)
四、簡(jiǎn)答題:
1.快速原型法?
2.從軟件開發(fā)的過程按階段劃分,軟件測(cè)試分為哪些類型?
3.?dāng)?shù)據(jù)流程圖的基本符號(hào)及各自的含義是什么?數(shù)據(jù)流程圖的功能是什么?
4.軟件維護(hù)包括哪些方面?主要由誰來完成?
5.簡(jiǎn)述軟件項(xiàng)目管理的實(shí)質(zhì)?