




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序及其質(zhì)量保證和分析方法軟件工程內(nèi)容程序及質(zhì)量要求程序及其內(nèi)部和外部質(zhì)量程序質(zhì)量保證方法編碼規(guī)范、設(shè)計(jì)方法、代碼重用、結(jié)對(duì)編程程序質(zhì)量的分析方法人工審查、自動(dòng)化分析、代碼測(cè)試編寫程序需要解決的問題需要工程化的方法支持配套教材毛新軍等,軟件工程:理論與實(shí)踐,高等教育出版社,ISBN:978-7-04-061010-9,2024年1月,教育部101計(jì)劃核心教材毛新軍等,軟件工程實(shí)踐教程-基于開源和群智的方法,高等教育出版社,ISBN978-7-04-052423-9,2019年8月1.1何為程序?程序(Program)是由程序設(shè)計(jì)語(yǔ)言所描述的、能為計(jì)算機(jī)所理解和處理的一組語(yǔ)句序列用程序設(shè)計(jì)語(yǔ)言(ProgrammingLanguage)來(lái)描述的如Java、C、C++、Python程序嚴(yán)格遵循程序設(shè)計(jì)語(yǔ)言的各項(xiàng)語(yǔ)法和語(yǔ)義規(guī)定確保程序代碼能為程序設(shè)計(jì)語(yǔ)言的編譯器所理解,進(jìn)而編譯生成相應(yīng)的可運(yùn)行代碼程序代碼可表現(xiàn)為二種形式源代碼(SourceCode):用程序設(shè)計(jì)語(yǔ)言所描述的代碼可執(zhí)行代碼(ExecutableCode):可執(zhí)行的二進(jìn)制或中間碼程序代碼示例用Java語(yǔ)言編寫的代碼1.2程序組成-語(yǔ)句程序中的語(yǔ)句聲明、定義、控制、計(jì)算等實(shí)現(xiàn)特定的功能用程序設(shè)計(jì)語(yǔ)言來(lái)描述計(jì)算機(jī)可以理解可編譯成二進(jìn)制代碼代碼在計(jì)算機(jī)上可執(zhí)行程序組成-模塊由諸多相互交互的模塊組成包(Package)類(Class)方法(Method)每個(gè)模塊實(shí)現(xiàn)特定功能示例:小米便簽中的模塊170個(gè)文件、471個(gè)方法程序模塊包示例:小米便簽開源軟件模塊結(jié)構(gòu)1.3程序如何編寫?編寫程序要實(shí)現(xiàn)的功能采用編程語(yǔ)言邏輯思考推理程序設(shè)計(jì)經(jīng)驗(yàn)程序代碼邏輯思考、認(rèn)知和推理的過程你是如何編寫程序的?程序的編碼、編譯、部署和運(yùn)行編碼編譯部署與運(yùn)行源代碼可執(zhí)行代碼編程語(yǔ)言編譯器運(yùn)行平臺(tái)基于用戶需求產(chǎn)生運(yùn)行結(jié)果如何保證質(zhì)量問題?!確保程序質(zhì)量是編碼的首要工作!產(chǎn)品的質(zhì)量問題外在:用戶直接可以感覺到的使用用戶:圓滑、手感好、美觀、不死機(jī)、操作便捷內(nèi)在:用戶無(wú)法直接感觸到的維修人員:易于維護(hù)、易于更換內(nèi)在外在1.4程序的利益相關(guān)者及其質(zhì)量要求用戶程序的運(yùn)行展示功能和性能滿足和實(shí)現(xiàn)用戶的需求程序員編寫、閱讀和維護(hù)程序發(fā)現(xiàn)和修改程序中的缺陷程序編碼編譯用戶程序員程序使用編寫和維護(hù)對(duì)程序的不同質(zhì)量需求正確性高效性可靠性友好性……用戶角度程序員角度可理解易修改可維護(hù)可重用……用戶和程序員會(huì)對(duì)程序質(zhì)量分別提出什么樣的要求?為什么?使用編寫和維護(hù)程序質(zhì)量的內(nèi)在和外在體現(xiàn)外在質(zhì)量(ExternalQuality)
–用戶的視角對(duì)外可展示,用戶可直接感觸到、所關(guān)心的使用流暢性、響應(yīng)速度、界面美觀、操作簡(jiǎn)易性、運(yùn)行可靠性等正確性、友好性、可靠性、易用性、高效性等內(nèi)在質(zhì)量(InternalQuality)
–程序員的視角體現(xiàn)在程序的內(nèi)在方面,程序員可以感觸到的、所關(guān)心的易于理解、結(jié)構(gòu)清晰、易于修改、可重用好等可理解性、可維護(hù)性、可擴(kuò)展性、可重用性等你是否對(duì)你或他人編寫的程序有質(zhì)量方面的要求和抱怨?示例:從用戶和程序員視角看程序質(zhì)量這段代碼如何?易于理解嗎?易于修改嗎?結(jié)構(gòu)清晰嗎?……運(yùn)行效果如何?可靠嗎?易于操作和使用嗎?……用戶角度程序員角度討論:程序的質(zhì)量這段程序?qū)懙娜绾??正確嗎?易于理解嗎?結(jié)構(gòu)清晰嗎?易于修改嗎?……思考和討論你覺得什么樣的程序是高質(zhì)量?你編寫程序時(shí)是否考慮了質(zhì)量問題?你所寫的程序質(zhì)量如何?如何才能編寫出高質(zhì)量的程序??jī)?nèi)容程序及質(zhì)量要求程序及其內(nèi)部和外部質(zhì)量程序質(zhì)量保證方法編碼規(guī)范、設(shè)計(jì)方法、代碼重用、結(jié)對(duì)編程程序質(zhì)量的分析方法人工審查、自動(dòng)化分析、代碼測(cè)試編寫程序需要解決的問題需要工程化的方法支持2.1程序質(zhì)量的語(yǔ)法和語(yǔ)義體現(xiàn)代碼風(fēng)格規(guī)范-語(yǔ)法語(yǔ)法和結(jié)構(gòu)層次明確如何來(lái)規(guī)范程序的書寫表現(xiàn)為是否易于閱讀和理解代碼設(shè)計(jì)規(guī)范-語(yǔ)義語(yǔ)義和內(nèi)涵層次明確如何來(lái)組織和封裝程序語(yǔ)句表現(xiàn)為良好的結(jié)構(gòu)和易于重用程序質(zhì)量保證方法遵循編碼風(fēng)格采用程序設(shè)計(jì)方法開展代碼重用進(jìn)行結(jié)對(duì)編程2.2遵循編碼風(fēng)格良好的編程行為在編碼過程中,程序員對(duì)代碼符號(hào)進(jìn)行良好的組織、合理的命名、提供必要的注釋,那么將可增強(qiáng)代碼的可讀性和可理解性,進(jìn)而提高代碼的可維護(hù)性和可重用性,提升代碼的內(nèi)部質(zhì)量何為編碼風(fēng)格程序員在編碼時(shí)要遵循特定的樣式及要求,以規(guī)范程序員的編程行為以及所產(chǎn)生程序代碼的樣式示例:遵循編碼風(fēng)格沒有遵循編碼風(fēng)格遵循編碼風(fēng)格編寫代碼的基本原則易讀,一看就懂理解代碼的內(nèi)涵和意圖望文生義的符號(hào)、縮進(jìn)和括號(hào)、代碼注釋,遵循編碼風(fēng)格簡(jiǎn)明,減低復(fù)雜度避繁就簡(jiǎn)、不用goto語(yǔ)句、減少嵌套層數(shù)、簡(jiǎn)單算法易改,便于維護(hù)便于修改程序代碼、增加新的代碼封裝、參數(shù)化、模塊化、隱藏、常元無(wú)二義,不產(chǎn)生歧義不要讓人產(chǎn)生誤解編碼風(fēng)格-代碼布局縮進(jìn),用好Tab鍵用括號(hào)來(lái)表示優(yōu)先級(jí)斷行處的{}if(condition){ DoSomething();}else{ DoSomething();}一行至多只一條語(yǔ)句不要在一行定義多個(gè)變量編碼風(fēng)格-代碼組織按一定次序來(lái)說明數(shù)據(jù)按字母順序說明對(duì)象盡可能避免使用嵌套結(jié)構(gòu)采用統(tǒng)一的縮進(jìn)規(guī)則單入口單出口編碼風(fēng)格-命名規(guī)范采用有意義、一目了然的命名方式變/常/函數(shù)/方法/類/包一看就懂,望文生義無(wú)意義的命名i,j,x,y有意義的命名szPathvPrintName()bReturn編碼風(fēng)格-命名命名通則使用英文單詞或縮寫,不要使用拼音望文知義原則,含義清晰、明確命名不要過長(zhǎng)盡量使用全稱,少用縮寫不規(guī)范的命名DaYinWenJian與PrintFile編碼風(fēng)格-命名命名和大小寫類/類型/變量:用名詞和名詞短語(yǔ),所有單詞第一個(gè)字母大寫函數(shù)/方法:動(dòng)詞或者動(dòng)詞短語(yǔ),第一個(gè)單詞小寫,隨后單詞第一個(gè)字母大寫示例:Member,ProductInfo,getName(),setName(),renderPage()不規(guī)范的命名變量:print;方法:Print()編碼風(fēng)格-代碼注釋幫助理解程序注釋要說明程序:(1)做什么;(2)為什么這么做;(3)注意事項(xiàng)無(wú)需解釋程序如何做注解位置類頭、函數(shù)/函數(shù)頭、關(guān)鍵語(yǔ)句塊頭、關(guān)鍵語(yǔ)句尾有效、必要、簡(jiǎn)潔的注釋太少和過多均不可取注釋要可理解、準(zhǔn)確、無(wú)二義隨代碼的修改而修改編碼風(fēng)格示例注釋命名布局結(jié)構(gòu)編碼風(fēng)格的相關(guān)書籍C++編程風(fēng)格Java編程風(fēng)格代碼整潔之道推崇CleanCode不同程序設(shè)計(jì)語(yǔ)言有不同的編碼風(fēng)格要求討論:編碼風(fēng)格這二段代碼風(fēng)格如何?哪些做的好,還存在哪些問題?你編寫代碼時(shí)注意風(fēng)格了嗎?2.3采用程序設(shè)計(jì)方法語(yǔ)句設(shè)計(jì)模塊化設(shè)計(jì)高內(nèi)聚度、低耦合度原則代碼設(shè)計(jì)規(guī)范-語(yǔ)句設(shè)計(jì)單入口單出口少用goto語(yǔ)句加強(qiáng)對(duì)異常處理分析和驗(yàn)證輸入?yún)?shù)正確性,如名字不為空,年齡大于0少于150執(zhí)行結(jié)果處理,設(shè)置必要斷言來(lái)分析
如p=AllocateNewSpace(); Assert(p!=NULL); if(p!=NULL){ …… }處理異常語(yǔ)句Try{…}catch(Exceptione){…}將更多的時(shí)間、精力和代碼放在處理異常上代碼設(shè)計(jì)規(guī)范-模塊化設(shè)計(jì)模塊是邏輯上相對(duì)獨(dú)立、具有良定義接口的編程單位模塊可表現(xiàn)為函數(shù)、過程、方法、類、程序包等將程序代碼封裝為一個(gè)個(gè)獨(dú)立的模塊代碼設(shè)計(jì)規(guī)范-高內(nèi)聚度模塊內(nèi)各要素緊密相關(guān),僅實(shí)現(xiàn)單一功能如果模塊內(nèi)多個(gè)要素關(guān)系不密切,需分解產(chǎn)生多個(gè)模塊ABCABCD分解模塊D內(nèi)部包含若干關(guān)系松散的要素經(jīng)過分解得到若干松耦合的模塊代碼設(shè)計(jì)規(guī)范-低耦合度模塊間的關(guān)系應(yīng)設(shè)計(jì)的非常松散如果多個(gè)模塊間的關(guān)系非常密切,可將這些模塊合并為一個(gè)模塊BACABC經(jīng)過合并得到內(nèi)聚度高的模塊D若干關(guān)系緊密的模塊示例:采用程序設(shè)計(jì)方法語(yǔ)句設(shè)計(jì)模塊化高內(nèi)聚度低耦合度2.4代碼重用何為代碼重用在編寫代碼過程中,充分利用已有和現(xiàn)成的代碼,并將其集成到程序之中,從而來(lái)實(shí)現(xiàn)程序功能代碼重用有何好處由于被重用的代碼經(jīng)過多次反復(fù)的使用,代碼質(zhì)量得到充分檢驗(yàn),因而代碼重用不僅可提高編程效率,而且還可有效提升程序質(zhì)量為什么代碼重用可以提高代碼的質(zhì)量?示例:函數(shù)、類和軟構(gòu)件重用C函數(shù)庫(kù)MFC類庫(kù)(MicrosoftFoundationClasses)Java軟件開發(fā)包機(jī)器人操作系統(tǒng)(ROS)的節(jié)點(diǎn)軟構(gòu)件MFC類庫(kù)示例:代碼片段重用尋找他人實(shí)現(xiàn)某些子功能的代碼片段可在StackOverflow上尋找到有價(jià)值的代碼片段,并加以重用開源代碼重用到Github中找到粗粒度的代碼開源幾萬(wàn)、甚至幾十萬(wàn)的程序代碼重用開源代碼來(lái)實(shí)現(xiàn)粗粒度的功能完成諸如數(shù)據(jù)庫(kù)管理、圖像識(shí)別、語(yǔ)音分析等功能思考和討論你在編程時(shí)是否有軟件重用?你開展了那些方面和粒度的軟件重用?2.5結(jié)對(duì)編程(Pair-Programming)兩位程序員(或智能體)坐在同一工作臺(tái)前一起開發(fā)軟件一人扮演“領(lǐng)航員”角色,負(fù)責(zé)具體編寫工作,如寫程序一人扮演“觀察者”角色,負(fù)責(zé)觀察行為及結(jié)果,如看程序,發(fā)現(xiàn)問題二者相互討論,共同完成編程任務(wù)大模型時(shí)代基于智能體的結(jié)對(duì)編程軟件開發(fā)智能體軟件工程師人機(jī)協(xié)同開發(fā)Copilot等基于智能化的編程助手(如CopilotX),人機(jī)協(xié)同編程會(huì)成為趨勢(shì)越來(lái)越多程序員使用CopilotX等智能化工具進(jìn)行軟件開發(fā),AIPair編程正在成為新的編程范式,幫助程序員編代碼、單元測(cè)試、調(diào)試、寫文檔等個(gè)體開發(fā)的局限性個(gè)體知識(shí)和技能的局限性沒有人無(wú)所不能有專長(zhǎng),但很難做到面面俱到總會(huì)有不懂、不會(huì)的個(gè)體開發(fā)行為的局限性人總是會(huì)犯錯(cuò)誤的,錯(cuò)誤很難避免老虎也有打旽的時(shí)候,注意力不集中就會(huì)犯錯(cuò)誤很難看到或者看清自身的錯(cuò)誤軟件開發(fā)是集體性/群體性行為團(tuán)隊(duì)開發(fā)多人參與、具有共同目的、明確任務(wù)分工合作開發(fā)相互支持、互相配合、共同解決問題群體開發(fā)利用大眾的力量、借助大眾的智慧和成果拋棄個(gè)人主義/英雄主義單槍匹馬難成大事、單干/蠻干容易出事現(xiàn)實(shí)世界的結(jié)對(duì)示例駕駛員作戰(zhàn)員駕駛員領(lǐng)航員如何實(shí)現(xiàn)結(jié)對(duì)編程職責(zé)明確一人寫設(shè)計(jì)文檔、編寫程序和單元測(cè)試等等一人審閱文檔、復(fù)審程序代碼、考慮單元測(cè)試的覆蓋率、是否需要重構(gòu)、解決具體的技術(shù)問題等等互換角色不要連續(xù)超過工作1小時(shí),提高效率主動(dòng)參與開展討論、解決問題、做出貢獻(xiàn)編程行為及其特點(diǎn)快速完成盡快得到可運(yùn)行軟件系統(tǒng)、盡早交付給用戶、快速應(yīng)對(duì)需求變化多種技能工具和環(huán)境程序設(shè)計(jì)語(yǔ)言業(yè)務(wù)領(lǐng)域知識(shí)編碼規(guī)范和設(shè)計(jì)規(guī)范質(zhì)量要求正確性、可讀性、可維護(hù)性等編程包袱:效率和質(zhì)量問題結(jié)對(duì)寫程序任務(wù)編寫程序代碼方式一人寫一人復(fù)審規(guī)范性、正確性、可讀性等討論改進(jìn)與提高如增加注釋、更改名稱等結(jié)對(duì)編程中的代碼復(fù)審結(jié)對(duì)編程是一個(gè)不斷“復(fù)審”代碼的過程每一行代碼都被二雙眼睛看過,被二個(gè)腦子思考過代碼隨著改動(dòng)不斷地被復(fù)審每個(gè)人的一舉一動(dòng)(編碼行為)不斷地被另一個(gè)人審查,確保過程和活動(dòng)置于監(jiān)督之下,迫使認(rèn)真工作,防止隨意行為促進(jìn)“頻繁”交流,提高個(gè)人能力和素養(yǎng)結(jié)對(duì)寫文檔任務(wù)撰寫計(jì)文檔方式一人寫一人復(fù)審規(guī)范、正確、合理性等討論改進(jìn)和完善如文檔格式、語(yǔ)言表達(dá)、圖表、錯(cuò)別字結(jié)對(duì)做測(cè)試任務(wù)軟件測(cè)試方式運(yùn)行測(cè)試用例,收集測(cè)試結(jié)果一人寫一人復(fù)審和幫助完整性、代表性、適當(dāng)性等討論完善和提升結(jié)對(duì)編程帶來(lái)的好處提高程序質(zhì)量提供更好的設(shè)計(jì)質(zhì)量和代碼質(zhì)量合作解決問題能力強(qiáng),1+1>2提升開發(fā)效率開發(fā)人員更加信心有效地避免了閉門造車更易于發(fā)現(xiàn)問題和糾正問題促進(jìn)學(xué)習(xí)交流有效的學(xué)習(xí),做中學(xué)效果更好相互學(xué)習(xí)和分享經(jīng)驗(yàn)更好應(yīng)對(duì)人員流動(dòng),一個(gè)走了另一個(gè)人可以替換上結(jié)對(duì)編程可以獲得更高的投入/產(chǎn)出比思考和討論如何在閱讀、分析和維護(hù)開源軟件實(shí)踐中應(yīng)用結(jié)對(duì)編程的方法?有何實(shí)踐經(jīng)驗(yàn)可供分享??jī)?nèi)容程序及質(zhì)量要求程序及其內(nèi)部和外部質(zhì)量程序質(zhì)量保證方法編碼規(guī)范、設(shè)計(jì)方法、代碼重用、結(jié)對(duì)編程程序質(zhì)量的分析方法人工審查、自動(dòng)化分析、代碼測(cè)試編寫程序需要解決的問題需要工程化的方法支持3.1程序代碼中潛在的質(zhì)量問題質(zhì)量問題編寫不合理
–沒有遵循編碼規(guī)范設(shè)計(jì)不合理
–沒有遵循設(shè)計(jì)規(guī)范代碼有錯(cuò)誤–代碼編寫的不正確
原因受軟件開發(fā)人員經(jīng)驗(yàn)和水平的限制人可能會(huì)犯錯(cuò)誤,人為引入錯(cuò)誤
你編寫的代碼是否存在問題?存在哪些方面的問題?代碼質(zhì)量分析的常用方法人工審查(CodeReview)方法自動(dòng)化分析方法(AutomatedAnalysis)程序測(cè)試(Test)方法3.2人工審查代碼方法描述閱讀和理解代碼發(fā)現(xiàn)缺陷和問題提出改進(jìn)的建議方法特點(diǎn)人工審查效率低難以發(fā)現(xiàn)一些深層次問題難以全面地進(jìn)行系統(tǒng)分析人工審查些什么?代碼是否符合編程規(guī)范代碼中是否存在缺陷邏輯錯(cuò)誤,“+”寫成“-”算法錯(cuò)誤,不夠優(yōu)化、邊界條件沒有處理好潛在錯(cuò)誤,當(dāng)前修改導(dǎo)致以前修復(fù)的錯(cuò)誤重現(xiàn)從質(zhì)量的角度哪些代碼需要改進(jìn)包括內(nèi)部質(zhì)量和外部質(zhì)量讀別人編寫的高質(zhì)量代碼能讓你受益匪淺讀低質(zhì)量的代碼能讓你非常痛苦人工審查-誰(shuí)負(fù)責(zé)審查自我復(fù)審,效果不一定好同伴復(fù)審,常用方法
結(jié)對(duì)編程團(tuán)隊(duì)復(fù)審,團(tuán)隊(duì)成員參加3.3自動(dòng)化工具審查-代碼靜態(tài)分析由計(jì)算機(jī)軟件來(lái)自動(dòng)完成代碼審查無(wú)需運(yùn)行被測(cè)代碼,僅通過分析或檢查程序的語(yǔ)法、結(jié)構(gòu)、過程、接口等來(lái)檢查程序30%-
70%的代碼缺陷可通過靜態(tài)分析發(fā)現(xiàn)分析什么找出代碼隱藏的錯(cuò)誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語(yǔ)句,錯(cuò)誤的遞歸,非法計(jì)算,可能出現(xiàn)的空指針引用等等程序遵循編碼規(guī)范的程度特點(diǎn)快速定位、有效發(fā)現(xiàn)隱藏的錯(cuò)誤和缺陷自動(dòng)化代碼分析工具SonarQubeCheckStyleFindBugsPMDJtestCodeArtsCheck(華為)SonarQube概述基于Web、用于管理程序代碼質(zhì)量的代碼靜態(tài)分析工具可以插件的形式集成到眾多的軟件開發(fā)環(huán)境(如Eclipse)支持二十多種程序設(shè)計(jì)語(yǔ)言代碼的質(zhì)量分析SonarQube可分析的質(zhì)量問題是否違反編碼規(guī)則是否存在靜態(tài)常規(guī)缺陷模塊、方法、類的復(fù)雜度是否過高是否存在重復(fù)的代碼代碼的注釋是否恰當(dāng)和充分統(tǒng)計(jì)和分析代碼的單元測(cè)試覆蓋率判斷軟件體系結(jié)構(gòu)設(shè)計(jì)是否合理SonarQube分析發(fā)現(xiàn)的問題類別Bug(錯(cuò)誤)中等影響如參數(shù)不夠Vulnerability(脆弱點(diǎn))影響大如漏洞CodeSmell(代碼異味)影響小如風(fēng)格SonarQube分析報(bào)告代碼審查后要做的工作理解發(fā)現(xiàn)和指出的問題修改和更正有問題代碼對(duì)于無(wú)法很快更正的錯(cuò)誤,要把錯(cuò)誤的信息記錄下來(lái),以便適當(dāng)?shù)臅r(shí)候能夠更正3.4軟件測(cè)試技術(shù)程序本質(zhì)上是對(duì)數(shù)據(jù)的處理設(shè)計(jì)數(shù)據(jù)(測(cè)試用例)
運(yùn)行測(cè)試用例(程序來(lái)處理數(shù)據(jù))
判斷運(yùn)行結(jié)果(是否符合預(yù)期結(jié)果)運(yùn)行代碼程序代碼等設(shè)計(jì)測(cè)試數(shù)據(jù)結(jié)果評(píng)價(jià)預(yù)期結(jié)果軟件缺陷為軟件測(cè)試而設(shè)計(jì)的數(shù)據(jù)稱為測(cè)試用例(TestCase)測(cè)試用例實(shí)際結(jié)果軟件測(cè)試的目的和任務(wù)2356417缺陷盡可能多找出軟件中缺陷軟件系統(tǒng)軟件缺陷可能隱藏的比較深,難以發(fā)現(xiàn)軟件測(cè)試示例一個(gè)加法器程序功能:給定二個(gè)數(shù)字,將其相加,然后輸出設(shè)計(jì)測(cè)試數(shù)據(jù)<1,2,3><-1,1,0><0,0,0>運(yùn)行測(cè)試程序輸入數(shù)據(jù),查看運(yùn)行結(jié)果,判斷是否與預(yù)期結(jié)果一致如果不一致就意味著有錯(cuò)誤思考和討論在你的編程實(shí)踐中,你是采用何種方式來(lái)檢查代碼質(zhì)量、發(fā)現(xiàn)代碼問題的??jī)?nèi)容程序及質(zhì)量要求程序及其內(nèi)部和外部質(zhì)量程序質(zhì)量保證方法編碼規(guī)范、設(shè)計(jì)方法、代碼重用、結(jié)對(duì)編程程序質(zhì)量的分析方法人工審查、自動(dòng)化分析、代碼測(cè)試編寫程序需要解決的問題需要工程化的方法支持程序編寫面臨的挑戰(zhàn)!程序功能從何而來(lái)?誰(shuí)以及如何來(lái)確定軟件功能?軟件規(guī)模很大怎么辦?500LOCvs1MLOC軟件功能變化如何改寫代碼?在哪里改、如何改?如何保證程序質(zhì)量?能否想到代碼的質(zhì)量問題,如何保證光靠腦子思考能解決程序編寫的問題嗎?思考和討論如何明確功能、劃分模塊?如何編寫代碼、確保質(zhì)量?對(duì)于規(guī)模較大應(yīng)用能行嗎?面臨什么樣的困難和問題?需要尋找系統(tǒng)化、工程化的方法指導(dǎo)!
軟件工程拓展閱讀軟件科學(xué)與工程-學(xué)科發(fā)展戰(zhàn)略,梅宏等著,高等教育出版社,2021.人月神話(40周年中文紀(jì)念版,F(xiàn)rederick,P.Brooks[美],清華大學(xué)出版社,2015.課后作業(yè)和課程實(shí)訓(xùn)訪問/paths/1944完成第二章“從程序到軟件”的實(shí)訓(xùn)闖關(guān)任務(wù)本章知識(shí)圖譜小結(jié)程序的多種質(zhì)量要求外在和內(nèi)在、語(yǔ)法和語(yǔ)義確保代碼質(zhì)量的方法編碼規(guī)范、設(shè)計(jì)方法、代碼重用、結(jié)對(duì)編程分析、發(fā)現(xiàn)和審查代碼人工審查、靜態(tài)分析、程序測(cè)試學(xué)會(huì)編寫高質(zhì)量的程序代碼需要借助行之有效的、系統(tǒng)化方法的指導(dǎo)課后的實(shí)踐任務(wù)開展基于結(jié)對(duì)的代碼分析和維護(hù)實(shí)踐閱讀和掌握編碼風(fēng)格Java、C/C++編程風(fēng)格,要求學(xué)以致用熟練掌握SonarQube工具安裝和使用,分析開源軟件的代碼質(zhì)量開展課程實(shí)踐閱讀、理解和分析開源軟件的代碼質(zhì)量提交代碼的質(zhì)量分析報(bào)告思考:如何編寫高質(zhì)量的程序代碼綜合實(shí)踐一任務(wù):選取或指定待閱讀、分析和維護(hù)的開源軟件。方法訪問Github、碼云Gitee、SourceForge等開源軟件托管平臺(tái),從中檢索到符合上述要求的開源軟件,下載或克隆開源軟件代碼,閱讀開源軟件的相關(guān)文檔來(lái)安裝、部署和運(yùn)行開源軟件。以二人為一組、采用結(jié)對(duì)方式來(lái)開展本綜合實(shí)踐要求所選取或指定的開源軟件要求功能易于理解、代碼質(zhì)量高、規(guī)模適中(5000-20000行代碼量),也可以直接指定“MiNote”便簽管理開源軟件作為閱讀、分析和維護(hù)的對(duì)象。結(jié)果:獲得開源軟件源代碼,并可運(yùn)行和操作該開源軟件。綜合實(shí)踐二任務(wù):查看和分析開源軟件方法訪問Github、SourceForge、Gitee等開源軟件托管平臺(tái)或Apache、Eclipse等開源軟件基金會(huì)平臺(tái),從中檢索自己感興趣的開源軟件,閱讀相關(guān)的軟件文檔,下載安裝開源軟件要求結(jié)合自己的興趣,查看有那些開源軟件,分析這些軟件的功能和定位、存在的缺陷和不足結(jié)果:掌握開源軟件托管平臺(tái)的使用方法,大致了解感興趣的開源軟件情況思考和討論你是否意識(shí)到程序質(zhì)量的重要性?你認(rèn)為高質(zhì)量的程序應(yīng)該是什么樣的?怎樣才能得到高質(zhì)量的程序代碼?問題和討論軟件及其特點(diǎn)軟件工程內(nèi)容軟件軟件的概念、特點(diǎn)、組成及生命周期開源軟件開源軟件實(shí)踐,托管平臺(tái)和社區(qū),開源許可證軟件質(zhì)量軟件質(zhì)量要素及模型軟件特征的變化地位、運(yùn)行環(huán)境、形態(tài)、復(fù)雜性建設(shè)狗窩和建設(shè)大廈的區(qū)別建設(shè)狗窩的特點(diǎn)簡(jiǎn)單質(zhì)量要求不高一個(gè)人就可完成建設(shè)大廈的特點(diǎn)復(fù)雜質(zhì)量高要求很高需要團(tuán)隊(duì)合作才能完成簡(jiǎn)單、小規(guī)模程序規(guī)模在萬(wàn)行代碼量復(fù)雜、大規(guī)模程序數(shù)十萬(wàn)行以上代碼量1.1從程序到軟件-工程開發(fā)的啟發(fā)應(yīng)用(如火車票購(gòu)買、酒店預(yù)訂、網(wǎng)上購(gòu)物)編寫程序通過一個(gè)步驟就將程序?qū)懗鰜?lái)不現(xiàn)實(shí)了解需求設(shè)計(jì)圖紙進(jìn)場(chǎng)施工采用工程化的方法來(lái)解決工程開發(fā)的問題編寫出程序需要經(jīng)歷諸多的步驟應(yīng)用(如火車票購(gòu)買、酒店預(yù)訂、網(wǎng)上購(gòu)物)分析軟件需求設(shè)計(jì)軟件系統(tǒng)編寫程序代碼文檔數(shù)據(jù)代碼不可或缺相互依存要編寫出高質(zhì)量的程序需要循序漸進(jìn)地開展工作運(yùn)行維護(hù)程序1.2何為軟件?軟件(Software)是指在計(jì)算機(jī)系統(tǒng)的支持下,能夠完成特定功能與性能的程序(Program)、數(shù)據(jù)(Data)和相關(guān)文檔(Document)
文檔數(shù)據(jù)代碼++從開發(fā)的角度看軟件的構(gòu)成軟件制品(SoftwareArtifact)何為文檔?記錄軟件開發(fā)活動(dòng)和階段性成果、軟件配置及變更的闡述性資料定義和理解軟件記錄軟件開發(fā)成果輔助不同人員間的交流有哪些方面的文檔軟件需求文檔–記錄需求軟件設(shè)計(jì)文檔–記錄設(shè)計(jì)軟件測(cè)試文檔–記錄測(cè)試軟件用戶手冊(cè)–記錄使用……闡述性資料為什么需要文檔?原因軟件開發(fā)牽涉多方面的工作,需要記錄下來(lái)任何事都記在腦子里,記不住,不便于保存任何事都放在腦子里,理不清,不便于分析任何事都存在腦子里,講不明,不便于交流編寫文檔目的闡述清楚:內(nèi)容、邏輯性、條理性發(fā)現(xiàn)問題:完整、一致、矛盾開展交流:便于各種人員的交流促進(jìn)管理:管理軟件開發(fā)成果編碼活動(dòng)的成果記錄為程序代碼其他活動(dòng)的成果記錄為軟件文檔示例:軟件設(shè)計(jì)文檔空巢老人智能看護(hù)系統(tǒng)設(shè)計(jì)文檔何為數(shù)據(jù)?數(shù)據(jù)是程序的加工處理對(duì)象和結(jié)果需要處理哪些數(shù)據(jù)如何來(lái)獲得這些數(shù)據(jù)如何來(lái)表示這些數(shù)據(jù)如何來(lái)存儲(chǔ)和檢索數(shù)據(jù)如何來(lái)傳輸數(shù)據(jù)網(wǎng)上商城中的手機(jī)及其數(shù)據(jù)數(shù)據(jù)示例數(shù)據(jù)形式用戶、訂單、交易、日志數(shù)據(jù)數(shù)據(jù)處理表示、獲取、存儲(chǔ)、檢索、分析軟件運(yùn)行的本質(zhì)就是對(duì)數(shù)據(jù)的處理,有些數(shù)據(jù)是用戶提供的,有些數(shù)據(jù)是軟件產(chǎn)生的思考和討論:12306軟件的數(shù)據(jù)哪些數(shù)據(jù)是由用戶提供的?以用戶注冊(cè)和購(gòu)票為例哪些數(shù)據(jù)是由軟件產(chǎn)生的?以用戶注冊(cè)和購(gòu)票為例沒有數(shù)據(jù)軟件會(huì)怎么樣?從開發(fā)者的角度看軟件的構(gòu)成可執(zhí)行部分不可執(zhí)行部分文檔數(shù)據(jù)數(shù)據(jù)文檔程序構(gòu)成軟件的三類成分作用不同,但都不可或缺1.3軟件概念給我們的啟示軟件程序軟件涉及更多制品這些制品間有關(guān)聯(lián)、相互依賴開發(fā)軟件編寫程序軟件開發(fā)需要做更多事情對(duì)軟件提出更高的要求軟件開發(fā)的再認(rèn)識(shí)開發(fā)具有一定規(guī)模和復(fù)雜性的軟件系統(tǒng)與編寫一個(gè)簡(jiǎn)單的程序不一樣建設(shè)簡(jiǎn)單平房vs建設(shè)高樓大廈挖一條小溝vs建設(shè)一條南水北調(diào)渠道軟件的規(guī)模和復(fù)雜性意味著要采用行之有效的方法—工程方法何為工程化方法?開發(fā)軟件vs編寫程序1.4軟件生命周期萬(wàn)物均有生命周期(Lifecycle)人:嬰兒、幼兒、兒童、少年、…樹:發(fā)芽、育苗、結(jié)果、枯萎、死亡、….青蛙:受精卵、蝌蚪、去掉尾巴的青蛙…軟件生命周期(SoftwareLifecycle)軟件從提出開發(fā)開始到最終滅亡所經(jīng)歷的時(shí)期不同階段具有不同的特征?CopyrightXinjunMao101軟件生命周期(1/2)從提出開發(fā)開始到開發(fā)出系統(tǒng)、運(yùn)行維護(hù)以及最終退役的全過程軟件的生命周期(2/2)每個(gè)階段會(huì)產(chǎn)生不同的軟件制品What軟件需求是什么How如何構(gòu)造出軟件How編寫程序代碼軟件是否缺陷部署軟件運(yùn)行軟件的本質(zhì)軟件的目的性:服務(wù)于客戶或用戶,滿足他們的要求軟件的組成性:程序+文檔+數(shù)據(jù)軟件的系統(tǒng)性:軟件是一類系統(tǒng),有諸多相關(guān)聯(lián)的要素軟件的駐留性:依賴于計(jì)算系統(tǒng)的軟硬件設(shè)施來(lái)支撐運(yùn)行示例:軟件的駐留性和系統(tǒng)性1.5軟件特點(diǎn)邏輯性邏輯產(chǎn)品,思維活動(dòng)(而非物理活動(dòng))的結(jié)果、不會(huì)磨損和老化設(shè)計(jì)開發(fā)是設(shè)計(jì)開發(fā)而成的,不是生產(chǎn)制造而成的易變性需求經(jīng)常變、難以把控,影響軟件的制品即開發(fā)過程復(fù)雜性規(guī)模大:代碼行、模塊、介入人員、進(jìn)程、數(shù)據(jù)等數(shù)量非常大運(yùn)行復(fù)雜:狀態(tài)很難追蹤和復(fù)現(xiàn)缺陷的隱蔽性缺陷隱藏在邏輯代碼中,不像硬件系統(tǒng)那樣直觀顯現(xiàn),很難被人們所發(fā)現(xiàn)和排除討論:對(duì)比軟件和硬件對(duì)比軟件和硬件的特點(diǎn)表現(xiàn)形式開發(fā)范式需求變化復(fù)雜性系統(tǒng)缺陷軟件系統(tǒng)硬件系統(tǒng)vs軍用軟件的特殊性運(yùn)行環(huán)境更復(fù)雜和多樣與物理系統(tǒng)(如飛機(jī))緊密聯(lián)系在一起對(duì)實(shí)時(shí)性和質(zhì)量(如可靠性)提出更高要求對(duì)自身防護(hù)能力(如安全性)提出更高要求需具備更強(qiáng)的靈活性、適應(yīng)性和健壯性軍用軟件:導(dǎo)彈中的飛行控制軟件、指揮信息系統(tǒng)、后勤保障軟件等1.6軟件的分類應(yīng)用軟件面向特定應(yīng)用領(lǐng)域的專用軟件。它們針對(duì)相關(guān)行業(yè)和領(lǐng)域的特定問題,為其提供基于計(jì)算的新穎解決方案。示例:淘寶、12306、攜程、微信、QQ等軟件系統(tǒng)軟件對(duì)計(jì)算機(jī)資源進(jìn)行管理,為應(yīng)用軟件的運(yùn)行提供基礎(chǔ)設(shè)施和服務(wù)的一類軟件。從計(jì)算服務(wù)的視角,系統(tǒng)軟件介于計(jì)算機(jī)硬件和應(yīng)用軟件之間。示例:操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)、編譯軟件、軟件中間件等支撐軟件輔助軟件開發(fā)和運(yùn)維,幫助開發(fā)人員完成軟件開發(fā)和維護(hù)工作的一類軟件示例:SonarQube、VisualStudio、Eclipse等軟件的分類類別服務(wù)對(duì)象軟件的功能發(fā)揮的作用應(yīng)用軟件行業(yè)和領(lǐng)域應(yīng)用的用戶為特定行業(yè)和領(lǐng)域問題解決提供基于軟件解決方案,創(chuàng)新應(yīng)用領(lǐng)域的問題解決模式提供更為便捷、快速、高效的服務(wù)系統(tǒng)軟件各類應(yīng)用軟件為應(yīng)用軟件運(yùn)行和維護(hù)提供基礎(chǔ)設(shè)施和服務(wù),如加載、通訊、互操作、管理等作為應(yīng)用軟件的運(yùn)行環(huán)境支撐軟件軟件開發(fā)者和維護(hù)者為軟件系統(tǒng)的開發(fā)和維護(hù)提供自動(dòng)和半自動(dòng)的支持提高軟件開發(fā)效率和質(zhì)量討論:你所知道的各類軟件系統(tǒng)系統(tǒng)軟件應(yīng)用軟件支撐軟件內(nèi)容軟件軟件的概念、特點(diǎn)、組成及生命周期開源軟件開源軟件實(shí)踐,托管平臺(tái)和社區(qū),開源許可證軟件質(zhì)量軟件質(zhì)量要素及模型當(dāng)前軟件特征的變化地位、運(yùn)行環(huán)境、形態(tài)、復(fù)雜性*2.1閉源軟件何為閉源軟件軟件代碼不對(duì)用戶開放的一類軟件,購(gòu)買軟件時(shí)只提供可運(yùn)行軟件或服務(wù),沒有提供源代碼以許可證(License)的方式授權(quán)用戶使用軟件閉源軟件帶來(lái)的問題無(wú)法掌握軟件內(nèi)部實(shí)現(xiàn)情況(如是否存在安全漏洞和惡意代碼),也無(wú)法對(duì)軟件進(jìn)行修改和完善,極大影響了開發(fā)者的創(chuàng)新自由示例微軟的Windows、Office軟件,典型企業(yè):微軟、IBM、Oracle等2.2開源軟件何為開源軟件一種源代碼可以自由獲取和傳播的計(jì)算機(jī)軟件,其擁有者通過開源許可證賦予被許可人對(duì)軟件進(jìn)行使用、修改和傳播海量、高質(zhì)量和有影響力的開源軟件操作系統(tǒng)Linux、Ubuntu、麒麟、鴻蒙、OpenEuler等數(shù)據(jù)庫(kù)系統(tǒng)MySQL、PostgreSQL、MongoDB、Redis等開發(fā)平臺(tái)Eclipse、Junit、SonarQube、Kubernetes等人工智能Tensorflow、Opencv、Caffe、Deeplearning4j等網(wǎng)絡(luò)安全Nmap、curityOnion、Suricata、Bro等……你能枚舉出其他的開源軟件嗎?開源軟件正逐步替代閉源軟件服務(wù)器操作系統(tǒng)領(lǐng)域Linux、FreeBSD等==》Unix桌面操作系統(tǒng)領(lǐng)域Linux、麒麟等==》Windows操作系統(tǒng)數(shù)據(jù)庫(kù)領(lǐng)域MySql、PostgreSQL等==》Oracle、DB2瀏覽器領(lǐng)域Chrome、Firefox等==》IE、開發(fā)工具領(lǐng)域Eclipse、Sonar等
==》VisualStudio開源軟件與閉源軟件的對(duì)決你能枚舉出其他方向的開源軟件與閉源軟件的對(duì)決快速增長(zhǎng)的開源軟件數(shù)量Github上的開源軟件倉(cāng)庫(kù)()2023年Github上有3億多的開源軟件倉(cāng)庫(kù)開源軟件帶來(lái)的好處源代碼可自由傳播免費(fèi)使用降低成本激發(fā)創(chuàng)作者的熱情快速開發(fā)搭建系統(tǒng)開源軟件的推動(dòng)者政府組織NASA開源200多軟件項(xiàng)目,美國(guó)和印度等政府鼓勵(lì)采用開源軟件我國(guó)政府將開源列入十四五國(guó)民經(jīng)濟(jì)和社會(huì)發(fā)展五年規(guī)劃綱要開源組織Apache基金會(huì)、Linux基金會(huì)、Eclipse基金會(huì)、OpenSourceInitiative開放原子開源基金會(huì)(
)IT企業(yè)Google、Microsoft、IBM、Oracle等國(guó)外企業(yè)以及華為、騰訊、阿里巴巴、百度、浪潮、聯(lián)想等國(guó)內(nèi)企業(yè)軟件開發(fā)者LinusTorvalds,Github上有6500多萬(wàn)的程序員Apache軟件基金會(huì)組織特點(diǎn)成立于1999年的非盈利性組織所管理的開源軟件項(xiàng)目都遵循Apache許可證組織構(gòu)成管理有約2.27億行代碼和350多個(gè)開源軟件項(xiàng)目擁有800多名基金會(huì)成員,4萬(wàn)多代碼貢獻(xiàn)者,48萬(wàn)個(gè)體代表性開源軟件ApacheHTTPServer、Derby、Hadoop、Lucene、Tomcat、Ant、Maven等Google主導(dǎo)的開源軟件項(xiàng)目移動(dòng)操作系統(tǒng)Android機(jī)器學(xué)習(xí)系統(tǒng)TensorFlow容器集群管理系統(tǒng)Kubernetes網(wǎng)站前端開發(fā)工具集MDLWeb前端框架Angular基于Chrome瀏覽器的開發(fā)環(huán)境SparkJava常用庫(kù)Guava、Java編譯器Traceur…..開放原子開源基金會(huì)
2020年6月在北京成立,由阿里巴巴、百度、華為、浪潮、360、騰訊等多家龍頭科技企業(yè)聯(lián)合發(fā)起開源項(xiàng)目孵化平臺(tái)科技公益性服務(wù)機(jī)構(gòu)打造開源開放框架搭建國(guó)際開源社區(qū)典型的開源項(xiàng)目OpenHarmony(華為)TencentOSTiny(騰訊)……
/思考和討論開源軟件會(huì)帶來(lái)什么好處?為什么那么多的企業(yè)和個(gè)人關(guān)注和參與開源軟件?開源軟件是如何開發(fā)出來(lái)的?2.3開源軟件托管平臺(tái)托管服務(wù)創(chuàng)建軟件倉(cāng)庫(kù)支持協(xié)同開發(fā)軟件質(zhì)量保證……代表性托管平臺(tái)GithubSourceForgeGitee……開源軟件托管平臺(tái)-GithubGithub是全球最有影響力的開源軟件托管平臺(tái),目前由微軟負(fù)責(zé)經(jīng)營(yíng)
開源軟件托管平臺(tái)-SourceForge一個(gè)有影響力的開源軟件開發(fā)平臺(tái)和倉(cāng)庫(kù),為開源軟件提供存儲(chǔ)、協(xié)作和發(fā)布的支持
開源軟件托管平臺(tái)-Gitee中國(guó)的開源軟件托管平臺(tái)匯聚了國(guó)內(nèi)眾多的開發(fā)者和主要軟件企業(yè)的開源軟件項(xiàng)目,如華為OpenHarmony操作系統(tǒng)、百度的PaddlePaddle等軟件開發(fā)知識(shí)分享社區(qū)-StackOverflow全球最大的軟件開發(fā)知識(shí)分享平臺(tái),它支持開發(fā)者交流和討論軟件開發(fā)問題、分享軟件開發(fā)經(jīng)驗(yàn)和知識(shí),進(jìn)而促進(jìn)相關(guān)開發(fā)問題的解決,推動(dòng)開源軟件的開發(fā)
軟件開發(fā)知識(shí)分享社區(qū)-CSDN中國(guó)的軟件開發(fā)知識(shí)分享社區(qū)技術(shù)博客、學(xué)習(xí)社區(qū)、代碼托管等2.4開源軟件的優(yōu)勢(shì)采購(gòu)和開發(fā)的成本更低開源軟件通常是免費(fèi)的,即使要付費(fèi),其費(fèi)用也非常低廉軟件質(zhì)量更高、更安全核心代碼都在公眾的視野之中,代碼問題(如缺陷、安全漏洞等)很容易被人發(fā)現(xiàn)軟件研制和交付的更快基于開源軟件的項(xiàng)目開發(fā)可以更為快速地給用戶交付軟件產(chǎn)品軟件功能更為強(qiáng)大大量的軟件開發(fā)者不僅參與軟件開發(fā),貢獻(xiàn)他們的代碼,而且還參與軟件的創(chuàng)新,提出和構(gòu)思軟件需求,不斷完善軟件功能為什么開源軟件具有這些優(yōu)勢(shì)?2.5開源軟件許可證何為開源許可證聲明獲得開源代碼后擁有的權(quán)利,界定對(duì)別人的開源作品進(jìn)行何種操作、何種操作是被禁止的,規(guī)范開源軟件的使用要求和約束為什么需要開源許可證開發(fā)者雖然可自由地獲取開源軟件的源代碼,但在如何使用開源軟件方面還需要遵循相關(guān)的開源軟件協(xié)議嘗試在開源軟件的自由創(chuàng)新與創(chuàng)業(yè)利益之間達(dá)成某種平衡既支持開發(fā)者基于開源軟件進(jìn)行創(chuàng)新,也保護(hù)貢獻(xiàn)者和創(chuàng)新者的相關(guān)利益,同時(shí)尋求某些商業(yè)運(yùn)作模式,促進(jìn)開源軟件長(zhǎng)期、持續(xù)和良性的發(fā)展二類許可證寬松式開源許可證對(duì)用戶的限制很少,用戶甚至可以將修改后的開源代碼后閉源。三方面特點(diǎn):代碼使用沒有任何限制;用戶自擔(dān)代碼質(zhì)量的風(fēng)險(xiǎn);用戶使用開源軟件時(shí)須披露原始作者BSD、Apache、MIT等都屬于寬松式許可證類別Copyleft式開源許可證“Copyleft”是Copyright反義詞,意指可不經(jīng)許可隨意復(fù)制更多限制,帶有許多條件和要求,比如分發(fā)二進(jìn)制代碼時(shí)須提供源代碼,修改后的開源軟件須與之前保持一致的許可證等GPL、MPL等屬于Copyleft許可證類別Apache開源許可證Apache許可證的要求該軟件及其衍生品須繼續(xù)使用Apache許可協(xié)議如果修改了程序源代碼,需要在文檔中進(jìn)行聲明若軟件是基于他人源代碼編寫而成的,則需要保留原始代碼的協(xié)議、商標(biāo)、專利聲明及其他原作者聲明的內(nèi)容信息如果再發(fā)布的軟件中有聲明文件,則需在此文件中標(biāo)注Apache許可協(xié)議及其他許可協(xié)議遵循Apache許可證的開源軟件Hadoop、ApacheHTTPServer、MongoDB等開源軟件GPL開源許可證許可證的要求自由復(fù)制,對(duì)復(fù)制的數(shù)量和去處不做限制自由傳播,允許軟件以各種形式進(jìn)行傳播收費(fèi)傳播,允許出售該軟件,但必須讓買家知道這個(gè)軟件是可免費(fèi)獲得的修改自由,允許開發(fā)者增加或刪除軟件功能,但修改后的軟件必須依然采用GPL許可證遵循GPL許可協(xié)議的開源軟件Linux不同許可證的差別
修改源碼后是否可閉源
經(jīng)修改后的源碼是否需版權(quán)說明是否可用開源軟件名字促銷衍生代碼可以不可以新增源碼是否需遵循同樣許可
是否需要對(duì)源代碼修改提供說明不需要需要可以MIT許可證BSD許可證不可以Apache許可證LGPL許可證MPL許可證GPL許可證需要不需要需要不需要弱約束強(qiáng)約束2.5開源軟件的利用學(xué)習(xí)開源軟件不僅反映了核心開發(fā)者的功能創(chuàng)意,而且還蘊(yùn)含了高水平的軟件開發(fā)技能,如架構(gòu)設(shè)計(jì)、編碼風(fēng)格、模塊封裝等重用開源代碼開源軟件構(gòu)成了支撐軟件開發(fā)的可重用軟件資源庫(kù),可實(shí)現(xiàn)更大粒度的軟件重用,支持信息系統(tǒng)的快速構(gòu)建參與開源建設(shè),掌握開源技術(shù),理解開源文化包括反饋軟件缺陷、提出軟件需求、討論問題解決、貢獻(xiàn)程序代碼等等示例:學(xué)習(xí)小米便簽開源軟件模塊化設(shè)計(jì)、接口設(shè)計(jì)、編碼規(guī)范等示例:基于開源軟件來(lái)快速低成本構(gòu)建信息系統(tǒng)個(gè)人計(jì)算系統(tǒng)如麒麟操作系統(tǒng)、7-Zip移動(dòng)計(jì)算系統(tǒng)如android、鴻蒙、MaterialFiles、Seal大數(shù)據(jù)和云服務(wù)系統(tǒng)如Linux、Hadoop、Spark、Apache、MySQL和Nginx示例:基于開源軟件來(lái)快速低成本構(gòu)建信息系統(tǒng)重用和集成開源軟件來(lái)快速搭建高質(zhì)量的系統(tǒng)Instagram(abbr.Instanttelegram)軟件,實(shí)現(xiàn)基于移動(dòng)設(shè)備的照片和視頻共享、在線服務(wù)軟件5個(gè)軟件工程師,用了十多款開源軟件,8周時(shí)間就出打造最初Instagram/wiki/Instagram提高軟件開發(fā)效率和質(zhì)量的有效手段軟件產(chǎn)業(yè)界的高度關(guān)注和積極參與*社會(huì)需要大量高質(zhì)量的開源人才78%公司基于開源運(yùn)行;少于3%公司完全不使用開源64%公司參與開源;超過66%公司優(yōu)先考慮利用開源89%的公司認(rèn)為利用開源大幅度提高了軟件創(chuàng)新速度貢獻(xiàn)開源和利用開源已成為工業(yè)界的廣泛共識(shí)和實(shí)踐,逐漸成為一種重要的軟件開發(fā)模式-《2015開源軟件年度調(diào)查》當(dāng)前幾乎所有的主要IT企業(yè)都在參與開源軟件實(shí)踐,包括微軟微軟、IBM、Google、Oracle、Intel、FaceBook、華為、阿里、騰訊、百度等開源軟件的利用學(xué)習(xí)開源軟件掌握高水平軟件開發(fā)技能,如架構(gòu)設(shè)計(jì)、編碼風(fēng)格、模塊封裝等重用開源軟件快速搭建信息系統(tǒng)建設(shè)開源軟件增加功能、解決缺陷開源軟件是有國(guó)界的2019年美國(guó)Google終止華為使用Android生態(tài)不允許Android開源軟件的更新不能使用GooglePlay商店、Gmail、地圖等應(yīng)用和服務(wù)華為不得不構(gòu)建自己的鴻蒙生態(tài)建設(shè)我國(guó)的開源軟件及其生態(tài)2021年,開源首次寫入《中華人民共和國(guó)國(guó)民經(jīng)濟(jì)和社會(huì)發(fā)展第十四個(gè)五年規(guī)劃和2035年遠(yuǎn)景目標(biāo)綱要》國(guó)務(wù)院印發(fā)《“十四五”數(shù)字經(jīng)濟(jì)發(fā)展規(guī)劃》提出支持具有自主核心技術(shù)的開源社區(qū)、開源平臺(tái)、開源項(xiàng)目推動(dòng)創(chuàng)新資源共建共享促進(jìn)創(chuàng)新模式開放化演進(jìn)工業(yè)和信息化部印發(fā)《“十四五”軟件和信息技術(shù)服務(wù)業(yè)發(fā)展規(guī)劃》系統(tǒng)布局“十四五”開源生態(tài)發(fā)展我國(guó)開源軟件實(shí)踐及成果項(xiàng)目名稱類別發(fā)起單位開源社區(qū)OpenHarmonyOS華為/openharmonyMindSporeAI華為/mindsporePaddlePaddleAI百度/paddlepaddleopenEulerOS華為/openeuleropenGaussDB華為/opengaussWeUI開發(fā)騰訊/Tencent/WeuiTiDBDBPingCAP/pingcap優(yōu)麒麟OS麒麟軟件/ubuntukylinOceanBaseDB螞蟻/oceanbaseOpenCloudOSOS騰訊/OpenCloudOSIoTDBDB清華大學(xué)/apache/iotdb?_from=gitee_search討論:介紹一款你所知道的開源軟件軟件名稱提供功能編程語(yǔ)言開發(fā)群體代碼量托管平臺(tái)軟件利用……內(nèi)容軟件軟件的概念、特點(diǎn)、組成及生命周期開源軟件開源軟件實(shí)踐,托管平臺(tái)和社區(qū),開源許可證軟件質(zhì)量軟件質(zhì)量要素及模型當(dāng)前軟件特征的變化地位、運(yùn)行環(huán)境、形態(tài)、復(fù)雜性3.1軟件質(zhì)量軟件質(zhì)量是指軟件滿足給定需求的程度,它是軟件的生命線軟件質(zhì)量同樣可分為內(nèi)部質(zhì)量和外部質(zhì)量3.2軟件質(zhì)量要素(1/3)正確性(Correctness)軟件滿足規(guī)格說明和用戶要求的程度,即在預(yù)定環(huán)境下能正確地完成預(yù)期功能和非功能需求的程度。可靠性(Reliability)在規(guī)定條件下、限定時(shí)間范圍內(nèi),軟件系統(tǒng)完成預(yù)期功能、不引起系統(tǒng)故障的能力。健壯性(Robustness)在計(jì)算環(huán)境發(fā)生故障、輸入無(wú)效數(shù)據(jù)或操作錯(cuò)誤等意外情況下,軟件仍能做出適當(dāng)響應(yīng)的程度。有效性(Efficiency)軟件利用計(jì)算資源和存儲(chǔ)資源以實(shí)現(xiàn)其功能的能力。軟件質(zhì)量要素(2/3)安全性包括系統(tǒng)安全(Safety)和信息安全(Security),系統(tǒng)安全是指軟件能及時(shí)有效地避免給人員、設(shè)施、環(huán)境、經(jīng)濟(jì)等造成損害,信息安全是指軟件能有效防控各類的非法獲取、傳播和使用可維護(hù)性(Maintainability)是否易于對(duì)其進(jìn)行修改以更正錯(cuò)誤、增強(qiáng)功能、適應(yīng)新運(yùn)行環(huán)境可移植性(Portability)把軟件從一種運(yùn)行環(huán)境轉(zhuǎn)移到另一種運(yùn)行環(huán)境下運(yùn)行的難易程度可重用性(Reusability)軟件模塊、構(gòu)件、設(shè)計(jì)方案等在其他軟件開發(fā)中被再次使用程度軟件質(zhì)量要素(3/3)可理解性(Comprehensibility)軟件開發(fā)者或用戶理解該軟件系統(tǒng)的容易程度可信性(Dependability)采取有效措施確認(rèn)軟件滿足人們的要求和期望持續(xù)性(Sustainability)面對(duì)各種突發(fā)異常事件,仍能提供令人滿意的服務(wù)的能力可用性(Usability)使用和操作軟件系統(tǒng)難以程度互操作性(Interoperability)軟件系統(tǒng)與其他的系統(tǒng)進(jìn)行交換信息、協(xié)同工作的能力2019年華為公司發(fā)布的第一號(hào)文件“全面提升軟件工程能力與實(shí)踐,打造可信的高質(zhì)量產(chǎn)品”把可信作為第一優(yōu)先級(jí),放在功能、特性和進(jìn)度之上可信軟件的基本要求安全性以抗擊攻擊,保護(hù)業(yè)務(wù)和數(shù)據(jù)的機(jī)密性、完整性和可用性韌性(Resilience)以確保系統(tǒng)受攻擊時(shí)仍能保持良好的運(yùn)行狀態(tài),具有快速恢復(fù)的能力隱私性(Privacy)以保護(hù)用戶的數(shù)據(jù)及其隱私可靠性和可用性以確保軟件產(chǎn)品長(zhǎng)期無(wú)故障運(yùn)行,具備快速恢復(fù)和自我管理的能力,提供可預(yù)期的、一致的服務(wù)。內(nèi)容軟件軟件的概念、特點(diǎn)、組成及生命周期開源軟件開源軟件實(shí)踐,托管平臺(tái)和社區(qū),開源許可證軟件質(zhì)量軟件質(zhì)量要素及模型當(dāng)前軟件特征的變化地位、運(yùn)行環(huán)境、形態(tài)、復(fù)雜性*4.1軟件的地位和作用深入到社會(huì)、經(jīng)濟(jì)、生活的方方面面,無(wú)處不在作為一種創(chuàng)新的工具,深刻地改變各個(gè)行業(yè)和領(lǐng)域,創(chuàng)新問題解決模式和方式,影響人們?nèi)粘W(xué)習(xí)、生活和工作“12306”改變了購(gòu)票方式,淘寶和京東改變了購(gòu)物方式軟件是實(shí)現(xiàn)行業(yè)和領(lǐng)域進(jìn)行信息化融合和改造,實(shí)現(xiàn)創(chuàng)新性發(fā)展的使能技術(shù)和重要利器企業(yè)信息化改造,圖書借閱等軟件已經(jīng)成為人類社會(huì)的關(guān)鍵性基礎(chǔ)設(shè)施就像電力、交通設(shè)施一樣,發(fā)揮基礎(chǔ)性的作用4.2軟件運(yùn)行環(huán)境的變化和發(fā)展154大中小型機(jī)的計(jì)算平臺(tái)基于局域網(wǎng)的分布計(jì)算平臺(tái)基于互聯(lián)網(wǎng)的計(jì)算平臺(tái)基于PC的計(jì)算平臺(tái)無(wú)處不在的計(jì)算從前端的PC終端、可穿戴設(shè)備、智能手機(jī)到后端的云中心、高性能計(jì)算中心從孤立、獨(dú)立、局域和可控的計(jì)算環(huán)境到分布、開放、動(dòng)態(tài)、難控、無(wú)處不在計(jì)算環(huán)境4.3軟件形態(tài)不是單一系統(tǒng),而是系統(tǒng)之系統(tǒng)諸多系統(tǒng)聯(lián)盟和組合而成不僅是社會(huì)技術(shù)系統(tǒng),還是一種生態(tài)系統(tǒng)社會(huì)、信息、物理等要素共存不是同構(gòu)系統(tǒng),而是異構(gòu)、多樣的系統(tǒng)聯(lián)盟要素異構(gòu),客觀存在,也是必然不在封閉環(huán)境,而在開放環(huán)境中環(huán)境和系統(tǒng)相互作用,環(huán)境開放如互聯(lián)網(wǎng)、戰(zhàn)場(chǎng)環(huán)境不是封閉系統(tǒng),而是動(dòng)態(tài)適應(yīng)系統(tǒng)要素、關(guān)系、聯(lián)盟等持續(xù)變化,邊界不明確軟件形態(tài)-社會(huì)技術(shù)系統(tǒng)由人、社會(huì)組織、物理設(shè)備、過程等要素共同組成和相互作用的人機(jī)物共生系統(tǒng)軟件系統(tǒng)無(wú)法單獨(dú)存在,需與物理、社會(huì)系統(tǒng)交互作用軟件形態(tài)-系統(tǒng)之系統(tǒng)由一組面向任務(wù)、服務(wù)于不同對(duì)象的子系統(tǒng)構(gòu)成每個(gè)子系統(tǒng)可獨(dú)立運(yùn)作并能提供相對(duì)獨(dú)立功能整個(gè)系統(tǒng)通過各獨(dú)立系統(tǒng)間交互來(lái)實(shí)現(xiàn)全局任務(wù)系統(tǒng)2系統(tǒng)1系統(tǒng)4系統(tǒng)3系統(tǒng)n軟件形態(tài)-分布式異構(gòu)系統(tǒng)擁有大量形式多樣、地理或者邏輯上是分布的,分散部署在互聯(lián)網(wǎng)上的軟件實(shí)體軟件實(shí)體的分布性是必須的,因?yàn)樵絹?lái)越多的應(yīng)用本身就是分布的,軟件實(shí)體的分布性有助于提高軟件系統(tǒng)的可靠性和安全性構(gòu)成軟件系統(tǒng)的軟件實(shí)體通常是異構(gòu)的,異構(gòu)性是一種必然軟件形態(tài)-動(dòng)態(tài)演化系統(tǒng)系統(tǒng)的邊界和需求的不確定性和持續(xù)演變性動(dòng)態(tài)開放的特點(diǎn)軟件系統(tǒng)需要根據(jù)外部環(huán)境的變化而不斷地調(diào)整自身,包括系統(tǒng)的體系結(jié)構(gòu)和交互協(xié)作等等,進(jìn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32/T 4540-2023水產(chǎn)養(yǎng)殖業(yè)污染物控制技術(shù)規(guī)范
- 康復(fù)科醫(yī)療質(zhì)量管理職責(zé)
- 小學(xué)一年級(jí)數(shù)學(xué)知識(shí)鞏固計(jì)劃
- 人教版八年級(jí)物理實(shí)驗(yàn)教學(xué)計(jì)劃評(píng)估
- 內(nèi)科急救醫(yī)療質(zhì)量與安全管理計(jì)劃
- 中小學(xué)教師心理健康知識(shí)普及心得體會(huì)
- 2025年大學(xué)生自主學(xué)習(xí)計(jì)劃
- 高校外語(yǔ)與普通話結(jié)合教學(xué)總結(jié)及改進(jìn)措施
- 如何在職場(chǎng)中找到適合自己的職業(yè)道路
- 員工薪資福利與企業(yè)戰(zhàn)略目標(biāo)一致性策略
- 2025年計(jì)算機(jī)二級(jí)MySQL經(jīng)典試題及答案
- 《研究生就業(yè)指導(dǎo)課件(說課)》
- 北京2025年商務(wù)部直屬事業(yè)單位第二批招聘169人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年武漢鐵路局集團(tuán)招聘(180人)筆試參考題庫(kù)附帶答案詳解
- 2025-2030全球及中國(guó)免疫磁珠行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 2025統(tǒng)編版(2024)小學(xué)道德與法治一年級(jí)下冊(cè)《第13課-快樂兒童節(jié)》教學(xué)設(shè)計(jì)
- 2025冶金工業(yè)信息標(biāo)準(zhǔn)研究院招聘筆試參考題庫(kù)附帶答案詳解
- 三方協(xié)議空白合同
- 擋煙垂壁施工合同
- 社工招聘筆試題目及答案
- 【MOOC】當(dāng)代社會(huì)中的科學(xué)與技術(shù)-南京大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論