軟件工程 課件 3.3 群體化軟件開發方法_第1頁
軟件工程 課件 3.3 群體化軟件開發方法_第2頁
軟件工程 課件 3.3 群體化軟件開發方法_第3頁
軟件工程 課件 3.3 群體化軟件開發方法_第4頁
軟件工程 課件 3.3 群體化軟件開發方法_第5頁
已閱讀5頁,還剩67頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

群體化軟件開發方法軟件工程內容開源軟件的開發要求特點和開發要求何為群體化軟件開發方法基本理念和思想如何實現群體化軟件開發關鍵軟件工程技術1.1閉源軟件何為閉源軟件軟件代碼不對用戶開放的一類軟件,購買軟件時只提供可運行軟件或服務,沒有提供源代碼以使用許可證(License)的方式授權用戶使用軟件閉源軟件的特點無法獲得源代碼(無渠道)無權使用源代碼(合法性)閉源軟件帶來的問題無法掌握軟件內部實現情況(如是否存在惡意代碼),難可信;無法修改和完善軟件,影響了開發者的創新自由閉源軟件只提供可執行代碼,不提供源代碼閉源軟件及企業示例典型軟件Windows、Office軟件、Oracle軟件等典型企業微軟、IBM、Oracle等1.2開源軟件(OpenSourceSoftware)何為開源軟件一種源代碼可以自由獲取和傳播的計算機軟件,其擁有者通過開源許可證賦予被許可人對軟件進行使用、修改和傳播開源軟件的特點源程序代碼對外開放自由使用、修改和傳播任何人都可獲得開源軟件的代碼開源軟件對源代碼開放,并允許你修改和傳播示例:開源軟件操作系統Linux、Ubuntu、麒麟、鴻蒙、OpenEuler等數據庫系統MySQL、PostgreSQL、MongoDB、Redis等開發平臺Eclipse、Junit、SonarQube、Kubernetes等人工智能Tensorflow、Opencv、Caffe、Deeplearning4j等網絡安全Nmap、curityOnion、Suricata、Bro等……你需要的軟件都可以找到相應的開源軟件示例:Gitee上的OpenHarmony開源軟件開源鴻蒙軟件1.3開源軟件的開發要求吸引大眾參與和貢獻任何人可參與開源開發在互聯網上進行開發實現隨時隨地參與開發代碼可實現充分共享代碼可以被任何人獲取思考和討論你知道有哪些開源軟件?免費使用軟件等同于開源軟件嗎?微信、12306等軟件是開源軟件嗎?開源軟件是如何開發出來的?內容開源軟件的開發要求特點和軟件開發要求何為群體化軟件開發基本理念和思想如何實現群體化軟件開發關鍵軟件工程技術2.1軟件開發是創作和生產的過程軟件創作發揮軟件工程師的智慧,結合創作者的愛好和興趣,開展軟件創作如構思需求、開展設計、精雕代碼等軟件生產任務分工,集中管理計劃驅動,有序開發評審測試,保證質量交流溝通,促進合作創作生產基于團隊的軟件開發方法及其組織模式軟件制品特定組織(如微軟、IBM、華為)的人員所組成軟件項目團隊組織內軟件開發者參與開發邊界封閉組織外軟件開發者無法加入團隊不能獲得軟件制品對外不可共享的軟件倉庫基于團隊軟件開發方法的特點開發團隊邊界封閉域外人員無法參與人員以及資源有限項目的成果不共享集中化的管理模式關注生產而非創作軟件制品無法充分利用團隊之外的力量,阻礙大眾參與軟件創作和生產示例:Windows軟件開發團隊組成Windows7軟件項目的團隊組織核心開發團隊大約有1000人25個功能小組,每個小組大約有40個人每個小組包括三類人員:程序經理,開發工程師,測試工程師全部是Microsoft員工Windows7源代碼是微軟商業機密,不對外共享和開放微軟之外的其他組織無法獲得產品的任何信息和資源示例:IBMOS/360軟件開發團隊1960s初IBMOS/360大型軟件項目通用系統,支持多道程序,最多可同時運行15道程序軟件工程師超2000人,工作量超5000人年IBM之外的其他組織無法獲得產品的任何信息和資源2.2開源軟件項目的開發和組織模式開放項目邊界大眾參與開發程序代碼共享軟件倉庫互聯網用戶互聯網用戶由少數核心開發人員和大量互聯網大眾(外圍)所組成的群體化開發開放的項目邊界可共享的代碼倉庫互聯網大眾能做什么樣的貢獻?構思軟件需求,增強軟件功能-創作發現軟件問題,指出軟件缺陷-創作編寫程序代碼,提交開發成果-創作+生產參與代碼評審,評價貢獻質量-生產……創作生產將軟件創作和生產融合在一起,充分發揮大眾的智慧和力量高手在民間,高手在互聯網上示例:OpenHarmony中的群體化貢獻提出問題和需求貢獻和提交代碼開源鴻蒙充分利用群體的智慧來推動軟件的創作和生產2.3何為群體化開發方法依托互聯網平臺來吸引、匯聚、組織和管理互聯網上的大規模軟件開發人員,通過競爭、合作、協商等多種自主協同方式,讓他們參與軟件開發、分享軟件開發知識和成果、貢獻智慧和力量的一種新穎軟件開發方法軟件倉庫互聯網用戶互聯網用戶思考和討論沒有互聯網平臺能開展群體化軟件開發嗎?為什么?軟件倉庫互聯網用戶互聯網用戶基于互聯網的群體化開發平臺Github(國際)和Gitee(國內)群體化開發平臺提供的開發支持提出需求創意、發現軟件缺陷、提交程序代碼、標注開發任務、討論軟件需求、評審代碼質量等等2.4群體化軟件開發方法的特點軟件開發邊界開放互聯網大眾自由參與利用海量的大眾資源共享源程序代碼兼顧軟件創作和生產依托互聯網平臺群體化軟件開發是一種基于社區的軟件開發模式開發社區而非團隊:社區和團隊的區別大教堂與集市大教堂(基于團隊的閉源軟件開發)傳統大型軟件公司的開發模式就像艱難緩慢的大教堂建造工程,嚴密的組織和集中式結構特點是封閉式建設、成本高、周期長、品質優集市(基于群體的開源軟件開發)

特點是開放式建設、成本低、周期短、品質平庸并行、對等的扁平化開發,參與者大多來自于互聯網上的志愿者,結構松散、來去自由集市大教堂閉源軟件開發和開源軟件開發閉源軟件采用大教堂的開發方式開源軟件

采用集市的開發方式雷蒙德(Raymond,E.S.)著,衛劍釩譯.大教堂與集市,機械工業出版社[M],2014軟件工程經典著作思考和討論基于團隊的軟件開發方法vs基于社區的群體化軟件開發方法基于團隊軟件開發方法基于社區群體化開發方法項目組織方式(團隊/社區)開發成員組成(封閉/開放)程序代碼開放依托平臺協同關注創作和生產可用資源情況(有限/海量)內容開源軟件的開發要求特點和開發要求何為群體化軟件開發基本理念和思想如何實現群體化軟件開發關鍵軟件工程技術群體化軟件開發方法的支撐關鍵技術基于社區的群體化組織基于Issue的任務管理基于Git的分布式版本管理基于Pull/Request的分布式協同開發基于群智的知識分享3.1基于社區的群體化軟件項目組織核心開發人員外圍開發人員大眾化協同持續性評估軟件倉庫需求創意軟件缺陷程序代碼

貢獻和獲取貢獻和獲取群體化軟件開發采用社區和集市的組織模式核心開發人員開源軟件項目的主要貢獻者,主要職責開源軟件的核心貢獻人員(如提供了最初的開源代碼)分析和評估外圍開放大眾所發現的軟件缺陷和提出的軟件需求,將其轉化為生產性的軟件開發計劃評審和分析開放大眾所提交的程序代碼,并將通過評審的代碼融入到軟件倉庫之中人數不多幾個到幾十個不等開源鴻蒙有100多人外圍開發人員開源軟件項目的外圍貢獻者,主要職責借助于互聯網平臺獲得軟件項目信息,結合個人的興趣愛好、經驗和技能,自發地為軟件項目貢獻自己的力量提出需求建議、匯報代碼缺陷、提交程序代碼、評審代碼質量等數量會非常大成百上千,甚至有幾萬人開源鴻蒙有3萬多人依托開源社區來組織不同人員開源軟件社區將核心開發人員與外圍開發人員有機地結合在一起,依托軟件倉庫進行分布式協同開發軟件倉庫自由進出社區遵循社區規定自愿開展工作開放分享代碼開源軟件社區示例:依托社區自由獲取開源代碼克隆、下載開源代碼自由地克隆和下載代碼3.2傳統軟件開發的任務管理軟件項目團隊管理者團隊成員1團隊成員2團隊成員3團隊成員n開發任務的指派基于團隊組織模式和開發方法不適用于開源軟件開發集中管理任務分解強制執行基于Issue的任務管理開源軟件的開發任務不同于傳統的開發任務分解方式開發者群體自主提出,體現了群體創作思想每個任務對應于一個Issue開發任務的二類形式:修復軟件缺陷、功能實現需求基于Issue的軟件開發任務管理創建Issue,提出軟件開發任務討論Issue,分析開發任務的意義和價值指派Issue,安排人員來完成Issue掌控Issue,掌握Issue解決的進展狀況自主提出任務自發完成任務提出Issue清晰地描述任務標題內容特征提供必要的標簽以補充說明任務的性質和特征缺陷or需求程序語言任務標題任務描述任務特征示例:提出Issue任何人均可提出軟件開發任務:代碼缺陷和軟件需求“新建Issue”管理Issue辨別Issue的類別代碼缺陷,新增功能需求給Issue打標簽確認Issue的有效性缺陷是否客觀存在軟件需求是否有意義為Issue貼上適當標簽直觀地展示其特征信息Bug表示缺陷修復任務,duplicate表示這是一個重復任務依靠群體來管理Issue任務標簽示例:管理和討論Issue設置Issue優先級補充log截圖指派Issue何為指派Issue將Issue分配給相應人員加以解決要考慮的因素群體基于興趣和特長來認領相關任務結合開發者的開發技術和經驗考慮開發人員的能力和精力Issue指派并非強制性具有通知和推薦的性質接受到任務指派的人員有權決定是否接受該指派,可自愿參加或拒絕指派示例:指派Issue的負責人跟蹤Issue跟蹤和記錄Issue的解決過程,掌握Issue解決狀況事件的發起者發生的時間點事件的內容等重要的事件提出貼標簽指派負責人等思考和討論在開源軟件社區中,基于Issue的任務管理有何優點?它與集中式管理相比較有何差異性?Issue機制能否支持開源軟件的群體發開發?為什么?傳統軟件開發的集中式版本管理軟件版本庫多人同時需要該代碼時會存在什么樣的問題?訪問和存取訪問和存取開發者

3.3分布式版本管理思想本地工作區暫存區本地版本庫遠程(中心)版本庫開發者的本地計算機遠端計算機采用分級處理方式來區分軟件項目文件的不同狀態工作區、暫存區、本地版本庫建在開發人員自己的計算機之中,遠程版本庫建在遠程的中心服務器上本地工作完成后,可把本地版本庫數據(如代碼)同步推送到遠程版本庫中,也可從遠程版本庫拉取(Pull)最新代碼到本地版本庫創建開發分支分支相當于一條開發線路,是一串代碼提交歷史軟件開發者可利用分支實現不同開發任務的并行執行與變更合并Git版本庫中有二個常見的分支master分支:軟件項目主分支,負責存儲對外發布的項目版本,軟件開發者應該確保master分支的穩定性,一般不輕易直接修改master分支中的代碼,通常只有一個develop分支,軟件項目的開發分支,通常是各分支代碼的匯總分支,始終保持最新完成功能以及修復缺陷后的代碼開發者分支,軟件開發者自己的獨立分支分支軟件開發分支示意圖一個軟件有多個軟件開發分支代碼貢獻Master分支Dev分支Foo分支版本庫開發分支的合并(Merge)Dev分支Foo分支Dev分支Foo分支將多個開發者分支中的代碼修改合并到Dev分支里合并(Merge)Gve分支Gve分支基于Git的協同開發Git分支操作—多人協作(橫向視角)分支:使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線masterbranch2branch1createmergecommitcreatemergecommit倉庫及分支操作示意圖本地倉庫遠程倉庫pushpullcommitcommitswitch合并請求分支管理工作創建“master”分支“master”分支倉庫處于穩定、可運行和可部署的狀態只有管理人員才有權限把“develop”分支代碼合并到“master”分支中創建“develop”分支屬于開發人員的分支倉庫,只有經過審查和測試的任務分支代碼才可合并到“develop”分支倉庫中只有管理人員才有權限把任務分支合并到“develop”分支上創建開發人員自己的任務分支每個開發人員可根據自身的開發任務創建自己的任務分支代碼合并(Merge)開發人員可通過項目管理人員,將自己編寫代碼同步合并到“develop”分支中思考和討論軟件開發人員編寫好代碼后,如何將自己編寫的代碼合并到原始倉庫中去?3.4基于Pull/Request(P/R)分布式協同開發每個開發人員在本地完成編程工作后,不是直接向中心倉庫推送代碼,而是通過發送一個P/R合并請求,將原始代碼庫的克隆庫推薦合并到中心倉庫之中一個“P/R”顧名思義是指一次合并請求,合并的內容對應于一個代碼修改補丁,它包含了軟件開發人員對軟件的一次代碼修改接收到合并請求后,軟件項目管理團隊和開發人員群體需要對P/R進行審查評估該P/R所貢獻代碼的質量,將符合質量要求的代碼集成到中心代碼庫合適的分支中基于P/R的分布式協同開發1.Fork(復刻)在線平臺和遠程倉庫2.Clone(克隆)3.Push(推送)4.Pull-request(代碼合并請求)復刻倉庫本地倉庫開源軟件原始倉庫李四Pull(拉取)本地機器李四分布式協同開發的操作(1/2)克隆(Clone)/派生(Fork)通過克隆或派生,將軟件項目的倉庫復制到自己的個人空間中,從而獲取軟件倉庫中的軟件代碼本地修改開發人員基于克隆后的軟件倉庫,在本地進行軟件開發活動,如修復缺陷、開發新的功能等,所產生的代碼變更將只影響其本地的克隆庫,而不會影響原始的軟件倉庫提交合并(P/R)開發人員可將變更的代碼以P/R的形式發送到原始的軟件倉庫,提供關于代碼合并的相關信息,包括合并的概要性標題、合并內容,說明該PR完成了哪些工作、代碼測試結果等情況分布式協同開發的操作(2/2)代碼質量保證平臺采用人工審查和自動測試相結合的方式,檢查P/R代碼質量開發人員可自發參與貢獻的審查過程,以評論方式發表意見一些軟件項目還會通過持續集成工具,自動編譯并測試所收到的P/R代碼,并向開發人員反饋測試結果PR的提出者接收到反饋后,可根據評論意見和測試結果,更新原始P/R中的相關代碼合并決策軟件項目核心開發團隊綜合評估上述所有因素,決定接受還是拒絕某項貢獻的合并請求。如果PR被接受,則開發人員所貢獻的代碼和提交的歷史都將被合并到項目的中心倉庫中基于P/R分布式協同開發技術的優勢簡單使用門檻低,開發人員可方便地貢獻代碼、評論他人貢獻,極大提高了開發人員參與軟件項目開發的積極性規范PR機制提供了規范化的協同開發流程,促進互聯網上大眾群體圍繞代碼貢獻的交流與合作,并與大眾評論、軟件測試、代碼審查等環節結合在一起,確保了軟件開發質量透明所有軟件開發歷史信息和社交活動信息都會保留下來,在開發人員主頁或軟件項目主頁中展現示例:mysql項目基于P/R的分布式開發協同開發者對P/R的評論P/R標題合并6次commit到Master分支中3.5基于群體的知識分享軟件開發實踐中遇到問題怎么辦?群體采用提問、回答、評論等多種方式進行在線知識分享基于群體的知識分享參與分享的對象是開放的互聯網大眾分享的內容表現為從問題到解答等多種知識樣式群智知識分享的分布式協同提問(Ask)在社區中進行提問,以獲得其他人員的討論和解答回答(Answer)和討論(Comment)對提問進行回答,或者對提問和回答進行評論必要時可以附上相關的細節,如問題解決的代碼片段接受(Accept)如果某個回答有效地解決了問題,那么提出者可以接受該回答搜索(Retrieve)檢索社區是否有相同或類似的問題,并找到相應的問題解答軟件開發知識分享的互聯網平臺Stackoverflow和CSDN示例:StackOverflow發布的問題信息問題標題問題信息問題描述及代碼示例:StackOverflow的問題回答問題回答問題回答描述回答相關信息接受該問題的回答海量的軟件開發知識SO用戶2400+萬,月訪問用戶量1億,用戶獲幫助450億SO問題2400+萬,3600萬回答,9100萬評論充分利用知識分享社區中的知識來解決課程學習和實踐中遇到的問題開源軟件托管平臺會受到封鎖20

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論