第一篇:《軟件工程思想》
《軟件工程思想》
《軟件工程思想》 前言
在60年代計(jì)算機(jī)發(fā)展初期,程序設(shè)計(jì)是少數(shù)聰明人干的事。他們的智力與技能超群,編寫(xiě)的程序既能控制弱智的計(jì)算機(jī),又能讓別人看不懂、不會(huì)用。那個(gè)時(shí)期編程就跟捏泥巴一樣隨心所欲,于是他們很過(guò)分地把程序的集合稱(chēng)為軟件,以便自己開(kāi)心或傷心時(shí)再把程序捏個(gè)面目全非。人們就在這種美滋滋的感覺(jué)下熱情地編程,結(jié)果產(chǎn)生了一堆問(wèn)題:程序質(zhì)量低下,錯(cuò)誤頻出,進(jìn)度延誤,費(fèi)用劇增……。這些問(wèn)題導(dǎo)致了“軟件危機(jī)”。
在1968年,一群程序員、計(jì)算機(jī)科學(xué)家與工業(yè)界人士聚集一起共商對(duì)策。通過(guò)借鑒傳統(tǒng)工業(yè)的成功做法,他們主張通過(guò)工程化的方法開(kāi)發(fā)軟件來(lái)解決軟件危機(jī),并冠以“軟件工程”這一術(shù)語(yǔ)。三十年余年來(lái),盡管軟件的一些毛病如人類(lèi)的感冒一樣無(wú)法根治,但軟件的發(fā)展速度超過(guò)了任何傳統(tǒng)工業(yè),期間并未出現(xiàn)真真的軟件危機(jī)。這的確是前人的先見(jiàn)之明。如今軟件工程成了一門(mén)學(xué)科。
軟件工程主要講述軟件開(kāi)發(fā)的道理,基本上是軟件實(shí)踐者的成功經(jīng)驗(yàn)和失敗教訓(xùn)的總結(jié)。軟件工程的觀念、方法、策略和規(guī)范都是樸實(shí)無(wú)華的,平凡之人皆可領(lǐng)會(huì),關(guān)鍵在于運(yùn)用。我們不可以把軟件工程方法看成是諸葛亮的錦囊妙計(jì)─—在出了問(wèn)題后才打開(kāi)看看,而應(yīng)該事先掌握,預(yù)料將要出現(xiàn)的問(wèn)題,控制每個(gè)實(shí)踐環(huán)節(jié),并防患于未然。研究軟件工程永遠(yuǎn)做不到理論家那么瀟灑:定理證明了,就完事。我在讀大學(xué)的十年里有八年從事軟件開(kāi)發(fā),盡管編寫(xiě)了幾十萬(wàn)行C++/C程序,也經(jīng)歷了若干次小不點(diǎn)兒大的成功和失敗,可老感覺(jué)只學(xué)了些皮毛,心里慌兮兮的。在博士研究生畢業(yè)前的半年里,我告戒自己不應(yīng)該再稀里糊涂地在程序堆里滾爬下去了,于是就面壁反省,做了一陣子木訥的和尚。在“打坐”時(shí),每有心得體會(huì)便記錄下來(lái),不知不覺(jué)湊成了八章經(jīng),我就給此經(jīng)書(shū)起名為《軟件工程思想》。
經(jīng)典的軟件工程書(shū)籍厚得象磚頭,或讓人望而卻步,或讓人看了心事重重。請(qǐng)寬恕我的幼稚,我試圖用三個(gè)問(wèn)題:是什么、為什么、怎么辦,來(lái)解釋軟件工程的道理。所以本書(shū)薄得象餃子皮─—用來(lái)包“思想”這種有味道的“餡”。本書(shū)的八章經(jīng)分別為:
第一章“軟件工程基本觀念”;
第二章“程序員與程序經(jīng)理”;
第三章“項(xiàng)目計(jì)劃與質(zhì)量管理”;
第四章“可行性分析與需求分析”;
第五章“系統(tǒng)設(shè)計(jì)”;
第六章“C++ 面向?qū)ο蟪绦蛟O(shè)計(jì)”;
第七章“測(cè)試與改錯(cuò)”;
第八章“維護(hù)與再生工程”。
附錄“大學(xué)十年”可以充當(dāng)飯后的水果。
我偶爾也擔(dān)心此書(shū)寫(xiě)得太膚淺,內(nèi)容少得可憐。就象一只雞在水里撲騰了幾下,并不能產(chǎn)生美味的雞湯。但是如果您化了幾分鐘時(shí)間翻閱本書(shū)的任意章節(jié),您馬上就愿意再化幾個(gè)小時(shí)一口氣讀完全書(shū),并且樂(lè)得直拍桌子:“好!很好!非常好!”
您可以把這本科技書(shū)當(dāng)小說(shuō)看,但在看書(shū)時(shí)請(qǐng)不要吃東西,免得噴了別人或者嗆著自己。
如果您買(mǎi)了本書(shū)后覺(jué)得不值得,我一定賠償您的損失。致
謝
本書(shū)并不屬于我博士學(xué)位論文的研究范疇,但卻是我讀博士學(xué)位三年來(lái)寫(xiě)的最有意思的作品。
首先要感謝我的導(dǎo)師,浙江大學(xué)計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)(CAD&CG)國(guó)家重點(diǎn)實(shí)驗(yàn)室的石教英教授。在其他師兄弟正兒八經(jīng)地“攻讀”博士學(xué)位時(shí),我“不務(wù)正業(yè)”地開(kāi)了一家軟件公司。當(dāng)我摔了一個(gè)大跟頭灰溜溜地回到陌生的實(shí)驗(yàn)室時(shí),石老師仍然熱情地幫助我“修成正果”。臨近畢業(yè),我心中慚愧,三年來(lái)我從來(lái)都沒(méi)給石老師干過(guò)活,我這個(gè)博士生他算是白招了。我很希望大學(xué)里多一些象石老師那樣開(kāi)明而大度的導(dǎo)師。董軍博士是本書(shū)的第一位讀者。我們是“君子之交”卻不“淡如水”,除了漆夜長(zhǎng)談科技、藝術(shù)、哲學(xué)外,還不忘“吃喝玩樂(lè)”享受生活。他在品閱的同時(shí)完成了審稿工作。
北京因特國(guó)風(fēng)網(wǎng)絡(luò)軟件公司的周鴻一是個(gè)真正的軟件高手。他在我開(kāi)發(fā)軟件產(chǎn)品失敗時(shí)給予了最多的幫助,并指正我在軟件設(shè)計(jì)中存在的根深蒂固的方法錯(cuò)誤,使我能盡早地逐步改正。我平時(shí)能說(shuō)會(huì)道,但在他面前我啞口無(wú)言只有聽(tīng)的份,因?yàn)樗牟湃A已全方位地超過(guò)了我。我真希望多結(jié)識(shí)象他這樣的朋友。
高振華老先生是個(gè)糊涂而可愛(ài)的民營(yíng)企業(yè)家,我們是忘年交。我把他干的糊涂事(投資軟件公司)寫(xiě)進(jìn)書(shū)里,作為可行性分析的案例。高先生給予我經(jīng)濟(jì)上的幫助,使我能夠在舒適的環(huán)境中開(kāi)展最后一年博士學(xué)位論文工作。盡管我讀書(shū)的工資每月只有300元,但日子過(guò)得象神仙一樣舒服。
浙江大學(xué)計(jì)算機(jī)系的楊孟洲、周昆、曾震宇、楊建、白云、金鋒等同學(xué)和我合作開(kāi)發(fā)軟件,給了我很多技術(shù)上的幫助。我對(duì)他們深表感謝。《軟件工程思想》講述“軟件開(kāi)發(fā)”和“做程序員”的道理,視野獨(dú)特,構(gòu)思新穎,內(nèi)容風(fēng)趣,不落窠臼,令人耳目一新。堪稱(chēng)難得,以至回味無(wú)窮。
作者從事了八年的軟件開(kāi)發(fā)工作,在他的博士學(xué)位論文完成之際寫(xiě)下了這本“心之所感”。雖然它探討的是軟件工程最常見(jiàn)的內(nèi)容,但他將親身所歷的感悟?qū)懗苫顫娚鷦?dòng)的文字,將軟件工程的很多原則和方法融于笑談之中,讓人看得輕松,時(shí)有共鳴。盡管很薄,然其內(nèi)涵不遜于厚近千頁(yè)的有關(guān)教科書(shū)。
每次回浙大我都要和林銳相聚,談學(xué)術(shù)、論社會(huì),直面人生,“位卑未敢忘憂(yōu)國(guó)”,每每至凌晨。前不久我在某大學(xué)計(jì)算機(jī)系作講座,最后冒昧談了幾句題外話,其中之一是“學(xué)問(wèn)與明理”。古人云:“讀書(shū)明理”,意即讀書(shū)要明白做人的道理。我以為其中的重要內(nèi)涵,是要有積極的人生觀,以貢獻(xiàn)社會(huì)為己任。這也是我們的共識(shí)。林銳曾立誓做一名“真實(shí)、正直、優(yōu)秀的科技人員”。他在自己困難的時(shí)候依然資助數(shù)名貧困中學(xué)生和大學(xué)生;常常躬身拾撿被亂扔于地的廢紙、塑料袋,以示后生。這都會(huì)使很多的學(xué)人汗顏有加。
簡(jiǎn)言之,林銳對(duì)軟件工程實(shí)踐的積極思考、輕快而不失深邃的文筆及其言行,都是出色之處。
正由于此,而不僅因?yàn)槭峭校也挪粦M淺陋,接受他的要求,榮幸地成為本書(shū)的第一位讀者,并在本來(lái)應(yīng)是名人大家留文的地方談林說(shuō)森。
第一章
軟件工程基本觀念
本章講述軟件工程的基本觀念,是關(guān)于軟件工程宏觀上的探討。如果你是軟件公司的老板,用不著在第一線工作,那么看這一章就夠了。但你一定要讓員工們相信不停地工作是人生最大的快樂(lè),并且讓他們把本書(shū)看完。
1.1節(jié)講述軟件工程的目標(biāo)和常用的軟件工程模型。1.2節(jié)講述軟件開(kāi)發(fā)的基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”,有助于指導(dǎo)實(shí)踐者選擇方法和產(chǎn)生新方法。1.3節(jié)例舉一些不正確的觀念,取材于早期軟件人員比較幼稚的想法,初學(xué)者可以引以為戒。1.4節(jié)探討一些有爭(zhēng)議的觀念。看完本章,要樹(shù)立這樣的信念:軟件開(kāi)發(fā)過(guò)程中的坎坎坷坷,仿佛只是人臉的凹凸不平,用熱水毛巾一把就可抹平。讓我們高舉程序主義、軟件工程思想的偉大旗幟,緊密團(tuán)結(jié)在以Microsoft為核心的軟件公司周?chē)刂葼枴どw茨的生財(cái)之道,不分白天黑夜地編程,把建設(shè)有中國(guó)特色的軟件產(chǎn)業(yè)的偉大事業(yè)全面推向21世紀(jì)。1.1 軟件工程的目標(biāo)與常用模型
軟件工程的目標(biāo)是提高軟件的質(zhì)量與生產(chǎn)率,最終實(shí)現(xiàn)軟件的工業(yè)化生產(chǎn)。質(zhì)量是軟件需求方最關(guān)心的問(wèn)題,用戶(hù)即使不圖物美價(jià)廉,也要求個(gè)貨真價(jià)實(shí)。生產(chǎn)率是軟件供應(yīng)方最關(guān)心的問(wèn)題,老板和員工都想用更少的時(shí)間掙更多的錢(qián)。質(zhì)量與生產(chǎn)率之間有著內(nèi)在的聯(lián)系,高生產(chǎn)率必須以質(zhì)量合格為前提。如果質(zhì)量不合格,對(duì)供需雙方都是壞事情。從短期效益看,追求高質(zhì)量會(huì)延長(zhǎng)軟件開(kāi)發(fā)時(shí)間并且增大費(fèi)用,似乎降低了生產(chǎn)率。從長(zhǎng)期效益看,高質(zhì)量將保證軟件開(kāi)發(fā)的全過(guò)程更加規(guī)范流暢,大大降低了軟件的維護(hù)代價(jià),實(shí)質(zhì)上是提高了生產(chǎn)率,同時(shí)可獲得很好的信譽(yù)。質(zhì)量與生產(chǎn)率之間不存在根本的對(duì)立,好的軟件工程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。
軟件供需雙方的代表能在餐桌上談笑風(fēng)生,歸功于第一線開(kāi)發(fā)人員的辛勤工作。質(zhì)量與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對(duì)開(kāi)發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率之間分個(gè)主次不可,那么應(yīng)該是質(zhì)量第一,生產(chǎn)率第二。這是因?yàn)椋海?)質(zhì)量直接體現(xiàn)在軟件的每段程序中,高質(zhì)量自然是開(kāi)發(fā)人員的技術(shù)追求,也是職業(yè)道德的要求。(2)高質(zhì)量對(duì)所有的用戶(hù)都有價(jià)值,而高生產(chǎn)率只對(duì)開(kāi)發(fā)方有意義。(3)如果一開(kāi)始就追求高生產(chǎn)率,容易使人急功近利,留下隱患。寧可進(jìn)度慢些,也要保證每個(gè)環(huán)節(jié)的質(zhì)量,以圖長(zhǎng)遠(yuǎn)利益。
軟件的質(zhì)量因素很多,如正確性,性能、可靠性、容錯(cuò)性、易用性、靈活性、可擴(kuò)充性、可理解性、可維護(hù)性等等。有些因素相互重疊,有些則相抵觸,真要提高質(zhì)量可不容易啊!
軟件工程的主要環(huán)節(jié)有:人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測(cè)試、維護(hù)等,如圖1.1所示。
圖1.1 軟件工程的主要環(huán)節(jié)
軟件工程模型建議用一定的流程將各個(gè)環(huán)節(jié)連接起來(lái),并可用規(guī)范的方式操作全過(guò)程,如同工廠的生產(chǎn)線。常見(jiàn)的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1.3),螺旋模型,快速原型模型,形式化描述模型等等 [Pressmam 1999, Sommerville 1992]。圖1.2 軟件工程的線性模型
時(shí)間
進(jìn)度
圖1.3 軟件工程的漸增式模型
最早出現(xiàn)的軟件工程模型是線性模型(又稱(chēng)瀑布模型)。線性模型太理想化,太單純,已不再適合現(xiàn)代的軟件開(kāi)發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對(duì)象,未被留一絲惋惜。但我們應(yīng)該認(rèn)識(shí)到,“線性”是人們最容易掌握并能熟練應(yīng)用的思想方法。當(dāng)人們碰到一個(gè)復(fù)雜的“非線性”問(wèn)題時(shí),總是千方百計(jì)地將其分解或轉(zhuǎn)化為一系列簡(jiǎn)單的線性問(wèn)題,然后逐個(gè)解決。一個(gè)軟件系統(tǒng)的整體可能是復(fù)雜的,而單個(gè)子程序總是簡(jiǎn)單的,可以用線性的方式來(lái)實(shí)現(xiàn),否則干活就太累了。線性是一種簡(jiǎn)潔,簡(jiǎn)潔就是美。當(dāng)我們領(lǐng)會(huì)了線性的精神,就不要再呆板地套用線性模型的外表,而應(yīng)該用活它。例如漸增式模型實(shí)質(zhì)就是分段的線性模型,如圖1.3所示。螺旋模型則是接連的彎曲了的線性模型。在其它模型中都能夠找到線性模型的影子。
套用固定的模型不是程序員的聰明之舉。比如“程序設(shè)計(jì)”與“測(cè)試”之間的關(guān)系,習(xí)慣上總以為程序設(shè)計(jì)在先,測(cè)試在后,如圖1.4(a)所示。而對(duì)于一些復(fù)雜的程序,將測(cè)試分為同步測(cè)試與總測(cè)試更有效,如圖1.4(b)所示。(a)
(b)
圖1.4(a)程序設(shè)計(jì)在先測(cè)試在后
(b)測(cè)試分為同步測(cè)試與總測(cè)試
不論是什么軟件工程模型,總是少不了圖1.1中的各個(gè)環(huán)節(jié)。本書(shū)擗開(kāi)具體的軟件工程模型,順序講述人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測(cè)試,以及維護(hù)與再生工程。其中程序設(shè)計(jì)部分以C++/C語(yǔ)言為例。1.2 軟件開(kāi)發(fā)的基本策略
人們都有自己的世界觀和方法論,能自然而然地運(yùn)用于生活和工作中。同樣,程序員腦子里的軟件工程觀念會(huì)無(wú)形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積累了相當(dāng)多的方法,但這些方法不是嚴(yán)密的理論。實(shí)踐人員不應(yīng)該教條地套用方法,更重要的是學(xué)會(huì)“選擇合適的方法”和“產(chǎn)生新方法”。有謀略才會(huì)有好的戰(zhàn)術(shù)。幾千年前,我們的祖先就在打鬧之際寫(xiě)下了很多心得體會(huì),被現(xiàn)代人很好地運(yùn)用于工業(yè)和商業(yè)。本節(jié)講述軟件開(kāi)發(fā)中的三種基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”。1.2.1 復(fù)用
復(fù)用就是指“利用現(xiàn)成的東西”,文人稱(chēng)之為“拿來(lái)主義”。被復(fù)用的對(duì)象可以是有形的物體,也可以是無(wú)形的成果。復(fù)用不是人類(lèi)懶惰的表現(xiàn)而是智慧的表現(xiàn)。因?yàn)槿祟?lèi)總是在繼承了前人的成果,不斷加以利用、改進(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ì)量),而大量成熟的工作可以通過(guò)復(fù)用來(lái)快速實(shí)現(xiàn)(即具有高生產(chǎn)率)。勤勞并且聰明的人們應(yīng)該把大部分的時(shí)間用在小比例的創(chuàng)新工作上,而把小部分的時(shí)間用在大比例的成熟工作中,這樣才能把工作做得又快又好。
把復(fù)用的思想用于軟件開(kāi)發(fā),稱(chēng)為軟件復(fù)用。據(jù)統(tǒng)計(jì),世上已有1000億多行程序,無(wú)數(shù)功能被重寫(xiě)了成千上萬(wàn)次,真是浪費(fèi)哪。面向?qū)ο螅∣bject Oriented)學(xué)者的口頭禪就是“請(qǐng)不要再發(fā)明相同的車(chē)輪子了”。
將具有一定集成度并可以重復(fù)使用的軟件組成單元稱(chēng)為軟構(gòu)件(Software Component)。軟件復(fù)用可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。復(fù)用方法合理化并簡(jiǎn)化了軟件開(kāi)發(fā)過(guò)程,減少了總的開(kāi)發(fā)工作量與維護(hù)代價(jià),既降低了軟件的成本又提高了生產(chǎn)率。另一方面,由于軟構(gòu)件是經(jīng)過(guò)反復(fù)使用驗(yàn)證的,自身具有較高的質(zhì)量。因此由軟構(gòu)件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過(guò)程如圖1.5所示。
軟件復(fù)用不僅要使自己拿來(lái)方便,還要讓別人拿去方便,是“拿來(lái)拿去主義”。面向?qū)ο蠓椒ǎ琈icrosoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實(shí)現(xiàn)大規(guī)模的軟件復(fù)用。
存在構(gòu)件不存在 圖1.5 利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過(guò)程 1.2.2 分而治之
分而治之是指把一個(gè)復(fù)雜的問(wèn)題分解成若干個(gè)簡(jiǎn)單的問(wèn)題,然后逐個(gè)解決。這種樸素的思想來(lái)源于人們生活與工作的經(jīng)驗(yàn),完全適合于技術(shù)領(lǐng)域。軟件人員在執(zhí)行分而治之的時(shí)候,應(yīng)該著重考慮:復(fù)雜問(wèn)題分解后,每個(gè)問(wèn)題能否用程序?qū)崿F(xiàn)?所有程序最終能否集成為一個(gè)軟件系統(tǒng)并有效解決原始的復(fù)雜問(wèn)題?
解決原始問(wèn)題
分解
集成
圖1.6 軟件領(lǐng)域的分而治之策略
圖1.6表示了軟件領(lǐng)域的分而治之策略。諸如軟件的體系結(jié)構(gòu)設(shè)計(jì)、模塊化設(shè)計(jì)都是分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個(gè)西瓜或是一只雞,揮刀斬成n塊,再把每塊塞進(jìn)嘴里粉碎攪拌,然后交由胃腸來(lái)消化吸收,象征復(fù)雜問(wèn)題的西瓜或是雞也就此消失了。1.2.3 優(yōu)化——折衷
軟件的優(yōu)化是指優(yōu)化軟件的各個(gè)質(zhì)量因素,如提高運(yùn)行速度,提高對(duì)內(nèi)存資源的利用率,使用戶(hù)界面更加友好,使三維圖形的真實(shí)感更強(qiáng)等等。想做好優(yōu)化工作,首先要讓開(kāi)發(fā)人員都有正確的認(rèn)識(shí):優(yōu)化工作不是可有可無(wú)的事情,而是必須要做的事情。當(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的開(kāi)發(fā)者能把很多成熟的圖形技術(shù)發(fā)揮到極致,例如把Bresenham畫(huà)線、多邊形裁剪、樹(shù)遍歷等算法的速度提高近一個(gè)數(shù)量級(jí)。我第一次看到Quake時(shí)不僅感到震動(dòng),而且深受打擊。這個(gè)PC游戲軟件的技術(shù)水平已經(jīng)遠(yuǎn)勝于我所見(jiàn)識(shí)到的國(guó)內(nèi)領(lǐng)先的圖形學(xué)相關(guān)科研成果。這對(duì)我們?nèi)找媸⑿械狞c(diǎn)到完止的研發(fā)工作真是莫大的諷刺。所以當(dāng)我們開(kāi)發(fā)的軟件表現(xiàn)出很多不可救藥的病癥時(shí),不要怨機(jī)器差。真的是我們自己沒(méi)有把工作做好,寫(xiě)不好字卻嫌筆鈍。
就假設(shè)我們經(jīng)過(guò)思想教育后,精神抖擻,隨時(shí)準(zhǔn)備為優(yōu)化工作干上六天七夜。但愿意做并不意味著就能把事情做好。優(yōu)化工作的復(fù)雜之處是很多目標(biāo)存在千絲萬(wàn)縷的關(guān)系,可謂數(shù)不清理還亂。當(dāng)不能夠使所有的目標(biāo)都得到優(yōu)化時(shí),就需要“折衷”策略。
軟件中的折衷策略是指通過(guò)協(xié)調(diào)各個(gè)質(zhì)量因素,實(shí)現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副書(shū)記扮演和事佬的角色:“…為了使整個(gè)組織具有最好的戰(zhàn)斗力,我們要重用幾個(gè)人,照顧一些人,在萬(wàn)不得已的情況下委屈一批人”。
軟件折衷的重要原則是不能使某一方損失關(guān)鍵的職能,更不可以象“舍魚(yú)而取熊掌”那樣拋棄一方。例如3D動(dòng)畫(huà)軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消光照明計(jì)算,那么場(chǎng)景就會(huì)喪失真實(shí)感,3D動(dòng)畫(huà)也就不再有意義了(如果人類(lèi)全是色盲,計(jì)算機(jī)圖形學(xué)將變得異常簡(jiǎn)單)。
人都有惰性,如果允許濫用折衷的話,那么一當(dāng)碰到困難,人們就會(huì)用拆東墻補(bǔ)西墻的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴(yán)正的立場(chǎng):在保證其它因素不差的前提下,使某些因素變得更好。
下面讓我們用“優(yōu)化——折衷”的策略解決“魚(yú)和熊掌不可得兼”的難題。
問(wèn)題提出:假設(shè)魚(yú)每千克10元,熊掌每千克一萬(wàn)元。有個(gè)倔脾氣的人只有20元錢(qián),非得要吃上一公斤美妙的“熊掌燒魚(yú)”,怎么辦?
解決方案:化9元9角9分錢(qián)買(mǎi)999克魚(yú)肉,化10元錢(qián)買(mǎi)1克熊掌肉,可做一道“熊掌戲魚(yú)”菜。剩下的那一分錢(qián)還可建立獎(jiǎng)勵(lì)基金。1.3 一些不正確的觀念
本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學(xué)者少犯相似的錯(cuò)誤。
觀念之一:我們擁有一套講述如何開(kāi)發(fā)軟件的書(shū)籍,書(shū)中充滿(mǎn)了標(biāo)準(zhǔn)與示例,可以幫助我們解決軟件開(kāi)發(fā)中遇到的任何問(wèn)題。
客觀情況:好的參考書(shū)無(wú)疑能指導(dǎo)我們的工作。充分利用書(shū)籍中的方法、技術(shù)和技巧,可以有效地解決軟件開(kāi)發(fā)中大量常見(jiàn)的問(wèn)題。但實(shí)踐者并不能因此依賴(lài)于書(shū)籍,這是因?yàn)椋海?)現(xiàn)實(shí)的工作中,由于條件千差萬(wàn)別,即使是相當(dāng)成熟的軟件工程規(guī)范,常常也無(wú)法套用。(2)軟件技術(shù)日新月異,沒(méi)有哪一種軟件標(biāo)準(zhǔn)能長(zhǎng)盛不衰。祖?zhèn)髅胤皆谀承╊I(lǐng)域很吃香,而在軟件領(lǐng)域則意味著落后。
觀念之二:我們擁有最好的開(kāi)發(fā)工具、最好的計(jì)算機(jī),一定能做出優(yōu)秀的軟件。
客觀情況:良好的開(kāi)發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán)境的是一群庸人,難保他們不干出南轅北轍的事情。
觀念之三:如果我們落后于計(jì)劃,可以增加更多的程序員來(lái)解決。
客觀情況:軟件開(kāi)發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見(jiàn)得力量大。如果給落后于計(jì)劃的項(xiàng)目增添新手,可能會(huì)更加延誤項(xiàng)目。因?yàn)椋海?)新手會(huì)產(chǎn)生很多新的錯(cuò)誤,使項(xiàng)目混亂。(2)老手向新手解釋工作以及交流思想都要花費(fèi)時(shí)間,使實(shí)際開(kāi)發(fā)時(shí)間更少。所以科學(xué)的項(xiàng)目計(jì)劃很重要,不在乎計(jì)劃能提前多少,重在恰如其分。如果用“大躍進(jìn)”的方式奔向共產(chǎn)主義,只會(huì)產(chǎn)生倒退的后果。
觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說(shuō),反正軟件是靈活的,隨時(shí)可以修改。
客觀情況:對(duì)需求把握得越準(zhǔn)確,軟件的修修補(bǔ)補(bǔ)就越少。有些需求在一開(kāi)始時(shí)很難確定,在開(kāi)發(fā)過(guò)程中要不斷地加以改正。軟件修改越早代價(jià)越少,修改越晚代價(jià)越大,就跟治病一樣道理。
1.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):如果開(kāi)發(fā)軟件的目的是為了學(xué)習(xí)或是研究,那么應(yīng)該設(shè)計(jì)一種更快的算法。如果該軟件已經(jīng)用于商業(yè),則需謹(jǐn)慎考慮:若換一臺(tái)更快的計(jì)算機(jī)能解決問(wèn)題,則是最快的解決方案。改進(jìn)算法雖然可以從根本上提高軟件的運(yùn)行速度,但可能引入錯(cuò)誤以及延誤進(jìn)程。技術(shù)狂毫無(wú)疑問(wèn)會(huì)選擇后者,因?yàn)樗麄冇X(jué)得放棄任何可以?xún)?yōu)化的機(jī)會(huì)就等于犯罪。
類(lèi)似的爭(zhēng)議還有:是買(mǎi)現(xiàn)成的程序,還是徹底自己開(kāi)發(fā)?技術(shù)人員和商業(yè)人士常常會(huì)有不同的選擇。
爭(zhēng)議之二:有最好的軟件工程方法,最好的編程語(yǔ)言嗎? 作者觀點(diǎn):在軟件領(lǐng)域永遠(yuǎn)沒(méi)有最好的,只有更好的。能解決問(wèn)題的都是好方法或是好語(yǔ)言。程序員在最初學(xué)習(xí)Basic、Fortran、Pascal、C、C++等語(yǔ)言時(shí)會(huì)感覺(jué)一個(gè)比一個(gè)好,不免有喜新厭舊之舉。而如今的Visual Basic、Delphi、Visual C++、Java等語(yǔ)言各有所長(zhǎng),真的難分優(yōu)劣。開(kāi)發(fā)人員應(yīng)該根據(jù)客觀條件,選擇自己熟悉的方法和語(yǔ)言,才能保證合格的質(zhì)量與生產(chǎn)率。
程序設(shè)計(jì)是自由與快樂(lè)的事情,不要發(fā)誓忠于某某主義而自尋煩惱。
爭(zhēng)議之三:編程時(shí)是否應(yīng)該多使用技巧?
作者觀點(diǎn):就軟件開(kāi)發(fā)而言,技巧的優(yōu)點(diǎn)在于能另辟蹊徑地解決一些問(wèn)題,缺點(diǎn)是技巧并不為人熟知。若在程序中用太多的技巧,可能會(huì)留下隱患,別人也難以理解程序。鑒于一個(gè)局部的優(yōu)點(diǎn)對(duì)整個(gè)系統(tǒng)而言是微不足道的,而一個(gè)錯(cuò)誤則可能是致命的。作者建議用自然的方式編程,少用技巧。
《狼三則》的故事告訴我們“失敗的技巧通常是技倆”。當(dāng)我們?cè)诰幊虝r(shí)無(wú)法判斷是用了技巧還是用了技倆,那就少用。《賣(mài)油翁》的故事又告訴我們“熟能生巧”,表明技巧是自然而然產(chǎn)生的,而不是賣(mài)弄出來(lái)的。賣(mài)油翁的絕技是可到中央電視臺(tái)表演的,而他老人家卻謙虛地說(shuō):“沒(méi)啥沒(méi)啥,用熟了而已”。
爭(zhēng)議之四:軟件中的錯(cuò)誤是否可按嚴(yán)重程度分等級(jí)? 作者觀點(diǎn):在定量分析時(shí),可以將錯(cuò)誤分等級(jí),以便于管理。微軟的一些開(kāi)發(fā)小組將錯(cuò)誤分成四個(gè)等級(jí) [Cusumano 1996],如表1.1所示。一級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致軟件崩潰。
二級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致一個(gè)特性不能運(yùn)行并且沒(méi)有替代方案。三級(jí)嚴(yán)重:錯(cuò)誤導(dǎo)致一個(gè)特性不能運(yùn)行但有替代方案。四級(jí)嚴(yán)重:錯(cuò)誤是表面化的或是微小的。表1.1 錯(cuò)誤的四個(gè)等級(jí)
上述分類(lèi)是非常技術(shù)性的,并不是普適的。假設(shè)某個(gè)財(cái)務(wù)軟件有兩個(gè)錯(cuò)誤:錯(cuò)誤A使該軟件死掉,錯(cuò)誤B導(dǎo)致工資計(jì)算錯(cuò)誤。按表1.1分類(lèi),錯(cuò)誤A屬一級(jí)嚴(yán)重,錯(cuò)誤B屬二級(jí)嚴(yán)重。但事實(shí)上B要比A嚴(yán)重。工資算多了或者算少了,將會(huì)使老板或員工遭受經(jīng)濟(jì)損失。而錯(cuò)誤A只使操作員感到厭煩,并沒(méi)有造成經(jīng)濟(jì)損失。另一個(gè)示例是操作手冊(cè)寫(xiě)錯(cuò),按表1.1分類(lèi)則屬四級(jí)嚴(yán)重,但這種錯(cuò)誤可能導(dǎo)致機(jī)毀人亡。
開(kāi)發(fā)人員應(yīng)該意識(shí)到:所有的錯(cuò)誤都是嚴(yán)重的,不存在微不足道的錯(cuò)誤。這樣才能少犯錯(cuò)誤。1.5 小
結(jié)
軟件工程學(xué)科發(fā)展到今天,已經(jīng)有了很多方法和規(guī)范,學(xué)之不盡。本章只在宏觀上討論了軟件工程的一些思想,更具體的內(nèi)容將在后面的章節(jié)論述。無(wú)論是什么好方法,貴在理解與靈活運(yùn)用,而不可當(dāng)成靈丹妙藥,不象“吃了腦黃金或腦白金,就能使一億人先聰明起來(lái)”。第二章
程序員與程序經(jīng)理
工作在第一線的軟件開(kāi)發(fā)人員是程序員和程序經(jīng)理,他們決定著軟件的命運(yùn)。良好的程序員隊(duì)伍和出色的管理是軟件項(xiàng)目成功的必要條件。管理不是管制,不是去卡住人家的脖子,因?yàn)槌绦騿T不是一群野鴨子。管理的目的是讓大家一起把工作做好,并且讓各人獲得各自的快樂(lè)和滿(mǎn)足。當(dāng)一個(gè)組織被出色地領(lǐng)導(dǎo)時(shí),雇員甚至不知道他們已被領(lǐng)導(dǎo)。在項(xiàng)目完成時(shí),他們會(huì)自豪地說(shuō):“看看我們通過(guò)努力取得的成績(jī)吧”。所以管理者不能老惦記著自己是一個(gè)官,而應(yīng)時(shí)刻意識(shí)到自己是責(zé)任的主要承擔(dān)者。
我們經(jīng)常會(huì)聽(tīng)到有經(jīng)理頭銜的人在高談闊論:“編程我不會(huì),做個(gè)項(xiàng)目還不easy?派個(gè)人去搞系統(tǒng)分析,回頭再叫幾個(gè)程序員把需求譯成程序,不就OK了嗎?”
不懂英語(yǔ)的人準(zhǔn)以為easy和OK是貶義詞。要讓軟件項(xiàng)目失敗很容易,只要符合下列條件之一即可:(1)項(xiàng)目經(jīng)理對(duì)軟件一無(wú)所知;(2)技術(shù)負(fù)責(zé)人對(duì)編程不感興趣;
(3)真真編寫(xiě)代碼的程序員是臨時(shí)雇用的。如果上述三個(gè)條件同時(shí)具備,就請(qǐng)放心失敗好了。
讓我們少幻想自己是比爾·蓋茨,先當(dāng)好程序員和程序經(jīng)理再說(shuō)。
2.1 了 解 程 序 員
早期的程序員干活能從軟件直通硬件,個(gè)個(gè)生猛無(wú)比。又因他們的作息時(shí)間、言行舉止與常人不太一樣,久而久之就給人們留下了“神秘”、“孤僻”的印象。如今軟件行業(yè)被炒得熱火朝天,有能耐的程序員即便躲在大山岙的軍工廠里也能被挖出來(lái)。而更多原本不是程序員的人操起幾本“速成”、“二十一天通”等書(shū)籍也加入了這個(gè)行業(yè)。現(xiàn)在國(guó)內(nèi)號(hào)稱(chēng)有上百萬(wàn)程序員,這支大軍魚(yú)龍混雜,已搞不清那些是正規(guī)軍,那些是民兵游擊隊(duì)了。
真正的程序員都有如下秉性:
一、誠(chéng)實(shí)
程序員在學(xué)習(xí)與工作期間幾乎天天與機(jī)器打交道,壓根就沒(méi)有受欺騙或欺騙人的機(jī)會(huì)。勤奮的程序員在調(diào)試無(wú)窮多的程序Bug時(shí),已經(jīng)深深地接受了“誠(chéng)實(shí)”的教育。不誠(chéng)實(shí)的人,他肯定不想做、也做不好程序員。
有一名市場(chǎng)營(yíng)銷(xiāo)員和一名程序員都在新聞發(fā)布會(huì)上發(fā)言,將一項(xiàng)新技術(shù)的消息公布于眾。
市場(chǎng)營(yíng)銷(xiāo)員說(shuō):“這項(xiàng)技術(shù)比電話、晶體管和原子彈三項(xiàng)發(fā)明加起來(lái)對(duì)世界文明的影響都要大。”
程序員說(shuō):“這項(xiàng)技術(shù)在有限的領(lǐng)域內(nèi),在有限的程度上,解決了一些技術(shù)性的問(wèn)題。”
看來(lái)為了讓我們的民族更加誠(chéng)實(shí),學(xué)電腦真的要從娃娃抓起。
二、簡(jiǎn)單——實(shí)用主義
有人問(wèn)一個(gè)數(shù)學(xué)家,一個(gè)物理學(xué)家和一名程序員:“一個(gè)盒子有幾個(gè)面?”
數(shù)學(xué)家回答說(shuō):“有六個(gè)面,因?yàn)楹凶邮情L(zhǎng)方體。”
物理學(xué)家回答說(shuō):“有12個(gè)面,分為6個(gè)外表面和6個(gè)內(nèi)表面。”
程序員回答說(shuō):“只有兩個(gè)面,里面放電路板和硬盤(pán),外面放顯示器和鍵盤(pán)。”
目前即使最先進(jìn)的計(jì)算機(jī)也不具備智能,程序員的基本工作就是把復(fù)雜的問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)能處理的簡(jiǎn)單的程序。如果一個(gè)問(wèn)題復(fù)雜到連程序員自己都不能理解,他就無(wú)法編出程序讓更笨的計(jì)算機(jī)來(lái)處理。所以程序員信奉“簡(jiǎn)單——實(shí)用”主義。
也有不少做計(jì)算機(jī)“學(xué)問(wèn)”的人顛倒行事。本來(lái)幾句話、幾行程序就能說(shuō)明白的事,非得要抬高到理論創(chuàng)新的程度,寫(xiě)成玄乎的文章去評(píng)教授或者弄個(gè)博士學(xué)位。所幸在第一線工作的程序員大多是實(shí)干的。
三、愛(ài)憎分明
程序員大都喜歡技術(shù)挑戰(zhàn),不喜歡搞測(cè)試與維護(hù)。高水平的程序員喜歡與高水平的程序員一起工作,因?yàn)樗麄兣隆芭c臭棋佬下棋,棋越下越臭”。程序員大都厭惡拉幫結(jié)派、耍政治手腕。不信,數(shù)一數(shù)你認(rèn)識(shí)的程序員,有幾個(gè)是黨派人士?
四、工作單調(diào)但不乏味
有人問(wèn)編程大師:“程序設(shè)計(jì)的真正含義是什么 ?”
大師回答說(shuō):“餓了的時(shí)候就吃,困的時(shí)候就睡,只要時(shí)機(jī)恰當(dāng)就進(jìn)行程序設(shè)計(jì)。”
其實(shí)程序員的生活和工作已融為一體,盡管單調(diào)卻不乏味,還能獨(dú)享孤獨(dú)。有詩(shī)為證:
我編程三日
兩耳不聞人聲
只有硬盤(pán)在歌唱
結(jié)論:優(yōu)秀的程序員沒(méi)有理由不讓人喜歡,他們遠(yuǎn)比怪僻來(lái)得可愛(ài)。奇*書(shū)$網(wǎng)收集整理
2.2 了 解 程 序 經(jīng) 理
這里程序經(jīng)理是指一支程序員隊(duì)伍的領(lǐng)導(dǎo)者,不管他的職務(wù)是開(kāi)發(fā)組長(zhǎng),項(xiàng)目經(jīng)理,還是部門(mén)經(jīng)理。程序經(jīng)理是技術(shù)性的基層或中層干部,是軟件企業(yè)得以發(fā)展的生力軍。程序經(jīng)理的選拔是不容草率的事。不象有些事業(yè)單位,只要政治口號(hào)喊得勤快、能左右逢緣不犯錯(cuò)誤就可混個(gè)領(lǐng)導(dǎo)當(dāng)當(dāng)。也不象一些官僚機(jī)構(gòu),只有兩個(gè)人的辦公室也要設(shè)正主任和副主任。如果碰巧正主任姓傅,副主任姓鄭,還會(huì)斗個(gè)沒(méi)完沒(méi)了。
在一個(gè)管理混亂的軟件公司里,如果某個(gè)程序員能大喊大叫并且干勁十足,那他就能成為一名程序經(jīng)理。微軟公司在選擇經(jīng)理人員時(shí),總是把他們的技術(shù)知識(shí)和運(yùn)用技術(shù)去賺錢(qián)的能力放在首位。程序經(jīng)理一般就是程序員隊(duì)伍中最聰明的那個(gè)家伙。比爾·蓋茨曾這樣描述聰明人[Cusumano1996]:
聰明人一定反應(yīng)敏捷,善于接受新事物。他能迅速進(jìn)入一個(gè)新領(lǐng)域,給你一個(gè)頭頭是道的解釋。他提出的問(wèn)題往往一針見(jiàn)血、擊中要害。他能及時(shí)掌握所學(xué)知識(shí),并且博聞強(qiáng)記,他能把本來(lái)認(rèn)為互不相干的領(lǐng)域聯(lián)系在一起使問(wèn)題得到解決。他富有創(chuàng)新精神與合作精神……
好的程序經(jīng)理應(yīng)該具備以下幾個(gè)條件:
一、技術(shù)水平是程序員隊(duì)伍中的最高級(jí)別
每個(gè)程序員骨子里頭都有一股傲氣,如果你不能技?jí)喝盒郏麄兙筒粫?huì)聽(tīng)你指揮。一個(gè)技術(shù)水平較差的人被任命為程序經(jīng)理真是個(gè)悲劇,就象一個(gè)略有權(quán)勢(shì)的太監(jiān),表面上有人對(duì)他點(diǎn)頭哈腰,背后卻被人鄙視。
二、能做最多且最難的工作
程序經(jīng)理編程要快且好。別人要干一天的活,他半天就能做完,這樣才會(huì)有精力去搞管理。程序經(jīng)理應(yīng)負(fù)責(zé)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)這類(lèi)最難的開(kāi)發(fā)工作,并指導(dǎo)不同水平的程序員把各自的工作做好。如果人手不夠,程序經(jīng)理要能同時(shí)干幾個(gè)人的活。
三、有人格魅力
軟件開(kāi)發(fā)是智力創(chuàng)作過(guò)程,你不能指望僅通過(guò)執(zhí)行規(guī)章制度來(lái)產(chǎn)生好的作品。很多軟件公司的程序經(jīng)理都不是管理專(zhuān)業(yè)出身的,他們也不可能為了搞好管理而成天玩弄心機(jī)。技術(shù)出色的程序經(jīng)理一般少有心術(shù)不正的,所以管理的重點(diǎn)應(yīng)是“以身作則”、“公正待人”。如果程序經(jīng)理在上班時(shí)趴在桌上睡覺(jué),其他程序員也會(huì)這樣干。如果程序經(jīng)理發(fā)現(xiàn)有兩個(gè)程序員趴在機(jī)器旁睡覺(jué),不能只對(duì)其中一個(gè)大聲吼叫:“你一編程就想睡覺(jué),看看人家,在睡覺(jué)時(shí)都想著編程。”
如果管理者沒(méi)有人格魅力,就沒(méi)有人信服你,團(tuán)隊(duì)就不會(huì)有凝聚力,烏合之眾不可能開(kāi)發(fā)出優(yōu)秀的軟件。
結(jié)論:一個(gè)有活力的軟件公司的各級(jí)經(jīng)理都不會(huì)這樣感嘆,“因?yàn)槲疑兑膊粫?huì)干,所以只好當(dāng)領(lǐng)導(dǎo)。” 2.3 程序員升為經(jīng)理后是否還要編程
讓我們先看看Microsoft公司的系統(tǒng)軟件部門(mén)與應(yīng)用軟件部門(mén)的領(lǐng)導(dǎo)是怎樣看待這個(gè)問(wèn)題的[Cusumano1996]。Windows NT 3.0項(xiàng)目的軟件經(jīng)理婁·帕雷羅里讓他手下的經(jīng)理們像他一樣每天花一半的時(shí)間編寫(xiě)代碼:
我在組內(nèi)制定了許多規(guī)則,其中最重要的一條是每個(gè)人都得編程,誰(shuí)也別想坐在那兒發(fā)號(hào)施令……我發(fā)現(xiàn)管理者很容易失去目標(biāo),他們總是無(wú)法認(rèn)識(shí)到問(wèn)題的本質(zhì)并且反應(yīng)遲緩。如果你始終不放棄編寫(xiě)代碼,你就能對(duì)項(xiàng)目的進(jìn)展情況了如指掌,及時(shí)發(fā)現(xiàn)并解決問(wèn)題……我大概每天花一半的時(shí)間編寫(xiě)代碼并尋找項(xiàng)目的缺陷。
作為應(yīng)用軟件領(lǐng)域的經(jīng)理,克里斯·彼得斯也持同樣的看法。在他任Word項(xiàng)目總經(jīng)理時(shí)就認(rèn)為:
在一些大公司內(nèi)部,各部門(mén)經(jīng)理把具體操作的層次向下移。你一旦當(dāng)上開(kāi)發(fā)部門(mén)經(jīng)理,很快就會(huì)以自己身居高位、日理萬(wàn)機(jī)為由放棄編程;同樣地,開(kāi)發(fā)小組的組長(zhǎng)會(huì)以自己重任在肩而不愿編程;至于程序員也會(huì)覺(jué)得自己十分繁忙、分身無(wú)術(shù)而不再多編寫(xiě)程序。雖然我是270名員工的領(lǐng)導(dǎo),似乎不再需要做什么具體的工作了,但我還是為Word新版本編寫(xiě)了一個(gè)特性。
程序員升為經(jīng)理后一定要編程,這個(gè)道理已經(jīng)說(shuō)得很清楚了。最怕的是“虛心接受,堅(jiān)決不做”;或者僅是做個(gè)樣子,每天花一分鐘時(shí)間編程,編譯器還沒(méi)運(yùn)行完就關(guān)掉了。2.4 經(jīng)理與技術(shù)隊(duì)伍的建設(shè)
如果是經(jīng)營(yíng)一個(gè)加工廠或一個(gè)飯店,經(jīng)理們可以不必懂技術(shù)。因?yàn)樗麄兊某WR(shí),以及通過(guò)耳聞目睹或者咨詢(xún)都能解決實(shí)踐中的問(wèn)題。在軟件領(lǐng)域,技術(shù)的力量是無(wú)窮的,一天之內(nèi)就可使整個(gè)產(chǎn)業(yè)發(fā)生巨變。也許你在商業(yè)上很精明,但無(wú)法保證自己在技術(shù)浪潮中安然無(wú)恙。軟件公司的各級(jí)經(jīng)理最好既精通技術(shù)又懂管理。
一個(gè)出色的領(lǐng)導(dǎo),加上一支技術(shù)過(guò)硬的隊(duì)伍,才有可
第二篇:軟件工程的思想
在60年代計(jì)算機(jī)發(fā)展初期,程序設(shè)計(jì)是少數(shù)聰明人干的事。他們的智力與技能超群,編寫(xiě)的程序既能控制弱智的計(jì)算機(jī),又能讓別人看不懂、不會(huì)用。那個(gè)時(shí)期編程就跟捏泥巴一樣隨心所欲,于是他們很過(guò)分地把程序的集合稱(chēng)為軟件,以便自己開(kāi)心或傷心時(shí)再把程序捏個(gè)面目全非。人們就在這種美滋滋的感覺(jué)下熱情地編程,結(jié)果產(chǎn)生了一堆問(wèn)題:程序質(zhì)量低下,錯(cuò)誤頻出,進(jìn)度延誤,費(fèi)用劇增??。這些問(wèn)題導(dǎo)致了“軟件危機(jī)”。
在1968年,一群程序員、計(jì)算機(jī)科學(xué)家與工業(yè)界人士聚集一起共商對(duì)策。通過(guò)借鑒傳統(tǒng)工業(yè)的成功做法,他們主張通過(guò)工程化的方法開(kāi)發(fā)軟件來(lái)解決軟件危機(jī),并冠以“軟件工程”這一術(shù)語(yǔ)。三十年余年來(lái),盡管軟件的一些毛病如人類(lèi)的感冒一樣無(wú)法根治,但軟件的發(fā)展速度超過(guò)了任何傳統(tǒng)工業(yè),期間并未出現(xiàn)真真的軟件危機(jī)。這的確是前人的先見(jiàn)之明。如今軟件工程成了一門(mén)學(xué)科。
軟件工程主要講述軟件開(kāi)發(fā)的道理,基本上是軟件實(shí)踐者的成功經(jīng)驗(yàn)和失敗教訓(xùn)的總結(jié)。軟件工程的觀念、方法、策略和規(guī)范都是樸實(shí)無(wú)華的,平凡之人皆可領(lǐng)會(huì),關(guān)鍵在于運(yùn)用。我們不可以把軟件工程方法看成是諸葛亮的錦囊妙計(jì)─—在出了問(wèn)題后才打開(kāi)看看,而應(yīng)該事先掌握,預(yù)料將要出現(xiàn)的問(wèn)題,控制每個(gè)實(shí)踐環(huán)節(jié),并防患于未然。研究軟件工程永遠(yuǎn)做不到理論家那么瀟灑:定理證明了,就完事。
我在讀大學(xué)的十年里有八年從事軟件開(kāi)發(fā),盡管編寫(xiě)了幾十萬(wàn)行C++/C程序,也經(jīng)歷了若干次小不點(diǎn)兒大的成功和失敗,可老感覺(jué)只學(xué)了些皮毛,心里慌兮兮的。在博士研究生畢業(yè)前的半年里,我告戒自己不應(yīng)該再稀里糊涂地在程序堆里滾爬下去了,于是就面壁反省,做了一陣子木訥的和尚。在“打坐”時(shí),每有心得體會(huì)便記錄下來(lái),不知不覺(jué)湊成了八章經(jīng),我就給此經(jīng)書(shū)起名為《軟件工程思想》。
經(jīng)典的軟件工程書(shū)籍厚得象磚頭,或讓人望而卻步,或讓人看了心事重重。請(qǐng)寬恕我的幼稚,我試圖用三個(gè)問(wèn)題:是什么、為什么、怎么辦,來(lái)解釋軟件工程的道理。所以本書(shū)薄得象餃子皮─—用來(lái)包“思想”這種有味道的“餡”。
項(xiàng)目計(jì)劃與質(zhì)量管理
在可行性分析之后,項(xiàng)目計(jì)劃與質(zhì)量管理將貫穿需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測(cè)試、維護(hù)等軟件工程環(huán)節(jié)。項(xiàng)目計(jì)劃是要提供一份合理的進(jìn)程表,讓所有開(kāi)發(fā)人員任務(wù)明確、步調(diào)一致,最終共同準(zhǔn)時(shí)地完成項(xiàng)目。項(xiàng)目計(jì)劃是要付諸實(shí)施的,不象用嘴巴喊政治口號(hào),可以很夸張。軟件的項(xiàng)目計(jì)劃重在“準(zhǔn)確”而非“快速”。
提高質(zhì)量是軟件工程的主要目標(biāo)。但由于軟件開(kāi)發(fā)是一種智力創(chuàng)作活動(dòng),很難象傳統(tǒng)工業(yè)那樣通過(guò)執(zhí)行嚴(yán)格的操作規(guī)范來(lái)保證軟件產(chǎn)品的質(zhì)量。世上最小心翼翼、最老實(shí)巴腳的程序員未必就能開(kāi)發(fā)出高質(zhì)量的軟件來(lái)。程序員必須了解軟件質(zhì)量的方方面面(稱(chēng)為質(zhì)量因素),如正確性、性能、易用性、靈活性、可復(fù)用性、可理解性等等,才能在進(jìn)行系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)時(shí)將高質(zhì)量?jī)?nèi)建其中。軟件的高質(zhì)量并不是“管理”出來(lái)的,實(shí)質(zhì)上是設(shè)計(jì)出來(lái)的,質(zhì)量的管理只是一種預(yù)防和認(rèn)證的手段而已。
3.1 項(xiàng) 目 計(jì) 劃
做項(xiàng)目計(jì)劃,如同給一個(gè)待出生的嬰兒寫(xiě)傳記那樣困難。如果允許項(xiàng)目結(jié)束后再寫(xiě)計(jì)劃,那就輕松多了,并且可以100% 地準(zhǔn)確。
[[ 歷史教訓(xùn)讓我們明白一個(gè)道理:如果一萬(wàn)年以后才會(huì)有一條陽(yáng)光大道通向共產(chǎn)主義,那么現(xiàn)在就不要忙著砸鍋煉鋼趕英超美,免得在跑步奔向共產(chǎn)主義時(shí)把自己累死餓死]]。在做軟件的項(xiàng)目計(jì)劃時(shí),應(yīng)屏棄一切浮夸作風(fēng)。只有“知已知彼”才能做出合理的項(xiàng)目計(jì)劃。這里“知彼”是指要了解項(xiàng)目的規(guī)模、難度與時(shí)間限制。“知已”是指要了解有多少可用資源,如可調(diào)用的程序員有幾個(gè)?他們的水平如何?軟硬件設(shè)施如何?
3.1.1 知己知彼
首先要了解項(xiàng)目的規(guī)模、難度與時(shí)間限制,才可以確定應(yīng)該投入多少人力、物力去做這個(gè)項(xiàng)目。在可行性分析階段就要考慮這個(gè)問(wèn)題。但不幸的是,人們?cè)谙萑腠?xiàng)目不能自撥之前總難以準(zhǔn)確地估計(jì)項(xiàng)目的規(guī)模與難度。這里經(jīng)驗(yàn)起到了最重要的作用。
項(xiàng)目的時(shí)間限制有兩類(lèi)。第一類(lèi),項(xiàng)目應(yīng)該完成的日期寫(xiě)在合同中,如果延期了,則開(kāi)發(fā)方要作出相應(yīng)的賠償。第二類(lèi)是開(kāi)發(fā)自己的軟件產(chǎn)品,雖然只確定了該產(chǎn)品大致的發(fā)行日期并允許有延誤,但如果拖延太久則會(huì)失去商機(jī)造成損失。項(xiàng)目的資源分為三類(lèi):“人”、“可復(fù)用的軟構(gòu)件”和“軟硬件環(huán)境”,如圖3.1所示。(1)人是最有價(jià)值的資源。項(xiàng)目計(jì)劃的制定者要確定開(kāi)發(fā)人員的名單,要根據(jù)他們的專(zhuān)長(zhǎng)進(jìn)行分工。
(2)可復(fù)用的軟構(gòu)件是次有價(jià)值的資源。1.2.1節(jié)論述了復(fù)用軟構(gòu)件可提高軟件的質(zhì)量與生產(chǎn)率。軟構(gòu)件并非一定要用自己的,可以向?qū)I(yè)的軟件供應(yīng)商購(gòu)買(mǎi)。(3)軟硬件環(huán)境雖然不是最重要的資源,卻是必需的資源。原則上軟硬件環(huán)境只要符合項(xiàng)目的開(kāi)發(fā)要求即可。有些項(xiàng)目可能要用到特殊的設(shè)備,則要事先作好準(zhǔn)備,以免用時(shí)找不到而擔(dān)擱了進(jìn)程。
一個(gè)軟件系統(tǒng)因能給用戶(hù)提供價(jià)值而具有存在價(jià)值,所有的決定都應(yīng)該基于這個(gè)思想。在確定系統(tǒng)需求之前,在關(guān)注系統(tǒng)功能之前,在決定硬件平臺(tái)或者開(kāi)發(fā)過(guò)程之前,問(wèn)問(wèn)你自己:這確實(shí)能為系統(tǒng)增加真正的價(jià)值嗎?如果答案是不,那就堅(jiān)決不做。所有的其他原則都以這條原則為基礎(chǔ)。第2原則:保持簡(jiǎn)潔
軟件設(shè)計(jì)并不是一種隨意的過(guò)程,在軟件設(shè)計(jì)中需要考慮很多因素。所有的設(shè)計(jì)都應(yīng)該盡可能簡(jiǎn)潔,但不是過(guò)于簡(jiǎn)化。這有助于構(gòu)建更易于理解和易于維護(hù)的系統(tǒng)。這并不是說(shuō)那些特征甚至是內(nèi)部特征應(yīng)該以“簡(jiǎn)練”為借口而取消。的確,優(yōu)雅的設(shè)計(jì)通常也是簡(jiǎn)潔的設(shè)計(jì),簡(jiǎn)練也不意味著“快速和粗糙”。事實(shí)上,它經(jīng)常是經(jīng)過(guò)大量思考和多次工作迭代才達(dá)到的,這樣做的回報(bào)是所得到的軟件更易于維護(hù)且存在更少錯(cuò)誤。第3原則:保持愿景
清晰的愿景是軟件項(xiàng)目成功的基礎(chǔ)。沒(méi)有愿景,項(xiàng)目將會(huì)由于它有“兩種或者更多種思想”而永遠(yuǎn)不能結(jié)束如果缺乏概念的一致性,系統(tǒng)就好像是由許多不協(xié)調(diào)的設(shè)計(jì)補(bǔ)丁、錯(cuò)誤的集成方式強(qiáng)行拼湊在一起…如果不能保持軟件系統(tǒng)體系架構(gòu)的愿景,將削弱甚至徹底破壞設(shè)計(jì)良好的系統(tǒng)。授權(quán)體系架構(gòu)師,使其能夠保持愿景,并保證系統(tǒng)實(shí)現(xiàn)始終與愿景保持一致,這對(duì)項(xiàng)目開(kāi)發(fā)成功至關(guān)重要。
第4原則:關(guān)注使用者
有產(chǎn)業(yè)實(shí)力的軟件系統(tǒng)不是在真空中開(kāi)發(fā)和使用的。通常軟件系統(tǒng)必定是由開(kāi)發(fā)者以外的人員使用、維護(hù)和編制文檔等,這就必須要讓別人理解你的系統(tǒng)。因此,在需求說(shuō)明、設(shè)計(jì)和實(shí)現(xiàn)時(shí),經(jīng)常要想到要讓別人理解你所做的事情。對(duì)于任何一個(gè)軟件產(chǎn)品,其工作產(chǎn)品都可能有很多讀者。需求說(shuō)明時(shí)應(yīng)時(shí)刻想到用戶(hù);設(shè)計(jì)中始終想到實(shí)現(xiàn);編碼時(shí)想著那些要維護(hù)和擴(kuò)展系統(tǒng)的人。一些人可能會(huì)被迫調(diào)試你所編寫(xiě)的代碼,這使得他們成了你所編寫(xiě)代碼的使用者,盡可能地使他們的工作簡(jiǎn)單化會(huì)大大提升系統(tǒng)的價(jià)值。
第三篇:軟件工程
1.軟件危機(jī)的概念 系統(tǒng)的數(shù)據(jù)要求,功能需求,性能需求,顯示出程序的輪廓。
軟件危機(jī)是指在計(jì)算機(jī)軟件開(kāi)發(fā)、使用與可靠性需求,可用性需求,出錯(cuò)處理需求,混合方式
維護(hù)過(guò)程中遇到的一系列嚴(yán)重問(wèn)題和難接口需求,約束,逆向需求以及將來(lái)可能優(yōu)點(diǎn):綜合了以上兩種策略的長(zhǎng)處 題。提出的需求。9.確認(rèn)測(cè)試
補(bǔ)充: 5.常使用的圖形工具 確認(rèn)測(cè)試又稱(chēng)有效性測(cè)試。有效性測(cè)試是
1.軟件危機(jī)的表現(xiàn)有哪些? 實(shí)體-聯(lián)系圖,數(shù)據(jù)流圖,狀態(tài)轉(zhuǎn)換圖,在模擬的環(huán)境下,運(yùn)用黑盒測(cè)試的方法,答:1)對(duì)軟件開(kāi)發(fā)成本和進(jìn)度的估計(jì)常層次方框圖,warnier圖,IPO圖。驗(yàn)證被測(cè)軟件是否滿(mǎn)足需求規(guī)格說(shuō)明書(shū)常很不準(zhǔn)確。第五章 列出的需求。任務(wù)是驗(yàn)證軟件的功能和性
2)用戶(hù)對(duì)已完成的軟件不滿(mǎn)意1.總體設(shè)計(jì)的任務(wù) 能及其他特性是否與用戶(hù)的要求一致。對(duì)的現(xiàn)象時(shí)有發(fā)生。劃分出組成系統(tǒng)的物理元素——程序、文軟件的功能和性能要求在軟件需求規(guī)格
3)軟件產(chǎn)品的質(zhì)量往往是靠不件、數(shù)據(jù)庫(kù)、人工過(guò)程和文檔等等 說(shuō)明書(shū)中已經(jīng)明確規(guī)定,它包含的信息就住的。設(shè)計(jì)軟件的結(jié)構(gòu)。也就是要確定系統(tǒng)中每是軟件確認(rèn)測(cè)試的基礎(chǔ)。
4)軟件常常是不可維護(hù)的。個(gè)程序是由哪些模塊組成的,以及這些模10.什么是白盒測(cè)試,其測(cè)試技術(shù)有那些,5)軟件通常沒(méi)有適當(dāng)?shù)奈臋n資塊相互間的關(guān)系。覆蓋標(biāo)準(zhǔn)的強(qiáng)弱程度
料。2.模塊化思想 白盒測(cè)試是一種測(cè)試用例設(shè)計(jì)方法,盒子
6)軟件成本在計(jì)算機(jī)系統(tǒng)總成就是把程序劃分成獨(dú)立命名且可獨(dú)立訪指的是被測(cè)試的軟件,白盒指的是盒子是本中所占比例逐年上升。問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把可視的,你清楚盒子內(nèi)部的東西以及里面
7)軟件開(kāi)發(fā)生產(chǎn)率提高的速度這些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完是如何運(yùn)作的。“白盒”法全面了解程序內(nèi)遠(yuǎn)跟不上日益增長(zhǎng)的軟件需求。成指定的功能滿(mǎn)足用戶(hù)的需求。部邏輯結(jié)構(gòu)、對(duì)所有邏輯路徑進(jìn)行測(cè)試。
2.產(chǎn)生軟件危機(jī)的原因主要有哪些? 3.衡量模塊獨(dú)立的標(biāo)準(zhǔn)(內(nèi)聚和耦合的白盒測(cè)試的測(cè)試方法有代碼檢查法、靜態(tài)答:1)用戶(hù)對(duì)軟件需求的描述不精確。含義,種類(lèi))結(jié)構(gòu)分析法、靜態(tài)質(zhì)量度量法、邏輯覆蓋
2)軟件開(kāi)發(fā)人員對(duì)用戶(hù)需求的內(nèi)聚:標(biāo)志著每一個(gè)模塊內(nèi)各個(gè)元素彼此法、基本路徑測(cè)試法、域測(cè)試、符號(hào)測(cè)試、理解有偏差。結(jié)合的緊密程度,是信息隱藏和局部化概路徑覆蓋和程序變異。
3)缺乏處理大型軟件項(xiàng)目的經(jīng)念的自然拓展。偶然內(nèi)聚,邏輯內(nèi)聚,時(shí)種覆蓋標(biāo)準(zhǔn):語(yǔ)句覆蓋、判定覆蓋、條件驗(yàn)。間內(nèi)聚,功能內(nèi)聚,順序內(nèi)聚,通信內(nèi)聚,覆蓋、判定/條件覆蓋、條件組合覆蓋和
4)開(kāi)發(fā)大型軟件易產(chǎn)生疏漏和過(guò)程內(nèi)聚。路徑覆蓋發(fā)現(xiàn)錯(cuò)誤的能力呈由弱至強(qiáng)的錯(cuò)誤。耦合:是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間變化。
5)缺乏有力的方法學(xué)的指導(dǎo)和互連程度的度量。數(shù)據(jù)耦合,控制耦合,11.什么時(shí)候黑盒測(cè)試,其測(cè)試技術(shù)有哪有效的開(kāi)發(fā)工具的支持。特征耦合,公共環(huán)境耦合,內(nèi)容耦合。些,(等價(jià)劃分,邊介值分析法)
6)面對(duì)日益增長(zhǎng)的軟件需求,4.啟發(fā)式規(guī)則 黑盒測(cè)試也稱(chēng)功能測(cè)試,它是通過(guò)測(cè)試來(lái)人們顯得力不從心。1.改進(jìn)軟件結(jié)構(gòu)提高模塊的獨(dú)立性檢測(cè)每個(gè)功能是否都能正常使用。
2軟件的概念 2.模塊規(guī)模應(yīng)該適中等價(jià)類(lèi)劃分的辦法是把程序的輸入域劃完成特點(diǎn)功能的程序以及數(shù)據(jù)結(jié)構(gòu)和文 3.深度、寬度、扇出和扇入都應(yīng)適當(dāng) 分成若干部分(子集),然后從每個(gè)部分檔 4.模塊的作用范圍應(yīng)在控制范圍之內(nèi)中選取少數(shù)代表性數(shù)據(jù)作為測(cè)試用例
3.軟件工程的基本原理 5.力爭(zhēng)降低模塊接口的復(fù)雜程度 邊界值分析是通過(guò)選擇等價(jià)類(lèi)邊界的測(cè)
1.用分階段的生命周期計(jì)劃嚴(yán)格管理 6.設(shè)計(jì)單入口單出口的模塊試用例。邊界值分析法不僅重視輸入條件
2.堅(jiān)持進(jìn)行階段評(píng)審 7.模塊功能應(yīng)該可以預(yù)測(cè) 邊界,而且也必須考慮輸出域邊界。它是
3.實(shí)行嚴(yán)格的產(chǎn)品控制 5.面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射對(duì)等價(jià)類(lèi)劃分方法的補(bǔ)充。
4.采用現(xiàn)代程序設(shè)計(jì)技術(shù) 成軟件結(jié)構(gòu) 12.軟件調(diào)試技術(shù)有哪些
5.結(jié)果應(yīng)能清楚地審查 信息流:變換流,事物流 蠻干法,蠻干法可能是尋找軟件錯(cuò)誤原因
6.開(kāi)發(fā)小組的人員應(yīng)該少而精 映射:變換分析,事物分析 的最低效的方法,僅當(dāng)所有其他方法都
7.承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性失敗的情況下才使用。
4軟件生命周期分成哪幾個(gè)階段?各階第六章 回溯法,回溯法是一種相當(dāng)常用的調(diào)試方段的任務(wù)是什么? 1.詳細(xì)設(shè)計(jì)的基本任務(wù) 法,當(dāng)調(diào)試小程序時(shí)很有效。從發(fā)現(xiàn)癥
1.問(wèn)題定義: 1.為每個(gè)模塊確定采用的算法。2.確定狀的地方開(kāi)始,人工沿程序的控制流往回
2.可行性研究:研究問(wèn)題的范圍,探索這每一模塊使用的數(shù)據(jù)結(jié)構(gòu)追蹤分析源程序代碼,知道找出錯(cuò)誤原因個(gè)問(wèn)題是否值得去解決,是否有可行的解3.確定模塊接口的細(xì)節(jié),包括對(duì)系統(tǒng)外為止。
決方法。部的接口和用戶(hù)界面,對(duì)系統(tǒng)內(nèi)部其 原因排除法,對(duì)分查找法、歸納法、演繹
3.需求分析:主要是確定目標(biāo)系統(tǒng)必須具它模塊的接口,以及關(guān)于模塊輸入數(shù)據(jù)、法都屬于原因排除法。
備哪些功能 輸出數(shù)據(jù)及局部數(shù)據(jù)的全部細(xì)節(jié)。13.軟件可靠性(可靠性和可用性的含義)
4.總體設(shè)計(jì): 4.為每一模塊設(shè)計(jì)出一組測(cè)試用例。
5.詳細(xì)設(shè)計(jì):就是把解法具體化,設(shè)計(jì)出2.程序的三種基本結(jié)構(gòu)
程序的詳細(xì)規(guī)格說(shuō)明。順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)
6.編碼和單元測(cè)試:寫(xiě)出正確的容易理解3.詳細(xì)設(shè)計(jì)的工具
容易維護(hù)的程序模塊。1.圖形工具
7.綜合測(cè)試:通過(guò)各種類(lèi)型的測(cè)試使軟件2.表格工具
達(dá)到預(yù)定的要求 3.語(yǔ)言工具
8.軟件維護(hù):通過(guò)各種必要的維護(hù)活動(dòng)使4.jackson方法
系統(tǒng)持久地滿(mǎn)足用戶(hù)的需要。(改正性維5.復(fù)雜性度量的方法
護(hù),適應(yīng)性維護(hù),完善性維護(hù),預(yù)防性維Halstead方法:它根據(jù)程序中運(yùn)算符和
護(hù))操作數(shù)的總數(shù)來(lái)度量程序的復(fù)雜程度
5.瀑布模型,快速原型模型,增量模型,McCabe方法 :McCabe方法根據(jù)程序控制
螺旋模型的特點(diǎn) 流的復(fù)雜程度定量度量程序的復(fù)雜程度,瀑布模型階:段時(shí)間具有順序性和依賴(lài)第七章
性。推遲現(xiàn)實(shí)的觀點(diǎn)。質(zhì)量保證的觀點(diǎn)。1.選擇程序設(shè)計(jì)語(yǔ)言應(yīng)考慮哪些因素
快速原型模型:軟件產(chǎn)品的開(kāi)發(fā)基本上是1.系統(tǒng)用戶(hù)的要求
線性順序進(jìn)行的,本質(zhì)是“快速”加速軟2.可以使用的編譯程序
件的開(kāi)發(fā)過(guò)程,節(jié)約軟件開(kāi)發(fā)成本。3.可以得到的軟件工具
增量模型:能在較短時(shí)間內(nèi)向用戶(hù)提交可4.工程規(guī)模
完成部分工作的產(chǎn)品。逐步增加產(chǎn)品功5.程序員的知識(shí)
能,可以使用戶(hù)有較充裕的時(shí)間學(xué)習(xí)和適6.軟件可移植性要求
應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能7.軟件的應(yīng)用領(lǐng)域
給客戶(hù)組織帶來(lái)的沖擊。2.良好的編程風(fēng)格包括哪些方面
螺旋模型:對(duì)可選方案和約束條件的強(qiáng)調(diào)1.程序內(nèi)部的文檔2.數(shù)據(jù)說(shuō)明 3.語(yǔ)句構(gòu)
有利于已有軟件的重用,也有助于把軟件造4.輸入輸出 5.效率
質(zhì)量作為軟件開(kāi)發(fā)的一個(gè)重要目標(biāo)。減少3軟件測(cè)試的目標(biāo)
了過(guò)多的測(cè)試或測(cè)試不足帶來(lái)的風(fēng)險(xiǎn)。更目的:(1)測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤
重要的是在螺旋模型中維護(hù)只是模型的而執(zhí)行程序的過(guò)程;
另一個(gè)周期,在維護(hù)和開(kāi)發(fā)之間并沒(méi)有本(2)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為
質(zhì)區(qū)別。風(fēng)險(xiǎn)驅(qū)動(dòng)的。止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案;
(3)成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未
第二章 發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。
1.可行性研究的目的 定義:為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序
就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)的過(guò)程。
確定問(wèn)題是否能夠解決。補(bǔ)充:
補(bǔ)充: 軟件測(cè)試步驟 :
可行性研究的步驟 :(1)模塊測(cè)試(2)子系統(tǒng)測(cè)試(3)系統(tǒng)
1.復(fù)查系統(tǒng)規(guī)模和目標(biāo)。測(cè)試(4)驗(yàn)收測(cè)試(5)平行運(yùn)行
2.研究現(xiàn)有的系統(tǒng)。4.確定測(cè)試計(jì)劃是在哪個(gè)階段制定的3.導(dǎo)出新系統(tǒng)高層邏輯模型。5.黑盒測(cè)試和白盒測(cè)試的概念
4.進(jìn)一步定義問(wèn)題黑盒測(cè)試
5.導(dǎo)出和評(píng)價(jià)供選擇的解法。1把程序看作一個(gè)黑盒子,完全不考慮程
6.推薦行動(dòng)方針序的內(nèi)部結(jié)構(gòu)和處理過(guò)程
7.草擬開(kāi)發(fā)計(jì)劃2對(duì)程序接口進(jìn)行測(cè)試,檢查程序功能是
8.書(shū)寫(xiě)文檔提交審查 否能按規(guī)格說(shuō)明書(shū)的規(guī)定正常使用;
程序是否能適當(dāng)?shù)亟邮茌斎霐?shù)據(jù)并產(chǎn)生
2.系統(tǒng)流程圖的作用 正確的輸出信息;
系統(tǒng)流程圖是描繪物理系統(tǒng)的傳統(tǒng)工具,程序運(yùn)行過(guò)程中能否保持外部信息的完
它用圖形符號(hào)來(lái)表示系統(tǒng)中的各個(gè)部件。整性
它表達(dá)了系統(tǒng)中各個(gè)元素之間的信息流白盒測(cè)試
動(dòng)的情況。1把程序堪稱(chēng)裝在一個(gè)透明的白盒子里,3.數(shù)據(jù)流圖的概念 測(cè)試者完全知道程序的結(jié)構(gòu)處理算法
數(shù)據(jù)流圖是一種圖形化技術(shù),它描繪信息2按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程
流和數(shù)據(jù)從移動(dòng)到輸出的過(guò)程中所經(jīng)受序中的主要執(zhí)行通路是否都能按的變換。預(yù)定要求正確工作
4.數(shù)據(jù)流圖里面的符號(hào),畫(huà)數(shù)據(jù)流圖。6.測(cè)試的步驟及每個(gè)步驟形成的文檔
5.數(shù)據(jù)字典最基本的功能,以及與數(shù)據(jù)流單元測(cè)試:(模塊測(cè)試)發(fā)現(xiàn)的往往是編
圖的關(guān)系。碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤
最基本的功能:在軟件分析和設(shè)計(jì)的過(guò)程集成測(cè)試:著重測(cè)試模塊的接口 中給人提供關(guān)于數(shù)據(jù)的描述信息。
關(guān)系:數(shù)據(jù)流圖和數(shù)據(jù)字典共同構(gòu)成系統(tǒng)系統(tǒng)測(cè)試:發(fā)現(xiàn)的往往是軟件設(shè)計(jì)中的錯(cuò)的邏輯模型,沒(méi)有數(shù)據(jù)字典,數(shù)據(jù)流圖就誤,也可能發(fā)現(xiàn)需要說(shuō)明中的錯(cuò)誤 不嚴(yán)格,然而沒(méi)有數(shù)據(jù)流圖,數(shù)據(jù)字典也驗(yàn)收測(cè)試:(確認(rèn)測(cè)試)往往發(fā)現(xiàn)需求說(shuō)難于發(fā)揮作用。只有數(shù)據(jù)流圖和對(duì)數(shù)據(jù)流明書(shū)中的錯(cuò)誤 圖中每個(gè)元素的精確定義放在一起,才能7.漸增式和非漸增式的區(qū)別 共同構(gòu)成系統(tǒng)的規(guī)格說(shuō)明。“非漸增式”,即先獨(dú)立地測(cè)試每一模塊,第三章 然后將所有這些模塊連接到一起運(yùn)行; 1.需求分析屬于哪一個(gè)階段,任務(wù)是什“漸增式”,即在已測(cè)試過(guò)的N個(gè)模塊的么。基礎(chǔ)上再增加一個(gè)模塊,再對(duì)N十1個(gè)模需求分析是軟件定義時(shí)期的最后一個(gè)階塊進(jìn)行測(cè)試。段.漸增式比非漸增式優(yōu)越,因?yàn)橛脻u增式,1.確定對(duì)系統(tǒng)的綜合要求(功能需求,性如果是“由頂向下”則可利用前面已測(cè)試能需求,可靠性和可用性需求,出錯(cuò)處理過(guò)的模塊,而不必另外準(zhǔn)備驅(qū)動(dòng)模塊,如需求,接口需求,約束,逆向需求,將來(lái)果是“由底向上”,也可利用已測(cè)試過(guò)的可能提出的要求)模塊,不必再準(zhǔn)備樁模塊。漸增式可以較2.分析系統(tǒng)的數(shù)據(jù)要求早地發(fā)現(xiàn)模塊界面之間的錯(cuò)誤,有利于排3.導(dǎo)出系統(tǒng)的邏輯模型 錯(cuò),檢查比較徹底 4.修正系統(tǒng)開(kāi)發(fā)計(jì)劃2.需求分析的產(chǎn)品是什么 8.自頂向下,自下而上,以及混合策略的3.面向過(guò)程的分析方法主要是建立三類(lèi)優(yōu)缺點(diǎn) 模型 自頂向下數(shù)據(jù)模型(按照用戶(hù)的觀點(diǎn)對(duì)數(shù)據(jù)建立的優(yōu)點(diǎn):能較早顯示整個(gè)程序的輪廓,向用模型,把用戶(hù)的數(shù)據(jù)要求清楚,準(zhǔn)確地描戶(hù)展示程序的概貌,取得用戶(hù)的理解與支述出來(lái)。描述了從用戶(hù)角度看到的數(shù)據(jù),持。缺點(diǎn):當(dāng)測(cè)試上層模塊時(shí)因使用樁它反應(yīng)了用戶(hù)的現(xiàn)實(shí)環(huán)境,屬性,聯(lián)系),模塊較多,很難模擬出真實(shí)模塊的全部功功能模型,行為模型(通過(guò)描繪系統(tǒng)的狀能,使部分測(cè)試內(nèi)容被迫推遲,只能等待態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件來(lái)表示系換上真實(shí)模塊后再補(bǔ)充測(cè)試。統(tǒng)的行為)由底向上4.軟件需求規(guī)格說(shuō)明書(shū)的內(nèi)容 優(yōu)點(diǎn):測(cè)試從下層模塊開(kāi)始,測(cè)試設(shè)計(jì)用通常用自然語(yǔ)言完整,準(zhǔn)確,具體地描述例比較容易。缺點(diǎn):在測(cè)試的早期不能
第四篇:《軟件工程》
《軟件工程》課程分析
本課程是軟件技術(shù)專(zhuān)業(yè)學(xué)生必修的一門(mén)專(zhuān)業(yè)必修課。根據(jù)培養(yǎng)軟件開(kāi)發(fā)人員的需要,本課程的任務(wù)是使學(xué)生通過(guò)本課程的學(xué)習(xí),了解軟件項(xiàng)目開(kāi)發(fā)和維護(hù)的一般過(guò)程,掌握軟件開(kāi)發(fā)的傳統(tǒng)方法和最新方法。能在軟件工程的理論指導(dǎo)下,開(kāi)發(fā)一個(gè)小型管理系統(tǒng),為今后從事軟件工程實(shí)踐打下良好的基礎(chǔ)。
一、課程分析
(一)教學(xué)計(jì)劃的制定和教學(xué)內(nèi)容的選取
根據(jù)培養(yǎng)應(yīng)用技能型人才的總目標(biāo),制訂本專(zhuān)業(yè)教學(xué)計(jì)劃,課程的教材配套,教學(xué)、實(shí)驗(yàn)、實(shí)訓(xùn)、課程設(shè)計(jì)大綱和指導(dǎo)書(shū)等教學(xué)文件齊全,近幾年來(lái)引入了現(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)軟件開(kāi)發(fā)的,和實(shí)踐聯(lián)系非常緊密。所以采用了理論聯(lián)系實(shí)際的方法進(jìn)行授課。一方面,讓學(xué)生模擬軟件公司的項(xiàng)目小組進(jìn)行軟件開(kāi)發(fā);一方面,對(duì)學(xué)生進(jìn)行適時(shí)的理論指導(dǎo)。既調(diào)動(dòng)了學(xué)生的積極性,又讓學(xué)生了解了該課程的理論內(nèi)容,收到了一舉兩得的效果。具體教學(xué)過(guò)程如下:
第一步:模擬軟件公司的開(kāi)發(fā)項(xiàng)目小組,分組,分設(shè)角色(項(xiàng)目經(jīng)理、用戶(hù)、需求人員、設(shè)計(jì)人員、程序員、測(cè)試人員、軟件安裝培訓(xùn)維護(hù)人員),確定開(kāi)發(fā)題。讓每個(gè)小組的學(xué)生聚在一起,在項(xiàng)目經(jīng)理的組織下通過(guò)調(diào)研、討論來(lái)制定自己小組的開(kāi)發(fā)題目,大家感覺(jué)就象在軟件公司實(shí)習(xí)一樣,非常新鮮,感興趣。每個(gè)學(xué)生都積極主動(dòng)的去完成自己應(yīng)承擔(dān)的那部分工作。
第二步:模擬軟件項(xiàng)目開(kāi)發(fā)全過(guò)程的各個(gè)階段,進(jìn)行相關(guān)的理論授課和實(shí)際開(kāi)發(fā)。即對(duì)軟件開(kāi)發(fā)的每一階段,首先按照教材內(nèi)容進(jìn)行理論授課,然后讓學(xué)生參照授課內(nèi)容進(jìn)行實(shí)際的軟件開(kāi)發(fā)實(shí)踐。
在此階段結(jié)束后,每班召開(kāi)一個(gè)模擬方案論證會(huì),由各開(kāi)發(fā)小組選出代表上臺(tái)講解本組的開(kāi)發(fā)方案,其他同學(xué)模擬用戶(hù)對(duì)開(kāi)發(fā)方案提出意見(jiàn)。由于大家對(duì)模擬方案論證會(huì)非常感興趣,發(fā)言積極踴躍,論證會(huì)結(jié)束后,每個(gè)小組的設(shè)計(jì)方案都得到了很好的補(bǔ)充和完善。
第三步:學(xué)期末各小組提交各自完成的軟件系統(tǒng)及開(kāi)發(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)。
二、存在的問(wèn)題與希望
在上述的教學(xué)中,雖然實(shí)現(xiàn)了理論聯(lián)系實(shí)際,但也存在著一些問(wèn)題,比如每個(gè)項(xiàng)目小組中總有個(gè)別同學(xué)存在依賴(lài)心理,不參與項(xiàng)目開(kāi)發(fā),最后抄襲別的同學(xué)的項(xiàng)目成果,自己得不到實(shí)際的鍛煉,影響了大三的畢業(yè)設(shè)計(jì)和日后的軟件開(kāi)發(fā)。另外,如果該課程只上課,沒(méi)有實(shí)訓(xùn)的話,實(shí)驗(yàn)課時(shí)太少,學(xué)生很難全面完成一個(gè)系統(tǒng)的開(kāi)發(fā)。
第五篇:軟件工程
軟件工程
1.談?wù)勀銓?duì)軟件工具的理解,你用過(guò)什么軟件工具
軟件工具是指為支持計(jì)算機(jī)軟件的開(kāi)發(fā)、維護(hù)、模擬、移植或管理而研制的程序系統(tǒng)。它是為專(zhuān)門(mén)目的而開(kāi)發(fā)的,在軟件工程范圍內(nèi)也就是為實(shí)現(xiàn)軟件生存期中的各種處理活動(dòng)(包括管理、開(kāi)發(fā)和維護(hù))的自動(dòng)化和半自動(dòng)化面開(kāi)發(fā)的程序系統(tǒng)。
開(kāi)發(fā)軟件工具的最終目的是為了提高軟件生產(chǎn)率和改善軟件的質(zhì)量。
軟件工具分為六類(lèi):模擬工具、開(kāi)發(fā)工具、測(cè)試和評(píng)估工具、運(yùn)行和維護(hù)工具、性能質(zhì)量工具和程序設(shè)計(jì)支持工具。
應(yīng)該是看對(duì)象來(lái)選擇測(cè)試工具!比如:
功能測(cè)試工具:WinRunner
性能測(cè)試工具:LoadRunner
內(nèi)存泄漏測(cè)試工具:Purify
單元測(cè)試工具:Junit
測(cè)試管理工具:TestDirector還有東軟的bugbaseIBM開(kāi)發(fā)的 rational。
2.什么是軟件的可維護(hù)性:
軟件可維護(hù)性即維護(hù)人員對(duì)該軟件進(jìn)行維護(hù)的難易程度,具體包括理解、改正、改動(dòng)和改進(jìn)該軟件的難易程度。
決定可維護(hù)性的因素:
1.系統(tǒng)的大小
2.系統(tǒng)的年齡
3.結(jié)構(gòu)合理性
可維護(hù)性的度量:
可理解性
可測(cè)試性
可修改性
可移植性
3.軟件開(kāi)發(fā)和寫(xiě)程序有什么不同?軟件開(kāi)發(fā)的內(nèi)容是:需求、設(shè)計(jì)、編程和 測(cè)試 維護(hù)!
需求分析
軟件需求分析就是回答做什么的問(wèn)題。它是一個(gè)對(duì)用戶(hù)的需求進(jìn)行去粗取精、去偽存真、正確理解,然后把它用軟件工程開(kāi)發(fā)語(yǔ)言(形式功能規(guī)約,即需求規(guī)格說(shuō)明書(shū))表達(dá)出來(lái)的過(guò)程。本階段的基本任務(wù)是和用戶(hù)一起確定要解決的問(wèn)題,建立軟件的邏輯模型,編寫(xiě)需求規(guī)格說(shuō)明書(shū)文檔并最終得到用戶(hù)的認(rèn)可。需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。本階段的工作是根據(jù)需求說(shuō)明書(shū)的要求,設(shè)計(jì)建立相應(yīng)的軟件系統(tǒng)的體系結(jié)構(gòu),并將整個(gè)系統(tǒng)分解成若干個(gè)子系統(tǒng)或模塊,定義子系統(tǒng)或模塊間的接口關(guān)系,對(duì)各子系統(tǒng)進(jìn)行具體設(shè)計(jì)定義,編寫(xiě)軟件概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)說(shuō)明書(shū),數(shù)據(jù)庫(kù)或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)說(shuō)明書(shū),組裝測(cè)試計(jì)劃。
設(shè)計(jì)
軟件設(shè)計(jì)可以分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。實(shí)際上軟件設(shè)計(jì)的主要任務(wù)就是將軟件分解成模塊是指能實(shí)現(xiàn)某個(gè)功能的數(shù)據(jù)和程序說(shuō)明、可執(zhí)行程序的程序單元。可以是一個(gè)函數(shù)、過(guò)程、子程序、一段帶有程序說(shuō)明的獨(dú)立的程序和數(shù)據(jù),也可以是可組合、可分解和可更換的功能單元。模塊,然后進(jìn)行模塊設(shè)計(jì)。概要設(shè)計(jì)就是結(jié)構(gòu)設(shè)計(jì),其主要目標(biāo)就是給出軟件的模塊結(jié)構(gòu),用軟件結(jié)構(gòu)圖表示。詳細(xì)設(shè)計(jì)的首要任務(wù)就是設(shè)計(jì)模塊的程序流程、算法和數(shù)據(jù)結(jié)構(gòu),次要任務(wù)就是設(shè)計(jì)數(shù)據(jù)庫(kù),常用方法還是結(jié)構(gòu)化程序設(shè)計(jì)方法。
編碼
軟件編碼是指把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序,即寫(xiě)成以某一程序設(shè)計(jì)語(yǔ)言表示的“源程序清單”。充分了解軟件開(kāi)發(fā)語(yǔ)言、工具的特性和編程風(fēng)格,有助于開(kāi)發(fā)工具的選擇以及保證軟件產(chǎn)品的開(kāi)發(fā)質(zhì)量。
測(cè)試
軟件測(cè)試的目的是以較小的代價(jià)發(fā)現(xiàn)盡可能多的錯(cuò)誤。不同的測(cè)試方法有不同的測(cè)試用例設(shè)計(jì)方法。兩種常用的測(cè)試方法是白盒法測(cè)試對(duì)象是源程序,依據(jù)的是程序內(nèi)部的的邏輯結(jié)構(gòu)來(lái)發(fā)現(xiàn)軟件的編程錯(cuò)誤、結(jié)構(gòu)錯(cuò)誤和數(shù)據(jù)錯(cuò)誤。結(jié)構(gòu)錯(cuò)誤包括邏輯、數(shù)據(jù)流、初始化等錯(cuò)誤。用例設(shè)計(jì)的關(guān)鍵是以較少的用例覆蓋盡可能多的內(nèi)部程序邏輯結(jié)果。白盒法和黑盒法依據(jù)的是軟件的功能或軟件行為描述,發(fā)現(xiàn)軟件的接口、功能和結(jié)構(gòu)錯(cuò)誤。其中接口錯(cuò)誤包括內(nèi)部/外部接口、資源管理、集成化以及系統(tǒng)錯(cuò)誤。黑盒法用例設(shè)計(jì)的關(guān)鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。黑盒法。
維護(hù)
維護(hù)是旨在已完成對(duì)軟件的研制(分析、設(shè)計(jì)、編碼和測(cè)試)工作并交付使用以后,對(duì)軟件產(chǎn)品所進(jìn)行的一些軟件工程的活動(dòng)。即根據(jù)軟件運(yùn)行的情況,對(duì)軟件進(jìn)行適當(dāng)修改,以適應(yīng)新的要求,以及糾正運(yùn)行中發(fā)現(xiàn)的錯(cuò)誤。編寫(xiě)軟件問(wèn)題報(bào)告、軟件修改報(bào)告。
4.什么是軟件設(shè)計(jì)的”高內(nèi)聚 低耦合”
內(nèi)聚:一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度
耦合:一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量
對(duì)于低耦合,(模塊的獨(dú)立性)
一個(gè)完整的系統(tǒng),模塊與模塊之間,盡可能的使其獨(dú)立存在。也就是說(shuō),讓每個(gè)模塊,盡可能的獨(dú)立完成某個(gè)特定的子功能。模塊與模塊之間的接口,盡量的少而簡(jiǎn)單。如果某兩個(gè)模塊間的關(guān)系比較復(fù)雜的話,最好首先考慮進(jìn)一步的模塊劃分。這樣有利于修改和組合.對(duì)于高內(nèi)聚:
在一個(gè)模塊內(nèi),讓每個(gè)元素之間都盡可能的緊密相連。也就是充分利用每一個(gè)元素的功能,各施所能,以最終實(shí)現(xiàn)某個(gè)功能。
5.case在軟件工程中的作用
CASE(Computer Aided(or Assisted)Software Engineering計(jì)算機(jī)輔助軟件工程。CASE的一個(gè)基本思想就是提供一組能夠自動(dòng)覆蓋軟件開(kāi)發(fā)生命周期各個(gè)階段的集成的、減少勞動(dòng)力的工具。CASE已被證明可以加快開(kāi)發(fā)速度,提高應(yīng)用軟件生產(chǎn)率并保證應(yīng)用軟件的可靠品質(zhì)。CASE工具由許多部分組成,一般我們按軟件開(kāi)發(fā)的不同階段分為上層CASE和下層CASE產(chǎn)品。上層或前端CASE工具自動(dòng)進(jìn)行應(yīng)用的計(jì)劃、設(shè)計(jì)和分析,幫助用戶(hù)定義需求,產(chǎn)生需求說(shuō)明,并可完成與應(yīng)用開(kāi)發(fā)相關(guān)的所有計(jì)劃工作。下層或后端CASE工具自動(dòng)進(jìn)行應(yīng)用系統(tǒng)的編程、測(cè)試和維護(hù)工作。
除非下層CASE和上層CASE工具的供應(yīng)商提供統(tǒng)一界面,否則用戶(hù)必須編寫(xiě)或重新將所有信息從上層CASE工具轉(zhuǎn)換到下層CASE工具。獨(dú)立的CASE工具供應(yīng)商愈來(lái)愈希望將它們的工具連接在一起建立統(tǒng)一的界面以減少用戶(hù)不必要的開(kāi)發(fā)工作。
CASE工具帶來(lái)的好處
計(jì)算機(jī)專(zhuān)業(yè)人員利用計(jì)算機(jī)使他們的企業(yè)提高了效率,企業(yè)的各個(gè)部門(mén)通過(guò)使用計(jì)算機(jī)
提高了生產(chǎn)率和效率,增強(qiáng)了企業(yè)的競(jìng)爭(zhēng)力并使之帶來(lái)了更多的利潤(rùn)。
6.為什么要進(jìn)行軟件測(cè)試?常用的軟件測(cè)試的方法有哪些?
軟件測(cè)試的目的:盡可能發(fā)現(xiàn)并改正被測(cè)試軟件中的錯(cuò)誤,提高軟件的可靠性。
軟件測(cè)試方法主要包括單元測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試,用戶(hù)測(cè)試,回歸測(cè)試。
還有就是自定而下,和自下而上的方法。
7.談?wù)勀銓?duì)保證軟件質(zhì)量的技術(shù)和方法的認(rèn)識(shí)? 1.作為一個(gè)軟件質(zhì)量保證人員需要良好的溝通能力,因?yàn)槿绻麤](méi)有良好的溝通能力,很多問(wèn)題都沒(méi)有辦法解決,原因很簡(jiǎn)單,測(cè)試人員發(fā)現(xiàn)了bug,開(kāi)發(fā)人員或項(xiàng)目經(jīng)理在怎么不理,但是他們都會(huì)想到,萬(wàn)一測(cè)試人員發(fā)現(xiàn)了bug而自己忽視了,那么就有可能成為軟件里的一顆不定時(shí)地炸彈,那么作為一個(gè)開(kāi)發(fā)人員或項(xiàng)目經(jīng)理對(duì)bug的重視程度肯定相對(duì)比較高,至少要看測(cè)試人員發(fā)現(xiàn)的bug,但是QA就不一定了,因?yàn)镼A保證的流程的正確的執(zhí)行,相關(guān)人員就是認(rèn)為流程不重要,只要我開(kāi)發(fā)的產(chǎn)品沒(méi)有問(wèn)題那就沒(méi)有問(wèn)題,客戶(hù)肯定不會(huì)關(guān)注我的流程,在加上古人的名言“結(jié)果說(shuō)明了一切”,所以沒(méi)有良好的溝通能力,一些問(wèn)題將很難去解決,做起來(lái)就沒(méi)有成就感。
2.個(gè)人感覺(jué)比溝通能力更重要的是,堅(jiān)持原則,在遇到困難的時(shí)候,是不是還能堅(jiān)持原則,在遇到項(xiàng)目組的種種不理不睬的時(shí)候,是不是還能堅(jiān)持原則,在項(xiàng)目組不按照計(jì)劃走的時(shí)候,是不是還能堅(jiān)持原則。
3.個(gè)人心態(tài),我工作三年的經(jīng)歷告訴我,如果開(kāi)發(fā)和測(cè)試相比,開(kāi)發(fā)是天堂,測(cè)試是地獄的話,但如果測(cè)試和QA相比的話,那測(cè)試就是天堂,QA就是地獄,所以心態(tài)很重要,在三年里我就鍛煉成一個(gè)非常好的心態(tài),隨便怎么說(shuō)CMMI沒(méi)用,隨便怎么說(shuō)CMMI就是寫(xiě)文檔,隨便怎么說(shuō)QA真煩人,我笑容依然燦爛,從容面對(duì),而且一個(gè)QA要有堅(jiān)定的信念,如果你都不相信過(guò)程能給項(xiàng)目開(kāi)發(fā)帶來(lái)好處,那你還指望誰(shuí)能相信。
8.提高軟件生產(chǎn)率有哪些手段?
1.挑選精干人員(管理 計(jì)劃不好 技術(shù)搭配不當(dāng))
2.提高階段效率 3消除人工階段
4.減少重復(fù)勞動(dòng) 5.建造簡(jiǎn)單產(chǎn)品
6.重用軟部件庫(kù)(已經(jīng)存在的軟件功能部件
9.什么是軟件的可靠性和有用性
可靠性就是指軟件運(yùn)行的穩(wěn)定性,可用性就是操作的便利性。比如一輛汽車(chē),可靠性好應(yīng)該歸功于機(jī)械部分,可用性好則是內(nèi)飾和中控系統(tǒng)的功勞。
10什么是軟件規(guī)格說(shuō)明?作用是什么?將其形式化的意義是什么?
11.什么是軟件重用?實(shí)現(xiàn)軟件重用的方法有哪些?
軟件重用,是指在兩次或多次不同的軟件開(kāi)發(fā)過(guò)程中重復(fù)使用相同或相似軟件元素的過(guò)程。軟件元素包括程序代碼、測(cè)試用例、設(shè)計(jì)文檔、設(shè)計(jì)過(guò)程、需要分析文檔甚至領(lǐng)域知識(shí)。通常,可重用的元素也稱(chēng)作軟構(gòu)件,可重用的軟構(gòu)件越大,重用的粒度越大。
根據(jù)軟件開(kāi)發(fā)的不同階段實(shí)現(xiàn)軟件重用主要有四個(gè)途徑:
抽象:對(duì)重用對(duì)象概括提煉,從而得到能全面描述側(cè)重算法和數(shù)據(jù)結(jié)構(gòu)的軟件構(gòu)件的各部分的描述。
選擇:是對(duì)重用對(duì)象進(jìn)行存放,匹配和檢索的功能。
實(shí)例化:對(duì)數(shù)據(jù)類(lèi)型中對(duì)象進(jìn)行參數(shù)的提供 轉(zhuǎn)換。
集成:
12.什么是軟件移植?你認(rèn)為構(gòu)造一個(gè)工具實(shí)現(xiàn)windows到Unix的移植有意義嗎?難大不? 軟件可移植性是指代碼可以在不同平臺(tái)間移植,我們一般說(shuō)的軟件的可移植性指的是軟件可移植性,簡(jiǎn)單的說(shuō)就是指源代碼移到不同的平臺(tái)下(不同的操作系統(tǒng),例如從Windows
下移到Linux下)時(shí),需要修改的內(nèi)容越少,移植性越好。要保證軟件可移植性,就是少用或不用系統(tǒng)特有的東西,比如你用C語(yǔ)言編程,你可以使用C語(yǔ)言本身的庫(kù),但不要用
WindowsAPI函數(shù),因?yàn)閃indowsAPI函數(shù)在Linux下是沒(méi)有的,如果想移植到Linux平臺(tái)下,使用WindowsAPI函數(shù)的部分代碼就要做出修改了。