版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、軟件 工程軟件工程是一門什么樣的學(xué)科?是指導(dǎo)計算機(jī)軟件開發(fā)與維護(hù)的一門工程學(xué)科。工程:將科學(xué)及數(shù)學(xué)原理運(yùn)用于實(shí)際用途的應(yīng)用手段,如:設(shè)計、制造、機(jī)器操縱、構(gòu)架等。典型的傳統(tǒng)工程:建筑工程、機(jī)械工程、電力工程等。概括的說,軟件工程即用工程、科學(xué)和數(shù)學(xué)的原則和方法研制、維護(hù)計算機(jī)軟件的有關(guān)技術(shù)及方法,其優(yōu)點(diǎn)是以較小的代價開發(fā)高質(zhì)量的軟件并有效地維護(hù)它。學(xué)習(xí)軟件工程的現(xiàn)實(shí)意義1 為參與軟件開發(fā)提供理論基礎(chǔ)和指導(dǎo)2 將所學(xué)的計算機(jī)基礎(chǔ)知識與市場需求聯(lián)系起來3 對整個軟件業(yè)的發(fā)展趨勢的把握4 各種認(rèn)證考試的必備知識一、軟件工程與其他學(xué)科的關(guān)系1 、軟件工程是計算學(xué)科 9 個領(lǐng)域之一算法和數(shù)據(jù)結(jié)構(gòu)計算機(jī)系
2、統(tǒng)結(jié)構(gòu)人工智能和機(jī)器人學(xué)數(shù)據(jù)庫和信息檢索人一機(jī)交互操作系統(tǒng)程序設(shè)計語言軟件方法學(xué)和軟件工程數(shù)字和符號計算計算學(xué)科中12個重復(fù)出現(xiàn)的基本概念綁定概念和形式模型效率抽象層次按時間排序安全性大問題的復(fù)雜性一致性和完備性演化按空間排序重用折衷與決策軟件工程是計算學(xué)科的分支,這 12 個概念同樣將貫穿軟件工程學(xué)科,是學(xué)科的精髓。2 、 軟件工程的8 個相關(guān)學(xué)科知識域計算機(jī)工程計算機(jī)科學(xué)數(shù)學(xué)管理學(xué)項(xiàng)目管理質(zhì)量管理系統(tǒng)工程學(xué)軟件人類工程學(xué) 其中:計算機(jī)科學(xué)、數(shù)學(xué)是基礎(chǔ)工程學(xué)科、管理學(xué)科也非常重要二、學(xué)習(xí)目標(biāo)(1) 掌握軟件工程的基礎(chǔ)知識和理論,對軟件工程學(xué)有一個全貌的了解; 熟悉軟件項(xiàng)目開發(fā)和維護(hù)的一般過程
3、; 熟練掌握軟件需求分析、設(shè)計、編碼和測試等階段的主要思想和技術(shù)方法;二、學(xué)習(xí)目標(biāo)(2) 通過學(xué)習(xí),轉(zhuǎn)變對軟件開發(fā)的認(rèn)識:從個人的單純編程活動轉(zhuǎn)移到進(jìn)行系統(tǒng)分析與設(shè)計方面上來轉(zhuǎn)變思維定式:程序員 系統(tǒng)工程師(系統(tǒng)分析員)三、部分參考資料 軟件需求最佳實(shí)踐SERU過程框架原理與應(yīng)用 徐峰著,電子工業(yè)出版社, 2008 年 軟件工程案例教程 軟件項(xiàng)目開發(fā)實(shí)踐 (第2版),韓萬江等編著,機(jī)械工業(yè)出版社, 2013 年 軟件工程 實(shí)踐者的研究方法 原書第7版 ,鄭人杰、馬素霞等譯,Roger S.Pressman著,機(jī)械工業(yè)出版社,2013年簡單之美 軟件開發(fā)實(shí)踐者的思考倪健著,機(jī)械工業(yè)出版社,201
4、0年四、課程特點(diǎn)和學(xué)習(xí)的注意事項(xiàng)1 、知易行難 要將理論知識與實(shí)踐運(yùn)用結(jié)合,進(jìn)行對照,以加深理解和掌握。 2 、內(nèi)容紛雜 軟件工程涉及計算機(jī)科學(xué)、數(shù)學(xué)、工程科學(xué)和管理科學(xué)等多個領(lǐng)域。其中:計算機(jī)科學(xué)和數(shù)學(xué)用于構(gòu)造模型與算法;工程科學(xué)用于制定規(guī)范、設(shè)計范型、評估成本及確定權(quán)衡管理科學(xué)用于計劃、資源、質(zhì)量和成本的管理。軟件工程方法與實(shí)踐(第2版)竇萬峰計算機(jī)科學(xué)與技術(shù)學(xué)院南京師范大學(xué) 第一部分:軟件工程基礎(chǔ)什么是軟件工程?什么是工程化思想?什么是軟件過程?有哪些過程模型?如何選擇與建立過程模型?什么是統(tǒng)一過程?什么是敏捷過程?有哪些模型?什么是軟件工程實(shí)踐?第1章 軟件工程概述(內(nèi)容提要)軟件的本
5、質(zhì)軟件工程的基本概念軟件工程化思想軟件工程兩大范型軟件工程思想與基本原理軟件工程基本活動軟件softwaresoft+ware軟制品(軟體) 軟件包括程序、數(shù)據(jù)及其相關(guān)文檔的完整集合。三要素: 軟件=程序+文檔+數(shù)據(jù)什么是軟件?1.1 關(guān)于軟件軟件和軟件工程15什么是程序 程序: 由程序設(shè)計語言所描述的、能為計算機(jī)所識別、理解和處理的語句序列程序例子Main( ) int i, j; / 變量定義 char Str10; i = i + j ; / 語句說明 什么是文檔?文檔: 記錄軟件開發(fā)活動和階段性成果、理解軟件所必需的闡述性資料需求分析文檔軟件設(shè)計文擋等 編寫文檔目的 促進(jìn)對軟件的開發(fā),
6、管理和維護(hù); 便于各種人員(用戶,設(shè)計、開發(fā)人員)的交流軟件需求規(guī)格說明書軟件特點(diǎn). 軟件是一種邏輯實(shí)體,設(shè)計復(fù)雜,難以理解和維護(hù). 軟件的生產(chǎn)與硬件不同,生產(chǎn)只需復(fù)制. 在軟件的運(yùn)行和使用期間,沒有硬件那樣的機(jī)械 磨損,有老化問題磨合調(diào)整磨損用壞修改點(diǎn)實(shí)際曲線理想曲線硬件失效率曲線時間失效率時間失效率軟件失效率曲線. 軟件的成本相當(dāng)昂貴,軟件的研制工作須要投入大量的、復(fù)雜的、高強(qiáng)度腦力勞動,軟件開發(fā)成本、進(jìn)度等難以估計軟件技術(shù)的發(fā)展落后于需求時間軟件復(fù)雜性軟件需求差距軟件技術(shù)硬、軟件成本比例的變化年份成本%軟件1950197019851995硬件什么是軟件.軟件的特性:復(fù)雜性:多種認(rèn)為因素使
7、得軟件難以統(tǒng)一化難以理解、難以維護(hù)、難以對生產(chǎn)過程進(jìn)行管理一致性:軟件依賴硬件,須與運(yùn)行它的硬件保持一致退化性易變性:在生產(chǎn)過程中,甚至運(yùn)行之后都可以改變移植性高成本:涉及大量的人力成本和管理成本2022/10/11軟件的分類1)按軟件的功能進(jìn)行劃分系統(tǒng)軟件支撐軟件應(yīng)用軟件2022/10/11支撐軟件一般類型: 文本編輯程序 文本格式化程序支持需求分析: PSL/PSA問題描述語言 關(guān)系數(shù)據(jù)庫管理系統(tǒng)支持設(shè)計: 圖形軟件包 結(jié)構(gòu)化流程圖繪圖程序支持測試: 靜態(tài)分析器 測試覆蓋檢驗(yàn)程序支持實(shí)現(xiàn): 編輯程序 連接編輯程序支持管理: 標(biāo)準(zhǔn)檢驗(yàn)程序 庫管理程序2022/10/112)按軟件的規(guī)模進(jìn)行劃
8、分 按開發(fā)軟件所需的 人力、時間以及完成的 源代碼行數(shù)。類別參加人數(shù)研制期限產(chǎn)品規(guī)模(源代碼行數(shù))微型小型中型大型甚大型極大型112-55-20100-10002000-50001-4周1-6周1-2年2-3年4-5年5-10年約500行 約2000行 5000-50000行5萬-10萬行100萬行1000萬行微軟的windows 2000項(xiàng)目就包含了近3000名工程師,他們被分成幾百個小的團(tuán)隊求伯君開發(fā)最初的 WPS2022/10/113)按軟件開發(fā)劃分軟件項(xiàng)目開發(fā)軟件產(chǎn)品開發(fā)軟件產(chǎn)品-指的是不局限于特定領(lǐng)域的、可以被廣大用戶直接使用的軟件系統(tǒng)。如微軟的 Windows,Office等。這類
9、系統(tǒng)的特點(diǎn)是技術(shù)含量高,開發(fā)時要考到各種不同的用戶需求;軟件項(xiàng)目-也稱定制軟件,是受某個特定客戶(或少數(shù)客戶)的委托, 這類軟件的特點(diǎn)是領(lǐng)域知識所占的比重較大,相對技術(shù)而言工程性更強(qiáng)。例如,軍用防空指揮系統(tǒng)、衛(wèi)星控制系統(tǒng)等均為這類軟件。軟件技術(shù)演化第一階段:程序設(shè)計階段。1946年到60年代初,其主要特征是程序生產(chǎn)方式為個體手工方式。 第二階段:程序系統(tǒng)階段。60年代初到70年代初,軟件工程學(xué)科誕生。軟件的開發(fā)方式由個體生產(chǎn)發(fā)展到了小組生產(chǎn),軟件的開發(fā)與維護(hù)費(fèi)用以驚人的速度增加,維護(hù)困難,導(dǎo)致軟件危機(jī)。例如:IBM360/370的開發(fā)第三階段:傳統(tǒng)軟件工程階段。20世紀(jì)70年代中期至80年代中
10、期,軟件工程師把工程化的思想加入到軟件的開發(fā)過程中,用工程化的原則、方法和標(biāo)準(zhǔn)來開發(fā)和維護(hù)軟件。第四階段:面向?qū)ο箅A段。20世紀(jì)80年代中期至今,面向?qū)ο蟮姆椒▽W(xué)受到了人們的重視,促進(jìn)了軟件業(yè)的飛速發(fā)展,軟件產(chǎn)業(yè)在世界經(jīng)濟(jì)中已經(jīng)占有舉足輕重的地位。發(fā)展趨勢基于internet平臺的軟件軟件服務(wù)多樣性:中間件開放性:新型中間件平臺1.2 關(guān)于軟件工程軟件危機(jī)軟件和軟件工程28軟件危機(jī)的表現(xiàn)(1 of 3)成本高IBM 360 OS, 5000多人年,耗時4年(19631966),花費(fèi)2億多美元美國空軍:1955年軟件占總費(fèi)用(計算機(jī)系統(tǒng))的18%,70年60%,85年達(dá)到85美國全球軍事指揮控制
11、系統(tǒng),硬件1億美元,軟件高達(dá)7.2億美元計算機(jī)軟件和硬件費(fèi)用比軟件和軟件工程29軟件危機(jī)的表現(xiàn)(2 of 3)軟件質(zhì)量得不到保證軟件應(yīng)用面的擴(kuò)大:科學(xué)計算、軍事、航空航天、工業(yè)控制、企業(yè)管理、辦公、家庭軟件越來越多的應(yīng)用于安全猶關(guān)(safety critical)的系統(tǒng),對軟件質(zhì)量提出更高的要求80年代歐洲亞麗安娜火箭的發(fā)射失敗,原因是軟件錯誤美國阿托拉斯火箭的發(fā)射失敗,原因是軟件故障英國1986年開發(fā)的辦公室信息系統(tǒng)Folios經(jīng)4年,因性能達(dá)不到要求,1989年取消日本第5代機(jī)因?yàn)檐浖栴}在投入50億美元后于1993年下馬由于軟件質(zhì)量問題導(dǎo)致失敗的軟件項(xiàng)目非常多軟件和軟件工程30軟件危機(jī)的
12、表現(xiàn)(3 of 3)進(jìn)度難以控制項(xiàng)目延期比比皆是由于進(jìn)度問題而取消的軟件項(xiàng)目較常見只有一小部分的項(xiàng)目能夠按期完成維護(hù)非常困難軟件維護(hù)的多樣性軟件維護(hù)的復(fù)雜性軟件維護(hù)的副作用如何開發(fā)軟件?如何維護(hù)軟件?軟件和軟件工程32產(chǎn)生軟件危機(jī)的根源邏輯產(chǎn)品,不同于物理產(chǎn)品復(fù)雜性高邏輯產(chǎn)品,邏輯復(fù)雜性,遠(yuǎn)高于硬件復(fù)雜性軟件的復(fù)雜性隨規(guī)模呈指數(shù)級上升規(guī)模大應(yīng)用擴(kuò)大,代碼量,1000萬行,仍在不斷膨脹影響軟件生產(chǎn)率和質(zhì)量的因素比較復(fù)雜人員的能力和水平團(tuán)隊合作缺乏有效、系統(tǒng)原理、原則、方法和工具的指導(dǎo)和輔助軟件和軟件工程33對軟件開發(fā)的深層次認(rèn)識開發(fā)一個具有一定規(guī)模和復(fù)雜性的軟件系統(tǒng)與編寫一個簡單的程序不一樣正如
13、搭豬窩和建設(shè)高樓大廈大型、復(fù)雜軟件系統(tǒng)的開發(fā)是一項(xiàng)工程,必須按照工程化的方法組織軟件的生產(chǎn)和管理,必須經(jīng)過分析、設(shè)計、實(shí)現(xiàn)、測試、維護(hù)等一系列軟件過程和活動軟件和軟件工程34解決危機(jī)的技術(shù)途徑軟件危機(jī)20世紀(jì)60年代爆發(fā),然而實(shí)際上軟件危機(jī)隨著計算機(jī)軟件的產(chǎn)生而產(chǎn)生,只是在此之前其問題的嚴(yán)重性沒有引起人們的關(guān)注和重視提出有效的方法和工具支持軟件開發(fā)1968年提出軟件工程概念和思想20世紀(jì)70年代的結(jié)構(gòu)化軟件開發(fā)方法20世紀(jì)80年代的面向?qū)ο蟮能浖_發(fā)方法新的技術(shù): 軟件重用、快速原型、需求工程典型技術(shù): COM, Java, C+, J2EE, .Net, .支撐工具和環(huán)境:Jbuilder,
14、 Visual Studio, WebLogic, 軟件和軟件工程35技術(shù)手段不能完全解決軟件危機(jī)到了20世紀(jì)90年代,軟件危機(jī)依然存在,甚至更為嚴(yán)重應(yīng)用技術(shù)的發(fā)展瀑布模型結(jié)構(gòu)化軟件開發(fā)方法OO軟件開發(fā)方法應(yīng)用變得越來越大和復(fù)雜,技術(shù)變得更加力不從心錯誤的觀念“只要有好的軟件開發(fā)方法和工具就能高效率地開發(fā)出高質(zhì)量的軟件”軟件和軟件工程36解決危機(jī)的管理途徑問題出在哪里?20世紀(jì)80年代末,美國DoD和工業(yè)界開始認(rèn)識到管理的重要性美國DoD的一項(xiàng)研究表明,70%的項(xiàng)目由于管理不善導(dǎo)致難以控制進(jìn)步、成本和質(zhì)量;進(jìn)一步的研究發(fā)現(xiàn):管理是影響軟件項(xiàng)目成功開發(fā)的全局性因素,而技術(shù)只影響局部如果軟件開發(fā)組
15、織不能對軟件項(xiàng)目進(jìn)行有效管理,就不能充分發(fā)揮軟件開發(fā)方法和工具的潛力,也就不能高效率地開發(fā)出高質(zhì)量的軟件產(chǎn)品軟件危機(jī)解決途徑重視需求分析,明確與確切表達(dá)需求重視與客戶溝通與交流統(tǒng)一的、公認(rèn)的方法論和規(guī)范指導(dǎo)重視設(shè)計和實(shí)現(xiàn)過程的資料充分的檢測工作軟件和軟件工程38軟件工程軟件危機(jī)-根源-解決途徑:軟件工程產(chǎn)生:1968年 NATO 計算機(jī)科學(xué)會議軟件工程是運(yùn)用工程的、數(shù)學(xué)的、計算機(jī)等科學(xué)概念、方法和原理來指導(dǎo)軟件開發(fā)和管理和維護(hù)的一門學(xué)科軟件工程定義B.W.Boehm的定義:運(yùn)用現(xiàn)代科學(xué)技術(shù)知識來設(shè)計并構(gòu)造計算機(jī)程序及為開發(fā)、運(yùn)行和維護(hù)這些程序所必須的相關(guān)文件資料。Fritz Bauer的定義:
16、軟件工程是為了經(jīng)濟(jì)地獲得能夠在實(shí)際機(jī)器上有效運(yùn)行的可靠軟件而建立和使用的一系列完善的工程化原則。1983年美國IEEE軟件工程標(biāo)準(zhǔn)術(shù)語的定義為:軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法,其中“軟件”的定義為:計算機(jī)程序、方法、規(guī)則、相關(guān)的文檔資料以及在計事機(jī)上運(yùn)行時所必需的數(shù)據(jù)。軟件工程三段論軟件開發(fā)項(xiàng)目管理過程改進(jìn)軟件開發(fā)開發(fā)過程是軟件人員生產(chǎn)軟件的過程,例如需求分析、設(shè)計、編碼、測試等,相當(dāng)于生產(chǎn)線上的生產(chǎn)過程。軟件項(xiàng)目管理 管理過程是項(xiàng)目管理者規(guī)劃軟件開發(fā)、控制軟件開發(fā)的過程,相當(dāng)于生產(chǎn)線上的管理過程,管理過程是伴隨開發(fā)過程進(jìn)行的過程。 軟件項(xiàng)目管理路線圖 配置管 理計劃 合同 計
17、劃 風(fēng)險計劃 溝通 計劃 質(zhì)量計劃 成本 計劃 時間計劃 集成 計劃 范圍計劃 項(xiàng)目結(jié)束 項(xiàng)目執(zhí) 行控制 項(xiàng)目 計劃 項(xiàng)目初始 人力 計劃 軟件過程改進(jìn) 過程改進(jìn)相當(dāng)于對軟件開發(fā)過程和軟件管理過程的“工藝流程”進(jìn)行管理和改進(jìn),如果沒有好的工藝生產(chǎn)不出好的產(chǎn)品,它包括對開發(fā)過程和管理過程的定義和改進(jìn)。軟件過程改進(jìn)路線圖啟動診斷建立實(shí)施評估軟件工程化思想把軟件看作是一個工程產(chǎn)品兩個方面:軟件開發(fā)技術(shù):軟件開發(fā)不同于一般的產(chǎn)品開發(fā),產(chǎn)品是邏輯的,需要的資源主要是人力資源,軟件過程更多的是設(shè)計過程(沒有制造過程)軟件工程管理:工程化思想主要體現(xiàn)在此缺乏軟件過程控制能力能力成熟模型(Capability
18、 Maturity Model):強(qiáng)調(diào)企業(yè)軟件開發(fā)能力取決于企業(yè)的過程能力而不是個人能力軟件工程要達(dá)到的基本目標(biāo)包括:達(dá)到要求的軟件功能;取得較好的軟件性能;開發(fā)出高質(zhì)量的軟件;付出較低的開發(fā)成本;需要較低的維護(hù)費(fèi)用;能按時完成開發(fā)工作,及時交付使用。 為了達(dá)到上述目標(biāo),軟件工程設(shè)計、工程支持以及工程管理在軟件開發(fā)過程中必須遵循一些基本原則。1.3 軟件工程原理與原則 基本原理 逐層分解、逐步求精推遲實(shí)現(xiàn)原理逐步求精原理:基于人類思維能力的局限性分解與抽象原理信息隱蔽原理質(zhì)量保證原理:預(yù)防而不是事后補(bǔ)救,全過程控制2022/10/11C(P1+P2)C(P1)+C(P2)E(P1+P2)E(P
19、1)+E(P2)軟件工程基本定理最小成本區(qū)M模塊成本接口成本總成本軟件開發(fā)工作量 模塊數(shù) 軟件工程基本原則用分階段的生存周期計劃進(jìn)行嚴(yán)格的管理 堅持進(jìn)行階段評審 實(shí)行嚴(yán)格的產(chǎn)品控制 采用現(xiàn)代程序設(shè)計技術(shù) 軟件工程結(jié)果應(yīng)能清楚地審查 開發(fā)小組的人員應(yīng)該少而精 承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性著名軟件工程專家B.Boehm綜合有關(guān)專家和學(xué)者的意見并總結(jié)了多年來開發(fā)軟件的經(jīng)驗(yàn),提出了軟件工程的七條基本原則: B.Boehm指出,遵循前六條基本原則,能夠?qū)崿F(xiàn)軟件的工程化生產(chǎn);按照第七條原則,不僅要積極主動地采納新的軟件技術(shù),而且要注意不斷總結(jié)經(jīng)驗(yàn)。1.4 軟件工程兩大范型/模型結(jié)構(gòu)化開發(fā)范型特征:結(jié)構(gòu)
20、化技術(shù)要么面向行為,要么面向數(shù)據(jù)構(gòu)成結(jié)構(gòu)化開發(fā)范型的技術(shù)包括:結(jié)構(gòu)化分析結(jié)構(gòu)化設(shè)計結(jié)構(gòu)化編程結(jié)構(gòu)化測試結(jié)構(gòu)化維護(hù)軟件工程兩大范型面向?qū)ο蠓缎吞卣鳎簩ο笠曌饕粋€融合了數(shù)據(jù)及在其上操作的行為的、統(tǒng)一的軟件組件。技術(shù)包括:面向?qū)ο蠓治雒嫦驅(qū)ο笤O(shè)計面向?qū)ο缶幊堂嫦驅(qū)ο鬁y試面向?qū)ο缶S護(hù)優(yōu)勢:對象的概念符合業(yè)務(wù)或領(lǐng)域的客觀實(shí)際維護(hù)容易重型與輕型軟件工程重型軟件工程文檔齊全規(guī)范化和程式化周期長推遲實(shí)現(xiàn)輕型軟件工程非正式交流重視代碼重視測試響應(yīng)需求變化1.5 軟件工程活動溝通活動計劃活動:定義和描述軟件工程工作,包括計劃執(zhí)行的技術(shù)任務(wù)、可能的風(fēng)險、資源需求、工作產(chǎn)品和工作進(jìn)度計劃。如同定義一個旅行地圖建?;?/p>
21、動:利用模型來更好的理解軟件需求并進(jìn)行設(shè)計,相當(dāng)于工程設(shè)計圖紙、模型實(shí)現(xiàn)活動:編碼、測試部署活動:軟件交付到用戶,用戶對其進(jìn)行評測維護(hù)活動管理活動:如風(fēng)險評估、技術(shù)評審、軟件配置管理過程改進(jìn)活動建模的目的和必要性售樓處的模型。1.1 什么是模型售樓處的模型。建模的目的和必要性建模的目的和必要性每一種模型可以在不同的精度級別上表示。最好的模型可以讓你根據(jù)觀察的角色及原因選擇它的詳細(xì)程度。建模的目的和必要性軟件開發(fā)也是一個很復(fù)雜的工程,需要讓客戶和開發(fā)人員快速的、清楚的理解這個復(fù)雜工程,使他們在開發(fā)過程中更好的協(xié)作和溝通,提高工作效率。-建立模型軟件建模的目的是表示軟件的體系和組成,方便軟件設(shè)計人
22、員理解和修改軟件方案,確保軟件設(shè)計和計劃能正確地實(shí)現(xiàn),保證系統(tǒng)不會因?yàn)樾薷亩罎ⅰ?為什么軟件建模建模的目的和必要性為什么一些專業(yè)人員要費(fèi)心去創(chuàng)建模型呢?為什么他們不直接構(gòu)建具體事物呢?答案在于復(fù)雜性和風(fēng)險。 如果不先創(chuàng)建一項(xiàng)設(shè)計、一個藍(lán)圖或者另一個抽象表示,就直接構(gòu)建某種復(fù)雜系統(tǒng),在技術(shù)上是不明智的、在經(jīng)濟(jì)上也是行不通的。盡管專業(yè)建筑師無需設(shè)計圖就可以建造一間犬舍,但是如果他們不首先開發(fā)一批計劃、圖和某種可視化實(shí)物模型,那么就不能建造一幢15層的辦公大樓。建模的目的和必要性小結(jié)軟件工程的是主旨以工程化的思想進(jìn)行軟件開發(fā),以生產(chǎn)高質(zhì)量和高效率的軟件。軟件工程化思想的核心是,把軟件看作是一個工程
23、產(chǎn)品。軟件工程方法學(xué)分別是傳統(tǒng)結(jié)構(gòu)化范型和面向?qū)ο蠓缎汀\浖こ袒顒影ㄩ_發(fā)活動、管理活動和過程改進(jìn)活動。第2章 軟件過程(內(nèi)容提要)什么是軟件過程?什么軟件生命周期?能力成熟度模型敏捷過程結(jié)對編程2.1 軟件過程定義:軟件過程是為了開發(fā)出軟件產(chǎn)品,或者是為了完成軟件工程項(xiàng)目而需要完成的一系列活動的集合過程是可調(diào)整的,工作人員可以挑選合適的活動集合,目標(biāo)通常是及時、高質(zhì)量的交付軟件靈活通常使用生命周期模型簡潔地描述軟件過程 重要性軟件過程提高了軟件工程活動的穩(wěn)定性、可控性和有組織性,如果沒有過程約束,軟件活動將失控并變得混亂。軟件過程框架定義:框架定義了若干個框架活動,這些活動可廣泛應(yīng)用于所有
24、軟件開發(fā)項(xiàng)目兩個方面的內(nèi)容組織及管理框架技術(shù)及工具框架軟件過程環(huán)境組織、管理的角色和職責(zé)技術(shù)環(huán)境軟件過程框架組織與管理框架:過程改進(jìn)活動及角色與職責(zé)技術(shù)與工具框架:技術(shù)及自動化活動工具框架活動:溝通策劃建模構(gòu)建部署軟件生存周期過程(表2-1)系統(tǒng)語境的過程協(xié)議過程組(2個過程,13個活動,52個任務(wù))項(xiàng)目過程組(7個過程,23個活動,72個任務(wù))技術(shù)過程組(11個過程,26個活動,64個任務(wù))組織上項(xiàng)目使能過程組(5個過程,15個活動,48個任務(wù))針對軟件開發(fā)的過程軟件實(shí)現(xiàn)過程組(7個過程,7個活動,39個任務(wù))軟件支持過程組(8個過程,25個活動,68個任務(wù))軟件復(fù)用過程組(3個過程,14個
25、活動,62個任務(wù))軟件過程模型把軟件生命周期中各項(xiàng)開發(fā)活動的流程用一個合理的框架開發(fā)模型來規(guī)范描述,這就是軟件過程模型,也稱為軟件生命周期模型。軟件過程模型是從一個特定的角度表現(xiàn)一個過程,一般使用直觀的圖形標(biāo)識軟件開發(fā)的過程,主要根據(jù)軟件的類型、規(guī)模,特別是軟件的開發(fā)方法、開發(fā)環(huán)境等多種因素確立過程模型。2.2 軟件過程技術(shù)產(chǎn)品與過程選擇軟件過程過程評估CMMI/CMMISO9001:2000個人軟件過程(PSP):是一種可用于控制、管理和改進(jìn)個人工作方式的自我持續(xù)改進(jìn)過程,是一個包括軟件開發(fā)表格、指南和規(guī)程的結(jié)構(gòu)化框架。團(tuán)隊軟件過程(TSP):幫助軟件開發(fā)組織建立成熟和紀(jì)律性的工程實(shí)踐,生產(chǎn)
26、安全和可信的軟件個人軟件過程(PSP)內(nèi)容PSP0是PSP的個人度量過程,其目的是建立個體過程基線。PSP1是個人規(guī)劃過程,引入了基于估計的計劃方法PROBE,用自己的歷史數(shù)據(jù)來預(yù)測新程序大小和開發(fā)時間,并使用線性回歸方法估計參數(shù),確定置信區(qū)間以評價預(yù)測的可信程度。PSP2是個人質(zhì)量管理,根據(jù)程序的缺陷建立檢測表,按照檢測表進(jìn)行設(shè)計復(fù)查和代碼復(fù)查,以便及早發(fā)現(xiàn)缺陷,使修復(fù)缺陷的代價最小。PSP3的目標(biāo)是把個體開發(fā)小程序所能達(dá)到的生產(chǎn)效率和生產(chǎn)質(zhì)量,延伸到大型程序。團(tuán)隊軟件過程(TSP)TSP 采用了循環(huán)遞增的開發(fā)策略,整個軟件生產(chǎn)過程由多個循環(huán)出現(xiàn)的開發(fā)周期組成,每個開發(fā)周期劃分出若干個相對獨(dú)
27、立的階段。TSP 提供了如下方法:計劃評審設(shè)計和編碼標(biāo)準(zhǔn)設(shè)計和代碼評審方法缺陷評審質(zhì)量分析能力成熟度模型CMM(Capability Maturity Model)是指“能力成熟度模型”CMM是由美國卡內(nèi)基梅隆大學(xué)的軟件工程研究所(SEI)開發(fā)的軟件成熟度模型。思想:管理軟件過程的方法不當(dāng)引起的問題,導(dǎo)致新軟件技術(shù)的運(yùn)用并不會自動提高軟件的生產(chǎn)率和質(zhì)量。CMM為軟件企業(yè)的過程能力提供了一個階梯式的改進(jìn)框架,它基于過去所有軟件工程過程改進(jìn)的成果,吸取了以往軟件工程的經(jīng)驗(yàn)教訓(xùn),提供了一個基于過程改進(jìn)的框架。能力成熟度模型集成(CMMI-Capability Maturity Model Integ
28、ration)是CMM模型的最新版本。CMM概述為企業(yè)的發(fā)展規(guī)定過程成熟級別,分為5級(Version 1.0):初始級(Initial):一般企業(yè)皆具有可重復(fù)級(Repeatable):成功經(jīng)驗(yàn)可以重復(fù)定義級(Defined):一套完整的企業(yè)過程,人員自覺遵守(培訓(xùn))管理級(Managed):過程&產(chǎn)品可度量和控制優(yōu)化級(Optimizing):過程持續(xù)改進(jìn)從無序到有序、從特殊到一般、從定性管理到定量管理、最終達(dá)到動態(tài)優(yōu)化CMM概述(續(xù))2. Repeatable1. Initial3. Defined4. ManagedDisciplined ProcessStandard, Consis
29、tent ProcessPredictable ProcessContinuously Improving ProcessUnpredictable and poorly controlledCan repeat previously mastered tasksProcess characterized, fairly well understoodProcess measured and controlledFocus on process improvement5.OptimizingProject Management Integrated Engineering ProcessPro
30、duct and Process QualityManaging ChangeDisorder Disciplined Predictable Immature Mature CMM的概念模型關(guān)鍵過程域KPA:代表一組相關(guān)的工作(活動)。每個KPA都有一個確定的目標(biāo),完成該目標(biāo)即認(rèn)為過程能力的提高。一般特性CF(Common Features):進(jìn)一步細(xì)分KPA的工作。五個特性:承諾(commitment)準(zhǔn)備(ability)執(zhí)行(activity)度量分析(measurement & analysis)驗(yàn)證(verifying implementation)CMM的五個級別Level 1:
31、初始級過程無序且不可見OutInCMM的五個級別Level 2:可重復(fù)級里程碑Milestone可見,按計劃開發(fā)CMM的五個級別Level 2的6個KPA:側(cè)重于管理需求管理(Requirements Management)軟件項(xiàng)目計劃(Software Project Planning)軟件項(xiàng)目的跟蹤和監(jiān)控(Software Project Tacking and Oversight)軟件子合同管理(Software Subcontract Management)軟件質(zhì)量保證(Software Quality Assurance)軟件配置管理(Software Configuration M
32、anagement)CMM的五個級別Level 3:定義級每個階段的內(nèi)部活動可見標(biāo)準(zhǔn)過程和項(xiàng)目定義過程裁剪CMM的五個級別Level 3的7個KPA:工程過程企業(yè)理念機(jī)構(gòu)過程關(guān)注(Organization Process Focus)機(jī)構(gòu)過程定義(Organization Process Definition)培訓(xùn)計劃(Training Program)集成軟件管理(Integrated Software Management)過程裁剪和定義軟件產(chǎn)品工程(Software Product Engineering)過程執(zhí)行組間協(xié)調(diào)(Intergroup Coordination)對等審查(Pee
33、r Reviews)CMM的五個級別Level 4 管理級過程可度量,預(yù)測值與結(jié)果之間的偏差可控CMM的五個級別Level 4的2個KPA:預(yù)測量化管理定量過程管理(Quantitative Process Management)過程度量軟件質(zhì)量管理(Software Quality Management)產(chǎn)品度量CMM的五個級別Level 5 優(yōu)化級過程動態(tài)調(diào)整、新技術(shù)的采用CMM的五個級別Level 5的3個KPA:動態(tài)優(yōu)化缺陷預(yù)防(Defect Prevention)技術(shù)改變管理(Technology Change Management)過程改變管理(Process Change Man
34、agement)能力成熟度模型集成CMMI-Capability Maturity Model Integration是CMM模型的最新版本。CMMI有兩種表示方法:和軟件CMM一樣的階段式表現(xiàn)方法連續(xù)式的表現(xiàn)方法過程管理項(xiàng)目管理工程支持CMMI的目標(biāo)是質(zhì)量、時間表和最低的成本關(guān)鍵實(shí)踐CMM結(jié)構(gòu)CMM標(biāo)準(zhǔn)的使用軟件過程的改進(jìn)(SPI,Software Process Improvement)軟件過程評估(SPA,Software Process Assessment)軟件能力評價(SCE Software Capability Evaluation)2.4 敏捷過程敏捷不是一個過程,是一類過程
35、的統(tǒng)稱。敏捷方法的兩大主要特征:強(qiáng)調(diào)“適應(yīng)性”:對變化快速響應(yīng)對“人”的關(guān)注:人不再是可以替換的零件做法:快速響應(yīng):引入迭代式的開發(fā)手段將整個軟件生命周期分解為若干個小的迭代周期獲取切實(shí)有效的客戶反饋提出12條基本原則敏捷開發(fā)12條原則我們最優(yōu)先要做的是通過盡早的、持續(xù)的交付有價值的軟件來使客戶滿意。即使到了開發(fā)的后期,也歡迎改變需求。敏捷過程利用變化來為客戶創(chuàng)造競爭優(yōu)勢。 經(jīng)常性地交付可以工作的軟件,交付的間隔可以從幾個星期到幾個月,交付的時間間隔越短越好。在整個項(xiàng)目開發(fā)期間,業(yè)務(wù)人員和開發(fā)人員必須天天都在一起工作。圍繞被激勵起來的個體來構(gòu)建項(xiàng)目,給他們提供所需的環(huán)境和支持,并且信任他們能夠
36、完成工作。敏捷開發(fā)12條原則(續(xù))在團(tuán)隊內(nèi)部,最具有效果并富有效率的傳遞信息的方法,就是面對面的交談。工作的軟件是首要的進(jìn)度度量標(biāo)準(zhǔn)。敏捷過程提倡可持續(xù)的開發(fā)速度。責(zé)任人、開發(fā)者和用戶應(yīng)該能夠保持一個長期的、恒定的開發(fā)速度。不斷地關(guān)注優(yōu)秀的技能和好的設(shè)計會增強(qiáng)敏捷能力。 簡單是最根本的。 最好的構(gòu)架、需求和設(shè)計出于自組織團(tuán)隊。 每隔一定時間,團(tuán)隊會在如何才能更有效地工作方面進(jìn)行反省,然后相應(yīng)地對自己的行為進(jìn)行調(diào)整。極限編程極限編程(eXtreme Programming,XP)是一種軟件工程方法學(xué),是敏捷開發(fā)中最富有成效的方法學(xué)之一由KentBeck在1996年提出具有強(qiáng)溝通、簡化設(shè)計、迅速反
37、饋等特點(diǎn)適合于規(guī)模小、進(jìn)度緊、需求不穩(wěn)定、開發(fā)小項(xiàng)目的小團(tuán)隊。極限編程特點(diǎn):XP模型是“輕量型”或“靈活”的軟件過程模型與面向?qū)ο笳Z言結(jié)合的開發(fā)方案“專家協(xié)作”的開發(fā)方式,解決難點(diǎn)問題重視客戶反饋核心有四個要點(diǎn)(價值觀):交流 簡單 反饋 勇氣 交流開發(fā)人員與客戶的交流開發(fā)人員之間的交流使用結(jié)對編程開發(fā)人員與管理人員的交流簡單設(shè)計的簡單編碼的簡單注釋的簡單測試的簡單反饋客戶對軟件的反饋測試代碼對功能代碼的反饋先測試,后編程勇氣開發(fā)人員有接受挑戰(zhàn)性任務(wù)的勇氣XP 12個實(shí)踐1、完整團(tuán)隊XP項(xiàng)目的所有參與者(開發(fā)人員、客戶、測試人員等)一起工作在一個開放的場所中,他們是同一個團(tuán)隊的成員。這個場所的
38、墻壁上隨意懸掛著大幅的、顯著的圖表以及其他一些顯示他們進(jìn)度的東西。2、計劃游戲計劃是持續(xù)的、循序漸進(jìn)的。每2周,開發(fā)人員就為下2周估算候選特性的成本,而客戶則根據(jù)成本和商務(wù)價值來選擇要實(shí)現(xiàn)的特性。3、客戶測試作為選擇每個所期望的特性的一部分,客戶可以根據(jù)腳本語言來定義出自動驗(yàn)收測試來表明該特性可以工作。4、簡單設(shè)計團(tuán)隊保持設(shè)計恰好和當(dāng)前的系統(tǒng)功能相匹配。它通過了所有的測試,不包含任何重復(fù),表達(dá)出了編寫者想表達(dá)的所有東西,并且包含盡可能少的代碼。5、結(jié)對編程所有的產(chǎn)品軟件都是由兩個程序員、并排坐在一起在同一臺機(jī)器上構(gòu)建的。6、測試驅(qū)動開發(fā)編寫單元測試是一個驗(yàn)證行為,更是一個設(shè)計行為。同樣,它更是
39、一種編寫文檔的行為。編寫單元測試避免了相當(dāng)數(shù)量的反饋循環(huán),尤其是功功能能驗(yàn)證方面的反饋循環(huán)。程序員以非常短的循環(huán)周期工作,他們先增加一個失敗的測試,然后使之通過。7、改進(jìn)設(shè)計隨時利用重構(gòu)方法改進(jìn)已經(jīng)腐化的代碼,保持代碼盡可能的干凈、具有表達(dá)力。8、持續(xù)集成團(tuán)隊總是使系統(tǒng)完整地被集成。一個人拆入(Check in)后,其它所有人責(zé)任代碼集成。9、集體代碼所有權(quán)任何結(jié)對的程序員都可以在任何時候改進(jìn)任何代碼。沒有程序員對任何一個特定的模塊或技術(shù)單獨(dú)負(fù)責(zé),每個人都可以參與任何其它方面的開發(fā)。10、編碼標(biāo)準(zhǔn)系統(tǒng)中所有的代碼看起來就好像是被單獨(dú)一人編寫的。11、隱喻將整個系統(tǒng)聯(lián)系在一起的全局視圖;它是系統(tǒng)
40、的未來影像,是它使得所有單獨(dú)模塊的位置和外觀變得明顯直觀。如果模塊的外觀與整個隱喻不符,那么你就知道該模塊是錯誤的。12、可持續(xù)的速度團(tuán)隊只有持久才有獲勝的希望。他們以能夠長期維持的速度努力工作,他們保存精力,他們把項(xiàng)目看作是馬拉松長跑,而不是全速短跑。XP 12個實(shí)踐XP的核心實(shí)踐9、集體代碼所有權(quán)在很多項(xiàng)目開發(fā)過程中,開發(fā)人員只維護(hù)自己的代碼,而且很多人不喜歡其他人隨意修改自己的代碼。因此,即使可能有相應(yīng)的比較詳細(xì)的開發(fā)文檔,但一個程序員卻很少、也不太愿意去讀其他程序員的代碼;而且,因?yàn)椴磺宄渌说某绦虻降讓?shí)現(xiàn)了什么功能,一個程序員一般也不敢隨便改動其他人的代碼。因?yàn)槭亲约壕S護(hù)自己的代碼
41、,可能因?yàn)闀r間緊張或技術(shù)水平的局限性,某些問題一直不能被發(fā)現(xiàn)或得到比較好的解決。針對這點(diǎn),XP提倡大家共同擁有代碼,每個人都有權(quán)利和義務(wù)閱讀其他代碼,發(fā)現(xiàn)和糾正錯誤,重整和優(yōu)化代碼。這樣,這些代碼就不僅僅是一兩個人寫的,而是由整個項(xiàng)目開發(fā)隊伍共同完成的,錯誤會減少很多,重用性會盡可能地得到提高,代碼質(zhì)量是非常好。為了防止修改其他人的代碼而引起系統(tǒng)崩潰,每個人在修改后都應(yīng)該運(yùn)行測試程序XP常見問題XP適合于小型項(xiàng)目(10人左右)?結(jié)對編程,搭檔如何安排?實(shí)施結(jié)對編程、集體代碼所有權(quán)之后,如何考核單個開發(fā)人員?103Pair Programming( 結(jié)對編程 )結(jié)對編程結(jié)對編程(Pair-Pro
42、gramming) 是XP中非常重要的實(shí)踐之一。定義:兩個人坐在同一臺計算機(jī)前面,使用相同的鍵盤和鼠標(biāo)來開發(fā)同樣的一個模塊,一個稱為駕駛者(Driver),負(fù)責(zé)代碼的鍵入,另外一個稱為領(lǐng)航員(Navigator),負(fù)責(zé)監(jiān)看與決策,包括低級錯誤和方向性的錯誤。當(dāng)出現(xiàn)的一個問題對其中一個人來說,難以解決,而恰好是另外一個人的強(qiáng)項(xiàng)的時候,那么角色就會發(fā)生轉(zhuǎn)換。Pair Programming的角色(Role)Driver The one who typesNavigator The one who watches the back角色可以互換的疑問: 一個程序兩個人寫是不是一種浪費(fèi)(可是兩份工資,雙
43、倍資源哦)? 編程從來是一個人的活動。學(xué)校里這么教的,一直以來也是做么做的。 我不喜歡被人盯著工作,這樣我不自在,無法工作。 這個笨家伙老是問問題,他/她不會看書么?我都無法專心工作了。 另一方面: Pair Programming被很多的大師級程序員推崇;不少大學(xué)都展開對Pair Programming的研究,并得到正面的結(jié)論; 很多嘗試過的Developer都開始喜歡Pair Programming?!叭齻€臭皮匠,勝過一個諸葛亮”Pair Programming的疑問Pair Programming和Solo Programming的比較一些研究數(shù)據(jù):1999年,University of
44、 Uath.兩組學(xué)生,一組獨(dú)自工作,一組Pair Programming。Pair Programming和Solo Programming的比較雖然Pair Programming的學(xué)生在剛開始的階段比獨(dú)自工作的學(xué)生花在同樣Task的時間較多,但很快Pair Programming的學(xué)生的時間開始大幅度的下降。而獨(dú)立工作的學(xué)生需要花費(fèi)比Pairs更多的時間來達(dá)到接近的代碼質(zhì)量。Pair Programming和Solo Programming的比較比較研究項(xiàng)目后的問卷調(diào)查發(fā)現(xiàn):Pair Programming能用較少的時間生產(chǎn)更高質(zhì)量的代碼。Pair Programming的學(xué)生們認(rèn)為自己比
45、一個人的時候更勤奮和更聰明的工作,因?yàn)椴幌胱屪约旱膒artner失望。Pair Programming的學(xué)生認(rèn)為自己比一個人的時候更專注,緊湊和有紀(jì)律的工作,而且是持續(xù)的(因?yàn)閬碜訮artner的Pair-Pressure)。而獨(dú)立工作的學(xué)生也可以專注和緊湊的工作,但往往不持續(xù)。Pair Programming的學(xué)生對自己的工作更有信心和成就感。Pair Programming的學(xué)生覺得工作很愉快,很愿意很partner一起工作。在緊張時間安排和繁重的工作壓力下,獨(dú)自工作的學(xué)生很容易蛻變?yōu)闆]有紀(jì)律的Programmer。成功的模式1. 流模式(Flow)兩個程序員共同從事一個有趣又有挑戰(zhàn)性的問
46、題。他們會有不同的技術(shù)、遇到不同的挑戰(zhàn),但是它們都善于找到好的解決方法。例如,其中 一個人可能是javascript專家,另一個人可能是強(qiáng)大的后臺程序員。他們能夠結(jié)合彼此的腦力、知識及經(jīng)驗(yàn)來共同處理復(fù)雜的AJAX任務(wù),從而創(chuàng)造出 最好的解決方案。2. 指導(dǎo)模式(Coaching)老練的程序員在解決問題方面有經(jīng)驗(yàn)和知識,可以與其他不能有效地獨(dú)自解決問題的程序員分享。后來加入的程序員有足夠的理論基礎(chǔ)來理解這些解決方法和程序的實(shí)現(xiàn)。他會在學(xué)習(xí)中慢慢進(jìn)步,成為更優(yōu)秀的程序員。失敗的模式3. 浪費(fèi)專家時間(Wasting expert time)問題太簡單,以致專家的經(jīng)驗(yàn)無指導(dǎo)意義。4. 不知所措的新手
47、(Overwhelmed novice)問題太過復(fù)雜或者需要太多新知識,使程序員學(xué)不到任何有用的東西。有疑問的模式5. 兩個專家共事一個易管理的任務(wù)若兩個程序員都了解如何實(shí)現(xiàn)任務(wù)并且之前都成功地解決過相似的問題,那么結(jié)對編程就沒有太多的用處了。6. 一個程序員處于流模式(Flow),另一個在一旁學(xué)習(xí)(Learning)若另一個程序員時不時地打斷他,并要求對一些基本的但與挑戰(zhàn)性問題沒有直接關(guān)系的事情做出解釋,那么他很難專注于解決挑戰(zhàn)性的問題。7. 一個程序員處于流模式,另一個專注于指導(dǎo)(Coaching)如果想讓這種模式獲得成功,指導(dǎo)者應(yīng)該思想開放,避免指導(dǎo)過多,同時也可以給另一個程序員想出自己
48、的(甚至是更好的)解決方法的機(jī)會。以人為本Pair Programming的過程也是一個互相督促的過程。由于這種督促的壓力,使得程序員更認(rèn)真的工作。每個人每天的有效工作時段不超過3-4個小時。Pair Programming中Driver和Navigator的互換可以讓程序員輪流工作,從而避免出現(xiàn)過度思考而導(dǎo)致觀察力和判斷力出現(xiàn)偏差。潛意識的有利競爭。當(dāng)人在一個團(tuán)隊中工作,總是下意識的努力展現(xiàn)自己的優(yōu)點(diǎn)。工作及時得到同伴的肯定,自信心和成就感(Self-Satisfaction)增強(qiáng)。覺得工作是一件愉快( Enjoyable )的事情。結(jié)對建議Extreme Programming對實(shí)施的程序
49、員提出了更高的要求。這種要求不是技術(shù)水平,也不是學(xué)歷水平也不是工作經(jīng)驗(yàn)。這種要求是對一個人的心智,道德,修養(yǎng)的更高要求。程序員的四怕: 1) 怕自己看上去傻 2) 怕被認(rèn)為是沒用的 3) 怕自己變的不重要(過時) 4) 怕自己不夠好Pair Programming中,編碼不再是私人的工作,而是一種公開的“表演”。程序員的代碼,工作方式,技術(shù)水平都變得公開和透明。XP開發(fā)人員素質(zhì) 一個XP開發(fā)人員具備這樣一些基本素質(zhì):誠實(shí),公正,開明,勇敢和謙卑!在這些素質(zhì)的基礎(chǔ)之上,才是對技術(shù)水平,能力和天分等的要求。誠實(shí) 公正開明 勇氣 謙卑 具備這些素質(zhì)才能克服“四怕”,才能成為一個成熟和專業(yè)的Devel
50、oper。如何結(jié)對編程Driver 寫設(shè)計文檔(Class diagram等),進(jìn)行編碼(Unit Test and Business Object)等XP開發(fā)流程。Navigator 審閱Driver的文檔、Driver對編碼等開發(fā)流程的執(zhí)行;考慮Unit Test的覆蓋程度;是否需要和如何Refactoring;幫助Driver解決具體的技術(shù)問題。Driver和Navigator不斷輪換角色,不要連續(xù)工作超過一小時,每一小時休息15分鐘。Navigator要控制開發(fā)時間。主動參與 雖然每個Engineering Task都有owner,但不能以旁觀者的心態(tài)來做。任何一個Task都首先是兩個
51、人的責(zé)任,也是所有人的責(zé)任。沒有“我的Code”、”你的Code”或“她的Code”,只有“我們的Code”。如何結(jié)對編程只有水平上的差距,沒有級別上的差異。一個Pair,盡管可能大家的級別資歷不同,但不管在分析,設(shè)計或編碼,雙方都擁有平等的決策權(quán)利。Pairs之間互換Partner。每個Task都應(yīng)該和不同的Developer配對。每隔一天,甚至是半天,互換Partners。但Task的owner因該繼續(xù)留該Task的Pair中。如果Pair中的一人請假,另一人應(yīng)盡量不要寫Production Code。Pair一起加班結(jié)對編程的誤區(qū)一、領(lǐng)航員誤區(qū)1. 發(fā)號施令者喜歡發(fā)號施令的人總是對敲鍵盤
52、的人說:“到末行,加個反括號,然后”。他不去關(guān)注解決方法和下一步該怎么做,而過度關(guān)注一些編程細(xì)節(jié)。事實(shí)上,他希望他自己來掌控鍵盤。所以當(dāng)你碰到一個喜歡發(fā)號施令的人,那么將鍵盤交給他吧,轉(zhuǎn)換領(lǐng)航員的角色。2. 拼寫糾錯者拼寫糾錯者坐在你旁邊,糾正你輸入的每個錯誤字符。當(dāng)然,他沒有時間來真正的進(jìn)行導(dǎo)航。和糾錯者商量一下,當(dāng)他給你糾錯的時候讓他請你喝一杯咖啡(或者任何你想要的東西)。3. 吹毛求疵者吹毛求疵者會指責(zé)你寫的每行代碼。當(dāng)他的意見正確時,他會一意孤行,不用你已經(jīng)寫好的代碼,而完全照著他的想法。 4. 默不作聲者默不作聲者是那些幾乎不發(fā)表意見的人。他僅僅坐在那里看著你工作。試著問下他對你的方
53、法有什么意見,或者問他下一步該寫什么測試代碼。5. 心不在焉者心不在焉的人企圖讓你分心,而不是提供給你有建設(shè)性的意見,幫你解決問題。那么讓他離開吧,比起一個讓自己分心的人而言,不如一個人編程。二、實(shí)施者誤區(qū)1. 深藏不露者 深藏不露者僅僅自己敲著代碼而不告訴別人他在做什么。領(lǐng)航員不得不靠自己去弄懂代碼。關(guān)于該用什么方法,該選擇哪種設(shè)計,領(lǐng)航員和實(shí)施者之間完全沒有交流。 領(lǐng)航員需要問問深藏不露者關(guān)于他的計劃或想法。2. 目中無人的人 目中無人的人通常忽略領(lǐng)航員的所有建議,大多數(shù)是因?yàn)樗麄冇X得自己的想法或編程技能更勝一籌。 當(dāng)碰到一個目中無人的人時,立即停止結(jié)對編程吧,開始下一個任務(wù)吧。自大的人往
54、往也不會是個好的領(lǐng)航員。他們很可能變成發(fā)號施令者或是吹毛求疵者。3. 不知所措的人 不知所措的的人往往不習(xí)慣結(jié)對編程,非常緊張,不能掌控全局。 確保自己的領(lǐng)航員角色做到最好。小心的提出意見,對于不知所措的人主要給予鼓勵。 但是,大多數(shù)程序員開始都是這種情況。所以,不要對他們的結(jié)對編程期望太高。讓他們首先成為一個領(lǐng)航員,或者讓能夠很好的處理人際交往問題的領(lǐng)航員在他們旁邊。 4. 跳躍性很大的人 跳躍很大的人喜歡在代碼中進(jìn)行大范圍的跳躍,這樣領(lǐng)航員不知道進(jìn)行到哪里了。 領(lǐng)航員需要讓他慢下來,問他關(guān)于他的計劃,并確保自己比他知道更多的快捷鍵。5. 不熟悉工具的人 不熟悉工具的人不知道開發(fā)環(huán)境的快捷鍵
55、,效率非常低。 交換角色吧,讓他看看你的技巧。 Pair Programming是個漸進(jìn)的過程有效率的Pair Programming不是一天就能做到的。Pair Programming是一個相互學(xué)習(xí),相互磨合的一個漸進(jìn)過程。Developers需要時間來適應(yīng)這種新的開發(fā)模式。剛開始的Pair Programming很可能不比Solo Programming有更高的效率。但適應(yīng)后的Pairs的開發(fā)質(zhì)量和開發(fā)時間都比Solo Programming有大幅度的改善。124沒有結(jié)對編程就沒有XP這是引進(jìn)XP時最難被接受的規(guī)則。但如果在采用其它XP的慣例和規(guī)則時,拋棄Pair Programming,
56、那么會面對以下問題:如何進(jìn)行有效的Design Review如何進(jìn)行有效的Code Review如何保證代碼質(zhì)量如何保證流程的執(zhí)行如何增進(jìn)Communication如何進(jìn)行Cross-Training如何增強(qiáng)Teamwork結(jié)對編程方法面對面結(jié)對編程分布式結(jié)對編程Distributed Pair Programming分布式的Pair Programming:兩個Programmers身處不同的物理位置,通過Sharing 軟件來實(shí)現(xiàn)Pair Programming。需要Sharing軟件能提供 桌面共享,文字交談,語音交談,甚至是視頻交流。目前這種方法還沒有被認(rèn)可,主要出現(xiàn)在學(xué)校的關(guān)于XP的
57、研究項(xiàng)目中.面臨的問題:Internet的網(wǎng)路延遲工作時段的約定結(jié)對編程優(yōu)勢:可以減少風(fēng)險可以使團(tuán)隊生產(chǎn)效率更高是知識傳播的最好途徑可以打造出最佳的合作團(tuán)隊??梢陨筛玫拇a三個方面的應(yīng)用:教育學(xué)結(jié)對學(xué)習(xí)工業(yè)界結(jié)對開發(fā)與編程分布式結(jié)對編程環(huán)境結(jié)對編程研究教育學(xué)研究結(jié)對編程學(xué)習(xí)效果研究結(jié)對雙方的相容性研究結(jié)對編程過程研究軟件工業(yè)界結(jié)對編程實(shí)踐方式社會動力學(xué)研究個人編程能力的增強(qiáng)分布式結(jié)對編程結(jié)對編程開發(fā)環(huán)境研究開發(fā)結(jié)對編程工具的需求適合開展分布式結(jié)對編程的工具研究結(jié)對編程與測試驅(qū)動開發(fā)測試驅(qū)動開發(fā)(Test Driven Development,TDD)思想:開發(fā)之前首先完成測試用例編寫;然后
58、編寫代碼和測試;測試通過后即需增加新功能。優(yōu)勢:測試優(yōu)先,保證質(zhì)量結(jié)合結(jié)對編程結(jié)對編程與代碼重構(gòu)重構(gòu)就是代碼的重新設(shè)計。目的:得到好的代碼和架構(gòu),易修改、易理解適應(yīng)需求結(jié)對編程:審查代碼理解代碼反饋結(jié)對編程與簡單設(shè)計簡單設(shè)計:達(dá)到目前需求即可結(jié)對編程可以達(dá)到簡單軟件工程實(shí)踐軟件工程實(shí)踐的精髓是理解問題、計劃解決方案、實(shí)施計劃和檢查結(jié)果的精確度等方面通用的框架活動包括:溝通計劃建模部署普適性活動軟件工程實(shí)踐核心原則:存在價值保持簡潔維護(hù)視圖生產(chǎn)者要讓消費(fèi)者理解面向未來計劃復(fù)用認(rèn)真思考軟件工程實(shí)踐溝通實(shí)踐:包括決定項(xiàng)目涉及人的信息和溝通需求計劃實(shí)踐:是軟件開發(fā)過程的準(zhǔn)備階段,包括定義問題、可行性分
59、析、制定計劃模型實(shí)踐:創(chuàng)建分析模型和設(shè)計模型小結(jié)軟件工程是一種層次化技術(shù),包括過程、技術(shù)和工具。軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。軟件過程框架定義了若干個小的框架活動,為完整的軟件開發(fā)過程建立了基礎(chǔ)。軟件過程框架的通用過程框架活動包括溝通、計劃、建模、構(gòu)建和部署。能力成熟度模型(CMM)是改進(jìn)軟件過程的有效策略。它的基本思想是通過改進(jìn)對軟件過程的管理來提高軟件生產(chǎn)率和軟件質(zhì)量。敏捷方法是一組敏捷實(shí)踐技術(shù)的總稱,包括極限編程、自適應(yīng)軟件開發(fā)、動態(tài)系統(tǒng)開發(fā)和特征驅(qū)動開發(fā)等等。軟件工程實(shí)踐包括概念、原則、方法和在整個軟件開發(fā)過程中所使用的工具。
60、軟件工程實(shí)踐的通用框架活動包括溝通實(shí)踐、計劃實(shí)踐、建模實(shí)踐、構(gòu)造實(shí)踐和部署實(shí)踐。第3章 軟件過程模型(內(nèi)容提要)瀑布模型增量模型螺旋模型協(xié)同開發(fā)模型面向?qū)ο竽P兔嫦蚍矫娴能浖_發(fā)軟件生存周期軟件也有一個從生到死的過程,這個過程一般稱之為軟件的軟件生存周期或生命周期(Software Development Life Cycle)軟件生存周期可劃分為定義、開發(fā)和運(yùn)行三個時期,每個時期又細(xì)分為若干個階段。把整個軟件生存周期劃分為若干階段,使得每個階段有明確的任務(wù),使規(guī)模大,結(jié)構(gòu)復(fù)雜和管理復(fù)雜的軟件開發(fā)變的容易控制和管理。軟件生存周期包括可行性分析、項(xiàng)目計劃、需求分析、軟件設(shè)計、編碼與測試、維護(hù)等階
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶葉加工工(中級)考試模擬題與參考答案
- cpa注冊會計師經(jīng)濟(jì)法真題試卷+答案
- 幼兒體育考試試題及答案
- 阿里巴巴校招試題及答案
- 2026自然語言處理工程師校招面試題及答案
- 城市環(huán)境管理試題及答案
- 2026黑龍江哈爾濱啟航勞務(wù)派遣有限公司派遣到哈爾濱工業(yè)大學(xué)機(jī)電工程學(xué)院機(jī)械設(shè)計系招聘備考題庫附答案
- 會昌縣2025年縣直事業(yè)單位公開選調(diào)一般工作人員考試備考題庫必考題
- 安義縣城市管理和綜合執(zhí)法局2025年公開招聘編外工作人員備考題庫必考題
- 成都市雙流區(qū)九江新城小學(xué)2026年儲備教師招聘考試備考題庫附答案
- 2026年開封大學(xué)單招職業(yè)適應(yīng)性測試題庫及完整答案詳解1套
- 北京市2025北京市體育設(shè)施管理中心應(yīng)屆畢業(yè)生招聘2人筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)2套試卷
- 建筑施工現(xiàn)場材料采購流程
- DB31∕T 1234-2020 城市森林碳匯計量監(jiān)測技術(shù)規(guī)程
- 園林綠化施工工藝及注意事項(xiàng)
- 2025年高中語文必修上冊《登泰山記》文言文對比閱讀訓(xùn)練(含答案)
- 2025年金蝶AI蒼穹平臺新一代企業(yè)級AI平臺報告-
- 2026屆山東菏澤一中高三化學(xué)第一學(xué)期期末達(dá)標(biāo)測試試題含解析
- 2025中國機(jī)械工業(yè)集團(tuán)有限公司(國機(jī)集團(tuán))社會招聘19人筆試參考題庫附答案
- 二年級上冊100以內(nèi)的數(shù)學(xué)加減混合口算題500道-A4直接打印
- 2025年二級造價師《土建工程實(shí)務(wù)》真題卷(附解析)
評論
0/150
提交評論