302班

          java突擊隊(duì)
          posts - 151, comments - 74, trackbacks - 0, articles - 14
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          軟件工程介紹

          Posted on 2007-07-05 18:59 停留的風(fēng) 閱讀(1286) 評(píng)論(1)  編輯  收藏 所屬分類: 美文轉(zhuǎn)載

          軟件工程(Software Engineering,簡稱為SE)是一門研究用工程化方法構(gòu)建和維護(hù)有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科。它涉及到程序設(shè)計(jì)語言,數(shù)據(jù)庫,軟件開發(fā)工具,系統(tǒng)平臺(tái),標(biāo)準(zhǔn),設(shè)計(jì)模式等方面。

                在現(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ì)量。

                軟件工程師是對(duì)應(yīng)用軟件創(chuàng)造軟件的人們的統(tǒng)稱,軟件工程師按照所處的領(lǐng)域不同可以分為系統(tǒng)分析員,軟件設(shè)計(jì)師,系統(tǒng)架構(gòu)師,程序員,測試員等等。人們也常常用程序員來泛指各種軟件工程師。

               軟件工程(SoftWare Engineering)的框架可概括為:目標(biāo)、過程和原則。

               (1)軟件工程目標(biāo):生產(chǎn)具有正確性、可用性以及開銷合宜的產(chǎn)品。正確性指軟件產(chǎn)品達(dá)到預(yù)期功能的程度。可用性指軟件基本結(jié)構(gòu)、實(shí)現(xiàn)及文檔為用戶可用的程度。開銷合宜是指軟件開發(fā)、運(yùn)行的整個(gè)開銷滿足用戶要求的程度。這些目標(biāo)的實(shí)現(xiàn)不論在理論上還是在實(shí)踐中均存在很多待解決的問題,它們形成了對(duì)過程、過程模型及工程方法選取的約束。

               (2)軟件工程過程:生產(chǎn)一個(gè)最終能滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟。軟件工程過程主要包括開發(fā)過程、運(yùn)作過程、維護(hù)過程。它們覆蓋了需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及維護(hù)等活動(dòng)。需求活動(dòng)包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規(guī)約。需求分析生成功能規(guī)約。設(shè)計(jì)活動(dòng)一般包括概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)建立整個(gè)軟件系統(tǒng)結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊的接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說明及加工描述。實(shí)現(xiàn)活動(dòng)把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動(dòng)貫穿于整個(gè)開發(fā)過程,實(shí)現(xiàn)完成后的確認(rèn),保證最終產(chǎn)品滿足用戶的要求。維護(hù)活動(dòng)包括使用過程中的擴(kuò)充、修改與完善。伴隨以上過程,還有管理過程、支持過程、培訓(xùn)過程等。

                (3)軟件工程的原則是指圍繞工程設(shè)計(jì)、工程支持以及工程管理在軟件開發(fā)過程中必須遵循的原則。

          一、軟件工程概述

                概念:應(yīng)需而生

            軟件工程是一類工程。工程是將理論和知識(shí)應(yīng)用于實(shí)踐的科學(xué)。就軟件工程而言,它借鑒了傳統(tǒng)工程的原則和方法,以求高效地開發(fā)高質(zhì)量軟件。其中應(yīng)用了計(jì)算機(jī)科學(xué)、數(shù)學(xué)和管理科學(xué)。計(jì)算機(jī)科學(xué)和數(shù)學(xué)用于構(gòu)造模型與算法,工程科學(xué)用于制定規(guī)范、設(shè)計(jì)范型、評(píng)估成本及確定權(quán)衡,管理科學(xué)用于計(jì)劃、資源、質(zhì)量和成本的管理。

                軟件工程這一概念,主要是針對(duì)20世紀(jì)60年代“軟件危機(jī)”而提出的。它首次出現(xiàn)在1968年NATO(北大西洋公約組織)會(huì)議上。自這一概念提出以來,圍繞軟件項(xiàng)目,開展了有關(guān)開發(fā)模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,開發(fā)了一些結(jié)構(gòu)化程序設(shè)計(jì)語言(例如PASCAL語言,Ada語言)、結(jié)構(gòu)化方法等。并且圍繞項(xiàng)目管理提出了費(fèi)用估算、文檔復(fù)審等方法和工具。綜觀60年代末至80年代初,其主要特征是,前期著重研究系統(tǒng)實(shí)現(xiàn)技術(shù),后期開始強(qiáng)調(diào)開發(fā)管理和軟件質(zhì)量。

                70年代初,自“軟件工廠”這一概念提出以來,主要圍繞軟件過程以及軟件復(fù)用,開展了有關(guān)軟件生產(chǎn)技術(shù)和軟件生產(chǎn)管理的研究與實(shí)踐。其主要成果有:提出了應(yīng)用廣泛的面向?qū)ο笳Z言以及相關(guān)的面向?qū)ο蠓椒ǎ罅﹂_展了計(jì)算機(jī)輔助軟件工程的研究與實(shí)踐。尤其是近幾年來,針對(duì)軟件復(fù)用及軟件生產(chǎn),軟件構(gòu)件技術(shù)以及軟件質(zhì)量控制技術(shù)、質(zhì)量保證技術(shù)得到了廣泛的應(yīng)用。目前各個(gè)軟件企業(yè)都十分重視資質(zhì)認(rèn)證,并想通過這些工作進(jìn)行企業(yè)管理和技術(shù)的提升。軟件工程所涉及的要素可概括如下:

                根據(jù)這一框架,可以看出:軟件工程涉及了軟件工程的目標(biāo)、軟件工程原則和軟件工程活動(dòng)。

                目標(biāo):我的眼里只有“產(chǎn)品”

                軟件工程的主要目標(biāo)是:生產(chǎn)具有正確性、可用性以及開銷合宜的產(chǎn)品。正確性意指軟件產(chǎn)品達(dá)到預(yù)期功能的程度。可用性指軟件基本結(jié)構(gòu)、實(shí)現(xiàn)及文檔為用戶可用的程度。開銷合宜性是指軟件開發(fā)、運(yùn)行的整個(gè)開銷滿足用戶要求的程度。這些目標(biāo)的實(shí)現(xiàn)不論在理論上還是在實(shí)踐中均存在很多問題有待解決,它們形成了對(duì)過程、過程模型及工程方法選取的約束。

                軟件工程活動(dòng)是“生產(chǎn)一個(gè)最終滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟”。主要包括需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及支持等活動(dòng)。需求活動(dòng)包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規(guī)約。需求分析生成功能規(guī)約。設(shè)計(jì)活動(dòng)一般包括概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)建立整個(gè)軟件體系結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說明及加工描述。實(shí)現(xiàn)活動(dòng)把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動(dòng)貫穿于整個(gè)開發(fā)過程,實(shí)現(xiàn)完成后的確認(rèn),保證最終產(chǎn)品滿足用戶的要求。支持活動(dòng)包括修改和完善。伴隨以上活動(dòng),還有管理過程、支持過程、培訓(xùn)過程等。

                框架:四項(xiàng)基本原則是基石

            軟件工程圍繞工程設(shè)計(jì)、工程支持以及工程管理,提出了以下四項(xiàng)基本原則:

                第一,選取適宜開發(fā)范型。該原則與系統(tǒng)設(shè)計(jì)有關(guān)。在系統(tǒng)設(shè)計(jì)中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經(jīng)常需要權(quán)衡。因此,必須認(rèn)識(shí)需求定義的易變性,采用適宜的開發(fā)范型予以控制,以保證軟件產(chǎn)品滿足用戶的要求。

                第二,采用合適的設(shè)計(jì)方法。在軟件設(shè)計(jì)中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應(yīng)性等特征。合適的設(shè)計(jì)方法有助于這些特征的實(shí)現(xiàn),以達(dá)到軟件工程的目標(biāo)。

                第三,提供高質(zhì)量的工程支持。“工欲善其事,必先利其器”。在軟件工程中,軟件工具與環(huán)境對(duì)軟件過程的支持頗為重要。軟件工程項(xiàng)目的質(zhì)量與開銷直接取決于對(duì)軟件工程所提供的支撐質(zhì)量和效用。

                第四,重視開發(fā)過程的管理。軟件工程的管理,直接影響可用資源的有效利用,生產(chǎn)滿足目標(biāo)的軟件產(chǎn)品,提高軟件組織的生產(chǎn)能力等問題。因此,僅當(dāng)軟件過程得以有效管理時(shí),才能實(shí)現(xiàn)有效的軟件工程。

                這一軟件工程框架告訴我們,軟件工程的目標(biāo)是可用性、正確性和合算性;實(shí)施一個(gè)軟件工程要選取適宜的開發(fā)范型,要采用合適的設(shè)計(jì)方法,要提供高質(zhì)量的工程支撐,要實(shí)行開發(fā)過程的有效管理;軟件工程活動(dòng)主要包括需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)和支持等活動(dòng),每一活動(dòng)可根據(jù)特定的軟件工程,采用合適的開發(fā)范型、設(shè)計(jì)方法、支持過程以及過程管理。根據(jù)軟件工程這一框架,軟件工程學(xué)科的研究內(nèi)容主要包括:軟件開發(fā)范型、軟件開發(fā)方法、軟件過程、軟件工具、軟件開發(fā)環(huán)境、計(jì)算機(jī)輔助軟件工程(CASE) 及軟件經(jīng)濟(jì)學(xué)等。

                作用:高效開發(fā)高質(zhì)量軟件

            自從軟件工程概念提出以來,經(jīng)過30多年的研究與實(shí)踐,雖然“軟件危機(jī)”沒得到徹底解決,但在軟件開發(fā)方法和技術(shù)方面已經(jīng)有了很大的進(jìn)步。尤其應(yīng)該指出的是,自80年代中期,美國工業(yè)界和政府部門開始認(rèn)識(shí)到,在軟件開發(fā)中,最關(guān)鍵的問題是軟件開發(fā)組織不能很好地定義和管理其軟件過程,從而使一些好的開發(fā)方法和技術(shù)都起不到所期望的作用。也就是說,在沒有很好定義和管理軟件過程的軟件開發(fā)中,開發(fā)組織不可能在好的軟件方法和工具中獲益。

                根據(jù)調(diào)查,中國的現(xiàn)狀幾乎和美國10多年前的情況一樣,軟件開發(fā)過程沒有明確規(guī)定,文檔不完整,也不規(guī)范,軟件項(xiàng)目的成功往往歸功于軟件開發(fā)組的一些杰出個(gè)人或小組的努力。這種依賴于個(gè)別人員上的成功并不能為全組織的軟件生產(chǎn)率和質(zhì)量的提高奠定有效的基礎(chǔ),只有通過建立全組織的過程改善,采用嚴(yán)格的軟件工程方法和管理,并且堅(jiān)持不懈地付諸實(shí)踐,才能取得全組織的軟件過程能力的不斷提高。

                這一事實(shí)告訴我們,只有堅(jiān)持軟件工程的四條基本原則,既重視軟件技術(shù)的應(yīng)用,又重視軟件工程的支持和管理,并在實(shí)踐中貫徹實(shí)施,才能高效地開發(fā)出高質(zhì)量的軟件。

          二、軟件工程的七條基本原理

                自從1968年提出“軟件工程”這一術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù) 提出了100多條關(guān)于軟件工程的準(zhǔn)則或信條。 美國著名的軟件工程專家 Boehm 綜合這些專家的意見,并總結(jié)了TRW公司多年的開發(fā)軟件的經(jīng)驗(yàn),于1983年提出了軟件工程的七條基本原理。

            Boehm 認(rèn)為,著七條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合。
            它們是相互獨(dú)立的,是缺一不可的最小集合;同時(shí),它們又是相當(dāng)完備的。

            人們當(dāng)然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是可以證明,在此之前已經(jīng)提出的100多條軟件工程準(zhǔn)則都可以有這七條原理的任意組合蘊(yùn)含或派生。

            下面簡要介紹軟件工程的七條原理:

            1 用分階段的生命周期計(jì)劃嚴(yán)格管理
            這一條是吸取前人的教訓(xùn)而提出來的。統(tǒng)計(jì)表明,50%以上的失敗項(xiàng)目是由于計(jì)劃不周而造成的。在軟件開發(fā)與維護(hù)的漫長生命周期中,需要完成許多性質(zhì)各異的工作。這條原理意味著,應(yīng)該把軟件生命周期分成若干階段,并相應(yīng)制定出切實(shí)可行的計(jì)劃,然后嚴(yán)格按照計(jì)劃對(duì)軟件的開發(fā)和維護(hù)進(jìn)行管理。 Boehm 認(rèn)為,在整個(gè)軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行6類計(jì)劃:項(xiàng)目概要計(jì)劃、里程碑計(jì)劃、項(xiàng)目控制計(jì)劃、產(chǎn)品控制計(jì)劃、驗(yàn)證計(jì)劃、運(yùn)行維護(hù)計(jì)劃。

            2 堅(jiān)持進(jìn)行階段評(píng)審
            統(tǒng)計(jì)結(jié)果顯示: 大部分錯(cuò)誤是在編碼之前造成的,大約占63%; <2> 錯(cuò)誤發(fā)現(xiàn)的越晚,改正它要付出的代價(jià)就越大,要差2到3個(gè)數(shù)量級(jí)。 因此,軟件的質(zhì)量保證工作不能等到編碼結(jié)束之后再進(jìn)行,應(yīng)堅(jiān)持進(jìn)行嚴(yán)格的階段評(píng)審,以便盡早發(fā)現(xiàn)錯(cuò)誤。

            3 實(shí)行嚴(yán)格的產(chǎn)品控制
            開發(fā)人員最痛恨的事情之一就是改動(dòng)需求。但是實(shí)踐告訴我們,需求的改動(dòng)往往是不可避免的。這就要求我們要采用科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求。也就是要采用變動(dòng)控制,又叫基準(zhǔn)配置管理。當(dāng)需求變動(dòng)時(shí),其它各個(gè)階段的文檔或代碼隨之相應(yīng)變動(dòng),以保證軟件的一致性。

            4 采納現(xiàn)代程序設(shè)計(jì)技術(shù)
            從六、七時(shí)年代的結(jié)構(gòu)化軟件開發(fā)技術(shù),到最近的面向?qū)ο蠹夹g(shù),從第一、第二代語言,到第四代語言,人們已經(jīng)充分認(rèn)識(shí)到:方法大似氣力。采用先進(jìn)的技術(shù)即可以提高軟件開發(fā)的效率,又可以減少軟件維護(hù)的成本。

            5 結(jié)果應(yīng)能清楚地審查
            軟件是一種看不見、摸不著的邏輯產(chǎn)品。軟件開發(fā)小組的工作進(jìn)展情況可見性差,難于評(píng)價(jià)和管理。為更好地進(jìn)行管理,應(yīng)根據(jù)軟件開發(fā)的總目標(biāo)及完成期限, 盡量明確地規(guī)定開發(fā)小組的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使所得到的標(biāo)準(zhǔn)能清楚地審查。


            6 開發(fā)小組的人員應(yīng)少而精
            開發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素,應(yīng)該少而精。
            這一條基于兩點(diǎn)原因:高素質(zhì)開發(fā)人員的效率比低素質(zhì)開發(fā)人員的效率要高幾倍到幾十倍,開發(fā)工作中犯的錯(cuò)誤也要少的多; 當(dāng)開發(fā)小組為N人時(shí),可能的通訊信道為N(N-1)/2, 可見隨著人數(shù)N的增大,通訊開銷將急劇增大。

            7 承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性
            遵從上述六條基本原理,就能夠較好地實(shí)現(xiàn)軟件的工程化生產(chǎn)。但是,它們只是對(duì)現(xiàn)有的經(jīng)驗(yàn)的總結(jié)和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應(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ù)。

                面向方面的編程(Aspect Oriented Programming,簡稱AOP)被認(rèn)為是近年來軟件工程的另外一個(gè)重要發(fā)展。這里的方面指的是完成一個(gè)功能的對(duì)象和函數(shù)的集合。在這一方面相關(guān)的內(nèi)容有泛型編程(Generic Programming)和模板。

          參考
                胡崑山,《中國軟件產(chǎn)業(yè)發(fā)展現(xiàn)狀與人才需求》,2003年9月1日,            http://software.ccidnet.com/pub/article/c372_a62973_p1.html

          三、軟件工程的目標(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ì)量不合格,對(duì)供需雙方都是壞事情。從短期效益看,追求高質(zhì)量會(huì)延長軟件開發(fā)時(shí)間并且增大費(fèi)用,似乎降低了生產(chǎn)率。從長期效益看,高質(zhì)量將保證軟件開發(fā)的全過程更加規(guī)范流暢,大大降低了軟件的維護(hù)代價(jià),實(shí)質(zhì)上是提高了生產(chǎn)率,同時(shí)可獲得很好的信譽(yù)。質(zhì)量與生產(chǎn)率之間不存在根本的對(duì)立,好的軟件工程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。

                軟件供需雙方的代表能在餐桌上談笑風(fēng)生,歸功于第一線開發(fā)人員的辛勤工作。質(zhì)量與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對(duì)開發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率之間分個(gè)主次不可,那么應(yīng)該是質(zhì)量第一,生產(chǎn)率第二。這是因?yàn)椋海?)質(zhì)量直接體現(xiàn)在軟件的每段程序中,高質(zhì)量自然是開發(fā)人員的技術(shù)追求,也是職業(yè)道德的要求。(2)高質(zhì)量對(duì)所有的用戶都有價(jià)值,而高生產(chǎn)率只對(duì)開發(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所示。

           

                軟件工程模型建議用一定的流程將各個(gè)環(huán)節(jié)連接起來,并可用規(guī)范的方式操作全過程,如同工廠的生產(chǎn)線。常見的軟件工程模型有:線性模型(圖1.2),漸增式模型(圖1.3),螺旋模型,快速原型模型,形式化描述模型等等 [Pressmam 1999, Sommerville 1992]。


           

                最早出現(xiàn)的軟件工程模型是線性模型(又稱瀑布模型)。線性模型太理想化,太單純,已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對(duì)象,未被留一絲惋惜。但我們應(yīng)該認(rèn)識(shí)到,“線性”是人們最容易掌握并能熟練應(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)所示。而對(duì)于一些復(fù)雜的程序,將測試分為同步測試與總測試更有效,如圖1.4(b)所示。

           


                不論是什么軟件工程模型,總是少不了圖1.1中的各個(gè)環(huán)節(jié)。本書擗開具體的軟件工程模型,順序講述人員管理、項(xiàng)目管理、可行性與需求分析、系統(tǒng)設(shè)計(jì)、程序設(shè)計(jì)、測試,以及維護(hù)與再生工程。其中程序設(shè)計(jì)部分以C++/C語言為例。

          四、軟件體系結(jié)構(gòu)和工具的選擇

            軟件體系結(jié)構(gòu)表示了一個(gè)軟件系統(tǒng)的高層結(jié)構(gòu),主要特點(diǎn)有:1)軟件系統(tǒng)結(jié)構(gòu)是一個(gè)高層次上的抽象,它并不涉及具體的系統(tǒng)結(jié)構(gòu)(比如B/S還是C/S),也不關(guān)心具體的實(shí)現(xiàn)。2)軟件體系結(jié)構(gòu)必須支持系統(tǒng)所要求的功能,在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮系統(tǒng)的動(dòng)態(tài)行為。3)在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮有現(xiàn)有系統(tǒng)的兼容性、安全性和可靠性。同時(shí)還要考慮系統(tǒng)以后的擴(kuò)展性和伸縮性。所以有時(shí)候必須在多個(gè)不同方向的目標(biāo)中進(jìn)行決策。

            當(dāng)前已經(jīng)有一些關(guān)于規(guī)范化軟件體系結(jié)構(gòu),比如:ISO的開放系統(tǒng)互聯(lián)模型、X Window系統(tǒng)等等。軟件系統(tǒng)的結(jié)構(gòu)通常被定義為兩個(gè)部分:一個(gè)是計(jì)算部件。另一個(gè)就是部件之間的交互。如果把軟件系統(tǒng)看成一幅圖的話,計(jì)算部件就是其中的節(jié)點(diǎn),而部件之間的交互就是節(jié)點(diǎn)之間的弧線。部件之間的連接可以被認(rèn)為是一種連接器,比如過程調(diào)用、事件廣播、數(shù)據(jù)庫查詢等等。正確的體系結(jié)構(gòu)設(shè)計(jì)是軟件系統(tǒng)成功的關(guān)鍵。

            我們理解了軟件工程的重要性以后,我們沒有相應(yīng)的工具,我們也很難很好的完成一個(gè)系統(tǒng)。在需求分析和設(shè)計(jì)階段,我們需要什么樣的工具呢?

            當(dāng)然最好是基于UML的CASE工具。當(dāng)前比較流行的就是Rose,它是一個(gè)很好的分析和建立對(duì)象和對(duì)象關(guān)系的工具。在具體編碼的時(shí)候,我們需要版本控制工具,MS的SourceSafe就是一個(gè)很好的版本管理工具和項(xiàng)目管理工具。具體的開發(fā)工具當(dāng)然很多,但是如果你是一個(gè)對(duì)VC侵淫了多年的程序員,你一定會(huì)選擇它,因?yàn)樗鼤?huì)讓你感到什么是真正的面向?qū)ο蟮木幊蹋阍谟肰B,PowerBuilder,Delphi時(shí)很少會(huì)有同樣的感受。至于數(shù)據(jù)庫模式構(gòu)建,我一向是采用Sybase的S-Design,更好的工具就不知道了。

            另外需要注意的是,我們需要建立文檔編寫的若干模板,以便開發(fā)人員按照這個(gè)模板編寫規(guī)范的技術(shù)和說明文檔。幫助文檔可以用微軟的HTML Help Workshop(hhw.exe)制作,你也可以編譯成.chm格式,它打包了文本和圖形,只有一個(gè)文件,使用和分發(fā)比較方便。最后,如果開發(fā)人員不是集中在一個(gè)地方的話,最好建立一個(gè)郵件列表,開發(fā)人員可以通過郵件系統(tǒng)討論開發(fā)中的各項(xiàng)事宜。

          五、軟件開發(fā)方法綜述


            國外大的軟件公司和機(jī)構(gòu)一直在研究軟件開發(fā)方法這個(gè)概念性的東西,而且也提出了很多實(shí)際的開發(fā)方法,比如:生命周期法、原型化方法、面向?qū)ο蠓椒ǖ鹊取O旅娼榻B幾種流行的開發(fā)方法:

            1、結(jié)構(gòu)化方法

            結(jié)構(gòu)化開發(fā)方法是由E.Yourdon 和 L.L.Constantine 提出的,即所謂的SASD 方 法, 也可稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。Yourdon方法是80年代 使用最廣泛的軟件開發(fā)方法。它首先用結(jié)構(gòu)化分析(SA)對(duì)軟件進(jìn)行需求分析,然后用結(jié)構(gòu)化設(shè)計(jì)(SD)方法進(jìn)行總體設(shè)計(jì),最后是結(jié)構(gòu)化編程(SP)。它給出了兩類典型的軟件結(jié)構(gòu)(變換型和事務(wù)型)使軟件開發(fā)的成功率大大提高。

            2、面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法

            Jackson方法是最典型的面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法,Jackson方法把問題分解為可由三種基本結(jié)構(gòu)形式表示的各部分的層次結(jié)構(gòu)。三種基本的結(jié)構(gòu)形式就是順序、選擇和重復(fù)。三種數(shù)據(jù)結(jié)構(gòu)可以進(jìn)行組合,形成復(fù)雜的結(jié)構(gòu)體系。這一方法從目標(biāo)系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導(dǎo)出程序框架結(jié)構(gòu),再補(bǔ)充其它細(xì)節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對(duì)輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應(yīng)用中的文件表格處理。該方法也可與其它方法結(jié)合,用于模塊的詳細(xì)設(shè)計(jì)。

            3、 面向問題的分析法

            PAM(Problem Analysis Method)是80年代末由日立公司提出的一種軟件開發(fā)方法。 它的基本思想是考慮到輸入、輸出數(shù)據(jù)結(jié)構(gòu),指導(dǎo)系統(tǒng)的分解,在系統(tǒng)分析指導(dǎo)下逐步綜 合。這一方法的具體步驟是:從輸入、輸出數(shù)據(jù)結(jié)構(gòu)導(dǎo)出基本處理框;分析這些處理框之間的先后關(guān)系;按先后關(guān)系逐步綜合處理框,直到畫出整個(gè)系統(tǒng)的PAD圖。這一方法本質(zhì)上是綜合的自底向上的方法,但在逐步綜合之前已進(jìn)行了有目的的分解,這個(gè)目的就是充分考慮系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)。PAM方法的另一個(gè)優(yōu)點(diǎn)是使用PAD圖。這是一種二維樹形結(jié)構(gòu)圖,是到目前為止最好的詳細(xì)設(shè)計(jì)表示方法之一。當(dāng)然由于在輸入、輸出數(shù)據(jù)結(jié)構(gòu)與整個(gè)系統(tǒng)之間同樣存在著鴻溝,這一方法仍只適用于中小型問題。

            4、原型化方法

            產(chǎn)生原型化方法的原因很多,主要隨著我們系統(tǒng)開發(fā)經(jīng)驗(yàn)的增多,我們也發(fā)現(xiàn)并非所有的需求都能夠預(yù)先定義而且反復(fù)修改是不可避免的。當(dāng)然能夠采用原型化方法是因?yàn)殚_發(fā)工具的快速發(fā)展,比如用VB,DELPHI等工具我們可以迅速的開發(fā)出一個(gè)可以讓用戶看的見、摸的著的系統(tǒng)框架,這樣,對(duì)于計(jì)算機(jī)不是很熟悉的用戶就可以根據(jù)這個(gè)樣板提出自己的需求。

            開發(fā)原型化系統(tǒng)一般由以下幾個(gè)階段:
          (1) 確定用戶需求
          (2) 開發(fā)原始模型
          (3) 征求用戶對(duì)初始原型的改進(jìn)意見
          (4) 修改原型。

            原型化開發(fā)比較適合于用戶需求不清、業(yè)務(wù)理論不確定、需求經(jīng)常變化的情況。當(dāng)系統(tǒng)規(guī)模不是很大也不太復(fù)雜時(shí)采用該方法是比較好的。

           5、面向?qū)ο蟮能浖_發(fā)方法

            當(dāng)前計(jì)算機(jī)業(yè)界最流行的幾個(gè)單詞就是分布式、并行和面向?qū)ο筮@幾個(gè)術(shù)語。由此可以看到面向?qū)ο筮@個(gè)概念在當(dāng)前計(jì)算機(jī)業(yè)界的地位。比如當(dāng)前流行的兩大面向?qū)ο蠹夹g(shù)DCOM和CORBA就是例子。當(dāng)然我們實(shí)際用到的還是面向?qū)ο蟮木幊陶Z言,比如C++。不可否認(rèn),面向?qū)ο蠹夹g(shù)是軟件技術(shù)的一次革命,在軟件開發(fā)史上具有里程碑的意義。

            隨著OOP(面向?qū)ο缶幊蹋┫騉OD(面向?qū)ο笤O(shè)計(jì))和OOA(面向?qū)ο蠓治觯┑陌l(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法OMT (Object Modeling Technique)。這是一種自底向上和自頂向下相結(jié)合的方法,而且它以對(duì)象建模為基礎(chǔ),從而不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實(shí)際上也包含了所有對(duì)象的數(shù)據(jù)結(jié)構(gòu)。所以O(shè)MT徹底實(shí)現(xiàn)了PAM沒有完全實(shí)現(xiàn)的目標(biāo)。不僅如此,OO技術(shù)在需求分析、可維護(hù)性和可靠性這三個(gè)軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實(shí)質(zhì)性的突破,基本地解決了在這些方面存在的嚴(yán)重問題。

            綜上所述,面向?qū)ο笙到y(tǒng)采用了自底向上的歸納、自頂向下的分解的方法,它通過對(duì)對(duì)象模型的建立,能夠真正建立基于用戶的需求,而且系統(tǒng)的可維護(hù)性大大改善。當(dāng)前業(yè)界關(guān)于面向?qū)ο蠼5臉?biāo)準(zhǔn)是UML(Unified Modeling Language)。

            這里我們需要談一下微軟的MSF(Microsoft Solutions Framework)的框架,它簡單的把系統(tǒng)設(shè)計(jì)分成三個(gè)階段:概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)。概念設(shè)計(jì)階段就是從用戶的角度出發(fā)可以得到多少個(gè)對(duì)象,并且以對(duì)象為主體,畫出業(yè)務(wù)框架。邏輯設(shè)計(jì)階段就是對(duì)概念設(shè)計(jì)階段的對(duì)象進(jìn)行再分析、細(xì)分、整合、刪除。并建立各個(gè)對(duì)象的方法屬性以及對(duì)象之間的關(guān)系。而物理設(shè)計(jì)實(shí)際上就是要確定我們實(shí)際需要的組件、服務(wù)和采用的框架結(jié)構(gòu)、具體的編程語言等。MCF整個(gè)結(jié)構(gòu)比較清楚是基于對(duì)象開發(fā)的一個(gè)比較好的可操作的框架系統(tǒng)。

            6、可視化開發(fā)方法

            其實(shí)可視化開發(fā)并不能單獨(dú)的作為一種開發(fā)方法,更加貼切的說可以認(rèn)為它是一種輔助工具,比如用過SYBASE的S-Design的人都知道,用這個(gè)工具可以進(jìn)行顯示的圖形化的數(shù)據(jù)庫模式的建立,并可以導(dǎo)入到不同的數(shù)據(jù)庫中去。當(dāng)然用過S-Design的人不一定很多,但用過VB,DELPHI,C++ Builder等開發(fā)工具的人一定不少,實(shí)際上你就是在使用可視化開發(fā)工具。

            當(dāng)然,不可否認(rèn)的是,你只是在編程這個(gè)環(huán)節(jié)上用了可視化,而不是在系統(tǒng)分析和系統(tǒng)設(shè)計(jì)這個(gè)高層次上用了可視化的方法。實(shí)際上,建立系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的可視化工具是一個(gè)很好的賣點(diǎn),國外有很多工具都致力于這方面產(chǎn)品的設(shè)計(jì)。比如Business Object就是一個(gè)非常好的數(shù)據(jù)庫可視化分析工具。

            可視化開發(fā)使我們把注意力集中在業(yè)務(wù)邏輯和業(yè)務(wù)流程上,用戶界面可以用可視化工具方便的構(gòu)成。通過操作界面元素,諸如菜單、按鈕、對(duì)話框、編輯框、單選框、復(fù)選框、 列表框和滾動(dòng)條等,由可視開發(fā)工具自動(dòng)生成應(yīng)用軟件。

          六、怎樣培養(yǎng)軟件工程的思維與方法


            作為軟件開發(fā)人員的一個(gè)通病是在項(xiàng)目初期的時(shí)候,就喜歡談?wù)搶?shí)現(xiàn)的細(xì)節(jié),并且樂此不疲。我們更喜歡討論如何用靈活而簡短的代碼來實(shí)現(xiàn)一個(gè)特定的功能,而忽略了對(duì)整個(gè)系統(tǒng)架構(gòu)的考慮。所以作為一個(gè)開發(fā)人員,尤其是一個(gè)有經(jīng)驗(yàn)的開發(fā)人員,應(yīng)該把自己從代碼中解脫出來,更多的時(shí)候在我們的腦子里甚至?xí)簳r(shí)要放棄去考慮如何實(shí)現(xiàn)的問題,而從項(xiàng)目或產(chǎn)品的總體去考慮一個(gè)軟件產(chǎn)品。

            以下是我個(gè)人的一些經(jīng)驗(yàn):

            1.考慮整個(gè)項(xiàng)目或者產(chǎn)品的市場前景。作為一個(gè)真正的系統(tǒng)分析人員,不僅要從技術(shù)的角度來考慮問題,而且還要從市場的角度去考慮問題。也就是說我們同時(shí)需要考慮我們產(chǎn)品的用戶群是誰,當(dāng)我們產(chǎn)品投放到市場上的時(shí)候,是否具有生命力。比如即使我們采用最好的技術(shù)實(shí)現(xiàn)了一個(gè)單進(jìn)程的操作系統(tǒng),其市場前景也一定是不容樂觀的。

            2.從用戶的角度來考慮問題。比如一些操作對(duì)于開發(fā)人員來講是非常顯而易見的問題。但是對(duì)于一般的用戶來說可能就非常難于掌握,也就是說,有時(shí)候,我們不得不在靈活性和易用性方面進(jìn)行折中。另外,在功能實(shí)現(xiàn)上,我們也需要進(jìn)行綜合考慮,盡管一些功能十分強(qiáng)大,但是如果用戶幾乎不怎么使用它的話,就不一定在產(chǎn)品的第一版的時(shí)候就推出。從用戶的角度考慮,也就是說用戶認(rèn)可的才是好的,并不是開發(fā)人員覺的好才好。

            3.從技術(shù)的角度考慮問題。雖然技術(shù)絕對(duì)不是唯一重要的,但是技術(shù)一定是非常重要的,是成功的必要環(huán)節(jié)。在產(chǎn)品設(shè)計(jì)的時(shí)候,必須考慮采用先進(jìn)的技術(shù)和先進(jìn)的體系結(jié)構(gòu)。比如,如果可以采用多線程進(jìn)行程序中各個(gè)部分并行處理的話,就最好采用多線程處理。在Windows下開發(fā)的時(shí)候,能夠把功能封裝成一個(gè)單獨(dú)的COM構(gòu)件就不作成一個(gè)簡單的DLL或者是以源代碼存在的函數(shù)庫或者是對(duì)象。比如能夠在B/S結(jié)構(gòu)下運(yùn)行并且不影響系統(tǒng)功能的話就不一定要在C/S下實(shí)現(xiàn)。

          4.合理進(jìn)行模塊的分割。從多層模型角度來講,一般系統(tǒng)可以分成用戶層、業(yè)務(wù)層和數(shù)據(jù)庫層三部分。當(dāng)然每以部分都還可以進(jìn)行細(xì)分。所以在系統(tǒng)實(shí)現(xiàn)設(shè)計(jì)的時(shí)候,盡量進(jìn)行各個(gè)部分的分割并建立各個(gè)部分之間進(jìn)行交互的標(biāo)準(zhǔn)。并且在實(shí)際開發(fā)的時(shí)候,確實(shí)有需要的話再進(jìn)行重新調(diào)整。這樣就可以保證各個(gè)部分齊頭并進(jìn),開發(fā)人員也可以各施其職。

            5.人員的組織和調(diào)度。這里很重要的一點(diǎn)是到考慮人員的特長,有的人喜歡做界面,有的人喜歡做核心。如果有可能要根據(jù)人員的具體的情況進(jìn)行具體的配置。同時(shí)要保證每一個(gè)開發(fā)人員在開發(fā)的時(shí)候首先完成需要和其他人員進(jìn)行交互的部分,并且對(duì)自己的項(xiàng)目進(jìn)度以及其他開發(fā)人員的進(jìn)度有一個(gè)清晰的了解,保證不同部分的開發(fā)人員能夠經(jīng)常進(jìn)行交流。

            6.開發(fā)過程中文檔的編寫。在開發(fā)過程中會(huì)碰到各種各樣的問題和困難,當(dāng)然還有各種各樣的創(chuàng)意和新的思路。應(yīng)該把這些東西都記錄下來并進(jìn)行及時(shí)整理,對(duì)于困難和問題,如果不能短時(shí)間解決的,可以考慮采用其他的技術(shù)替代,并在事后做專門的研究。對(duì)于各種創(chuàng)意,可以根據(jù)進(jìn)度計(jì)劃安排考慮是在本版本中實(shí)現(xiàn)還是在下一版本中實(shí)現(xiàn)。

            7.充分考慮實(shí)施時(shí)可能遇到的問題。開發(fā)是一回事情,用戶真正能夠使用好它又是另外一回事情。比如在MIS系統(tǒng)開發(fā)中,最簡單的一個(gè)問題就是用戶如果數(shù)據(jù)輸入錯(cuò)誤的時(shí)候,如何進(jìn)行操作。在以流程方式工作的時(shí)候,如何讓用戶理解自己在流程中的位置和作用,如何讓用戶真正利用計(jì)算機(jī)進(jìn)行協(xié)作也是成敗的關(guān)鍵。

            以上是我個(gè)人的一點(diǎn)體會(huì),實(shí)際上,作為一個(gè)軟件開發(fā)人員,我也喜歡看到問題就坐在計(jì)算機(jī)前面直接編碼,但是我確實(shí)認(rèn)為軟件工程對(duì)于我們系統(tǒng)開發(fā)的指導(dǎo)作用是巨大的。作為軟件工程的擁戴者,下面我簡單結(jié)合自己的開發(fā)經(jīng)歷介紹基于軟件工程的開發(fā)方法、編程規(guī)范和工具使用等方面的問題。


          七、軟件開發(fā)的發(fā)展變化


            國外很多項(xiàng)目的開發(fā)都是基于一些圖形化的東西來做的,他們的目的是盡量少寫代碼甚至不寫代碼。代碼能夠通過圖形化的方式自動(dòng)生成,這樣的一個(gè)好處就是如果用戶的需求變化或者業(yè)務(wù)邏輯發(fā)生變化,我們需要做的就是對(duì)圖形表示的調(diào)整,然后重新自動(dòng)生成代碼,這也就是國外開發(fā)很注重對(duì)項(xiàng)目的概念和邏輯分析的原因。

            他們的重點(diǎn)是把業(yè)務(wù)規(guī)則和需求用圖形化的方式表現(xiàn)出來,然后通過CASE工具自動(dòng)生成代碼。所以當(dāng)國人還在不停的開發(fā)一個(gè)又一個(gè)的MIS工具的時(shí)候,國外已經(jīng)把很多精力放到了CASE工具的制作上。

            我們很多公司人員忙著寫具體業(yè)務(wù)過程的相關(guān)代碼,而國外很多都把精力放到對(duì)不同應(yīng)用,不同行業(yè)的模型的建立和共性的提取上。所以,他們做出來的東西就相對(duì)具有很強(qiáng)的靈活性和擴(kuò)展性,而我們是用戶的需求稍微有一點(diǎn)變化,就要忙著改代碼,甚至改體系結(jié)構(gòu)。

            另外,因?yàn)樗麄冏⒅啬P偷慕ⅲ栽诮⑵渌麘?yīng)用的時(shí)候,能夠借鑒原先的模型,在高層次上做調(diào)整和優(yōu)化,同時(shí)能夠有效的提取原有系統(tǒng)中可以被使用的部分。所以我們應(yīng)該從以代碼為核心的軟件開發(fā)模式轉(zhuǎn)化到以模型為中心的、基于CASE的開發(fā)上來。

            關(guān)于協(xié)作與個(gè)人英雄主義

            社會(huì)進(jìn)步的一個(gè)很明顯的現(xiàn)象就是社會(huì)分工越來越細(xì),軟件的開發(fā)也不例外。為什么在軟件開發(fā)的今天已經(jīng)不能出現(xiàn)象裘伯君這樣的軟件英雄的原因也在這里,單憑個(gè)人之力,我們也許窮盡有生之年也開發(fā)不出象Windows這樣的操作系統(tǒng)。
          因?yàn)椋?dāng)前軟件行業(yè)的壁壘無非就是兩個(gè),一個(gè)就是以技術(shù)創(chuàng)新取勝,你模仿的了其中的界面,但是你沒有辦法實(shí)現(xiàn)其中的核心功能。結(jié)果是你只能購買其技術(shù)核心,而你作一些邊角工作。不舉別的例子,比如VB這樣的開發(fā)工具,其核心部分是它和第三方提供的COM控件或者是DLL函數(shù)庫,你所做的就是一個(gè)整合的工作。

            第二個(gè)就是以細(xì)致取勝,也就是說功能很多而且做的很精致,即使技術(shù)本身不是很復(fù)雜,你真要想做出一個(gè)這樣的東西來沒有一兩年的工夫是不可能的。而真等你做出來了,它的新版本也早已經(jīng)推出。真正能夠在市面上叫得想、經(jīng)得起考驗(yàn)得產(chǎn)品都是具有這兩方面的特點(diǎn)。

            這兩方面的特點(diǎn)決定了你一個(gè)人絕對(duì)是不可能勝任的,也許你可以獨(dú)立的完成技術(shù)創(chuàng)新,但是你絕對(duì)不可能一個(gè)人實(shí)現(xiàn)所有這些紛繁復(fù)雜的功能。所以,這個(gè)時(shí)代需要?jiǎng)?chuàng)新的英雄,也更需要人與人之間的協(xié)作。
          當(dāng)今的軟件發(fā)展已經(jīng)不是一個(gè)人可以包打天下的年代。軟件開發(fā)的管理、系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)、模塊之間的銜接、核心算法的實(shí)現(xiàn)、靈活界面的制定、軟件再開發(fā)接口的實(shí)現(xiàn)都需要專門的人來做。而把這些有效的集成顯然就需要有效的利用軟件工程的思想和方法。所以,真正的軟件英雄絕對(duì)不再是寫著別人看不懂代碼的程序員,而是整個(gè)體系結(jié)構(gòu)的分析、設(shè)計(jì)、標(biāo)準(zhǔn)制定、協(xié)調(diào)人員。

          八、我們是否需要軟件工程


            有一點(diǎn)大家可以達(dá)成共識(shí)的就是,如果一個(gè)象Windows這樣的操作系統(tǒng),不進(jìn)行全面的規(guī)劃,不采用軟件工程的思想和方法,是絕對(duì)搞不出來的。

            Windows的成功不在于它在進(jìn)程管理和調(diào)度,文件系統(tǒng)、內(nèi)存管理、界面設(shè)計(jì)等方面有多少成功的創(chuàng)新,它的成功最大的一點(diǎn)就是把所有的技術(shù)能夠合理的整合起來,并集中到一個(gè)Window操作系統(tǒng)特有的框架結(jié)構(gòu)中去。

            更為重要的是,Windows的每一項(xiàng)技術(shù)創(chuàng)新都能夠有效的整合到Windows框架中去,比如COM、XML等技術(shù),通過ActiveX、DCOM等技術(shù)使Windows從桌面操作系統(tǒng)發(fā)展成為一個(gè)基于網(wǎng)絡(luò)的操作系統(tǒng)。

            OLE2技術(shù)把整個(gè)Office中相關(guān)的軟件進(jìn)行了有效的整合,顯然,這里我們可以把Office的設(shè)計(jì)和WPS的設(shè)計(jì)進(jìn)行比較,客觀的講,WPS對(duì)中國用戶來說實(shí)在也是一個(gè)很好的產(chǎn)品。但是從整個(gè)系統(tǒng)設(shè)計(jì)概念上來講,Office顯然要比WPS高一個(gè)層次,它能夠把WORD,EXCEL,POWERPOINT,ACCESS有效的整合在一起,使我們所有辦公相關(guān)的文檔、圖表、數(shù)據(jù)庫、演示變成了一個(gè)一體化的東西。而且通過宏調(diào)用,用戶可以自己定制用戶界面并編制適當(dāng)?shù)哪0澹瑔问沁@個(gè)二次開發(fā)功能就不是WPS現(xiàn)在所能及項(xiàng)背的,當(dāng)然限于當(dāng)前用戶的水平還很少有人使用二次開發(fā)的功能。

            從微軟產(chǎn)品系列可以看到軟件工程的作用,微軟的所有產(chǎn)品都有一個(gè)整體的框架結(jié)構(gòu),比如Office軟件,通過OLE技術(shù)進(jìn)行有效的通訊和聯(lián)系。比如Visual系列開發(fā)工具,提供了相似的開發(fā)界面使用戶學(xué)會(huì)一種開發(fā)工具以后能夠很容易的學(xué)習(xí)其他的開發(fā)工具。比如SQL SERVER和ACCESS,盡管它們適用的范圍不同,但是它們表現(xiàn)給用戶的界面,特別是在查詢和分析上表現(xiàn)了高度的一致性。

            更值得一提的是,因?yàn)樵O(shè)計(jì)結(jié)構(gòu)的合理性,因?yàn)樵陂_發(fā)前期作了很多分析和調(diào)研,考慮了擴(kuò)展性和伸縮性,微軟的系列產(chǎn)品能夠很快的利用新的技術(shù)并采用統(tǒng)一的結(jié)構(gòu)形式表現(xiàn)出來。比如當(dāng)網(wǎng)絡(luò)成為計(jì)算機(jī)發(fā)展的主流的時(shí)候,幾乎微軟所有的工具都能夠快速的支持基于網(wǎng)絡(luò)的開發(fā)和應(yīng)用。

           

            相比之下,我們國內(nèi)很多公司的產(chǎn)品很少具有連續(xù)性,往往是新的一個(gè)產(chǎn)品完全重起爐灶,和老的產(chǎn)品沒有半點(diǎn)關(guān)系。這就是我們?cè)谠O(shè)計(jì)產(chǎn)品的時(shí)候,沒有很好的進(jìn)行抽象和概念、邏輯設(shè)計(jì),造成的結(jié)果是從舊的產(chǎn)品中提取不出一些有用的、共性的東西為后來的產(chǎn)品所使用。

            當(dāng)然,很多開發(fā)人員從心里也承認(rèn)一個(gè)大的系統(tǒng)確實(shí)需要軟件工程的依托,但是一個(gè)小的工程項(xiàng)目是否就可以倉促上馬呢?答案是否定的。所謂麻雀碎小,五臟俱全。無論是大項(xiàng)目、還是小項(xiàng)目。它們作為一個(gè)項(xiàng)目,都需要有一個(gè)需求分析、系統(tǒng)結(jié)構(gòu)建立、設(shè)計(jì)、編碼、測試等階段。這是任何一個(gè)項(xiàng)目都不可缺少的。

            往往可以看到很多大公司的IT部門的人員都在不停的作各種各樣的報(bào)表,當(dāng)各個(gè)部門提出一種新類型的報(bào)表的時(shí)候,就從數(shù)據(jù)庫中提取相應(yīng)的數(shù)據(jù)并畫出業(yè)務(wù)人員所需要的樣式結(jié)構(gòu),很少是提供了一個(gè)通用的模板,當(dāng)然提供高層API接口進(jìn)行這種操作的就更少了。這樣不可避免的使開發(fā)人員陷入一些瑣碎的報(bào)表編制工作。而造成這個(gè)局面的很重要的一個(gè)原因就是沒有在系統(tǒng)開發(fā)的前期進(jìn)行很好的調(diào)研、需求分析和系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)。

            這里就我們開發(fā)過的一些小型軟件項(xiàng)目來談一些開發(fā)的總結(jié)和體會(huì),一般來說,小型軟件項(xiàng)目功能比較單一,而且模塊與模塊之間的銜接不是很多,同時(shí)對(duì)開發(fā)周期要求比較短。

            小項(xiàng)目雖然看起來比較簡單,所以很多開發(fā)人員容易犯一些錯(cuò)誤,記得我們?cè)陂_發(fā)一個(gè)基于Internet的有償服務(wù)系統(tǒng)的時(shí)候,有三個(gè)開發(fā)人員:一個(gè)負(fù)責(zé)前端界面的編寫,一個(gè)負(fù)責(zé)數(shù)據(jù)通訊協(xié)議和實(shí)現(xiàn)(基于TCP基礎(chǔ)上的應(yīng)用協(xié)議),一個(gè)負(fù)責(zé)對(duì)數(shù)據(jù)庫數(shù)據(jù)的查詢、整理和提取。我們?cè)陂_發(fā)的時(shí)候沒有認(rèn)真地進(jìn)行項(xiàng)目實(shí)際前途和工作量的估計(jì)。沒有認(rèn)真地估計(jì)項(xiàng)目難度,比如對(duì)于通訊中多用戶并發(fā)訪問時(shí)的多線程問題和緩存處理問題,用戶批量請(qǐng)求處理的實(shí)現(xiàn)復(fù)雜度問題等等。三個(gè)人之間的接口也是在開發(fā)中休息的時(shí)候,口頭定義一下。結(jié)果發(fā)現(xiàn)有不嚴(yán)密的地方(比如在通訊服務(wù)器端是用VC編寫的,開發(fā)人員是通過stream來傳送數(shù)據(jù)的,客戶端是用Delphi編寫,在接收數(shù)據(jù)的時(shí)候發(fā)現(xiàn)數(shù)據(jù)不準(zhǔn)確,后來研究發(fā)現(xiàn)VC利用CSocket在傳送數(shù)據(jù)流的時(shí)候?qū)?shù)據(jù)進(jìn)行了自己定義的格式化,結(jié)果服務(wù)器端數(shù)據(jù)發(fā)送模塊只好重寫),而且其中關(guān)于一個(gè)接口雙方的理解不同,然后又返工重新修改。最后到系統(tǒng)基本完成的時(shí)候沒有一份較正式的文檔。然后因?yàn)橛腥水厴I(yè)離開這個(gè)項(xiàng)目,然后他編寫的模塊需要升級(jí),新的接收的人不得不花很多時(shí)間去閱讀他的源代碼。

          所以在開發(fā)小項(xiàng)目的時(shí)候也必須要建立合理的模式:而所謂合理的模式就是軟件工程告訴我們的在開發(fā)一個(gè)項(xiàng)目的時(shí)候所需要的五步曲:獲取需求、需求分析、設(shè)計(jì)、編碼、測試。

            1.理解用戶真正的需求。在進(jìn)入正式開發(fā)之前,必須先從用戶處獲取準(zhǔn)確的需求。在這上面花費(fèi)相當(dāng)時(shí)間是很必要的。

            我們軟件項(xiàng)目可以大致分為專用軟件和通用軟件兩大類。對(duì)于專用軟件,一般用戶對(duì)于軟件要完成哪些功能已經(jīng)有了一個(gè)比較清楚的輪廓,而且往往在開發(fā)合同中已經(jīng)大致地規(guī)定了。

            但是,開發(fā)合同上規(guī)定的只是一個(gè)大概的框架,在進(jìn)入開發(fā)之前必須與用戶進(jìn)行比較具體的交流和討論,了解清楚用戶心目中的產(chǎn)品究竟是什么樣子,這里最好就采用原型化的方法作出一個(gè)簡單的框架給用戶看。

            對(duì)于通用軟件,在開發(fā)之前必須做一定的市場調(diào)查工作,一方面是從經(jīng)濟(jì)效益考慮,調(diào)查產(chǎn)品的潛在市場有多大,一方面是從技術(shù)的角度,了解清楚潛在用戶對(duì)軟件的各種技術(shù)上的要求,另一方面是確定我們軟件的定位,即我們軟件具體是為哪一些用戶群體服務(wù)的。然后對(duì)該群體用戶現(xiàn)有硬件配置,軟件配置,網(wǎng)絡(luò)使用情況,數(shù)據(jù)庫使用情況,計(jì)算機(jī)熟悉程度做一定的調(diào)研,根據(jù)調(diào)查的統(tǒng)計(jì)結(jié)果決定即將開發(fā)的軟件的一些技術(shù)指標(biāo)。
            
            2.需求分析。需求分析需要做的事情有:高層構(gòu)思、確立系統(tǒng)目標(biāo)、劃分業(yè)務(wù)領(lǐng)域、現(xiàn)行業(yè)務(wù)分析、建立業(yè)務(wù)模型(Enterprise Model)、信息需求分析、用戶視圖規(guī)范化、數(shù)據(jù)元素標(biāo)準(zhǔn)化與一致性控制。

            在了解用戶的需求之后,將需求用一種模型來表示,就是需求分析,一般我們可以面向?qū)ο蟮姆椒ǎㄟ^分析用戶需求,用類、類之間的各種關(guān)系來表示整個(gè)系統(tǒng)。

            為了討論軟件運(yùn)行的流程,可以采用UML的Use Case圖。在系統(tǒng)分析的時(shí)候需要明確應(yīng)用域(application domain)的范圍,然后明確我們系統(tǒng)需要做什么。同時(shí)我們需要決定用什么方法來完成需求的獲取,這在很大程度上影響了需求分析的做法。

            例如可以采用Use Case來表示用戶需求,那么從各種序列圖中選出相互交互的各個(gè)實(shí)體,就是一個(gè)個(gè)類。另外分析需要與設(shè)計(jì)過程相銜接。分析過程的內(nèi)容是用對(duì)象和對(duì)象之間的關(guān)系來表示整個(gè)系統(tǒng)和系統(tǒng)的流程的,并不設(shè)計(jì)具體實(shí)現(xiàn),如采用什么編程語言,在什么操作系統(tǒng)平臺(tái)上運(yùn)行等等。這些具體實(shí)現(xiàn)是在設(shè)計(jì)階段來完成的。

            面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)是分析、設(shè)計(jì)、編碼過程表示法統(tǒng)一,能比較好的銜接。現(xiàn)在很多CASE工具并不區(qū)分分析和設(shè)計(jì)的階段。但是,這并不意味著開發(fā)就可以對(duì)分析和設(shè)計(jì)不加區(qū)分,如何用好輔助設(shè)計(jì)(case)工具還是開發(fā)人員的事情。

            3.設(shè)計(jì)過程。設(shè)計(jì)階段的工作包括對(duì)分析模型進(jìn)行必要的修改,同時(shí)可能需要對(duì)某些類結(jié)構(gòu)做一些修改,確定用戶表示層(也就是通俗所說的界面定義)、用戶服務(wù)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫服務(wù)層和具體數(shù)據(jù)庫所需要做的工作。同時(shí)需要確定使用的體系結(jié)構(gòu)(比如B/S還是C/S)和開發(fā)工具(如VB,VC,VI,C++ Builder,DELPHI,PowerBuiler等等)

            4.編碼。進(jìn)入編碼工作之后,依然可能會(huì)發(fā)現(xiàn)前面分析或設(shè)計(jì)階段的某些錯(cuò)誤,這時(shí)應(yīng)返回到前面的階段進(jìn)行必要的修改。同時(shí)在編碼前規(guī)定編碼的風(fēng)格并在開發(fā)過程中保持一致的風(fēng)格。


            5.測試。測試是系統(tǒng)投入使用前最關(guān)鍵的一個(gè)步驟。即使是小項(xiàng)目也應(yīng)該嚴(yán)格地進(jìn)行測試。就實(shí)際上就是一個(gè)把錯(cuò)誤留給自己還是留給客戶的問題。

            最后,我們知道軟件項(xiàng)目主要是由開發(fā)人員完成的,所以對(duì)人員的合理安排和配置也很重要,一般在開發(fā)過程中,需要有一位項(xiàng)目負(fù)責(zé)人,負(fù)責(zé)分析、設(shè)計(jì)和協(xié)調(diào)的工作。另外需要幾個(gè)程序員完成不同層的代碼(比如用戶服務(wù)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫服務(wù)層等等)。

            同時(shí)需要有一個(gè)文檔整理人員隨時(shí)整理系統(tǒng)開發(fā)過程中相關(guān)的文檔。如果條件可能的話,要配置一個(gè)測試工程師,專門進(jìn)行代碼的測試工作,當(dāng)然如果條件不允許的話,也可以由開發(fā)人員交叉測試。這里需要注意的是,對(duì)于項(xiàng)目負(fù)責(zé)人而言,協(xié)調(diào)幾個(gè)人的工作比自己完成一段編碼更重要。

            由于協(xié)調(diào)上出了漏洞,可能導(dǎo)致很大的問題,所以項(xiàng)目負(fù)責(zé)人必須隨時(shí)監(jiān)控各開發(fā)人員的工作,包括內(nèi)容是否與要求發(fā)生偏差,進(jìn)度是否滯后等等。同時(shí)必須給每個(gè)開發(fā)人員明確的任務(wù)書。具體開發(fā)時(shí)每個(gè)開發(fā)人員必須非常明確自己的任務(wù),這些任務(wù)應(yīng)該采用明確的文檔來表示。每個(gè)開發(fā)人員需要清楚自己所做的工作在整個(gè)系統(tǒng)中處于什么地位,這樣就有可能會(huì)發(fā)現(xiàn)設(shè)計(jì)模型中的漏洞,避免了各人的代碼編寫完畢之后又要修改的后果。

          九、我國軟件工程發(fā)展的現(xiàn)狀


                很多國內(nèi)搞計(jì)算機(jī)的專家都認(rèn)為:國內(nèi)的軟件研發(fā)過程,個(gè)人色彩比較濃。過分地依靠個(gè)人無法形成產(chǎn)業(yè)規(guī)模,而沒有規(guī)模就談不上產(chǎn)業(yè)化了。

            不管怎么樣,我們大家還是先要來看一看國內(nèi)軟件廠商到底提供給我們多少有震撼力的軟件產(chǎn)品,從技術(shù)和利潤的角度講,軟件系統(tǒng)最核心的部分還是操作系統(tǒng)、編譯系統(tǒng)然后就是開發(fā)平臺(tái)之類的東西,接下來就是一些應(yīng)用系統(tǒng),比如圖形開發(fā)、游戲開發(fā)、企業(yè)應(yīng)用、網(wǎng)站建設(shè)、殺毒、網(wǎng)絡(luò)工具等等。

            操作系統(tǒng)以中科院為中心,做了一個(gè)COSIX,這個(gè)本質(zhì)上是一個(gè)UNIX系統(tǒng),UNIX最初的源代碼是公開的,盡管COSIX是一個(gè)被稱為中國的操作系統(tǒng)并是UNIX系列的(IX就代表UNIX系列),但是其中到底有多少獨(dú)創(chuàng)的技術(shù)成分我們暫時(shí)還不知道,但有一點(diǎn)可以肯定,它現(xiàn)在的市場覆蓋率絕對(duì)不大,而且能否在上面運(yùn)行各種各樣的編譯系統(tǒng)、數(shù)據(jù)庫、群件和應(yīng)用系統(tǒng)可能還需要進(jìn)一步測試。然后就是對(duì)硬件平臺(tái)的支持也需要進(jìn)一步完善。

            然后就是轟轟烈烈的Linux系統(tǒng),Linux是遵守GNU標(biāo)準(zhǔn)的操作系統(tǒng),中國有很多家公司推出了自己的Linux并且還有漢化的Linux,這就有比較疑惑的一點(diǎn),為什么不在Linux上構(gòu)架一個(gè)類似UNICODE這樣的東西,而只做漢化這么本地化的產(chǎn)品呢?不知道是眼光還是市場的問題了。
          MIS系統(tǒng)、財(cái)務(wù)軟件是中國軟件行業(yè)的重頭戲,它們徹底的暴露了中國軟件開發(fā)無序和重復(fù)低效勞動(dòng)的一面。教育軟件在某一種層面上看就是電子題庫,當(dāng)然也有優(yōu)點(diǎn),比如加入了多媒體教學(xué)(可視化程度不錯(cuò))和所謂寓教于樂的特點(diǎn),但是從本質(zhì)上說還是題庫。殺毒軟件據(jù)說是中國軟件的驕傲,由中國權(quán)威機(jī)構(gòu)評(píng)測是達(dá)到了世界領(lǐng)先水平,但是好象還沒有得到國際權(quán)威機(jī)構(gòu)的認(rèn)可。游戲軟件就不用提了,國內(nèi)業(yè)界能夠流行的游戲軟件成功的秘訣眾所周知,不是技術(shù)和創(chuàng)意,實(shí)在是歸功于我們悠久的歷史。字處理軟件和排版軟件客觀的說國內(nèi)的也做的不錯(cuò),但是從系統(tǒng)的擴(kuò)展性和體系結(jié)構(gòu)上說和MS和Adobe相比,差距也放在那里。其實(shí)這種現(xiàn)狀的原因很簡單,一個(gè)是我們?nèi)鄙賱?chuàng)新的能力,另一個(gè)就是我們欠缺軟件工程的概念,系統(tǒng)開發(fā)前期的需求分析、設(shè)計(jì)沒有做好或者做的不夠好。

            當(dāng)然,我們很少懷疑自己的技術(shù)能力,我們很多時(shí)候認(rèn)為這是地理環(huán)境和經(jīng)濟(jì)環(huán)境的原因造成了中國軟件業(yè)現(xiàn)在的局面。當(dāng)然中國軟件開發(fā)人員絕對(duì)可以算是優(yōu)秀的,但是想想我們軟件行業(yè)龍頭企業(yè)到底有多少有技術(shù)創(chuàng)新和專利技術(shù)呢?姑且不論這個(gè),實(shí)際上把一個(gè)操作系統(tǒng)分解開來,比如文件系統(tǒng)、進(jìn)程管理和調(diào)度、IO調(diào)度等等,也許我們可以實(shí)現(xiàn)其中某一塊的內(nèi)容,但是如何把它們合理的整合起來絕對(duì)是一個(gè)涉及到軟件工程的問題。

            作為一個(gè)開發(fā)人員,我們已經(jīng)習(xí)慣了自己那一套編程模式,而且我們的這種習(xí)慣也不自覺的影響著新的開發(fā)人員。所以在頭腦中建立一個(gè)軟件工程的作用,從某種角度上講,要比會(huì)幾種開發(fā)語言、幾個(gè)編程技巧實(shí)在是重要的多。

            舉一個(gè)例子來說,我們也許可以寫MFC中的幾個(gè)類或者是用自己的類擴(kuò)展MFC,但是我們又有幾個(gè)人真正去認(rèn)真分析和考慮MFC架構(gòu)的設(shè)計(jì)和原理呢?捫心自問,我們又有多少人能夠設(shè)計(jì)出MFC這樣的框架系統(tǒng)呢?下面就我們的題目談一些相關(guān)的話題。

          十、我有一個(gè)夢

            毋庸質(zhì)疑的是,計(jì)算機(jī)的發(fā)展和人類的歷史相比甚至和其他很多科技產(chǎn)品相比都是非常短的,從第一臺(tái)計(jì)算機(jī)的研制成功到現(xiàn)在也沒有百年的歷史,但是計(jì)算機(jī)及其相關(guān)技術(shù)的發(fā)展卻絕對(duì)可以說是最快的。拋開硬件的發(fā)展(硬件的發(fā)展基本上是按照摩爾定律來的,每18個(gè)月,機(jī)器的速度性能都要提高一倍),單從軟件的發(fā)展來說,從體系結(jié)構(gòu)來講,我們經(jīng)歷了從主機(jī)結(jié)構(gòu)到文件服務(wù)器結(jié)構(gòu),從客戶服務(wù)器系統(tǒng)到基于Internet的服務(wù)器瀏覽器結(jié)構(gòu)的體系結(jié)構(gòu)的變化。從編碼的角度來講,我們經(jīng)歷了從最開始的機(jī)器代碼到匯編代碼,從高級(jí)程序語言到人工智能語言,從專用的程序設(shè)計(jì)語言到通用的程序設(shè)計(jì)語言。從開發(fā)工具來講,我們經(jīng)歷了從分離的開發(fā)工具(有代碼編輯器,中間代碼生成器和連接器)到集成的開發(fā)系統(tǒng),從最簡單的單行命令式調(diào)試器到方便靈活的多功能的調(diào)試器。

            但是,今天所有的軟件廠商和軟件開發(fā)人員依然會(huì)想起當(dāng)年的黑人人權(quán)運(yùn)動(dòng)領(lǐng)袖馬丁?路德?金曾經(jīng)說過的一句名言我有一個(gè)夢想。是的,所有的開發(fā)人員依然懷著夢想,希望能夠有一個(gè)萬能的系統(tǒng)開發(fā)的框架和方法,只要我們沿著這個(gè)框架,我們將能開發(fā)出適合所有領(lǐng)域的應(yīng)用系統(tǒng),于是,我們?cè)谀顣臅r(shí)候把這個(gè)希望投到了一門課上,這么課就是軟件工程。但是當(dāng)我們?cè)趯W(xué)完這門課的時(shí)候,我們依然沒有找到這么一個(gè)框架甚至連接近這么一個(gè)框架的東西也沒有碰到。

            不管我們認(rèn)為軟件工程可能是多么的虛無,但是所有學(xué)工科并且有邏輯頭腦的人都堅(jiān)信理論對(duì)實(shí)踐的指導(dǎo)意義,因?yàn)橛辛藧垡蛩固辜捌湓S多偉大的科學(xué)家關(guān)于能量和質(zhì)量方面的理論以后,我們才造出了原子彈。但是,遺憾的是軟件工程并不是一個(gè)具體的理論,它更象一門抽象的科學(xué)。軟件工程是一種方法論,而不是一種具體的摸的著,看的見的產(chǎn)品。它告訴我們?cè)谠O(shè)計(jì)一個(gè)系統(tǒng)的時(shí)候,我們需要進(jìn)行可行性研究、計(jì)劃制訂、需求分析、系統(tǒng)設(shè)計(jì)、編碼、測試、維護(hù)等等。并且對(duì)這些過程中應(yīng)該做什么提出了一個(gè)指導(dǎo)性的東西。但是沒有任何專家和標(biāo)準(zhǔn)委員會(huì)保證只要按照這些標(biāo)準(zhǔn),我們的系統(tǒng)肯定會(huì)順利完成。而且事實(shí)上,軟件開發(fā)針對(duì)的領(lǐng)域是如此之多并不沒有一種對(duì)所有領(lǐng)域適用的萬能框架。
            不管認(rèn)為軟件工程已經(jīng)到了非常成熟的階段還是認(rèn)為軟件工程依然是一個(gè)搞不懂的黑箱子,軟件工程確實(shí)已經(jīng)經(jīng)歷了三個(gè)不同的階段。第一個(gè)階段是軟件結(jié)構(gòu)化生產(chǎn)階段,以結(jié)構(gòu)化分析與設(shè)計(jì)、結(jié)構(gòu)化評(píng)審、結(jié)構(gòu)化程序設(shè)計(jì)以及結(jié)構(gòu)化測試為特征。從80年代中期,軟件生產(chǎn)開始進(jìn)入以過程為中心的第二階段,以提出過程成熟模型CMM、個(gè)體軟件過程PSP和群組軟件過程TSP為標(biāo)志。第三個(gè)階段就是以軟件過程、面向?qū)ο蠛蜆?gòu)件重用三把斧頭出現(xiàn)的軟件工業(yè)化生產(chǎn)階段。

            言歸正傳,我們還是回到我們的文章標(biāo)題上來,我們?cè)陂_發(fā)的時(shí)候是兵馬未動(dòng)、糧草先行還是摸著石子過河。兵馬未動(dòng)、糧草先行當(dāng)然意味著我們?cè)陂_發(fā)的時(shí)候先不忙著編寫代碼做程序,我們先要制訂一個(gè)關(guān)于開發(fā)的方法。這點(diǎn)就象元數(shù)據(jù)(metadata)的概念,元數(shù)據(jù)并不定義數(shù)據(jù),它是對(duì)數(shù)據(jù)的說明,也就是通常所說的關(guān)于數(shù)據(jù)的數(shù)據(jù)。我們?cè)O(shè)計(jì)的時(shí)候也是這樣,定義開發(fā)的標(biāo)準(zhǔn),如何進(jìn)行開發(fā)、怎樣開發(fā)。摸著石子過河就意味著我們先不管什么理論,方法,科學(xué)的問題,我們先動(dòng)手做起來,如果做的也算成功的話,那就可以按照這種模式來,實(shí)際上,在任何事情的最初,我們都是這樣。從辨證唯物主義者的觀點(diǎn)來說,就是從實(shí)踐中來,然后升華到理論,再用理論來指導(dǎo)實(shí)踐。記得一個(gè)笑話說:外國人搞軟件工程是在一個(gè)黑屋子里面抓黑貓,不過到現(xiàn)在還是沒有抓住,而中國人是在一個(gè)黑屋子里面,而里面連貓都沒有,然后有人說,我已經(jīng)抓到貓了。這個(gè)笑話一方面是說明直到現(xiàn)在,軟件工程還是一個(gè)在繼續(xù)探索、發(fā)展的過程,另一個(gè)側(cè)面也說明中國搞軟件工程摸不著邊的局面。

            實(shí)際上,不管有沒有軟件工程,不管是否存在一個(gè)萬能的框架系統(tǒng),我們的應(yīng)用系統(tǒng)還是要做,各種各樣的軟件還是要開發(fā)。說到底,軟件系統(tǒng)是因?yàn)橛行枨蟛糯嬖诘摹S辛藨?yīng)用域才有了軟件存在的意義。很多時(shí)候,我們可以看到國外有各種各樣的軟件和創(chuàng)新,而我們沒有,我們更多的是模仿和一些重復(fù)的功能相近的軟件的原因就是因?yàn)槲覀儧]有這方面的需求,這也正解釋了為什么ERP系統(tǒng)能在國外開展的很好,而在國內(nèi)失敗多于成功的原因。一方面當(dāng)然是因?yàn)槲覀兊钠髽I(yè)按照市場經(jīng)濟(jì)發(fā)展的時(shí)間還不長,另一方面是我們的企業(yè)確實(shí)也沒有這方面的需求。

           

          十一、軟件工程的發(fā)展方向

                “敏捷開發(fā)”(Agile Development)被認(rèn)為是軟件工程的一個(gè)重要的發(fā)展。它強(qiáng)調(diào)軟件開發(fā)應(yīng)當(dāng)是能夠?qū)ξ磥砜赡艹霈F(xiàn)的變化和不確定性作出全面反應(yīng)的。

                敏捷開發(fā)被認(rèn)為是一種“輕量級(jí)”的方法。在輕量級(jí)方法中最負(fù)盛名的應(yīng)該是“極限編程”(Extreme Programming,簡稱為XP)。而與輕量級(jí)方法相對(duì)應(yīng)的是“重量級(jí)方法”的存在。重量級(jí)方法強(qiáng)調(diào)以開發(fā)過程為中心,而不是以人為中心。重量級(jí)方法的例子比如CMM/PSP/TSP。


          評(píng)論

          # re: 軟件工程介紹  回復(fù)  更多評(píng)論   

          2007-07-06 08:19 by Sun
          不錯(cuò)
          主站蜘蛛池模板: 灵山县| 江阴市| 阳江市| 始兴县| 内乡县| 棋牌| 泗洪县| 丘北县| 平塘县| 桃园市| 和硕县| 银川市| 彰化市| 蒙山县| 禹州市| 神池县| 友谊县| 临泽县| 镇远县| 舟山市| 华池县| 依安县| 洱源县| 满洲里市| 当雄县| 鹿泉市| 金华市| 绿春县| 竹北市| 应城市| 丹寨县| 玉林市| 师宗县| 榆中县| 买车| 高阳县| 攀枝花市| 东阿县| 晋州市| 孝昌县| 沧州市|