現代軟件工程(在線實訓版)課件匯 0.1 課程概述及學習要求-6 分析軟件需求_第1頁
現代軟件工程(在線實訓版)課件匯 0.1 課程概述及學習要求-6 分析軟件需求_第2頁
現代軟件工程(在線實訓版)課件匯 0.1 課程概述及學習要求-6 分析軟件需求_第3頁
現代軟件工程(在線實訓版)課件匯 0.1 課程概述及學習要求-6 分析軟件需求_第4頁
現代軟件工程(在線實訓版)課件匯 0.1 課程概述及學習要求-6 分析軟件需求_第5頁
已閱讀5頁,還剩830頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

課程概述及學習要求內容課程的時代背景軟件定義一切的時代當前軟件系統的特點課程特點和要求課程特點和學習要求教學目標和授課內容課程的考核方式課程考核要求和方法課程教學的支撐平臺1.1軟件不可或缺信息系統組成微電子芯片、計算機硬件與體系結構、計算機網絡與通訊計算(速度)、存儲(容量)、傳輸(帶寬和速率)計算機軟件處理數據、實現功能、提供服務軟件所扮演的角色不可或缺、核心和關鍵的要素沒有軟件的手機和PC會怎樣?如果你的計算機、手機和Pad上沒有軟件會怎樣?軟件的關鍵性和重要性軟件對一個國家的全球競爭力、創新和國家安全至關重要世界運行在軟件之上,軟件是國家的關鍵基礎設施軟件賦能能力創新軟件是安全攸關系統的脊梁軟件是生態系統重要組成部分軟件定義一切時代的特點地位:無處不在的軟件形態:人機物三元融合的軟件復雜:大規模、持續演化的軟件開發數量越來越多交付速度越來越快質量要求越來越高運維能力越來越強滲透到社會經濟文化生活各行各業,從工業生產到國防科技,從衣食住行到娛樂軟件滲透到了哪些領域?是否有領域沒有軟件?軟件的持續創新和積累至今人們已經開發出了數量龐大的軟件系統操作系統Linux、Ubuntu、麒麟、鴻蒙、OpenEuler等數據庫系統MySQL、PostgreSQL、MongoDB、Redis等開發平臺Eclipse、Junit、SonarQube、Kubernetes等人工智能Tensorflow、Opencv、Caffe、Deeplearning4j等網絡安全Nmap、curityOnion、Suricata、Bro等開源50年積累的代碼總量約100TB,而人類5000年文字藏書總量約23TB軟件是一種創新形式和賦能工具社會交流軟件推動了各個行業的變革和發展,改變了世界軟件體現了基于數字化技術解決問題的方式支付方式火車購票軟件帶來的深刻影響交通出行12306、攜程等代替排隊等候資料查詢G和B代替調研在線教育MOOC和騰訊會議代替課堂教學網上購物淘寶、京東代替逛商場辦公方式Word和PPT代替手寫和幻燈片支付手段微信、支付寶代替紙幣和支票軟件給你的學習、生活和娛樂等帶來什么樣的影響?沒有軟件你會怎樣?軟件是軍事裝備和信息系統的核心信息化武器裝備中的嵌入式軟件業務信息支援系統中的軟件各類參戰人員作戰部隊指揮控制系統中的軟件大型復雜軟件系統部署在各類平臺和終端提供多樣化功能和服務連接裝備和人員形成體系和能力成為關鍵基礎設施越來越多的軟件表現為人-機-物共生的一類復雜系統示例:機器人是一類由軟件驅動的物理系統機器人是由軟件驅動、由軟件來定義的軟件密集型信息物理系統負責底層管理和控制、高層規劃和決策、全局適應和優化等軟件是整個系統的核心和關鍵高層任務軟件系統物理和社會環境決策產生決策產生規劃和行為作用與影響感知與反饋閉環自主機器人系統控制運行物理設備示例:軟件在武器裝備中的地位和作用80%的裝備功能由軟件來實現軟件密集型系統的數量不斷增長計算機軟件在美軍裝備中的比例以及軍用軟件的規模DavidF.Rico,PMP,ACP,CSM,Lean&AgileSoftwareMethods,2012.由軟件實現的裝備功能軟件的規模(百萬代碼行)思考和討論個人計算機你的設備安裝了哪些軟件?它們提供哪些功能和服務?手機iPad哪些行業和領域需要軟件?它們提供哪些功能和服務?1.2軟件形態變化不是單一孤立的系統,而是系統之系統諸多系統聯盟和組合而成不是純粹技術系統,而是社會技術系統社會、信息、物理等要素共存不是同構系統,而是異構多樣系統聯盟要素異構,客觀存在,也是必然不是封閉系統,而是動態適應和持續演化系統要素、關系、聯盟等持續變化,邊界不明確IanSommerville,etc.,Large-ScaleComplexITSystem,CommunicationofACM,2012.1.3軟件的規模和復雜性日趨增長社會保障信息系統金融系統智能交通控制指揮控制系統智能電力系統大規模協作系統功能數據實體代碼量接入人員連接設備運行進程……示例:軟件規模的快速增長1960sF-117飛機程序10萬行1970sP-3C飛機程序50萬行1980sB-1B飛機程序100萬行E-3A飛機程序100萬行空間站發射程序約8000萬行現代化作戰飛機約2500萬行宙斯盾驅逐艦約需5000萬行現代汽車中有數億行的軟件越來越多的設備由軟件加以定義,如軟件定義的汽車軟件變得越來越復雜軟件環境的復雜性軟件表現為人機物三元融合復雜系統軟件需要與物理環境、社會環境等進行持續交互軟件所在的環境開放、動態、不確定和不可預測軟件規模帶來的復雜性大量的軟件實體、數據、交互、進程等帶來的復雜性軟件需求的復雜性軟件需求不可知、不確定和動態變化軟件運維的復雜性軟件需要在使用的同時持續演化12306軟件、智能交通控制軟件等就是一類復雜軟件系統,具有上述復雜性特征大規模和復雜軟件帶來的挑戰?用戶方、學術界、產業界共同面臨的問題和挑戰!軟件復雜性表現在哪些方面?如何來開發復雜的軟件系統?需要哪些方面的知識和技能?1.4美國對軟件及軟件工程的認識從軟件到軟件工程超大規模軟件未來軟件挑戰,CMU,2006軟件定義戰爭,CSIS,

2022構筑未來軟件工程CMU,2021軟件現代化戰略DoD,2022認識到軟件變得越來越重要、越來越復雜和難控,需要尋求有效的軟件工程美國政府對軟件的認識美國總統信息技術顧問委員會軟件是最迫切的需求,因為:對軟件的需求:超出了我們現有的開發能力;現有軟件是脆弱、不可靠,且很難進行設計、測試、維護和升級所以:軟件是當前社會核心產品與核心問題應絕對優先發展超大規模軟件未來軟件挑戰,CMU,2006美國軍方對軟件的認識美國軍方向軟件工程學術和產業界提出的問題我們的士兵依賴軟件并且將越來越多的依賴軟件軍隊的成功依賴于軟件以及軟件企業我們需要更好的工具來滿足未來的挑戰,我們的政府和企業并沒有致力于如何讓事情做的快速和廉價如果我們不能解決今天的問題,我們如何能可靠地構建未來可能具有十億行代碼的系統面臨具有十億行代碼規模的軟件,這樣的系統今天的技術力所不能及超大規模軟件未來軟件挑戰,CMU,2006國際上軟件工程研究重要機構-CMUSEI軟件工程領域的著名研究機構軟件生產線、體系結構、管理等美軍軟件工程方面的智囊軍方資助,解決美軍提出的問題為軍方提供戰略性和前瞻性的解決方案許多著名的研究成果E.g.,軟件生產線E.g.,能力成熟度模型CMM應該引起我們的高度關注已有成果、關注問題、前瞻研究URL:CMUSEI開展的工作關注CMU的研究與實踐學術界對計算機軟件的認識計算機軟件是一種邏輯產品,有其特殊性不同于硬件,非常復雜、成本高、風險大、維護困難與很多的內在規律和邏輯尚不清楚缺乏相關的理論,基于統計分析的結果軟件開發是一項由多人參與、基于智力的協同活動多人、智力、協同采用工程化的方法和途徑似乎是有效的不能采用硬件開發的方法不能采用手工、作坊式的方法過程和步驟、工具、產品、評審和檢查、質量、進度…工業界對計算機軟件的認識計算機軟件的開發效率、速度、質量遠遠無法滿足用戶日益增長的需求需求多變性、易變性、不明確性成本難以估算、質量達不到要求、進度無法按期推進也稱“軟件危機”在不斷摸索中進行總結、在持續實踐中發現規律實踐是檢驗真理的唯一標準實踐先于理論,尋求最佳實踐不同的企業有不同的手段和實踐1.4成功的軟件項目和產品比爾蓋茨的Microsoft系列產品

從Windows到Office系列,從VisualStudio到CopilotXInstagram(abbr.Instanttelegram)軟件:基于移動設備的照片和視頻共享、在線服務軟件成立于2010年10月,2012年被Facebook以10億美元收購社交軟件微信、TikTok、QQ、Facebook、Twitter等失敗的軟件項目失敗軟件項目的特點沒能按時交付成本超出預算軟件缺陷太多,無法按照當初的設計正常運行產品沒有得到市場認可,沒有人使用失敗軟件項目的案例美國銀行規劃研發信托軟件系統,項目預算2千萬美元,開發時長9個月;進度超出2年,投入6千萬美元,仍然未能投入使用英國銀行軟件系統的建設,投入大量的經費,最終軟件項目失敗,導致整個銀行倒閉,成為軟件開發的“爛尾樓”思考和討論現代軟件有何復雜性和形態特點?如何理解人機物三元融合系統?如何來開發軟件系統?軟件開發難在哪里?軟件工程課程就是要回答這些問題!內容課程的時代背景軟件滲透性和復雜性當前軟件系統的特點課程學習要求課程特點和學習要求教學目標和授課內容課程考核要求課程考核要求和方法課程教學的支撐平臺*2.1軟件工程是一門特殊課程一門課程一個專業一個學科“軟件工程”這門課程有其特殊性!(1970s)(1980s)(2011)軟件工程既是一門課程,也是一項專業,還是一個學科被賦予更多內涵和知識的課程具有“工程”性質和要求課程“實踐性要求”非常高的課程面向“復雜問題求解”的課程適合多種能力和素質培養課程不同于“離散數學”、“編譯原理”、“操作系統”等課程軟件工程課程的特點內容“虛”和“廣”思想性和抽象教學內容廣域和交叉的課程知識發展“快”和“新”產業界開發實踐進步快多維度、全方位的發展要求“實”和“高”能用工程方法開發軟件解決工程開發復雜問題計算機科學、管理學、數學等多學科知識實踐經驗的總結軟件開發的實踐教學是課程教學的關鍵實踐要體現工程化的要求和水平各種新技術、新方法、新工具不斷出現如DevOps、智能化開發、Copilot等軟件工程課程教學的難點難講透(教)知識點內容抽象難以講清和講明教學成效難保證,課程教學需要適應課程特點,解決教學難點難學好(學)理解知識點不易知其所以然困難做更難(做)開展軟件開發難達成工程要求難不僅要知其然,更要知其所以然不僅要講授是什么(What),更要詮釋為什么(Why),如何做(How)不僅要做的出,更要做的好(質量)軟件工程課程學習的重點“工程”意味著要開展實踐,并且要采用”工程化”方法系統化、規范化和可量化“工程”意味著要實踐對象要有規模,要關注質量等因素上規模、一定復雜度、高質量“實踐教學”是課程教學的重點,也是上好這門課的關鍵教學不能停留于知識講授,不能紙上談兵學好課程的關鍵在于做好課程實踐2.2軟件工程課程教學的目標和定位理解軟件開發問題,軟件工程思想、原則和方法運用運用軟件工程過程、方法和工具來開發分析分解、組合、建模、設計和驗證軟件評價評估評價軟件質量、評估方法等創新運用軟件工具來解決實際問題BLOOM模型培養學生多方面的能力和素質達成高階的教學目標如何學好這門課:課堂要認真聽講交流與討論內容基于教材但不局限于教材內容組織不完全對應于教材認真聽講勤于思考參與討論經常提問如何學好這門課:做好課程實踐是關鍵講授分析實踐講評講授分析實踐講評講授分析實踐講評講授分析實踐講評講授-老師實踐-學生實踐、實踐、再實踐!課程實踐將貫穿于課程學習的全過程如何學好這門課:持續投入、獨立解決和不斷總結利用課內和課后時間,持續實踐投入開發、討論、演示、總結、匯報、撰寫參加和貢獻務必自己動手去做務必獨立解決問題務必開展交流合作務必做到精益求精務必要不斷的總結要收獲必須要投入如何學好這門課:追求卓越持續改進講評考評持續改進、提升質量精益求精、追求卓越匯報和講評根據老師的講評不斷改進你的實踐成果,提升實踐的質量如何學好這門課:不斷進行總結、交流和討論在知士薈上進行提問、回答、評論、分享和總結/#/spaces/146要求每周1篇技術博客,要在學習社區進行交流和分享看看往屆學生的學習心得、體會、感受和成果2.3對學生提出的基本要求課上要聽懂知其然且知其所以然下課做的了運用所學知識來開展軟件開發實踐課后有交流問題、回答、評論、經驗投入有保障投入足夠的時間,迎難而上,勇氣和信心目標要遠大工程能力:規范、文檔、設計、質量、……職業素養:嚴謹、專業、交流、討論、……2.4本課程將讓你學到…認識軟件系統及復雜性特點理解軟件系統開發面臨挑戰領會軟件工程的思想和方法掌握軟件開發的技術和工具基于團隊來組織和開發軟件獨立解決軟件開發中的問題獲得和積累軟件開發的經驗……2.5課程教學目標深入理解和認識“軟件”概念及其特點系統掌握軟件工程的原則、方法和思想熟練運用各種技術、工具以及管理手段持續開展軟件開發實踐以積累相關經驗深刻認識軟件工程方法及開發存在問題不斷培養多方面的能力和軟件工程素養2.6課程教學組織與實踐安排軟件工程(48學時)軟件體系結構與設計(48學時)春季學期秋季學期貫穿二個學期和二門課程的綜合實踐課程教學內容程序及質量保證方法軟件及其特點軟件工程概述軟件過程模型敏捷軟件開發方法群體化軟件開發方法需求分析基礎獲取軟件需求面向對象軟件需求分析軟件設計基礎軟件體系結構設計用戶界面設計軟件詳細設計編寫程序代碼軟件測試軟件部署軟件維護與演化軟件項目管理完成二項課程綜合實踐閱讀、分析和維護開源軟件(10000行代碼)2人組成一個實踐團隊秋季學期《軟件工程》課程開發上規模、有創意和高質量的軟件(10000行代碼)4人組成一個實踐團隊春季學期《軟件體系結構與設計》課程課程綜合實踐1:閱讀、分析和維護開源軟件學習對象:高質量開源軟件學習內容:高質量代碼,高水平設計、開發技能和經驗學習方式:閱讀、標注、分析、模仿和應用以維護軟件學習開源代碼,要求學以致用!閱讀標注分析維護設計模型代碼標注質量報告高質量代碼高質量開源代碼往屆學生的實踐情況

每個結對平均最多最少每周課外投入(小時/周)10204編寫代碼量(行)5001000200復用開源代碼(行)120020000添加注釋量(行)8002000200Git提交次數(次)142153131小米便簽開源代碼代碼總量:8887LOC;文件數:39注釋總數:5627LOC;

注釋行數:

2706;

注釋率:30.4%問題數量:

1654LOC涵蓋從需求分析、軟件設計、編碼實現、軟件測試等方面的實踐內容及要求課程綜合實踐2:軟件開發實踐任務開發有創意、上規模和高質量軟件要求創意、規模、質量、綜合、系統結果模型文檔代碼演示等創意性問題、需求、解決方法系統性集成物理系統、遺留系統、開源軟件規模性>15000行程序代碼綜合性運用多種技術、語言、工具和平臺高質量模型、文檔和代碼等實踐成果質量高實踐教學是關鍵,要為“軟件工程”這把牛刀準備相適應的“實踐內容”往屆學生的實踐示例(1/3)創意性:問題及基于機器人的解決方法集成性:機器人、APP及4個開源軟件系統綜合性:3種語言及多種技術與平臺規模性:66000(開源50000+)LOC分布性:部署在手機、機器人、服務器等高質量:模型、代碼和文檔質量優SE+PL+Robotics+網絡傳輸+模式識別等

往屆學生的實踐示例(2/3)開發技術機器人操作系統ROS、AndroidAPP開發、網絡編程程序語言Java、Python、C開發工具AndroidStudio、SonarQube、Junit開源社區CSDN、GitHub、StackOverflow、OSChina開源軟件Roconremocon科大訊飛智能語音包OpenNILinphone軟件文檔UML模型程序代碼宣傳彩頁演示視頻總結PPT技術博客創意構思+知識學習+開發實踐+解決問題+成果展示+語言/文字表達

iCAN國際創新創業大賽總決賽一等獎中國高校計算機大賽全國總決賽一等獎泛珠三角計算機作品賽總決賽金銀獎網絡技術挑戰總決賽一等二等獎珠三角計算機作品賽總決賽最佳實用獎計算機作品賽湖南省賽區特等和一等獎長沙市創新創業比賽二等獎……開發許多有創意的課程實踐作品,近5年獲30項競賽獎項往屆學生的實踐示例(3/3)內容課程時代背景軟件滲透性和復雜性當前軟件系統的特點課程學習要求課程特點和學習要求教學目標和授課內容課程考核要求課程考核要求和方法課程教學的支撐平臺*3.1課程考核形式考核組成成績比例考核方式課程考試50%開卷考試,個人綜合實踐40%團隊+個人技術博客5%個人交流討論5%個人課程試卷開題設計原則不考“死記硬背”的內容(what)概念是什么,方法是什么如軟件有何特點要考對知識點的理解、認識和運用為什么(Why)、如何(How)需要建立在課程實踐的基礎之上課程實踐考評原則課程實踐的質量(文檔、模型和代碼)課程實踐的規模(如功能點、代碼量)課程實踐的創意(如新增功能的創意)泛讀代碼代碼標注質量代碼開源維護10%20%30%40%平時成績考評原則每周提交技術博客的質量(5%)在知士薈平臺上參與交流和討論情況(5%)3.2課后實踐要求知士薈平臺:交流和討論/#/spaces/146,交流、討論、分享等每周一篇技術博客,加入到本班級的學習群組EduCoder平臺:實訓和實踐/paths/1944,線上實訓,相關內容講完后頭歌上實踐課堂及作業,創建和關聯項目、協同開發、提交作業課程學習的教學資源

課件、視頻、試卷、案例等內容往屆學生對課程的評價學習過程很艱難,學完之后成果超預期,學到了許多超出書本、真正有用的東西,受益匪淺、收獲很大,有成就感大學學習期間收獲最大的一門課程,我們本科階段最有挑戰性最有收獲的課程軟工這門課真正意義上激發了我作為一個計算機專業學生的專業思維。這門課對我來說意義匪淺,不僅讓我自己有機會證明自己的能力,同時開拓了我的視野,拓展了我的知識域,讓我更加有一名計算機專業學生的樣子了。這門課程是切實值得認真學習的一門課程,絕不是簡單的代碼編寫,更多的是提供了一種工程化的思維,我認為這種思維對于指導實踐是非常有價值的。這門課程我收獲很大,提高了實踐能力,鍛煉了敢于解決困難的精神。這一年地軟件工程課程學習收獲還是很大吧,可以說是最精彩的一門課。訪問/#/spaces/146/resources,了解往屆學生學習心得和收獲學生的認識(1/3)軟件工程重在“工程”而非“軟件”,這就決定了它的本質要求是實踐。只有動手實踐,即自己寫代碼、寫博客、查資料、讀源碼,才能把別人的東西轉化為自己的理解與經驗,真正學進去并為自己所用不能過于害怕實踐,一定要放心大膽地去做這一年的磨練全方面、大幅度提高個人的能力水平,這是讓一門真正體會到“大學”二字的課程團隊協作與按時完成非常重要學生的認識(2/3)學習了這門課我漸漸的改變了自己的編程習慣,按照編程規范寫代碼,寫注釋,檢測代碼質量,我認為這是我從了解編程轉變為開始懂編程這門課教會了很多東西,不管是技術上,管理上,還是精神上,我相信在這門課中的學習實踐會影響我之后的學習在上課之前就有學長跟我說,在科大學的最有用的一門課就是毛新軍教員的軟件工程,現在想想確實如此不論遇到多大的困難,都要盡自己最大的努力去克服,只有堅持不懈的努力才能戰勝苦難,成就最好的自己學生的認識(3/3)這一年的學習真的是受益匪淺,雖然飽受痛苦,但也在不斷地學習中戰勝困難,不斷成長

一年前,從17級學長那里傳出一句話:大三有一門課叫軟件工程,一門頂三門經過課程實踐一以后,自己對課程的知識才有了一點朦朧的感覺在這一學年的學習中,實踐一直是重中之重,也只有通過實踐,我們才能深入地把知識吃透。在整個實踐過程中,遇到了數不清的困難,每一步都走得很艱難軟件工程課程教材毛新軍等,軟件工程:理論與實踐,高等教育出版社,2024年1月,ISBN:978-7-04-061010-9.

101計劃核心教材毛新軍等,軟件工程實踐教程:基于開源和群智的方法(第二版),高等教育出版社,ISBN978-7-04-052423-9.2024年10月,101計劃核心實踐教材主教材實踐教材軟件工程主教材軟件工程:理論與實踐,高等教育出版社,ISBN:978-7-04-061010-9,2024年1月.教育部101計劃核心教材.內容先進引入新技術新方法新實踐連接專業教育與產業實踐融合工程范式與群智范式組織科學從程序及其質量保證入手重新組織知識章節和內容由易到難、由具體到抽象詮釋深入利用身邊軟件和思政案例完整深入人機物融合案例模板、模型、文檔、代碼強化實踐設計二類綜合性課程實踐明確綜合實踐任務和要求綜合性實踐具有可操作性軟件工程實踐教材軟件工程實踐教程:基于開源和群智的方法,高等教育出版社,2019.8,ISBN978-7-04-052423-9.明確實踐要求規模性、系統性、綜合性、創意性、高質量二類實踐任務閱讀、分析和維護開源軟件開發有創意、上規模和高質量軟件系統完整實踐案例小米便簽開源軟件空巢老人看護軟件新穎實踐方法學開源、用開源、利用群智有效考評方法考為輔、評為主、以評促改、持續改進3.4往屆課程學生實踐作品的視頻演示無人值守圖書館空巢老人看護系統多無人機聯合搜救系統基于增強現實的導航軟件Arnavigator基于語音交互的老人看護機器人系統DrivingAssitant……問題和討論Git使用介紹內容分布式版本管理概述分布式版本控制的基本思想何為Git?Git的基本理念、功能和服務Git使用Git的操作問題提出如何將多人開發的不同代碼管理起來程序代碼存儲代碼沖突處理代碼版本變更程序代碼追蹤工作量的統計……需要對代碼進行版本控制(RevisionControl)張三李四王五版本控制的重要性版本控制是有效管理程序文檔、提高協作效率的重要手段多人協作(橫向視角)版本迭代(縱向視角)開發者1開發者2開發者3開發者4項目管理者v1v2v3v4版本控制概念版本控制是對軟件制品(程序、文檔、數據等)的更改和管理,它是軟件配置管理的重要組成部分組織和保護軟件制品:源代碼和文檔實現跨區域、多人的協同開發

記載和追蹤一個或者多個文件的歷史記錄跟蹤記錄軟件開發過程統計軟件開發工作量版本控制的二種方式集中式與

分布式集中式版本控制集中式版本控制版本庫集中存放在中央服務器之中開發前先從中央服務器取得最新版本開發完再把自己的工作推送給中央服務器中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完后再放回圖書館特點高度集中、難以有效支持協同開發典型系統:CVS、SVN、ClearCase版本庫開發者開發者開發者分布式版本管理分布式版本控制有一個中央倉庫開發前在本機上拷貝一個完整軟件倉庫開發完把自己工作提交到本地倉庫中需要同步給協作者時再遞交到中央倉庫版本庫分步存儲于各協作者電腦中優點不依賴中央服務器、可在本地開發、有效支持協同開發典型系統:Git中央倉庫本地倉庫本地倉庫本地倉庫本地倉庫版本控制的發展RCS(1982)CVS(1990),SVN(2001)Git(2005)BitKeeper(1999)何為Git?Git是一種分布式的版本控制系統支持存儲代碼、跟蹤修訂歷史記錄、合并代碼更改等,可在需要時恢復較早的代碼版本,可實現團隊的高效協作LinusTorvalds研制和開發為了幫助管理Linux內核開發而開發的一個開源的版本控制軟件成為行業標準Git是目前世界上最先進的分布式版本控制LinusTorvaldsGit采用分部式管理模式分布式版本管理本地擁有完整版本庫,支持離線操作有效應對了中心服務器崩潰帶來的影響有效支持代碼審查、持續集成等開發活動Git的基本功能

版本管理管理各種源代碼和文檔、切換不同版本等

過程管理跟蹤開發過程、查閱歷史記錄等代碼評審可視化評估代碼質量,決斷是否合并代碼等;擴展功能企業DevOps自動化、代碼Issue聯動管理;……

Workspace:工作區Index/Stage:暫存區Repository:倉庫區(或本地倉庫)Git的倉庫構成遠端倉庫本地端倉庫本地倉庫暫存區工作區Remote:遠程倉庫Git版本管理的基本概念倉庫(Repository)軟件所有文件的完整修訂歷史版本(Revision)代碼庫的編號方案,如Tag0.1分支(Branch)對代碼庫并行修改時的代碼庫副本如master,develop,branch1,…提交(Commit)對分支的一次修訂下拉(Pull)將遠程的一個分支讀取并保存到本地分支推送(Push)將本地分支代碼發送到遠程某個分支合并(Merge)將對相同文件在不同分支的修改合并到一個分支中沖突(Conflict)當兩個分支中存在對同一文件的不同修改,并試圖合并這兩個分支時,就會發生沖突Tag0.1Tag0.2Tag1.0Commit#ab892nCommit#lm2671spullpushmaster和develop是標準分支,master是缺省的主分支Git各項操作本地倉庫暫存區工作區Git分支的理念和操作使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線masterbranch2branch1createmergecommitcreatemergecommit分支本地操作分支本地操作Git的使用分支管理流程:初始化過程(組長)1創建版本庫(默認master分支),push初始代碼2創建遠程develop分支分支管理流程:基本過程(組員)3克隆代碼,切換到develop分支4新建自己的分支my_branch(各組員分支名不同)5修改my-branch:正常開發,修改完成后將修改的內容推送到遠程my_branch分支合并分支:基本過程(組長)6切換develop分支,pull代碼7合并組員的分支(my_branch)到develop分支8解決沖突,然后將合并好的develop分支推送到遠程9將develop分支合并到master分支(這一步可以按實際需求,master上一般為穩定版本)組長組員創建版本庫push代碼創建develop分支創建自己分支masterdevelop自己分支自己分支創建自己分支提交、push代碼提交、push代碼合并分支解決沖突合并分支合并developPull最新代碼Pull最新代碼1.創建本地版本庫命令:gitinit在執行完成gitinit命令后,Git倉庫會生成一個.git目錄,該目錄包含了資源的所有元數據使用當前目錄作為git倉庫,直接在當前目錄進行初始化使用指定目錄作為git倉庫,在初始化命令之后加上指定目錄路徑,如gitinitnewrepo2.克隆遠程版本庫gitclone<repo><directory>將遠程倉庫中的代碼拷貝項目到本地倉庫其中repo表示遠程倉庫目錄,directory代表本地倉庫目錄3.在暫存區添加/撤銷文件gitadd

[file1][file2]...or

[dir] 將文件添加到暫存區gitcheckout[file1]撤銷不需要的修改 4.提交修改到本地倉庫gitcommit-m[message]gitcommit[file1][file2]...-m[message]將暫存區內容添加到本地倉庫中gitlog查看commit提交日志5.添加遠程版本庫gitremoteadd“遠程倉庫名”“遠程倉庫地址”添加遠程版本庫6.推送本地內容到遠程倉庫

gitpush遠程倉庫名本地分支名遠程分支名將你的修改推送到遠程倉庫,便于測試或者和團隊中其他人協作推送本地內容時,會將所有未推送至遠程倉庫的內容,都提交到遠程倉庫7.拉取遠程分支到本地gitpull遠程主機名遠程分支名:本地分支名在團隊協作中,如果別人對項目做了修改,而你需要將這些修改合并到你本地時,需要使用gitpull命令gitpull遠程主機名遠程分支名:本地分支名-f如果遠程分支和本地分支對同一內容做了修改,這將導致將遠程分支修改合并到本地分支時會發生沖突可以選擇直接強制拉取,使用遠程分支的修改,覆蓋本地分支的修改。強制拉取需要用到-f參數

Git關鍵操作的總結本地倉庫遠程倉庫pushpullcommitcommitswitch合并請求TortoiseGit軟件工具一種開源的Git版本控制系統客戶端軟件采用Windows圖形化界面,使用Git變得更加簡便和易于操作安裝訪問TortoiseGit官網()供閱讀的相關技術博客git入門/#/spaces/146/resources-docs/6423實操視頻知士薈->學習空間:軟件工程課程教改及培訓【教師】/#/spaces/402/resources/21291拓展閱讀【技術博客干貨】一篇文章讓你入門git/#/spaces/146/resources-docs/6423相關書籍課后作業和課程實訓訪問/paths/1944完成第一章“軟件工程概述”的實訓闖關任務小結Git是一個分布式版本控制軟件工具提供了倉庫、分支、Pull/Push等基本功能和服務Github、頭歌等提供了Git的功能和服務軟件項目的分布式版本管理TortoiseGit是一個支持Git的可視化軟件工具為開發者提供友好的界面操作問題和討論程序及其質量保證和分析方法軟件工程內容程序及質量要求程序及其內部和外部質量程序質量保證方法編碼規范、設計方法、代碼重用、結對編程程序質量的分析方法人工審查、自動化分析、代碼測試編寫程序需要解決的問題需要工程化的方法支持配套教材毛新軍等,軟件工程:理論與實踐,高等教育出版社,ISBN:978-7-04-061010-9,2024年1月,教育部101計劃核心教材毛新軍等,軟件工程實踐教程-基于開源和群智的方法,高等教育出版社,ISBN978-7-04-052423-9,2019年8月1.1何為程序?程序(Program)是由程序設計語言所描述的、能為計算機所理解和處理的一組語句序列用程序設計語言(ProgrammingLanguage)來描述的如Java、C、C++、Python程序嚴格遵循程序設計語言的各項語法和語義規定確保程序代碼能為程序設計語言的編譯器所理解,進而編譯生成相應的可運行代碼程序代碼可表現為二種形式源代碼(SourceCode):用程序設計語言所描述的代碼可執行代碼(ExecutableCode):可執行的二進制或中間碼程序代碼示例用Java語言編寫的代碼1.2程序組成-語句程序中的語句聲明、定義、控制、計算等實現特定的功能用程序設計語言來描述計算機可以理解可編譯成二進制代碼代碼在計算機上可執行程序組成-模塊由諸多相互交互的模塊組成包(Package)類(Class)方法(Method)每個模塊實現特定功能示例:小米便簽中的模塊170個文件、471個方法程序模塊包示例:小米便簽開源軟件模塊結構1.3程序如何編寫?編寫程序要實現的功能采用編程語言邏輯思考推理程序設計經驗程序代碼邏輯思考、認知和推理的過程你是如何編寫程序的?程序的編碼、編譯、部署和運行編碼編譯部署與運行源代碼可執行代碼編程語言編譯器運行平臺基于用戶需求產生運行結果如何保證質量問題?!確保程序質量是編碼的首要工作!產品的質量問題外在:用戶直接可以感覺到的使用用戶:圓滑、手感好、美觀、不死機、操作便捷內在:用戶無法直接感觸到的維修人員:易于維護、易于更換內在外在1.4程序的利益相關者及其質量要求用戶程序的運行展示功能和性能滿足和實現用戶的需求程序員編寫、閱讀和維護程序發現和修改程序中的缺陷程序編碼編譯用戶程序員程序使用編寫和維護對程序的不同質量需求正確性高效性可靠性友好性……用戶角度程序員角度可理解易修改可維護可重用……用戶和程序員會對程序質量分別提出什么樣的要求?為什么?使用編寫和維護程序質量的內在和外在體現外在質量(ExternalQuality)

–用戶的視角對外可展示,用戶可直接感觸到、所關心的使用流暢性、響應速度、界面美觀、操作簡易性、運行可靠性等正確性、友好性、可靠性、易用性、高效性等內在質量(InternalQuality)

–程序員的視角體現在程序的內在方面,程序員可以感觸到的、所關心的易于理解、結構清晰、易于修改、可重用好等可理解性、可維護性、可擴展性、可重用性等你是否對你或他人編寫的程序有質量方面的要求和抱怨?示例:從用戶和程序員視角看程序質量這段代碼如何?易于理解嗎?易于修改嗎?結構清晰嗎?……運行效果如何?可靠嗎?易于操作和使用嗎?……用戶角度程序員角度討論:程序的質量這段程序寫的如何?正確嗎?易于理解嗎?結構清晰嗎?易于修改嗎?……思考和討論你覺得什么樣的程序是高質量?你編寫程序時是否考慮了質量問題?你所寫的程序質量如何?如何才能編寫出高質量的程序?內容程序及質量要求程序及其內部和外部質量程序質量保證方法編碼規范、設計方法、代碼重用、結對編程程序質量的分析方法人工審查、自動化分析、代碼測試編寫程序需要解決的問題需要工程化的方法支持2.1程序質量的語法和語義體現代碼風格規范-語法語法和結構層次明確如何來規范程序的書寫表現為是否易于閱讀和理解代碼設計規范-語義語義和內涵層次明確如何來組織和封裝程序語句表現為良好的結構和易于重用程序質量保證方法遵循編碼風格采用程序設計方法開展代碼重用進行結對編程2.2遵循編碼風格良好的編程行為在編碼過程中,程序員對代碼符號進行良好的組織、合理的命名、提供必要的注釋,那么將可增強代碼的可讀性和可理解性,進而提高代碼的可維護性和可重用性,提升代碼的內部質量何為編碼風格程序員在編碼時要遵循特定的樣式及要求,以規范程序員的編程行為以及所產生程序代碼的樣式示例:遵循編碼風格沒有遵循編碼風格遵循編碼風格編寫代碼的基本原則易讀,一看就懂理解代碼的內涵和意圖望文生義的符號、縮進和括號、代碼注釋,遵循編碼風格簡明,減低復雜度避繁就簡、不用goto語句、減少嵌套層數、簡單算法易改,便于維護便于修改程序代碼、增加新的代碼封裝、參數化、模塊化、隱藏、常元無二義,不產生歧義不要讓人產生誤解編碼風格-代碼布局縮進,用好Tab鍵用括號來表示優先級斷行處的{}if(condition){ DoSomething();}else{ DoSomething();}一行至多只一條語句不要在一行定義多個變量編碼風格-代碼組織按一定次序來說明數據按字母順序說明對象盡可能避免使用嵌套結構采用統一的縮進規則單入口單出口編碼風格-命名規范采用有意義、一目了然的命名方式變/常/函數/方法/類/包一看就懂,望文生義無意義的命名i,j,x,y有意義的命名szPathvPrintName()bReturn編碼風格-命名命名通則使用英文單詞或縮寫,不要使用拼音望文知義原則,含義清晰、明確命名不要過長盡量使用全稱,少用縮寫不規范的命名DaYinWenJian與PrintFile編碼風格-命名命名和大小寫類/類型/變量:用名詞和名詞短語,所有單詞第一個字母大寫函數/方法:動詞或者動詞短語,第一個單詞小寫,隨后單詞第一個字母大寫示例:Member,ProductInfo,getName(),setName(),renderPage()不規范的命名變量:print;方法:Print()編碼風格-代碼注釋幫助理解程序注釋要說明程序:(1)做什么;(2)為什么這么做;(3)注意事項無需解釋程序如何做注解位置類頭、函數/函數頭、關鍵語句塊頭、關鍵語句尾有效、必要、簡潔的注釋太少和過多均不可取注釋要可理解、準確、無二義隨代碼的修改而修改編碼風格示例注釋命名布局結構編碼風格的相關書籍C++編程風格Java編程風格代碼整潔之道推崇CleanCode不同程序設計語言有不同的編碼風格要求討論:編碼風格這二段代碼風格如何?哪些做的好,還存在哪些問題?你編寫代碼時注意風格了嗎?2.3采用程序設計方法語句設計模塊化設計高內聚度、低耦合度原則代碼設計規范-語句設計單入口單出口少用goto語句加強對異常處理分析和驗證輸入參數正確性,如名字不為空,年齡大于0少于150執行結果處理,設置必要斷言來分析

如p=AllocateNewSpace(); Assert(p!=NULL); if(p!=NULL){ …… }處理異常語句Try{…}catch(Exceptione){…}將更多的時間、精力和代碼放在處理異常上代碼設計規范-模塊化設計模塊是邏輯上相對獨立、具有良定義接口的編程單位模塊可表現為函數、過程、方法、類、程序包等將程序代碼封裝為一個個獨立的模塊代碼設計規范-高內聚度模塊內各要素緊密相關,僅實現單一功能如果模塊內多個要素關系不密切,需分解產生多個模塊ABCABCD分解模塊D內部包含若干關系松散的要素經過分解得到若干松耦合的模塊代碼設計規范-低耦合度模塊間的關系應設計的非常松散如果多個模塊間的關系非常密切,可將這些模塊合并為一個模塊BACABC經過合并得到內聚度高的模塊D若干關系緊密的模塊示例:采用程序設計方法語句設計模塊化高內聚度低耦合度2.4代碼重用何為代碼重用在編寫代碼過程中,充分利用已有和現成的代碼,并將其集成到程序之中,從而來實現程序功能代碼重用有何好處由于被重用的代碼經過多次反復的使用,代碼質量得到充分檢驗,因而代碼重用不僅可提高編程效率,而且還可有效提升程序質量為什么代碼重用可以提高代碼的質量?示例:函數、類和軟構件重用C函數庫MFC類庫(MicrosoftFoundationClasses)Java軟件開發包機器人操作系統(ROS)的節點軟構件MFC類庫示例:代碼片段重用尋找他人實現某些子功能的代碼片段可在StackOverflow上尋找到有價值的代碼片段,并加以重用開源代碼重用到Github中找到粗粒度的代碼開源幾萬、甚至幾十萬的程序代碼重用開源代碼來實現粗粒度的功能完成諸如數據庫管理、圖像識別、語音分析等功能思考和討論你在編程時是否有軟件重用?你開展了那些方面和粒度的軟件重用?2.5結對編程(Pair-Programming)兩位程序員(或智能體)坐在同一工作臺前一起開發軟件一人扮演“領航員”角色,負責具體編寫工作,如寫程序一人扮演“觀察者”角色,負責觀察行為及結果,如看程序,發現問題二者相互討論,共同完成編程任務大模型時代基于智能體的結對編程軟件開發智能體軟件工程師人機協同開發Copilot等基于智能化的編程助手(如CopilotX),人機協同編程會成為趨勢越來越多程序員使用CopilotX等智能化工具進行軟件開發,AIPair編程正在成為新的編程范式,幫助程序員編代碼、單元測試、調試、寫文檔等個體開發的局限性個體知識和技能的局限性沒有人無所不能有專長,但很難做到面面俱到總會有不懂、不會的個體開發行為的局限性人總是會犯錯誤的,錯誤很難避免老虎也有打旽的時候,注意力不集中就會犯錯誤很難看到或者看清自身的錯誤軟件開發是集體性/群體性行為團隊開發多人參與、具有共同目的、明確任務分工合作開發相互支持、互相配合、共同解決問題群體開發利用大眾的力量、借助大眾的智慧和成果拋棄個人主義/英雄主義單槍匹馬難成大事、單干/蠻干容易出事現實世界的結對示例駕駛員作戰員駕駛員領航員如何實現結對編程職責明確一人寫設計文檔、編寫程序和單元測試等等一人審閱文檔、復審程序代碼、考慮單元測試的覆蓋率、是否需要重構、解決具體的技術問題等等互換角色不要連續超過工作1小時,提高效率主動參與開展討論、解決問題、做出貢獻編程行為及其特點快速完成盡快得到可運行軟件系統、盡早交付給用戶、快速應對需求變化多種技能工具和環境程序設計語言業務領域知識編碼規范和設計規范質量要求正確性、可讀性、可維護性等編程包袱:效率和質量問題結對寫程序任務編寫程序代碼方式一人寫一人復審規范性、正確性、可讀性等討論改進與提高如增加注釋、更改名稱等結對編程中的代碼復審結對編程是一個不斷“復審”代碼的過程每一行代碼都被二雙眼睛看過,被二個腦子思考過代碼隨著改動不斷地被復審每個人的一舉一動(編碼行為)不斷地被另一個人審查,確保過程和活動置于監督之下,迫使認真工作,防止隨意行為促進“頻繁”交流,提高個人能力和素養結對寫文檔任務撰寫計文檔方式一人寫一人復審規范、正確、合理性等討論改進和完善如文檔格式、語言表達、圖表、錯別字結對做測試任務軟件測試方式運行測試用例,收集測試結果一人寫一人復審和幫助完整性、代表性、適當性等討論完善和提升結對編程帶來的好處提高程序質量提供更好的設計質量和代碼質量合作解決問題能力強,1+1>2提升開發效率開發人員更加信心有效地避免了閉門造車更易于發現問題和糾正問題促進學習交流有效的學習,做中學效果更好相互學習和分享經驗更好應對人員流動,一個走了另一個人可以替換上結對編程可以獲得更高的投入/產出比思考和討論如何在閱讀、分析和維護開源軟件實踐中應用結對編程的方法?有何實踐經驗可供分享?內容程序及質量要求程序及其內部和外部質量程序質量保證方法編碼規范、設計方法、代碼重用、結對編程程序質量的分析方法人工審查、自動化分析、代碼測試編寫程序需要解決的問題需要工程化的方法支持3.1程序代碼中潛在的質量問題質量問題編寫不合理

–沒有遵循編碼規范設計不合理

–沒有遵循設計規范代碼有錯誤–代碼編寫的不正確

原因受軟件開發人員經驗和水平的限制人可能會犯錯誤,人為引入錯誤

你編寫的代碼是否存在問題?存在哪些方面的問題?代碼質量分析的常用方法人工審查(CodeReview)方法自動化分析方法(AutomatedAnalysis)程序測試(Test)方法3.2人工審查代碼方法描述閱讀和理解代碼發現缺陷和問題提出改進的建議方法特點人工審查效率低難以發現一些深層次問題難以全面地進行系統分析人工審查些什么?代碼是否符合編程規范代碼中是否存在缺陷邏輯錯誤,“+”寫成“-”算法錯誤,不夠優化、邊界條件沒有處理好潛在錯誤,當前修改導致以前修復的錯誤重現從質量的角度哪些代碼需要改進包括內部質量和外部質量讀別人編寫的高質量代碼能讓你受益匪淺讀低質量的代碼能讓你非常痛苦人工審查-誰負責審查自我復審,效果不一定好同伴復審,常用方法

結對編程團隊復審,團隊成員參加3.3自動化工具審查-代碼靜態分析由計算機軟件來自動完成代碼審查無需運行被測代碼,僅通過分析或檢查程序的語法、結構、過程、接口等來檢查程序30%-

70%的代碼缺陷可通過靜態分析發現分析什么找出代碼隱藏的錯誤和缺陷,如參數不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現的空指針引用等等程序遵循編碼規范的程度特點快速定位、有效發現隱藏的錯誤和缺陷自動化代碼分析工具SonarQubeCheckStyleFindBugsPMDJtestCodeArtsCheck(華為)SonarQube概述基于Web、用于管理程序代碼質量的代碼靜態分析工具可以插件的形式集成到眾多的軟件開發環境(如Eclipse)支持二十多種程序設計語言代碼的質量分析SonarQube可分析的質量問題是否違反編碼規則是否存在靜態常規缺陷模塊、方法、類的復雜度是否過高是否存在重復的代碼代碼的注釋是否恰當和充分統計和分析代碼的單元測試覆蓋率判斷軟件體系結構設計是否合理SonarQube分析發現的問題類別Bug(錯誤)中等影響如參數不夠Vulnerability(脆弱點)影響大如漏洞CodeSmell(代碼異味)影響小如風格SonarQube分析報告代碼審查后要做的工作理解發現和指出的問題修改和更正有問題代碼對于無法很快更正的錯誤,要把錯誤的信息記錄下來,以便適當的時候能夠更正3.4軟件測試技術程序本質上是對數據的處理設計數據(測試用例)

運行測試用例(程序來處理數據)

判斷運行結果(是否符合預期結果)運行代碼程序代碼等設計測試數據結果評價預期結果軟件缺陷為軟件測試而設計的數據稱為測試用例(TestCase)測試用例實際結果軟件測試的目的和任務2356417缺陷盡可能多找出軟件中缺陷軟件系統軟件缺陷可能隱藏的比較深,難以發現軟件測試示例一個加法器程序功能:給定二個數字,將其相加,然后輸出設計測試數據<1,2,3><-1,1,0><0,0,0>運行測試程序輸入數據,查看運行結果,判斷是否與預期結果一致如果不一致就意味著有錯誤思考和討論在你的編程實踐中,你是采用何種方式來檢查代碼質量、發現代碼問題的?內容程序及質量要求程序及其內部和外部質量程序質量保證方法編碼規范、設計方法、代碼重用、結對編程程序質量的分析方法人工審查、自動化分析、代碼測試編寫程序需要解決的問題需要工程化的方法支持程序編寫面臨的挑戰!程序功能從何而來?誰以及如何來確定軟件功能?軟件規模很大怎么辦?500LOCvs1MLOC軟件功能變化如何改寫代碼?在哪里改、如何改?如何保證程序質量?能否想到代碼的質量問題,如何保證光靠腦子思考能解決程序編寫的問題嗎?思考和討論如何明確功能、劃分模塊?如何編寫代碼、確保質量?對于規模較大應用能行嗎?面臨什么樣的困難和問題?需要尋找系統化、工程化的方法指導!

軟件工程拓展閱讀軟件科學與工程-學科發展戰略,梅宏等著,高等教育出版社,2021.人月神話(40周年中文紀念版,Frederick,P.Brooks[美],清華大學出版社,2015.課后作業和課程實訓訪問/paths/1944完成第二章“從程序到軟件”的實訓闖關任務本章知識圖譜小結程序的多種質量要求外在和內在、語法和語義確保代碼質量的方法編碼規范、設計方法、代碼重用、結對編程分析、發現和審查代碼人工審查、靜態分析、程序測試學會編寫高質量的程序代碼需要借助行之有效的、系統化方法的指導課后的實踐任務開展基于結對的代碼分析和維護實踐閱讀和掌握編碼風格Java、C/C++編程風格,要求學以致用熟練掌握SonarQube工具安裝和使用,分析開源軟件的代碼質量開展課程實踐閱讀、理解和分析開源軟件的代碼質量提交代碼的質量分析報告思考:如何編寫高質量的程序代碼綜合實踐一任務:選取或指定待閱讀、分析和維護的開源軟件。方法訪問Github、碼云Gitee、SourceForge等開源軟件托管平臺,從中檢索到符合上述要求的開源軟件,下載或克隆開源軟件代碼,閱讀開源軟件的相關文檔來安裝、部署和運行開源軟件。以二人為一組、采用結對方式來開展本綜合實踐要求所選取或指定的開源軟件要求功能易于理解、代碼質量高、規模適中(5000-20000行代碼量),也可以直接指定“MiNote”便簽管理開源軟件作為閱讀、分析和維護的對象。結果:獲得開源軟件源代碼,并可運行和操作該開源軟件。綜合實踐二任務:查看和分析開源軟件方法訪問Github、SourceForge、Gitee等開源軟件托管平臺或Apache、Eclipse等開源軟件基金會平臺,從中檢索自己感興趣的開源軟件,閱讀相關的軟件文檔,下載安裝開源軟件要求結合自己的興趣,查看有那些開源軟件,分析這些軟件的功能和定位、存在的缺陷和不足結果:掌握開源軟件托管平臺的使用方法,大致了解感興趣的開源軟件情況思考和討論你是否意識到程序質量的重要性?你認為高質量的程序應該是什么樣的?怎樣才能得到高質量的程序代碼?問題和討論軟件及其特點軟件工程內容軟件軟件的概念、特點、組成及生命周期開源軟件開源軟件實踐,托管平臺和社區,開源許可證軟件質量軟件質量要素及模型軟件特征的變化地位、運行環境、形態、復雜性建設狗窩和建設大廈的區別建設狗窩的特點簡單質量要求不高一個人就可完成建設大廈的特點復雜質量高要求很高需要團隊合作才能完成簡單、小規模程序規模在萬行代碼量復雜、大規模程序數十萬行以上代碼量1.1從程序到軟件-工程開發的啟發應用(如火車票購買、酒店預訂、網上購物)編寫程序通過一個步驟就將程序寫出來不現實了解需求設計圖紙進場施工采用工程化的方法來解決工程開發的問題編寫出程序需要經歷諸多的步驟應用(如火車票購買、酒店預訂、網上購物)分析軟件需求設計軟件系統編寫程序代碼文檔數據代碼不可或缺相互依存要編寫出高質量的程序需要循序漸進地開展工作運行維護程序1.2何為軟件?軟件(Software)是指在計算機系統的支持下,能夠完成特定功能與性能的程序(Program)、數據(Data)和相關文檔(Document)

文檔數據代碼++從開發的角度看軟件的構成軟件制品(SoftwareArtifact)何為文檔?記錄軟件開發活動和階段性成果、軟件配置及變更的闡述性資料定義和理解軟件記錄軟件開發成果輔助不同人員間的交流有哪些方面的文檔軟件需求文檔–記錄需求軟件設計文檔–記錄設計軟件測試文檔–記錄測試軟件用戶手冊–記錄使用……闡述性資料為什么需要文檔?原因軟件開發牽涉多方面的工作,需要記錄下來任何事都記在腦子里,記不住,不便于保存任何事都放在腦子里,理不清,不便于分析任何事都存在腦子里,講不明,不便于交流編寫文檔目的闡述清楚:內容、邏輯性、條理性發現問題:完整、一致、矛盾開展交流:便于各種人員的交流促進管理:管理軟件開發成果編碼活動的成果記錄為程序代碼其他活動的成果記錄為軟件文檔示例:軟件設計文檔空巢老人智能看護系統設計文檔何為數據?數據是程序的加工處理對象和結果需要處理哪些數據如何來獲得這些數據如何來表示這些數據如何來存儲和檢索數據如何來傳輸數據網上商城中的手機及其數據數據示例數據形式用戶、訂單、交易、日志數據數據處理表示、獲取、存儲、檢索、分析軟件運行的本質就是對數據的處理,有些數據是用戶提供的,有些數據是軟件產生的思考和討論:12306軟件的數據哪些數據是由用戶提供的?以用戶注冊和購票為例哪些數據是由軟件產生的?以用戶注冊和購票為例沒有數據軟件會怎么樣?從開發者的角度看軟件的構成可執行部分不可執行部分文檔數據數據文檔程序構成軟件的三類成分作用不同,但都不可或缺1.3軟件概念給我們的啟示軟件程序軟件涉及更多制品這些制品間有關聯、相互依賴開發軟件編寫程序軟件開發需要做更多事情對軟件提出更高的要求軟件開發的再認識開發具有一定規模和復雜性的軟件系統與編寫一個簡單的程序不一樣建設簡單平房vs建設高樓大廈挖一條小溝vs建設一條南水北調渠道軟件的規模和復雜性意味著要采用行之有效的方法—工程方法何為工程化方法?開發軟件vs編寫程序1.4軟件生命周期萬物均有生命周期(Lifecycle)人:嬰兒、幼兒、兒童、少年、…樹:發芽、育苗、結果、枯萎、死亡、….青蛙:受精卵、蝌蚪、去掉尾巴的青蛙…軟件生命周期(SoftwareLifecycle)軟件從提出開發開始到最終滅亡所經歷的時期不同階段具有不同的特征?CopyrightXinjunMao198軟件生命周期(1/2)從提出開發開始到開發出系統、運行維護以及最終退役的全過程軟件的生命周期(2/2)每個階段會產生不同的軟件制品What軟件需求是什么How如何構造出軟件How編寫程序代碼軟件是否缺陷部署軟件運行軟件的本質軟件的目的性:服務于客戶或用戶,滿足他們的要求軟件的組成性:程序+文檔+數據軟件的系統性:軟件是一類系統,有諸多相關聯的要素軟件的駐留性:依賴于計算系統的軟硬件設施來支撐運行示例:軟件的駐留性和系統性1.5軟件特點邏輯性邏輯產品,思維活動(而非物理活動)的結果、不會磨損和老化設計開發是設計開發而成的,不是生產制造而成的易變性需求經常變、難以把控,影響軟件的制品即開發過程復雜性規模大:代碼行、模塊、介入人員、進程、數據等數量非常大運行復雜:狀態很難追蹤和復現缺陷的隱蔽性缺陷隱藏在邏輯代碼中,不像硬件系統那樣直觀顯現,很難被人們所發現和排除討論:對比軟件和硬件對比軟件和硬件的特點表現形式開發范式需求變化復雜性系統缺陷軟件系統硬件系統vs軍用軟件的特殊性運行環境更復雜和多樣與物理系統(如飛機)緊密聯系在一起對實時性和質量(如可靠性)提出更高要求對自身防護能力(如安全性)提出更高要求需具備更強的靈活性、適應性和健壯性軍用軟件:導彈中的飛行控制軟件、指揮信息系統、后勤保障軟件等1.6軟件的分類應用軟件面向特定應用領域的專用軟件。它們針對相關行業和領域的特定問題,為其提供基于計算的新穎解決方案。示例:淘寶、12306、攜程、微信、QQ等軟件系統軟件對計算機資源進行管理,為應用軟件的運行提供基礎設施和服務的一類軟件。從計算服務的視角,系統軟件介于計算機硬件和應用軟件之間。示例:操作系統、數據庫管理系統、編譯軟件、軟件中間件等支撐軟件輔助軟件開發和運維,幫助開發人員完成軟件開發和維護工作的一類軟件示例:SonarQube、VisualStudio、Eclipse等軟件的分類類別服務對象軟件的功能發揮的作用應用軟件行業和領域應用的用戶為特定行業和領域問題解決提供基于軟件解決方案,創新應用領域的問題解決模式提供更為便捷、快速、高效的服務系統軟件各類應用軟件為應用軟件運行和維護提供基礎設施和服務,如加載、通訊、互操作、管理等作為應用軟件的運行環境支撐軟件軟件開發者和維護者為軟件系統的開發和維護提供自動和半自動的支持提高軟件開發效率和質量討論:你所知道的各類軟件系統系統軟件應用軟件支撐軟件內容軟件軟件的概念、特點、組成及生命周期開源軟件開源軟件實踐,托管平臺和社區,開源許可證軟件質量軟件質量要素及模型當前軟件特征的變化地位、運行環境、形態、復雜性*2.1閉源軟件何為閉源軟件軟件代碼不對用戶開放的一類軟件,購買軟件時只提供可運行軟件或服務,沒有提供源代碼以許可證(License)的方式授權用戶使用軟件閉源軟件帶來的問題無法掌握軟件內部實現情況(如是否存在安全漏洞和惡意代碼),也無法對軟件進行修改和完善,極大影響了開發者的創新自由示例微軟的Windows、Office軟件,典型企業:微軟、IBM、Oracle等2.2開源軟件何為開源軟件一種源代碼可以自由獲取和傳播的計算機軟件,其擁有者通過開源許可證賦予被許可人對軟件進行使用、修改和傳播海量、高質量和有影響力的開源軟件操作系統Linux、Ubuntu、麒麟、鴻蒙、OpenEuler等數據庫系統MySQL、PostgreSQL、MongoDB、Redis等開發平臺Eclipse、Junit、SonarQube、Kubernetes等人工智能Tensorflow、Opencv、Caffe、Deeplearning4j等網絡安全Nmap、curityOnion、Suricata、Bro等……你能枚舉出其他的開源軟件嗎?開源軟件正逐步替代閉源軟件服務器操作系統領域Linux、FreeBSD等==》Unix桌面操作系統領域Linux、麒麟等==》Windows操作系統數據庫領域MySql、PostgreSQL等==》Oracle、DB2瀏覽器領域Chrome、Firefox等==》IE、開發工具領域Eclipse、Sonar等

==》VisualStudio開源軟件與閉源軟件的對決你能枚舉出其他方向的開源軟件與閉源軟件的對決快速增長的開源軟件數量Github上的開源軟件倉庫()2023年Github上有3億多的開源軟件倉庫開源軟件帶來的好處源代碼可自由傳播免費使用降低成本激發創作者的熱情快速開發搭建系統開源軟件的推動者政府組織NASA開源200多軟件項目,美國和印度等政府鼓勵采用開源軟件我國政府將開源列入十四五國民經濟和社會發展五年規劃綱要開源組織Apache基金會、Linux基金會、Eclipse基金會、OpenSourceInitiative開放原子開源基金會(

)IT企業Google、Microsoft、IBM、Oracle等國外企業以及華為、騰訊、阿里巴巴、百度、浪潮、聯想等國內企業軟件開發者LinusTorvalds,Github上有6500多萬的程序員Apache軟件基金會組織特點成立于1999年的非盈利性組織所管理的開源軟件項目都遵循Apache許可證組織構成管理有約2.27億行代碼和350多個開源軟件項目擁有800多名基金會成員,4萬多代碼貢獻者,48萬個體代表性開源軟件ApacheHTTPServer、Derby、Hadoop、Lucene、Tomcat、Ant、Maven等Google主導的開源軟件項目移動操作系統Android機器學習系統TensorFlow容器集群管理系統Kubernetes網站前端開發工具集MDLWeb前端框架Angular基于Chrome瀏覽器的開發環境SparkJava常用庫Guava、Java編譯器Traceur…..開放原子開源基金會

2020年6月在北京成立,由阿里巴巴、百度、華為、浪潮、360、騰訊等多家龍頭科技企業聯合發起開源項目孵化平臺科技公益性服務機構打造開源開放框架搭建國際開源社區典型的開源項目OpenHarmony(華為)TencentOSTiny(騰訊)……

/思考和討論開源軟件會帶來什么好處?為什么那么多的企業和個人關注和參與開源軟件?開源軟件是如何開發出來的?2.3開源軟件托管平臺托管服務創建軟件倉庫支持協同開發軟件質量保證……

溫馨提示

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

評論

0/150

提交評論