




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1.1
軟件
1.2軟件工程
1.3軟件工程發(fā)展中的軟件開發(fā)方法與技術(shù)
1.4計算機(jī)輔助軟件工程
1.5軟件工程與其他相關(guān)學(xué)科的關(guān)系
1.6軟件工程職業(yè)道德規(guī)范
1.7軟件項目成敗情況統(tǒng)計
1.8全球軟件產(chǎn)業(yè)的現(xiàn)狀、趨勢與挑戰(zhàn)1.1軟件1.1.1軟件及軟件特性1.軟件軟件的定義是隨著計算機(jī)技術(shù)的發(fā)展而逐步完善的。在20世紀(jì)50年代,人們認(rèn)為軟件就等于程序;60年代人們認(rèn)識到軟件的開發(fā)文檔在軟件中的作用,提出軟件等于程序加文檔,但這里的文檔僅是指軟件開發(fā)過程中所涉及的分析、設(shè)計、實現(xiàn)、測試、維護(hù)等文檔,不包括軟件管理文檔;到了70年代人們又給軟件的定義中加入了數(shù)據(jù)。因此,軟件是計算機(jī)系統(tǒng)中與硬件相互依存的一部分,它包括:(1)在運行中能提供所希望的功能與性能的程序;(2)使程序能夠正確運行的數(shù)據(jù)及其結(jié)構(gòu);(3)描述軟件研制過程和方法所用的文檔。2.軟件的特性從廣義來說,軟件與硬件一樣也是產(chǎn)品,但兩者之間是有差別的,了解并理解這種差別對理解軟件工程是非常重要的。(1)軟件角色的雙重性。(2)軟件是被開發(fā)或設(shè)計的,而不是傳統(tǒng)意義上的被制造。(3)軟件不會“磨損”,但會退化。(4)絕大多數(shù)軟件都是定制的且是手工的。(5)軟件開發(fā)過程復(fù)雜且費用昂貴。1.1.2軟件的發(fā)展及分類1.軟件的發(fā)展自20世紀(jì)40年代出現(xiàn)了世界上第一臺計算機(jī)以后,經(jīng)歷了幾十年的發(fā)展,計算機(jī)軟件經(jīng)歷了程序設(shè)計、程序系統(tǒng)和軟件工程三個發(fā)展時期。表1.1列出了三個發(fā)展時期主要特征的對比,由此可以看出幾十年來軟件最根本的變化。2.軟件的分類軟件的應(yīng)用非常廣泛,幾乎滲透到了各行各業(yè)。因此,要給出一個科學(xué)的、統(tǒng)一的、嚴(yán)格的計算機(jī)軟件分類標(biāo)準(zhǔn)是不現(xiàn)實也是不可能的,但可以從不同的角度對軟件進(jìn)行適當(dāng)?shù)姆诸悺3S玫姆诸惙椒耙饬x如表1.2所示。1.1.3軟件危機(jī)及其產(chǎn)生的主要原因隨著社會對計算機(jī)應(yīng)用需求的增長,軟件系統(tǒng)規(guī)模越來越龐大,生產(chǎn)難度和生產(chǎn)成本越來越高,軟件需求量劇增,質(zhì)量沒有可靠的保證,軟件開發(fā)的生產(chǎn)率低等因素構(gòu)成軟件生產(chǎn)的惡性循環(huán)。軟件生產(chǎn)的復(fù)雜性和高成本,使大型軟件的生產(chǎn)出現(xiàn)了很大的困難,因此出現(xiàn)了軟件危機(jī)。其具體表現(xiàn)如下:(1)開發(fā)人員和用戶之間存在矛盾。用戶在開發(fā)初期,由于各種原因往往不能準(zhǔn)確地提出需求描述;開發(fā)人員在還沒有準(zhǔn)確、完整地了解用戶的實際需求后就急于編程。(2)大型軟件項目需要組織一定的人力共同完成,多數(shù)管理人員缺少開發(fā)大型軟件系統(tǒng)的經(jīng)驗;多數(shù)軟件開發(fā)人員缺乏協(xié)同方面的經(jīng)驗;軟件項目開發(fā)人員不能有效地、獨立自主地處理大型軟件的全部關(guān)系和各個分支,因此容易產(chǎn)生疏漏和錯誤。(3)缺乏有力的方法學(xué)和工具方面的支持,過分依靠程序設(shè)計人員的技巧和創(chuàng)造性。重編程,輕需求分析;重開發(fā),輕維護(hù);重程序,輕文檔。這樣做的后果就是在軟件系統(tǒng)中“埋藏”了許多故障隱患,直接危害著系統(tǒng)的可靠性和穩(wěn)定性。人們把在軟件開發(fā)與維護(hù)過程中遇到的一系列嚴(yán)重問題稱為軟件危機(jī)。1.1.4軟件危機(jī)的表現(xiàn)軟件危機(jī)的主要表現(xiàn)如下:(1)軟件開發(fā)進(jìn)度難以預(yù)測;(2)軟件開發(fā)成本難以控制;(3)用戶對軟件產(chǎn)品的功能要求難以滿足;(4)軟件產(chǎn)品的質(zhì)量無法保證,系統(tǒng)中的錯誤難以消除;(5)軟件產(chǎn)品難以維護(hù);(6)軟件缺少適當(dāng)?shù)奈臋n資料;(7)軟件開發(fā)的生產(chǎn)速度難以滿足社會需求的增長。1.1.5解決軟件危機(jī)的途徑分析了造成軟件危機(jī)的原因后,人們開始探索用工程的方法進(jìn)行軟件生產(chǎn)的可能性,即用軟件工程的概念、原理、技術(shù)和方法進(jìn)行軟件的開發(fā)、管理、維護(hù)和更新。于是,計算機(jī)科學(xué)的一個領(lǐng)域——“軟件工程”誕生了。1.2軟件工程1.2.1軟件工程的概念軟件工程是指導(dǎo)計算機(jī)開發(fā)和維護(hù)的工程學(xué)科。借用傳統(tǒng)工程設(shè)計的基本思想,采用工程化的概念、原理、技術(shù)和方法來開發(fā)與維護(hù)軟件,突出軟件生產(chǎn)的科學(xué)方法,把經(jīng)過時間考驗而證明正確的管理技術(shù)與當(dāng)前能夠得到的最好的技術(shù)和方法結(jié)合進(jìn)來,降低開發(fā)成本,縮短研制周期,提高軟件的可靠性和生產(chǎn)效率。軟件的工程化生產(chǎn)已成為軟件產(chǎn)業(yè)。軟件已成為產(chǎn)品,它涉及產(chǎn)值、市場、版權(quán)、法律保護(hù)等方面的問題。軟件工程是一門交叉學(xué)科,需要用管理學(xué)的原理和方法來進(jìn)行軟件生產(chǎn)管理;用工程學(xué)的觀點來進(jìn)行費用估算、制訂進(jìn)度和實施方案;用數(shù)學(xué)方法來建立軟件可靠性模型以及分析各種算法。1.2.2軟件工程的三要素軟件工程以關(guān)注軟件質(zhì)量為目標(biāo),由方法、工具和過程三個要素構(gòu)成,如圖1.3所示。軟件工程方法為軟件開發(fā)提供了“如何做”的技術(shù),涉及軟件工程的多個方面,如項目計劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計、算法過程的設(shè)計、編碼、測試、維護(hù)等。軟件工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。目前,已經(jīng)推出了許多軟件工具,這些軟件工具集成起來,建立起稱之為計算機(jī)輔助軟件工程(ComputerAidedSoftwareEngineering,CASE)的軟件開發(fā)支撐系統(tǒng)。CASE將各種軟件工具、開發(fā)機(jī)器和一個存放開發(fā)過程信息的工程數(shù)據(jù)庫組合起來形成一個軟件工程環(huán)境。軟件工程的過程將軟件工程的方法和工具綜合起來,以達(dá)到合理、及時地進(jìn)行計算機(jī)軟件開發(fā)的目的。過程定義了方法使用的順序、要求交付的文檔資料、為保證質(zhì)量和協(xié)調(diào)變化所需要的管理及軟件開發(fā)各個階段完成的里程碑。1.2.3軟件工程的目標(biāo)軟件工程研究的對象是大型軟件系統(tǒng)的開發(fā)過程,它研究的內(nèi)容是生產(chǎn)流程,各生產(chǎn)步驟的目的、任務(wù)、方法、技術(shù)、工具、文檔和產(chǎn)品規(guī)格。軟件工程的基本目標(biāo)是生產(chǎn)具有正確性、可用性及開銷合宜(合算性)的產(chǎn)品。正確性意指軟件產(chǎn)品達(dá)到預(yù)期功能的程度;可用性意指軟件基本結(jié)構(gòu)、實現(xiàn)及文檔達(dá)到用戶可用的程度;開銷合宜意指軟件開發(fā)、運行的整個開銷滿足用戶的需求。在給定成本和進(jìn)度的前提下,開發(fā)出具有適用性、有效性、可修改性、可靠性、可理解性、可維護(hù)性、可重用性、可移植性、可追蹤性、可互操作性和滿足用戶需求的產(chǎn)品。追求這些目標(biāo)有助于提高軟件產(chǎn)品的質(zhì)量和開發(fā)效率,降低維護(hù)的困難。(1)適用性:軟件在不同的系統(tǒng)約束條件下,使用戶需求得到滿足的難易程度。(2)有效性:軟件系統(tǒng)能最有效地利用計算機(jī)的時間和空間資源。各種軟件無不把系統(tǒng)的時/空開銷作為衡量軟件質(zhì)量的一項重要技術(shù)指標(biāo)。很多場合,在追求時間有效性和空間有效性時會發(fā)生矛盾,這時不得不犧牲時間有效性來換取空間有效性,或犧牲空間有效性以換取時間有效性。時/空折中是經(jīng)常采用的技巧。(3)可修改性:允許對系統(tǒng)進(jìn)行修改而不增加原系統(tǒng)的復(fù)雜性。支持軟件的調(diào)試和維護(hù),是一個難以達(dá)到的目標(biāo)。(4)可靠性:能防止因概念、設(shè)計、結(jié)構(gòu)等方面的不完善而造成軟件系統(tǒng)的失效,具有挽回因操作不當(dāng)而造成軟件系統(tǒng)失效的能力。(5)可理解性:系統(tǒng)具有清晰的結(jié)構(gòu),能直接反映問題的所在??衫斫庑杂兄诳刂栖浖膹?fù)雜性,并支持軟件的維護(hù)、移植或重用。(6)可維護(hù)性:軟件交付使用后,能夠?qū)λM(jìn)行修改,以改正潛伏的錯誤,改進(jìn)性能和其他屬性,使軟件產(chǎn)品能適應(yīng)環(huán)境的變化等。軟件維護(hù)費用在軟件開發(fā)費用中占有很大的比重??删S護(hù)性是軟件工程中一項十分重要的目標(biāo)。(7)可重用性:把概念或功能相對獨立的一個或一組相關(guān)模塊定義為一個軟部件,可組裝在系統(tǒng)的任何位置,降低開發(fā)工作量。(8)可移植性:軟件從一個計算機(jī)系統(tǒng)或環(huán)境搬到另一個計算機(jī)系統(tǒng)或環(huán)境的難易程度。(9)可追蹤性:根據(jù)軟件需求對軟件設(shè)計、程序進(jìn)行正向追蹤,或根據(jù)軟件設(shè)計、程序?qū)浖枨筮M(jìn)行逆向追蹤的能力。(10)可互操作性:多個軟件元素相互通信并協(xié)同完成任務(wù)的能力。1.2.4軟件工程的開發(fā)原則軟件工程的目標(biāo)為軟件開發(fā)提出了明確的要求。為了達(dá)到這些要求,在軟件開發(fā)過程中必須遵循下列軟件工程的原則:抽象、信息隱藏、模塊化、局部化、一致性、完整性和可驗證性。(1)抽象(Abstraction):抽取事物最基本的特性和行為,忽略其非基本的細(xì)節(jié),以控制軟件開發(fā)過程的復(fù)雜性,有利于軟件的可理解性和開發(fā)過程的管理。(2)信息隱藏(InformationHiding):將模塊中的軟件設(shè)計內(nèi)容和實現(xiàn)決策封裝起來,在系統(tǒng)的結(jié)構(gòu)分析與設(shè)計中把模塊看成是一個“黑箱”,模塊內(nèi)部的實現(xiàn)細(xì)節(jié)被隱藏,而外部只提供功能和接口的有關(guān)說明,使軟件開發(fā)人員能夠?qū)⒆⒁饬性诟邔哟蔚某橄笊稀?3)模塊化(Modularity):將大的、復(fù)雜的程序,分成一個個邏輯上相對獨立、功能相對簡單的小程序,只要定義好這些小程序的接口和設(shè)計關(guān)系,就可以將復(fù)雜的程序分解為若干簡單的程序來處理,有助于信息隱藏和抽象,也有助于降低軟件系統(tǒng)的復(fù)雜性。(4)局部化(Localization):在物理模塊內(nèi)集中邏輯上相互關(guān)聯(lián)的計算資源,從物理和邏輯兩個方面保證系統(tǒng)中模塊內(nèi)部的高內(nèi)聚性和模塊之間的低耦合性,有助于模塊的獨立性。(5)一致性(Consistency):整個軟件系統(tǒng)(包括程序和文檔)使用一致的概念、符號和術(shù)語,一致的程序內(nèi)部接口和硬、軟件接口,一致的系統(tǒng)規(guī)格說明與形式化公理系統(tǒng),一致的系統(tǒng)界面、編碼風(fēng)格和數(shù)據(jù)組織形式等。一致性原則支持系統(tǒng)的正確性和可靠性。(6)完整性(Completeness):軟件系統(tǒng)不丟失任何重要成分,系統(tǒng)具有服從需求的完整功能和實現(xiàn)功能所需的數(shù)據(jù)。(7)可驗證性(Verifiability):大型軟件在功能分解和實施中,遵循系統(tǒng)容易檢查、測試、評審的原則,以保證軟件系統(tǒng)的正確性和可用性。1.2.5軟件工程涉及的人員1.利益相關(guān)者參與軟件過程(及每一個軟件項目)的利益相關(guān)者可以分為以下5類。(1)高級管理者:負(fù)責(zé)定義業(yè)務(wù)問題,這些問題往往會對項目產(chǎn)生很大的影響。(2)項目(技術(shù))管理者:必須計劃、激勵、組織和控制軟件開發(fā)人員。(3)開發(fā)人員:擁有開發(fā)產(chǎn)品或應(yīng)用軟件所需的技能。(4)客戶:闡明待開發(fā)軟件的需求,包括關(guān)心項目成敗的其他利益相關(guān)者。(5)最終用戶:軟件發(fā)布成為產(chǎn)品后直接與軟件進(jìn)行交互的人。2.團(tuán)隊負(fù)責(zé)人一個具有實戰(zhàn)能力的項目經(jīng)理應(yīng)該具有以下4種關(guān)鍵品質(zhì)。(1)解決問題:具有實戰(zhàn)能力的軟件項目經(jīng)理能夠準(zhǔn)確地診斷出最為密切相關(guān)的技術(shù)問題和組織問題;能夠系統(tǒng)地制訂解決方案,適當(dāng)?shù)丶钇渌_發(fā)人員來實現(xiàn)該方案;能夠?qū)⒃谶^去項目中學(xué)到的經(jīng)驗應(yīng)用到新環(huán)境中;如果最初的解決方案沒有結(jié)果,則能夠靈活地改變方向。(2)管理者的特性:優(yōu)秀的項目經(jīng)理必須能夠掌管整個項目。必要時要有信心進(jìn)行項目控制,同時還要允許優(yōu)秀的技術(shù)人員按照他們的本意行事。(3)成就:為了優(yōu)化項目團(tuán)隊的生產(chǎn)效率,一位稱職的項目經(jīng)理必須獎勵那些工作積極主動并且做出成績的人。必須通過自己的行為表明出現(xiàn)可控風(fēng)險并不會受到懲罰。(4)影響和隊伍建設(shè):具有實戰(zhàn)能力的項目經(jīng)理必須能夠“理解”人。他必須能理解語言和非語言的信號,并對發(fā)出這些信號的人的要求做出反應(yīng)。項目經(jīng)理必須能在高壓力的環(huán)境下保持良好的控制能力。3.軟件團(tuán)隊作為一種復(fù)雜的工程活動,軟件工程不是由獨立的個人而是由團(tuán)隊進(jìn)行的。通常情況下,一個團(tuán)隊可以有多個小組,較小的小組由3~4人組成,較大的小組由10余人組成。在軟件工程團(tuán)隊中,常見的分工角色有:(1)需求工程師,又稱為需求分析師:承擔(dān)需求開發(fā)任務(wù)。軟件產(chǎn)品的需求開發(fā)工作通常由多個需求工程師來完成,他們共同組成一個需求工程師小組,在首席需求工程師領(lǐng)導(dǎo)下開展工作。他們跟客戶一起工作,并把客戶想要實現(xiàn)的目標(biāo)分解為離散的需求。通常一個團(tuán)隊只有一個需求工程師小組。(2)軟件體系結(jié)構(gòu)師:承擔(dān)軟件體系結(jié)構(gòu)的設(shè)計任務(wù)。通常也是由多人組成一個小組,并在首席軟件體系結(jié)構(gòu)師的領(lǐng)導(dǎo)下開展工作。通常一個團(tuán)隊只有一個軟件體系結(jié)構(gòu)師小組。(3)軟件設(shè)計師:承擔(dān)詳細(xì)設(shè)計任務(wù)。在軟件體系結(jié)構(gòu)設(shè)計完成之后,可以將其部件分配給不同的開發(fā)小組。開發(fā)小組中負(fù)責(zé)分配部件詳細(xì)設(shè)計工作的人員就是軟件設(shè)計師。一個團(tuán)隊可能有一個或多個開發(fā)小組。一個小組可能有一個或多個軟件設(shè)計師。(4)程序員:承擔(dān)軟件構(gòu)造及模塊的測試任務(wù)。程序員與軟件設(shè)計師通常是同一批人,也是根據(jù)其所分配到的任務(wù)開展工作。(5)人機(jī)交互設(shè)計師:承擔(dān)人機(jī)交互設(shè)計任務(wù)。人機(jī)交互設(shè)計師與軟件設(shè)計師可以是同一批人,也可以是不同人員。在有多個小組的軟件工程團(tuán)隊中,可以有一個單獨的人機(jī)交互設(shè)計師小組,也可以將人機(jī)交互設(shè)計師分配到各個小組。(6)軟件測試人員:承擔(dān)軟件測試任務(wù)。軟件測試人員通常需要獨立于其他的開發(fā)人員角色。一個團(tuán)隊可能有一個或多個測試小組。一個小組可能有一個或多個軟件測試人員。(7)項目管理人員:負(fù)責(zé)計劃、組織、協(xié)調(diào)和控制軟件開發(fā)的各項工作。相比于傳統(tǒng)意義上的管理者,他們不完全是監(jiān)督者和控制者,更多的是協(xié)調(diào)者。通常一個團(tuán)隊只有一個項目管理人員。(8)軟件配置管理人員:管理軟件開發(fā)中產(chǎn)生的各種制品,具體工作是對重要制品進(jìn)行標(biāo)識、變更控制、狀態(tài)報告等。通常一個團(tuán)隊只有一個軟件配置管理人員。(9)質(zhì)量保證人員:在生產(chǎn)過程中監(jiān)督和控制軟件產(chǎn)品質(zhì)量的人員。通常一個團(tuán)隊有一個質(zhì)量保證小組,其由一個或多個人員組成。(10)培訓(xùn)和支持人員:負(fù)責(zé)軟件交付與維護(hù)任務(wù)。他們可以是其他開發(fā)人員的一部分,也可以是獨立的人員。(11)文檔編寫人員:專門負(fù)責(zé)寫作軟件開發(fā)過程中各種文檔的人員。他們的存在是為了充分利用部分寶貴的人力資源,讓這些人從繁雜的文檔化工作中解放出來?!白詈玫摹眻F(tuán)隊結(jié)構(gòu)取決于組織的管理風(fēng)格、團(tuán)隊里的人員數(shù)目與技能水平,以及問題的總體難易程度。Mantei提出了規(guī)劃軟件工程團(tuán)隊結(jié)構(gòu)時應(yīng)考慮的7個項目因素:(1)待解決問題的難度;(2)開發(fā)程序的規(guī)模,以代碼行或者功能點來度量;(3)團(tuán)隊成員需要共同工作的時間(團(tuán)隊生存期);(4)能夠?qū)栴}做模塊化劃分的程度;(5)待開發(fā)系統(tǒng)的質(zhì)量要求和可靠性要求;(6)交付日期的嚴(yán)格程度;(7)項目所需要的友好交流的程度。軟件開發(fā)步驟與開發(fā)團(tuán)隊中的角色的對應(yīng)關(guān)系如圖1.4所示。1.3軟件工程發(fā)展中的軟件開發(fā)方法與技術(shù)從20世紀(jì)50年代開始至今,軟件的開發(fā)方法與技術(shù)都有了迅猛的發(fā)展,具體如下。1.?20世紀(jì)50年代20世紀(jì)50年代,人們的主要精力集中在硬件上,所以沒有出現(xiàn)專門針對軟件開發(fā)方法與技術(shù)的需求,也就沒有出現(xiàn)被普遍使用的軟件開發(fā)方法與技術(shù)。20世紀(jì)50年代的軟件工程的特點是:科學(xué)計算;以機(jī)器為中心進(jìn)行編程;像生產(chǎn)硬件一樣生產(chǎn)軟件。2.?20世紀(jì)60年代由于缺乏正確科學(xué)知識的指導(dǎo),也沒有多少經(jīng)驗原則可以遵循,因此,20世紀(jì)60年代的軟件開發(fā)在總體上依靠程序員的個人能力,是“工藝式”的開發(fā)。20世紀(jì)60年代的軟件工程的特點是:業(yè)務(wù)應(yīng)用;軟件不同于硬件;用軟件工藝的方式生產(chǎn)軟件。3.?20世紀(jì)70年代基于結(jié)構(gòu)化程序設(shè)計理論,20世紀(jì)70年代早期開始廣泛使用結(jié)構(gòu)化編程方法,它要求使用函數(shù)(過程)構(gòu)建程序,使用塊結(jié)構(gòu)和三種基本控制結(jié)構(gòu)(消除goto語句)仔細(xì)組織函數(shù)(過程)的代碼,使用程序流程圖描述程序邏輯進(jìn)行程序設(shè)計,使用逐步精化(StepwiseRefinement)、自頂向下的軟件開發(fā)方法進(jìn)行軟件開發(fā)。到了20世紀(jì)70年代中后期,結(jié)構(gòu)化方法從編程活動擴(kuò)展到分析和設(shè)計活動,圍繞功能分解思想和層次模塊結(jié)構(gòu),使用數(shù)據(jù)流圖(DFD)、實體關(guān)系圖(ERD)和結(jié)構(gòu)圖(StructureChart),建立了結(jié)構(gòu)化設(shè)計、結(jié)構(gòu)化分析、Jackson結(jié)構(gòu)程序設(shè)計(JSP)等結(jié)構(gòu)分析與設(shè)計方法。控制復(fù)雜系統(tǒng)的復(fù)雜性是20世紀(jì)70年代追求的目標(biāo),這需要超越函數(shù)(程序)的層次,因為它的粒度太小。因此,20世紀(jì)70年代人們開始在更高抽象的模塊層次上探索控制復(fù)雜性的方法,產(chǎn)生了“低耦合高內(nèi)聚”的模塊化、信息隱藏、抽象數(shù)據(jù)類型等重要思想,它們逐漸被吸收進(jìn)結(jié)構(gòu)化方法并推動了20世紀(jì)80年代面向?qū)ο缶幊痰某霈F(xiàn)。20世紀(jì)70年代的軟件工程的特點是:結(jié)構(gòu)化方法;瀑布模型;強(qiáng)調(diào)規(guī)則和紀(jì)律。它們奠定了軟件工程的基礎(chǔ),是后續(xù)軟件工程發(fā)展的支撐。4.?20世紀(jì)80年代在20世紀(jì)80年代重要的技術(shù)中,除了少數(shù)是延續(xù)70年代的工作之外,大多數(shù)都是為了滿足提高生產(chǎn)力的要求而產(chǎn)生的。1)結(jié)構(gòu)化方法20世紀(jì)70年代中后期基于結(jié)構(gòu)化編程建立了早期的結(jié)構(gòu)化方法,包括結(jié)構(gòu)化分析與結(jié)構(gòu)化設(shè)計。但是這時的結(jié)構(gòu)化方法因為剛剛脫離編程,所以更多地還在關(guān)注軟件程序的構(gòu)建。也就是說,20世紀(jì)70年代中后期的結(jié)構(gòu)化分析和設(shè)計更強(qiáng)調(diào)為了最后編程而進(jìn)行分析與設(shè)計,而不是為了解決現(xiàn)實問題而進(jìn)行分析與設(shè)計。到了20世紀(jì)80年代,隨著結(jié)構(gòu)化分析與設(shè)計向結(jié)構(gòu)化編程的過渡,人們逐步開始將結(jié)構(gòu)化分析與設(shè)計的關(guān)注點轉(zhuǎn)向問題解決和系統(tǒng)構(gòu)建,產(chǎn)生了現(xiàn)代結(jié)構(gòu)化方法,代表性的有信息工程(InformationEngineering)、Jackson系統(tǒng)開發(fā)(JSD)、結(jié)構(gòu)化系統(tǒng)分析與設(shè)計方法(SSADM)、結(jié)構(gòu)化分析和設(shè)計技術(shù)(SADT)及現(xiàn)代結(jié)構(gòu)化分析(MSA)。相對于早期的結(jié)構(gòu)化方法,20世紀(jì)80年代的現(xiàn)代結(jié)構(gòu)化方法更注重系統(tǒng)構(gòu)建而不是程序構(gòu)建,所以更重視問題分析、需求規(guī)格和系統(tǒng)總體結(jié)構(gòu)組織而不是讓分析與設(shè)計結(jié)果符合結(jié)構(gòu)化程序設(shè)計理論,更重視階段遞進(jìn)的系統(tǒng)化開發(fā)過程,而不是一切圍繞最后的編程進(jìn)行。2)面向?qū)ο缶幊套钤绲拿嫦驅(qū)ο缶幊趟枷肟勺匪莸?0世紀(jì)60年代的Simular-67語言,它是為了仿真而設(shè)計的程序設(shè)計語言,使用了類、對象、協(xié)作、繼承、多態(tài)(子類型)等最基礎(chǔ)的面向?qū)ο蟾拍睢?0世紀(jì)70年代的Smalltalk就是完全基于面向?qū)ο笏枷氲某绦蛟O(shè)計語言,它強(qiáng)化了一切皆是對象和對象封裝的思想,發(fā)展了繼承和多態(tài)。到了20世紀(jì)80年代中后期,隨著C++?的出現(xiàn)和廣泛應(yīng)用,面向?qū)ο缶幊坛蔀槌绦蛟O(shè)計的主流。C++?只是在C語言中加入面向?qū)ο蟮奶卣?,并不是純粹的面向?qū)ο笳Z言。C++?保留了C的各種特性,這種謹(jǐn)慎的設(shè)計使得程序員可以順利地接受它,另一方面是因為面向?qū)ο笳Z言支持復(fù)用和更適于復(fù)雜軟件開發(fā)的特點符合了20世紀(jì)80年代的生產(chǎn)要求。需要特別指出的是,雖然面向?qū)ο蟮母拍钇鹪春茉纾⑶液芏嗨枷肱c結(jié)構(gòu)化思想是完全不同的,但是面向?qū)ο蟊旧聿幌窠Y(jié)構(gòu)化一樣有基于數(shù)學(xué)的程序設(shè)計理論的支撐,所以它是在吸收了很多結(jié)構(gòu)化方法中發(fā)展出來的方法與技術(shù)之后才得到了程序正確性、清晰性和高質(zhì)量的保障。Booch認(rèn)為模塊化、信息隱藏等設(shè)計思想和數(shù)據(jù)庫模型的進(jìn)步都是促使面向?qū)ο蟾拍钛葸M(jìn)的重要因素。與結(jié)構(gòu)化方法相比,面向?qū)ο蠓椒ㄖ械慕Y(jié)構(gòu)和關(guān)系能夠為領(lǐng)域應(yīng)用提供更加自然的支持,使得軟件的可復(fù)用性和可修改性更加強(qiáng)大。可復(fù)用性滿足了20世紀(jì)80年代追求生產(chǎn)力的要求,尤其是提高了圖形用戶接口(GUI)編程的生產(chǎn)力,這也是推動面向?qū)ο缶幊贪l(fā)展的重要動力??尚薷男蕴岣吡塑浖S護(hù)時的生產(chǎn)力。面向?qū)ο蠓椒ㄒ矠槟K內(nèi)高內(nèi)聚和模塊間低耦合提供了更好的抽象數(shù)據(jù)類型的模塊化,更加適合于復(fù)雜軟件系統(tǒng)的開發(fā)。3)軟件復(fù)用提高生產(chǎn)力的一種方式是避免重復(fù)生產(chǎn),所以在20世紀(jì)80年代人們?yōu)榱俗非笊a(chǎn)力,開始重視軟件復(fù)用。實踐經(jīng)驗表明,軟件復(fù)用是提高生產(chǎn)力最有效的方法,可以將生產(chǎn)力提高10%~35%。除了面向?qū)ο蠓椒ㄖ?,?代語言、購買商用組件、程序生產(chǎn)器等都是20世紀(jì)80年代提出的能夠促進(jìn)軟件復(fù)用的技術(shù)。20世紀(jì)80年代的軟件工程的特點是:追求生產(chǎn)力最大化;現(xiàn)代結(jié)構(gòu)化方法/面向?qū)ο缶幊虖V泛應(yīng)用;重視過程的作用。5.?20世紀(jì)90年代1)面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化編程的成功促進(jìn)了結(jié)構(gòu)化分析與設(shè)計方法的產(chǎn)生一樣,面向?qū)ο缶幊痰某晒σ泊龠M(jìn)了面向?qū)ο蠓治雠c設(shè)計方法在20世紀(jì)90年代的產(chǎn)生,并促使面向?qū)ο蠓治雠c設(shè)計方法迅速被廣泛使用。20世紀(jì)90年代的面向?qū)ο蠓椒ǖ木唧w進(jìn)展有:(1)出現(xiàn)了對象建模技術(shù)(OMT)、Booch方法、面向?qū)ο蟮能浖こ?OOSE)、類-責(zé)任-合作者(CRC)卡等一系列面向?qū)ο蟮姆治雠c設(shè)計方法。(2)統(tǒng)一的面向?qū)ο蠼UZ言UML的建立和傳播。(3)設(shè)計模式、面向?qū)ο笤O(shè)計原則等有效的面向?qū)ο髮嵺`經(jīng)驗被廣泛傳播和應(yīng)用。2)軟件體系結(jié)構(gòu)20世紀(jì)70年代開發(fā)復(fù)雜軟件系統(tǒng)的初步嘗試使得人們明確和發(fā)展了獨立的軟件設(shè)計體系,提出了模塊化、信息隱藏等最為基礎(chǔ)的設(shè)計思想。到了20世紀(jì)80年代中期,這些思想逐漸成熟,并且成功融入了軟件開發(fā)過程。這時,一些新的探索就出現(xiàn)了,其中包括面向?qū)ο笤O(shè)計,也包括針對大規(guī)模軟件系統(tǒng)設(shè)計的一些總結(jié)與思考。在對大規(guī)模系統(tǒng)的設(shè)計經(jīng)驗進(jìn)行總結(jié)時,人們發(fā)現(xiàn)越來越需要有一種更高抽象層次的設(shè)計體系來進(jìn)行思想的匯總與提升。于是,研究者們在20世紀(jì)90年代初期正式提出了“軟件體系結(jié)構(gòu)”這一主題,并結(jié)合90年代之后出現(xiàn)的軟件系統(tǒng)規(guī)模日益擴(kuò)大的趨勢,在其后的10年中對其進(jìn)行了深入的探索與研究。人們在體系結(jié)構(gòu)的基本內(nèi)涵、風(fēng)格、描述、設(shè)計、評價等方面開展了卓有成效的工作,在21世紀(jì)初建立了一個比較系統(tǒng)的軟件體系結(jié)構(gòu)方法體系。軟件體系結(jié)構(gòu)使用部件、連接件和配置三個高抽象層次的邏輯單位,關(guān)注如何將大批獨立模塊組織形成一個“系統(tǒng)”而不是各個模塊本身,也就是說更重視系統(tǒng)的總體組織。軟件體系結(jié)構(gòu)成為大規(guī)模軟件系統(tǒng)開發(fā)中處理質(zhì)量屬性和控制復(fù)雜性的主要手段,改變了大規(guī)模軟件系統(tǒng)的開發(fā)方式,提高了大規(guī)模軟件系統(tǒng)開發(fā)的成功率和產(chǎn)品質(zhì)量。3)人機(jī)交互為了吸引更多的用戶,贏得市場競爭,人們在20世紀(jì)90年代開始重視人機(jī)交互,提出“以用戶為中心”(User-CenteredDesign)的設(shè)計方法。人機(jī)交互的基本目標(biāo)是開發(fā)更加友好的軟件產(chǎn)品,最低標(biāo)準(zhǔn)是讓普通人在使用軟件產(chǎn)品時比較順暢,較高標(biāo)準(zhǔn)是讓用戶在使用產(chǎn)品時感到滿足和愉悅。從20世紀(jì)50年代開始人機(jī)交互技術(shù)就一直在發(fā)展,但是直到90年代人們才開始重視如何將人機(jī)交互技術(shù)融入軟件工程,并建立了一些人機(jī)交互的軟件工程方法,包括快速原型、參與式設(shè)計、各種人機(jī)交互指導(dǎo)原則等。4)需求工程自“瀑布模型”起,人們就已經(jīng)認(rèn)識到并強(qiáng)調(diào)了需求分析的作用。但是,到了20世紀(jì)90年代,隨著“以企業(yè)為中心”軟件系統(tǒng)規(guī)模的增長,人們認(rèn)識到需求處理除了核心的需求分析活動之外,還有其他的活動也需要慎重對待,要進(jìn)行“需求工程”,即利用工程化的手段進(jìn)行需求處理,以保證需求處理的正確進(jìn)行。相比于傳統(tǒng)的需求分析,需求工程將用戶價值分析視為基本要求,重視產(chǎn)品分析、問題與目標(biāo)分析、業(yè)務(wù)分析、與用戶的交流和溝通等。需求工程本質(zhì)上反映了應(yīng)用軟件與現(xiàn)實之間的聯(lián)系日益增強(qiáng)的事實。5)基于軟件復(fù)用的大規(guī)模軟件系統(tǒng)開發(fā)技術(shù)在大規(guī)模軟件系統(tǒng)開發(fā)中,為了解決復(fù)雜度與開發(fā)周期的兩難局面,人們充分利用了軟件復(fù)用思想,建立了多種基于軟件復(fù)用的大規(guī)模軟件系統(tǒng)開發(fā)技術(shù),其中最為流行的是框架(Framework)和構(gòu)件(Component)。框架是領(lǐng)域特定的復(fù)用技術(shù)。它的基本思想是根據(jù)應(yīng)用領(lǐng)域的共性和差異性特點,建立一個靈活的體系結(jié)構(gòu),并實現(xiàn)其中比較固定的部分,留下變化的部分等待開發(fā)者補(bǔ)充。簡單地說,框架開發(fā)者完成了框架的總體設(shè)計和部分開發(fā)工作,然后將未開發(fā)的部分留作空白,等待框架的使用者填充。20世紀(jì)90年代,很多應(yīng)用領(lǐng)域都建立了自己的開發(fā)框架。構(gòu)件是在代碼實現(xiàn)層次上進(jìn)行復(fù)用的技術(shù)。它的基本思想是給所有的構(gòu)件定義一個接口標(biāo)準(zhǔn),就像機(jī)械工程定義螺絲和螺母的標(biāo)準(zhǔn)規(guī)格一樣,這樣就可以忽略每個構(gòu)件內(nèi)部的因素,實現(xiàn)不同構(gòu)件之間的通信和交互。構(gòu)件通常是黑盒的二進(jìn)制代碼,帶有專門的說明書,可以像機(jī)器零件那樣被獨立生產(chǎn)、銷售和使用。組件對象模型(COM)和JavaBean就是20世紀(jì)90年代產(chǎn)生并流行起來的構(gòu)件標(biāo)準(zhǔn)。6)?Web開發(fā)技術(shù)Web應(yīng)用的開發(fā)技術(shù)不同于傳統(tǒng)軟件形式。在20世紀(jì)90年代早期,人們主要使用HTML開發(fā)靜態(tài)的Web站點。到了90年代中后期,動態(tài)網(wǎng)頁技術(shù)、JSP、超文本預(yù)處理器、JavaScript等動態(tài)Web開發(fā)技術(shù)開始流行。人們建立了Web程序的數(shù)據(jù)描述標(biāo)準(zhǔn)XML。20世紀(jì)90年代軟件工程的特點是:以企業(yè)為中心的大規(guī)模軟件系統(tǒng)開發(fā);追求快速開發(fā)、可變更性和用戶價值;Web應(yīng)用出現(xiàn)。6.?21世紀(jì)00年代1)延續(xù)20世紀(jì)90年代的技術(shù)進(jìn)展20世紀(jì)90年代產(chǎn)生的一些重要技術(shù),在21世紀(jì)00年代繼續(xù)得到發(fā)展和完善:(1)軟件體系結(jié)構(gòu):到了2000年,軟件體系結(jié)構(gòu)設(shè)計方法基本成熟,2000年之后開始廣泛使用。軟件體系結(jié)構(gòu)的研究和探索工作繼續(xù)深入,轉(zhuǎn)向軟件體系結(jié)構(gòu)設(shè)計決策的描述和產(chǎn)生過程。(2)需求工程:2000年之后的軟件需求工程逐漸與系統(tǒng)工程相融合,典型表現(xiàn)是越來越重視系統(tǒng)需求而不是軟件需求的分析,包括目標(biāo)分析、背景環(huán)境分析、系統(tǒng)屬性分析等。(3)人機(jī)交互:隨著Web應(yīng)用和小型設(shè)備應(yīng)用越來越突出,21世紀(jì)前10年人機(jī)交互將Web的人機(jī)交互和小型設(shè)備的人機(jī)交互作為工作重點。(4)基于復(fù)用的大型軟件系統(tǒng)開發(fā)技術(shù):Struts、Spring等針對Web的開發(fā)框架成為軟件開發(fā)的主流工具;更適應(yīng)Web的WebService構(gòu)件類型被應(yīng)用得越來越廣泛。2)?Web技術(shù)發(fā)展隨著Web的發(fā)展,21世紀(jì)前10年的很多技術(shù)進(jìn)展都與Web有關(guān):(1)?20世紀(jì)90年代產(chǎn)生的各種動態(tài)Web開發(fā)技術(shù)成為軟件開發(fā)必不可少的部分。(2)適用于Web開發(fā)的構(gòu)件中間件平臺?.NET和J2EE成為軟件開發(fā)的主流平臺。(3)瀏覽器/服務(wù)器模式(B/S)、N-Tier、面向服務(wù)的架構(gòu)(SOA)、消息總線等適合于Web應(yīng)用的體系結(jié)構(gòu)風(fēng)格被廣泛傳播。(4)針對Web的開發(fā)框架成為主流的軟件開發(fā)工具。(5)博客、即時通信等Web2.0技術(shù)出現(xiàn)并得到廣泛應(yīng)用。3)領(lǐng)域特定的軟件工程方法 該方法從20世紀(jì)90年代開始出現(xiàn),在21世紀(jì)前10年,軟件工程方法分領(lǐng)域深入成為主流。在技術(shù)領(lǐng)域方面,下列技術(shù)領(lǐng)域都出現(xiàn)了明顯的進(jìn)展:(1)以網(wǎng)絡(luò)為中心的系統(tǒng);(2)信息系統(tǒng);(3)金融和電子商務(wù)系統(tǒng);(4)高可信系統(tǒng);(5)嵌入式和實時系統(tǒng);(6)多媒體、游戲和娛樂系統(tǒng);(7)小型移動平臺系統(tǒng)。在應(yīng)用領(lǐng)域方面,越來越多的領(lǐng)域開始根據(jù)自身特點定義參照體系結(jié)構(gòu)、開發(fā)框架、可復(fù)用構(gòu)件和領(lǐng)域特定的編程語言。面向應(yīng)用領(lǐng)域進(jìn)行軟件開發(fā)的產(chǎn)品線(ProductLine)方法得到了越來越多的關(guān)注和使用。21世紀(jì)前10年軟件工程的特點是:大規(guī)模Web應(yīng)用;大量面向大眾的Web產(chǎn)品;追求快速開發(fā)、可變更性、用戶價值和創(chuàng)新。1.4計算機(jī)輔助軟件工程計算機(jī)輔助軟件工程(CASE)是一組工具和方法的集合,用于輔助軟件開發(fā)、維護(hù)、管理過程中的各項活動,促進(jìn)軟件過程的工程化和自動化,實現(xiàn)高效率和高質(zhì)量的軟件開發(fā)。如今,CASE工具已經(jīng)由支持單一任務(wù)的單個工具向支持整個開發(fā)過程的集成化軟件工程環(huán)境的方向發(fā)展,同時重視用戶界面的設(shè)計,不斷采用新理論和新技術(shù),成為軟件工程領(lǐng)域的一個重要分支。CASE環(huán)境的組成構(gòu)件如圖1.5所示。CASE環(huán)境應(yīng)用應(yīng)具有以下功能:(1)提供一種機(jī)制,使環(huán)境中的所有工具可以共享軟件工程信息。(2)每一個信息項的改變,可以追蹤到其他相關(guān)信息項。(3)對所有軟件工程信息提供版本控制和配置管理。(4)對環(huán)境中的任何工具可進(jìn)行直接的、非順序的訪問。(5)在標(biāo)準(zhǔn)的分解結(jié)構(gòu)中提供工具和數(shù)據(jù)的自動支持。(6)使每個工具的用戶共享人機(jī)界面的所有功能。(7)收集能夠改善過程和產(chǎn)品的各項度量指標(biāo)。(8)支持軟件工程師之間的通信。目前,市場上有許多商業(yè)化的CASE工具,它們在一定程度上促進(jìn)了軟件過程的工程化。1.5軟件工程與其他相關(guān)學(xué)科的關(guān)系軟件工程是一門交叉性的工程學(xué)科,如圖1.6所示。軟件工程以計算機(jī)科學(xué)和數(shù)學(xué)為基礎(chǔ),將這些學(xué)科的基本原理應(yīng)用于構(gòu)造軟件的模型與算法,力求提出更系統(tǒng)化和更形式化的軟件開發(fā)方法,并采用適當(dāng)?shù)姆椒炞C即將開發(fā)的軟件。正確的軟件開發(fā)實踐更重要的是將工程化的原則和方法應(yīng)用于軟件的分析與評價、規(guī)格說明、設(shè)計、實現(xiàn)、演化等過程。軟件工程運用工程科學(xué)的基本原理,結(jié)合特定領(lǐng)域的基礎(chǔ)知識和相關(guān)的專業(yè)知識,通過評估成本與確定權(quán)衡提出合理的問題解決方案,在軟件開發(fā)實踐的基礎(chǔ)上總結(jié)制定標(biāo)準(zhǔn)與規(guī)范,重用設(shè)計和設(shè)計制品。事實證明,成功的軟件開發(fā)往往離不開規(guī)范化的開發(fā)管理。軟件工程將管理科學(xué)應(yīng)用于軟件開發(fā)的計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物業(yè)管理勞動合同范本
- 出境維修合同樣本
- 公司買賣居間合同樣本
- 出售轉(zhuǎn)讓輪船合同樣本
- 2025化工原料購銷合同
- 出口資質(zhì)代辦服務(wù)合同樣本
- 2025YY汽車買賣合同協(xié)議書樣本
- 伸縮棚加工合同樣本
- 內(nèi)墻涂料居間合同樣本
- 浮筒浮島施工方案
- 服務(wù)類驗收單
- 聲聲慢三部合唱簡譜
- 2022-2023學(xué)年陜西省寶雞市渭濱區(qū)八年級(下)期中數(shù)學(xué)試卷(含解析)
- 2023-2024學(xué)年海南省天一大聯(lián)考高三下學(xué)期第六次檢測數(shù)學(xué)試卷含解析
- 全國初中數(shù)學(xué)青年教師優(yōu)質(zhì)課一等獎《平行線的性質(zhì)》教學(xué)設(shè)計
- 危重患者識別和處理-課件
- 《科學(xué)生活方式》課件
- 議小型水庫的病害及防患措施
- 電子商務(wù)行業(yè)的法律法規(guī)培訓(xùn)
- 預(yù)防交叉感染課件
- 上下班交通安全培訓(xùn)課件
評論
0/150
提交評論