欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
軟件工程

   軟件工程(Software Engineering,簡(jiǎn)稱(chēng)為SE)是一門(mén)研究用工程化方法構建和維護有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科。它涉及到程序設計語(yǔ)言,數據庫,軟件開(kāi)發(fā)工具,系統平臺,標準,設計模式等方面。

      在現代社會(huì )中,軟件應用于多個(gè)方面。典型的軟件比如有電子郵件,嵌入式系統,人機界面,辦公套件,操作系統,編譯器,數據庫,游戲等。同時(shí),各個(gè)行業(yè)幾乎都有計算機軟件的應用,比如工業(yè),農業(yè),銀行,航空,政府部門(mén)等。這些應用促進(jìn)了經(jīng)濟和社會(huì )的發(fā)展,使得人們的工作更加高效,同時(shí)提高了生活質(zhì)量。

      軟件工程師是對應用軟件創(chuàng )造軟件的人們的統稱(chēng),軟件工程師按照所處的領(lǐng)域不同可以分為系統分析員,軟件設計師,系統架構師,程序員,測試員等等。人們也常常用程序員來(lái)泛指各種軟件工程師。

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

     (1)軟件工程目標:生產(chǎn)具有正確性、可用性以及開(kāi)銷(xiāo)合宜的產(chǎn)品。正確性指軟件產(chǎn)品達到預期功能的程度??捎眯灾杠浖窘Y構、實(shí)現及文檔為用戶(hù)可用的程度。開(kāi)銷(xiāo)合宜是指軟件開(kāi)發(fā)、運行的整個(gè)開(kāi)銷(xiāo)滿(mǎn)足用戶(hù)要求的程度。這些目標的實(shí)現不論在理論上還是在實(shí)踐中均存在很多待解決的問(wèn)題,它們形成了對過(guò)程、過(guò)程模型及工程方法選取的約束。

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

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

一、軟件工程概述

      概念:應需而生

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

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

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

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

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

      軟件工程的主要目標是:生產(chǎn)具有正確性、可用性以及開(kāi)銷(xiāo)合宜的產(chǎn)品。正確性意指軟件產(chǎn)品達到預期功能的程度??捎眯灾杠浖窘Y構、實(shí)現及文檔為用戶(hù)可用的程度。開(kāi)銷(xiāo)合宜性是指軟件開(kāi)發(fā)、運行的整個(gè)開(kāi)銷(xiāo)滿(mǎn)足用戶(hù)要求的程度。這些目標的實(shí)現不論在理論上還是在實(shí)踐中均存在很多問(wèn)題有待解決,它們形成了對過(guò)程、過(guò)程模型及工程方法選取的約束。

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

      框架:四項基本原則是基石

  軟件工程圍繞工程設計、工程支持以及工程管理,提出了以下四項基本原則:

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

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

      第三,提供高質(zhì)量的工程支持?!肮び破涫?,必先利其器”。在軟件工程中,軟件工具與環(huán)境對軟件過(guò)程的支持頗為重要。軟件工程項目的質(zhì)量與開(kāi)銷(xiāo)直接取決于對軟件工程所提供的支撐質(zhì)量和效用。

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

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

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

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

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

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

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

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

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

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

  下面簡(jiǎn)要介紹軟件工程的七條原理:

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

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

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

  4 采納現代程序設計技術(shù)
  從六、七時(shí)年代的結構化軟件開(kāi)發(fā)技術(shù),到最近的面向對象技術(shù),從第一、第二代語(yǔ)言,到第四代語(yǔ)言,人們已經(jīng)充分認識到:方法大似氣力。采用先進(jìn)的技術(shù)即可以提高軟件開(kāi)發(fā)的效率,又可以減少軟件維護的成本。

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


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

  7 承認不斷改進(jìn)軟件工程實(shí)踐的必要性
  遵從上述六條基本原理,就能夠較好地實(shí)現軟件的工程化生產(chǎn)。但是,它們只是對現有的經(jīng)驗的總結和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應把承認不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第七條原理。根據這條原理,不僅要積極采納新的軟件開(kāi)發(fā)技術(shù),還要注意不斷總結經(jīng)驗,收集進(jìn)度和消耗等數據,進(jìn)行出錯類(lèi)型和問(wèn)題報告統計。這些數據既可以用來(lái)評估新的 軟件技術(shù)的效果,也可以用來(lái)指明必須著(zhù)重注意的問(wèn)題和應該優(yōu)先進(jìn)行研究的工具和技術(shù)。

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

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

三、軟件工程的目標與常用模型

      軟件工程的目標是提高軟件的質(zhì)量與生產(chǎn)率,最終實(shí)現軟件的工業(yè)化生產(chǎn)。質(zhì)量是軟件需求方最關(guān)心的問(wèn)題,用戶(hù)即使不圖物美價(jià)廉,也要求個(gè)貨真價(jià)實(shí)。生產(chǎn)率是軟件供應方最關(guān)心的問(wèn)題,老板和員工都想用更少的時(shí)間掙更多的錢(qián)。質(zhì)量與生產(chǎn)率之間有著(zhù)內在的聯(lián)系,高生產(chǎn)率必須以質(zhì)量合格為前提。如果質(zhì)量不合格,對供需雙方都是壞事情。從短期效益看,追求高質(zhì)量會(huì )延長(cháng)軟件開(kāi)發(fā)時(shí)間并且增大費用,似乎降低了生產(chǎn)率。從長(cháng)期效益看,高質(zhì)量將保證軟件開(kāi)發(fā)的全過(guò)程更加規范流暢,大大降低了軟件的維護代價(jià),實(shí)質(zhì)上是提高了生產(chǎn)率,同時(shí)可獲得很好的信譽(yù)。質(zhì)量與生產(chǎn)率之間不存在根本的對立,好的軟件工程方法可以同時(shí)提高質(zhì)量與生產(chǎn)率。

      軟件供需雙方的代表能在餐桌上談笑風(fēng)生,歸功于第一線(xiàn)開(kāi)發(fā)人員的辛勤工作。質(zhì)量與生產(chǎn)率的提高就指望程序員與程序經(jīng)理。對開(kāi)發(fā)人員而言,如果非得在質(zhì)量與生產(chǎn)率之間分個(gè)主次不可,那么應該是質(zhì)量第一,生產(chǎn)率第二。這是因為:(1)質(zhì)量直接體現在軟件的每段程序中,高質(zhì)量自然是開(kāi)發(fā)人員的技術(shù)追求,也是職業(yè)道德的要求。(2)高質(zhì)量對所有的用戶(hù)都有價(jià)值,而高生產(chǎn)率只對開(kāi)發(fā)方有意義。(3)如果一開(kāi)始就追求高生產(chǎn)率,容易使人急功近利,留下隱患。寧可進(jìn)度慢些,也要保證每個(gè)環(huán)節的質(zhì)量,以圖長(cháng)遠利益。

      軟件的質(zhì)量因素很多,如正確性,性能、可靠性、容錯性、易用性、靈活性、可擴充性、可理解性、可維護性等等。有些因素相互重疊,有些則相抵觸,真要提高質(zhì)量可不容易??!

      軟件工程的主要環(huán)節有:人員管理、項目管理、可行性與需求分析、系統設計、程序設計、測試、維護等,如圖1.1所示。

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


 

      最早出現的軟件工程模型是線(xiàn)性模型(又稱(chēng)瀑布模型)。線(xiàn)性模型太理想化,太單純,已不再適合現代的軟件開(kāi)發(fā)模式,幾乎被業(yè)界拋棄。偶而被人提起,都屬于被貶對象,未被留一絲惋惜。但我們應該認識到,“線(xiàn)性”是人們最容易掌握并能熟練應用的思想方法。當人們碰到一個(gè)復雜的“非線(xiàn)性”問(wèn)題時(shí),總是千方百計地將其分解或轉化為一系列簡(jiǎn)單的線(xiàn)性問(wèn)題,然后逐個(gè)解決。一個(gè)軟件系統的整體可能是復雜的,而單個(gè)子程序總是簡(jiǎn)單的,可以用線(xiàn)性的方式來(lái)實(shí)現,否則干活就太累了。線(xiàn)性是一種簡(jiǎn)潔,簡(jiǎn)潔就是美。當我們領(lǐng)會(huì )了線(xiàn)性的精神,就不要再呆板地套用線(xiàn)性模型的外表,而應該用活它。例如漸增式模型實(shí)質(zhì)就是分段的線(xiàn)性模型,如圖1.3所示。螺旋模型則是接連的彎曲了的線(xiàn)性模型。在其它模型中都能夠找到線(xiàn)性模型的影子。

      套用固定的模型不是程序員的聰明之舉。比如“程序設計”與“測試”之間的關(guān)系,習慣上總以為程序設計在先,測試在后,如圖1.4(a)所示。而對于一些復雜的程序,將測試分為同步測試與總測試更有效,如圖1.4(b)所示。


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

四、軟件體系結構和工具的選擇

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

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

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

  當然最好是基于UML的CASE工具。當前比較流行的就是Rose,它是一個(gè)很好的分析和建立對象和對象關(guān)系的工具。在具體編碼的時(shí)候,我們需要版本控制工具,MS的SourceSafe就是一個(gè)很好的版本管理工具和項目管理工具。具體的開(kāi)發(fā)工具當然很多,但是如果你是一個(gè)對VC侵淫了多年的程序員,你一定會(huì )選擇它,因為它會(huì )讓你感到什么是真正的面向對象的編程,而你在用VB,PowerBuilder,Delphi時(shí)很少會(huì )有同樣的感受。至于數據庫模式構建,我一向是采用Sybase的S-Design,更好的工具就不知道了。

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

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


  國外大的軟件公司和機構一直在研究軟件開(kāi)發(fā)方法這個(gè)概念性的東西,而且也提出了很多實(shí)際的開(kāi)發(fā)方法,比如:生命周期法、原型化方法、面向對象方法等等。下面介紹幾種流行的開(kāi)發(fā)方法:

  1、結構化方法

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

  2、面向數據結構的軟件開(kāi)發(fā)方法

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

  3、 面向問(wèn)題的分析法

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

  4、原型化方法

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

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

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

 5、面向對象的軟件開(kāi)發(fā)方法

  當前計算機業(yè)界最流行的幾個(gè)單詞就是分布式、并行和面向對象這幾個(gè)術(shù)語(yǔ)。由此可以看到面向對象這個(gè)概念在當前計算機業(yè)界的地位。比如當前流行的兩大面向對象技術(shù)DCOMCORBA就是例子。當然我們實(shí)際用到的還是面向對象的編程語(yǔ)言,比如C++。不可否認,面向對象技術(shù)是軟件技術(shù)的一次革命,在軟件開(kāi)發(fā)史上具有里程碑的意義。

  隨著(zhù)OOP面向對象編程)向OOD面向對象設計)和OOA面向對象分析)的發(fā)展,最終形成面向對象的軟件開(kāi)發(fā)方法OMT (Object Modeling Technique)。這是一種自底向上和自頂向下相結合的方法,而且它以對象建模為基礎,從而不僅考慮了輸入、輸出數據結構,實(shí)際上也包含了所有對象的數據結構。所以OMT徹底實(shí)現了PAM沒(méi)有完全實(shí)現的目標。不僅如此,OO技術(shù)在需求分析、可維護性和可靠性這三個(gè)軟件開(kāi)發(fā)的關(guān)鍵環(huán)節和質(zhì)量指標上有了實(shí)質(zhì)性的突破,基本地解決了在這些方面存在的嚴重問(wèn)題。

  綜上所述,面向對象系統采用了自底向上的歸納、自頂向下的分解的方法,它通過(guò)對對象模型的建立,能夠真正建立基于用戶(hù)的需求,而且系統的可維護性大大改善。當前業(yè)界關(guān)于面向對象建模的標準是UML(Unified Modeling Language)。

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

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

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

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

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

六、怎樣培養軟件工程的思維與方法


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

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

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

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

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

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

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

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

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

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


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


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

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

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

  另外,因為他們注重模型的建立,所以在建立其他應用的時(shí)候,能夠借鑒原先的模型,在高層次上做調整和優(yōu)化,同時(shí)能夠有效的提取原有系統中可以被使用的部分。所以我們應該從以代碼為核心的軟件開(kāi)發(fā)模式轉化到以模型為中心的、基于CASE的開(kāi)發(fā)上來(lái)。

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

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

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

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

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


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

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

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

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

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

  更值得一提的是,因為設計結構的合理性,因為在開(kāi)發(fā)前期作了很多分析和調研,考慮了擴展性和伸縮性,微軟的系列產(chǎn)品能夠很快的利用新的技術(shù)并采用統一的結構形式表現出來(lái)。比如當網(wǎng)絡(luò )成為計算機發(fā)展的主流的時(shí)候,幾乎微軟所有的工具都能夠快速的支持基于網(wǎng)絡(luò )的開(kāi)發(fā)和應用。

 

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

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

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

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

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

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

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

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

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

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

  在了解用戶(hù)的需求之后,將需求用一種模型來(lái)表示,就是需求分析,一般我們可以面向對象的方法,通過(guò)分析用戶(hù)需求,用類(lèi)、類(lèi)之間的各種關(guān)系來(lái)表示整個(gè)系統。

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

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

  面向對象方法的優(yōu)點(diǎn)是分析、設計、編碼過(guò)程表示法統一,能比較好的銜接?,F在很多CASE工具并不區分分析和設計的階段。但是,這并不意味著(zhù)開(kāi)發(fā)就可以對分析和設計不加區分,如何用好輔助設計(case)工具還是開(kāi)發(fā)人員的事情。

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

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


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

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

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

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

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


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

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

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

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

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

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

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

十、我有一個(gè)夢(mèng)

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

  但是,今天所有的軟件廠(chǎng)商和軟件開(kāi)發(fā)人員依然會(huì )想起當年的黑人人權運動(dòng)領(lǐng)袖馬???路德?金曾經(jīng)說(shuō)過(guò)的一句名言我有一個(gè)夢(mèng)想。是的,所有的開(kāi)發(fā)人員依然懷著(zhù)夢(mèng)想,希望能夠有一個(gè)萬(wàn)能的系統開(kāi)發(fā)的框架和方法,只要我們沿著(zhù)這個(gè)框架,我們將能開(kāi)發(fā)出適合所有領(lǐng)域的應用系統,于是,我們在念書(shū)的時(shí)候把這個(gè)希望投到了一門(mén)課上,這么課就是軟件工程。但是當我們在學(xué)完這門(mén)課的時(shí)候,我們依然沒(méi)有找到這么一個(gè)框架甚至連接近這么一個(gè)框架的東西也沒(méi)有碰到。

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

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

  實(shí)際上,不管有沒(méi)有軟件工程,不管是否存在一個(gè)萬(wàn)能的框架系統,我們的應用系統還是要做,各種各樣的軟件還是要開(kāi)發(fā)。說(shuō)到底,軟件系統是因為有需求才存在的。有了應用域才有了軟件存在的意義。很多時(shí)候,我們可以看到國外有各種各樣的軟件和創(chuàng )新,而我們沒(méi)有,我們更多的是模仿和一些重復的功能相近的軟件的原因就是因為我們沒(méi)有這方面的需求,這也正解釋了為什么ERP系統能在國外開(kāi)展的很好,而在國內失敗多于成功的原因。一方面當然是因為我們的企業(yè)按照市場(chǎng)經(jīng)濟發(fā)展的時(shí)間還不長(cháng),另一方面是我們的企業(yè)確實(shí)也沒(méi)有這方面的需求。

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

 

      “敏捷開(kāi)發(fā)”(Agile Development)被認為是軟件工程的一個(gè)重要的發(fā)展。它強調軟件開(kāi)發(fā)應當是能夠對未來(lái)可能出現的變化和不確定性作出全面反應的。

      敏捷開(kāi)發(fā)被認為是一種“輕量級”的方法。在輕量級方法中最負盛名的應該是“極限編程”(Extreme Programming,簡(jiǎn)稱(chēng)為XP)。而與輕量級方法相對應的是“重量級方法”的存在。重量級方法強調以開(kāi)發(fā)過(guò)程為中心,而不是以人為中心。重量級方法的例子比如CMM/PSP/TSP。

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
軟件工程簡(jiǎn)答題
軟件工程的復習資料
RUP:新一代的軟件工程方法 (zt)
軟件工程概述1
軟件工程復習題及答案
架構軟件工程的未來(lái)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久