軟件工程原理與實(shí)踐(碩士)課件匯 沈備軍 06-12 軟件架構(gòu)設(shè)計(jì)-軟件工程新進(jìn)展_第1頁(yè)
軟件工程原理與實(shí)踐(碩士)課件匯 沈備軍 06-12 軟件架構(gòu)設(shè)計(jì)-軟件工程新進(jìn)展_第2頁(yè)
軟件工程原理與實(shí)踐(碩士)課件匯 沈備軍 06-12 軟件架構(gòu)設(shè)計(jì)-軟件工程新進(jìn)展_第3頁(yè)
軟件工程原理與實(shí)踐(碩士)課件匯 沈備軍 06-12 軟件架構(gòu)設(shè)計(jì)-軟件工程新進(jìn)展_第4頁(yè)
軟件工程原理與實(shí)踐(碩士)課件匯 沈備軍 06-12 軟件架構(gòu)設(shè)計(jì)-軟件工程新進(jìn)展_第5頁(yè)
已閱讀5頁(yè),還剩436頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

高級(jí)軟件工程

SoftwareEngineering軟件架構(gòu)設(shè)計(jì)軟件架構(gòu)設(shè)計(jì)軟件架構(gòu)是一系列重要決策的集合,這些決策關(guān)于:軟件系統(tǒng)的組織;組成系統(tǒng)的結(jié)構(gòu)元素和它們之間的接口,以及當(dāng)這些元素相互協(xié)作時(shí)所體現(xiàn)的行為;如何組合這些些元素,使它們逐漸合成為更大的子系統(tǒng);架構(gòu)風(fēng)格;這些元素以及它們的接口、協(xié)作和組合。Architecturedecisionsarethemostfundamentaldecisions,andchangingthemwillhavesignificanteffects.ArchitectureDesignImplementationCode2軟件架構(gòu)的主要建模方法文本語(yǔ)言建模方法基于非規(guī)范的圖形表示的建模方法該圖形表示不具有嚴(yán)格的標(biāo)準(zhǔn),較為隨意,具有一定方便交流的作用。如:盒線圖(Box-LineDiagram)、PowerPoint風(fēng)格圖形等基于UML/SysML的建模方法

半形式化方法,UML/SysML

作為一個(gè)工業(yè)化標(biāo)準(zhǔn)的軟件建模語(yǔ)言,支持多角度、多層次、多方面的建模需求,支持?jǐn)U展,并有強(qiáng)大的工具支持基于AADL的建模方法半形式化方法,AADL是一個(gè)實(shí)時(shí)嵌入式軟件系統(tǒng)的架構(gòu)建模語(yǔ)言,適用于航天航空、汽車、自動(dòng)化、醫(yī)療、核能等領(lǐng)域基于形式化的建模方法例如Petri-Net3軟件架構(gòu)設(shè)計(jì)的內(nèi)容架構(gòu)設(shè)計(jì)的內(nèi)容:設(shè)計(jì)軟件架構(gòu)的多個(gè)視圖物理視圖、邏輯視圖、進(jìn)程視圖、開(kāi)發(fā)視圖、技術(shù)視圖、數(shù)據(jù)視圖等選擇軟件質(zhì)量屬性的設(shè)計(jì)策略性能、可靠性、安全性、可移植性、可擴(kuò)展性等架構(gòu)設(shè)計(jì)的目標(biāo):使得軟件系統(tǒng)在架構(gòu)層面的設(shè)計(jì)上滿足擬建軟件的功能性和非功能性需求402-質(zhì)量因素的架構(gòu)設(shè)計(jì)戰(zhàn)術(shù)01-軟件架構(gòu)的多個(gè)視圖邏輯視圖部署視圖進(jìn)程視圖開(kāi)發(fā)視圖技術(shù)視圖數(shù)據(jù)視圖03-軟件架構(gòu)的質(zhì)量5SoftwareArchitecture:The“4+1View”ModelProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

6LogicalView(邏輯視圖)ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

7Example1:Logicalview缺陷預(yù)測(cè)系統(tǒng)8基于非規(guī)范的圖形表示的建模方法Example2:LogicalviewMiddleware<<layer>>BaseReuseglobalApplication<<layer>>BusinessServices<<layer>>NecessarybecausetheApplicationLayermusthaveaccesstothecoredistributionmechanismsprovidedwithJavaRMI.選課系統(tǒng)9基于UML的建模方法SecurityGUIFrameworkSecureInterfacesApplication<<layer>>BusinessServices<<layer>><<layer>>Application<<layer>>BusinessServicesExample:ApplicationLayerUniversityArtifactsRegistrationExternalSystemInterfaces10Middleware<<layer>>BusinessServices<<layer>>Example:BusinessServicesLayerContextjava.sqlcom.odi<<layer>>

MiddlewareBillingSystem<<subsystem>>CourseCatalogSystem<<subsystem>>ExternalSystemInterfacesUniversityArtifactsObjectStoreSupport<<layer>>

BusinessServicesGUIFrameworkSecureInterfacesSecurity<<subsystem>>SecurityManager11Example3:Logicalview12基于AADL的建模方法Example:飛行控制系統(tǒng)AADL架構(gòu)13如何才能設(shè)計(jì)出好的軟件架構(gòu)?14復(fù)用現(xiàn)有的成功設(shè)計(jì)方案──設(shè)計(jì)模式(DesignPattern)的復(fù)用!軟件設(shè)計(jì)模式1987年,模式的思想被引入軟件工程方法學(xué)中。1995年,以ErichGamma為首的四人組(GangofFour,GoF)歸納發(fā)表了23種在軟件開(kāi)發(fā)中使用頻率較高的設(shè)計(jì)模式,出版了《DesignPatterns:ElementsofReusableObject-OrientedSoftware》一書。軟件設(shè)計(jì)的模式分類架構(gòu)風(fēng)格Architecturalstyle例如分層架構(gòu)風(fēng)格、MVC風(fēng)格設(shè)計(jì)模式Designpattern例如Facade模式、工廠模式、單例模式編程慣用Idiom例如Java多線程編程模式15基于邏輯架構(gòu)風(fēng)格進(jìn)行邏輯視圖的設(shè)計(jì)表現(xiàn)層分離風(fēng)格:MVC數(shù)據(jù)流風(fēng)格(Dataflow):批處理序列、管道-過(guò)濾器風(fēng)格(Pipe-and-Filter)調(diào)用/返回風(fēng)格:主程序/子程序、面向?qū)ο箫L(fēng)格(ADT)、多層(Layer)分布計(jì)算風(fēng)格:多層(Tier)、代理、C/S、P2P獨(dú)立構(gòu)件風(fēng)格:事件響應(yīng)、消息總線、服務(wù)和微服務(wù)虛擬機(jī)風(fēng)格:解釋器、基于規(guī)則的系統(tǒng)倉(cāng)庫(kù)風(fēng)格:數(shù)據(jù)庫(kù)系統(tǒng)、超文本系統(tǒng)、黑板系統(tǒng)自適應(yīng)風(fēng)格:微內(nèi)核、反射、控制反饋……161)MVC

模型Model:管理系統(tǒng)中存儲(chǔ)的數(shù)據(jù)和業(yè)務(wù)規(guī)則,并執(zhí)行相應(yīng)的計(jì)算功能。視圖View:根據(jù)模型生成提供給用戶的交互界面,不同的視圖可以對(duì)相同的數(shù)據(jù)產(chǎn)生不同的界面。控制器Control:接收用戶輸入,通過(guò)調(diào)用模型獲得響應(yīng),并通知視圖進(jìn)行用戶界面的更新。172)管道和過(guò)濾器(PipesandFilters)Inthisstyle,eachcomponenthasasetofinputsandasetofoutputs.Acomponentreadsstreamsofdataonitsinputsandproducesstreamsofdataonitsoutput.18舉例Linux的Shell程序可以看做是典型的管道與過(guò)濾器架構(gòu)的例子例如下面的Shell腳本:$catTestResults|sort|grepGood

會(huì)將TestResults文件的文本進(jìn)行排序,然后找出其中包含單詞Good的行,并顯出在屏幕上。Shell命令cat、sort和grep依次執(zhí)行,就構(gòu)成了一個(gè)管道-過(guò)濾器架構(gòu)。19舉例203)面向?qū)ο箫L(fēng)格這種風(fēng)格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個(gè)抽象數(shù)據(jù)類型或?qū)ο笾?。這種風(fēng)格的構(gòu)件是對(duì)象,或者說(shuō)是抽象數(shù)據(jù)類型的實(shí)例。對(duì)象是一種被稱作管理者的構(gòu)件,因?yàn)樗?fù)責(zé)保持資源的完整性。對(duì)象是通過(guò)函數(shù)和過(guò)程的調(diào)用來(lái)交互的。214)層次架構(gòu)(layeredarchitecture)風(fēng)格GeneralfunctionalitySpecificfunctionalityDistinctapplicationsubsystemsthatmakeupanapplication—containsthevalueaddingsoftwaredevelopedbytheorganization.Businessspecific—containsanumberofreusablesubsystemsspecifictothetypeofbusiness.Middleware—offerssubsystemsforutilityclassesandplatform-independentservicesfordistributedobjectcomputinginheterogeneousenvironmentsandsoon.Systemsoftware—containsthesoftwarefortheactualinfrastructuresuchasoperatingsystems,interfacestospecifichardware,devicedrivers,andsoon.ApplicationSubsystemsBusiness-SpecificMiddlewareSystemSoftware上一層依賴下一層22不斷提取共性!沉淀成為一層軟件保持應(yīng)用軟件的復(fù)雜性相對(duì)穩(wěn)定應(yīng)用軟件應(yīng)用軟件操作系統(tǒng)DBMS操作系統(tǒng)應(yīng)用軟件中間件操作系統(tǒng)應(yīng)用軟件DBMS中間件23中間件的分類1)數(shù)據(jù)訪問(wèn)中間件允許應(yīng)用程序和本地或者異地的數(shù)據(jù)庫(kù)進(jìn)行通信,并提供一系列的應(yīng)用程序接口(如ODBC、JDBC等)。該類中間件技術(shù)上最成熟,但局限于與數(shù)據(jù)庫(kù)相關(guān)的應(yīng)用。2)消息中間件可以屏蔽平臺(tái)和協(xié)議上的差異進(jìn)行遠(yuǎn)程通信,實(shí)現(xiàn)應(yīng)用程序之間的協(xié)同,如IBM的MQSeries、BEA的MessageQ、SUN的JMS和微軟的MSMQ等,其優(yōu)點(diǎn)在于提供高可靠的同步和異步通信,缺點(diǎn)在于不同的消息中間件產(chǎn)品之間不能互操作。3)遠(yuǎn)程過(guò)程調(diào)用RPC中間件解決了平臺(tái)異構(gòu)的問(wèn)題,但編程復(fù)雜且不支持異步操作。24中間件的分類(2)4)事務(wù)中間件是在分布、異構(gòu)環(huán)境下提供保證事務(wù)完整性和數(shù)據(jù)完整性的一種平臺(tái),如BEA的TUXEDO、IBM的CICS、微軟的MTS。其優(yōu)勢(shì)在于對(duì)關(guān)鍵業(yè)務(wù)的支持,但機(jī)制復(fù)雜、對(duì)用戶要求較高。5)分布對(duì)象中間件在分布、異構(gòu)的網(wǎng)絡(luò)計(jì)算環(huán)境中,可以將各種分布對(duì)象有機(jī)地結(jié)合在一起,完成系統(tǒng)的快速集成。主流標(biāo)準(zhǔn)有Microsoft的DNA/COM+、OMG的OMA/CORBA、Sun的J2EE/EJB。Weblogic,Websphere,Jboss,.Net等應(yīng)用服務(wù)器都包含了分布對(duì)象中間件,也有如Orbix、HPORB等獨(dú)立產(chǎn)品。6)分布式服務(wù)中間件通過(guò)網(wǎng)絡(luò)對(duì)松散耦合的業(yè)務(wù)服務(wù)進(jìn)行分布式部署、組合和使用。Web服務(wù)中間件,其標(biāo)準(zhǔn)是SOA,應(yīng)用服務(wù)器都包含了Web服務(wù)中間件,也有AXIS2、HPWebServicesPlatform等獨(dú)立產(chǎn)品。微服務(wù)中間件,例如Dubbo。25層次架構(gòu)實(shí)例26數(shù)字出納員ATM出納員付款開(kāi)發(fā)票應(yīng)用系統(tǒng)現(xiàn)金管理帳戶管理發(fā)票管理特定業(yè)務(wù)銀行客戶管理ApplicationServerHPORBPlus中間件NTWorkstationMSSQLServer系統(tǒng)軟件5)3Tiers表示層:負(fù)責(zé)向用戶呈現(xiàn)界面,并接收用戶請(qǐng)求發(fā)送給業(yè)務(wù)邏輯層;業(yè)務(wù)邏輯層:負(fù)責(zé)執(zhí)行業(yè)務(wù)邏輯以處理用戶請(qǐng)求,并調(diào)用數(shù)據(jù)訪問(wèn)層提供的持久性操作;數(shù)據(jù)訪問(wèn)層:負(fù)責(zé)執(zhí)行數(shù)據(jù)庫(kù)持久性操作。27表示層業(yè)務(wù)邏輯層數(shù)據(jù)訪問(wèn)層數(shù)據(jù)庫(kù)舉例286)基于事件的隱式調(diào)用構(gòu)件不直接調(diào)用另一個(gè)構(gòu)件,而是觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其它構(gòu)件訂閱一個(gè)或多個(gè)事件,當(dāng)一個(gè)事件被觸發(fā),系統(tǒng)自動(dòng)調(diào)用訂閱這個(gè)事件的所有構(gòu)件,這樣,一個(gè)事件的觸發(fā)就導(dǎo)致了另一構(gòu)件的調(diào)用。這種風(fēng)格的主要特點(diǎn)是事件的觸發(fā)者并不知道哪些構(gòu)件會(huì)被這些事件影響。29舉例IDE:編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點(diǎn)事件。當(dāng)Debugger在斷點(diǎn)處停下時(shí),它聲明該事件,由系統(tǒng)自動(dòng)調(diào)用處理程序,如編輯器可以卷屏到斷點(diǎn),變量監(jiān)視器刷新變量數(shù)值。而Debugger本身只聲明事件,并不關(guān)心哪些過(guò)程會(huì)啟動(dòng),也不關(guān)心這些過(guò)程做什么處理。307)消息總線系統(tǒng)的連接件,負(fù)責(zé)消息的分派、傳遞和過(guò)濾以及處理結(jié)果的返回。各個(gè)構(gòu)件(或系統(tǒng)、服務(wù)等)掛在消息總線上,向總線訂閱感興趣的消息類型。構(gòu)件根據(jù)需要發(fā)布消息,由消息總線把該消息分派到系統(tǒng)中所有對(duì)此感興趣的消息類型,消息是構(gòu)件之間通信的唯一方式。31舉例328)基于容器的微服務(wù)風(fēng)格33服務(wù)架構(gòu)風(fēng)格服務(wù)的抽象性(基于接口的編程)服務(wù)的自治性(實(shí)現(xiàn)分布式應(yīng)用)服務(wù)間的松耦合式綁定,基于消息進(jìn)行通信單體架構(gòu)VS微服務(wù)架構(gòu)MonolithicapplicationVs.

Microservices34舉例:?jiǎn)误w架構(gòu)(網(wǎng)絡(luò)訂餐系統(tǒng))

35將應(yīng)用程序構(gòu)建為單個(gè)可執(zhí)行和可部署組件隨著業(yè)務(wù)的擴(kuò)張,代碼倉(cāng)庫(kù)急劇膨脹,構(gòu)建和部署變慢,敏捷開(kāi)發(fā)和快速交付很難實(shí)現(xiàn)。舉例:微服務(wù)架構(gòu)(網(wǎng)絡(luò)訂餐系統(tǒng))

36通過(guò)API網(wǎng)關(guān)對(duì)來(lái)自移動(dòng)應(yīng)用的服務(wù)請(qǐng)求進(jìn)行路由圍繞業(yè)務(wù)能力組織服務(wù)服務(wù)數(shù)據(jù)私有基于輕量級(jí)通信協(xié)議的服務(wù)APISpringCloud微服務(wù)開(kāi)發(fā)相關(guān)組件

37Zuul為外部的客戶端應(yīng)用訪問(wèn)后臺(tái)服務(wù)提供了統(tǒng)一的接入點(diǎn),實(shí)現(xiàn)了反向代理和服務(wù)端負(fù)載均衡,同時(shí)還實(shí)現(xiàn)了認(rèn)證、鑒權(quán)、限流等網(wǎng)關(guān)管理功能Eureka服務(wù)端以服務(wù)的形式提供服務(wù)注冊(cè)和發(fā)現(xiàn)功能,客戶端以一種透明的方式為每個(gè)服務(wù)實(shí)例實(shí)現(xiàn)與Eureka服務(wù)端的交互,包括服務(wù)注冊(cè)、心跳消息發(fā)送以及服務(wù)注冊(cè)信息的拉取和本地緩存Ribbon實(shí)現(xiàn)了客戶端負(fù)載均衡,提供了隨機(jī)選擇、輪詢等不同的負(fù)載均衡算法,同時(shí)還實(shí)現(xiàn)了服務(wù)調(diào)用超時(shí)和重試等機(jī)制Hystrix為服務(wù)調(diào)用方實(shí)現(xiàn)了服務(wù)調(diào)用的熔斷降級(jí)功能SpringCloudSecurityOAuth2為客戶端提供認(rèn)證和授權(quán)服務(wù)SpringCloudConfig為微服務(wù)應(yīng)用提供了統(tǒng)一的配置數(shù)據(jù)管理服務(wù)微服務(wù)架構(gòu)風(fēng)格微服務(wù)架構(gòu)風(fēng)格是一種使用一套小服務(wù)來(lái)開(kāi)發(fā)單個(gè)應(yīng)用的方式途徑,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中,通過(guò)輕量的通訊機(jī)制聯(lián)系,經(jīng)常是基于HTTP資源API,這些服務(wù)基于業(yè)務(wù)能力構(gòu)建,能夠通過(guò)自動(dòng)化部署方式獨(dú)立部署,這些服務(wù)自己有一些小型集中化管理,可以是使用不同的編程語(yǔ)言編寫。和SOA不同:SOA倡導(dǎo)粗粒度服務(wù),而它是細(xì)粒度服務(wù)。同時(shí),微服務(wù)采用“智能終端和啞管道”,它們擁有自己的領(lǐng)域邏輯,以類似Unix管道過(guò)濾方式運(yùn)行,接受到一個(gè)請(qǐng)求,使用相應(yīng)的邏輯,產(chǎn)生一個(gè)響應(yīng),這些都可以使用RESTful方式編排,而不是使用復(fù)雜的協(xié)議如WS-Choreography或BPEL或ESB指揮控制。和構(gòu)件不同:它從內(nèi)存方法調(diào)用轉(zhuǎn)換到RPC遠(yuǎn)程方法調(diào)用,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程。優(yōu)點(diǎn):易于敏捷的開(kāi)發(fā)、更新與部署,高度可擴(kuò)展和可靠性38容器微服務(wù)的管理問(wèn)題:因?yàn)榉?wù)通常部署在多個(gè)主機(jī)上,很難持續(xù)跟蹤指定服務(wù)究竟運(yùn)行在某臺(tái)主機(jī)上。因?yàn)槲⒎?wù)架構(gòu)使用的主機(jī)容量往往小于Monolithic架構(gòu),隨著微服務(wù)架構(gòu)不停的橫向擴(kuò)展,主機(jī)數(shù)量將以一個(gè)非??植赖乃俣仍鲩L(zhǎng)。解決方案:容器不同容器共享相同的內(nèi)核,容器的共享和發(fā)布非常簡(jiǎn)單容器之間進(jìn)行了完全的隔離,簡(jiǎn)易了不同語(yǔ)言開(kāi)發(fā)的微服務(wù)代碼部署例如:Docker等39微服務(wù)容器鏡像構(gòu)建及實(shí)例創(chuàng)建

40鏡像描述(如Docker容器的Dockerfile)指定了基礎(chǔ)容器鏡像(其中包含基礎(chǔ)運(yùn)行環(huán)境,例如Java運(yùn)行時(shí)環(huán)境JRE),同時(shí)描述了一些軟件安裝和容器配置指令及容器實(shí)例創(chuàng)建時(shí)的初始化腳本在運(yùn)行階段,每臺(tái)虛擬機(jī)實(shí)例上的容器運(yùn)行時(shí)根據(jù)指令從容器鏡像倉(cāng)庫(kù)中拉去不同服務(wù)的容器鏡像(一般還需要指定版本)然后創(chuàng)建相應(yīng)的容器實(shí)例(其中運(yùn)行著對(duì)應(yīng)的服務(wù)實(shí)例)倉(cāng)庫(kù)中可以包含同一服務(wù)的不同版本的鏡像B容器編排與集群管理

微服務(wù)的容器化部署經(jīng)常需要容器編排和集群管理工具的支持服務(wù)之間經(jīng)常會(huì)存在依賴關(guān)系,同時(shí)服務(wù)還有可能依賴于消息代理和數(shù)據(jù)庫(kù)等基礎(chǔ)服務(wù),因此僅僅以單個(gè)服務(wù)為單位進(jìn)行實(shí)例創(chuàng)建和管理經(jīng)常是不夠的需要將一組相關(guān)的容器作為一個(gè)整體進(jìn)行編排和管理容器編排與集群管理系統(tǒng)DockerCompose:可以在單個(gè)服務(wù)器或主機(jī)上創(chuàng)建并管理多個(gè)容器DockerSwarm:可以在多個(gè)服務(wù)器或主機(jī)上創(chuàng)建并管理容器集群Kubernetes:使用最廣泛的大規(guī)模Docker編排和集群管理工具419)倉(cāng)庫(kù)風(fēng)格和黑板風(fēng)格倉(cāng)庫(kù)風(fēng)格是以數(shù)據(jù)為中心的系統(tǒng)架構(gòu),它細(xì)分為:數(shù)據(jù)庫(kù)系統(tǒng)以數(shù)據(jù)庫(kù)為核心,各個(gè)構(gòu)件存取數(shù)據(jù)。超文本系統(tǒng)用超鏈接的方法,將各種不同空間的文字、圖片等信息組織在一起的網(wǎng)狀文本黑板系統(tǒng)

為參與問(wèn)題解決的知識(shí)源提供了共享的數(shù)據(jù)表示,這些數(shù)據(jù)表示是與應(yīng)用相關(guān)的。在黑板系統(tǒng)中,控制流是由黑板數(shù)據(jù)的狀態(tài)決定的,而并非按照某個(gè)固定的順序執(zhí)行。42黑板系統(tǒng)黑板系統(tǒng)專門針對(duì)沒(méi)有確定的解決方法的問(wèn)題,例如信號(hào)處理和模式識(shí)別,它通過(guò)多個(gè)知識(shí)源的協(xié)作來(lái)解決問(wèn)題,而這種協(xié)作完全是狀態(tài)驅(qū)動(dòng)的,因此各個(gè)知識(shí)源具有公平的機(jī)會(huì)獲取并更新黑板中的狀態(tài)數(shù)據(jù)。黑板系統(tǒng)主要由三部分組成:知識(shí)源。知識(shí)源中包含獨(dú)立的、與應(yīng)用程序相關(guān)的知識(shí),知識(shí)源之間不直接進(jìn)行通訊,它們之間的交互只通過(guò)黑板來(lái)完成。黑板數(shù)據(jù)結(jié)構(gòu)。黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來(lái)組織的解決問(wèn)題的數(shù)據(jù),知識(shí)源通過(guò)不斷地改變黑板數(shù)據(jù)來(lái)解決問(wèn)題??刂???刂仆耆珊诎宓臓顟B(tài)驅(qū)動(dòng),黑板狀態(tài)的改變決定使用的特定知識(shí)。43舉例撞擊地球后產(chǎn)生的爆炸當(dāng)量數(shù)據(jù);第三類專家Expert3在看到新的數(shù)據(jù)后,根據(jù)自己的知識(shí)計(jì)算出了爆炸造成的破壞程度的數(shù)據(jù),以此類推,最終所有的專家在一起得到了小行星撞擊地球的應(yīng)對(duì)方案。在整個(gè)過(guò)程中,控制流完全由黑板中的數(shù)據(jù)驅(qū)動(dòng),這就是黑板架構(gòu)的特點(diǎn)。舉例2:Siri系統(tǒng)最核心部分就是“黑板系統(tǒng)”,驅(qū)動(dòng)調(diào)用大部分其他數(shù)據(jù)、模型和功能。類似于人的記憶系統(tǒng)的“工作記憶”,提供當(dāng)前分析內(nèi)容相關(guān)激活的本體等信息的臨時(shí)存儲(chǔ)以及集成調(diào)用各種模塊進(jìn)行處理。舉例1:在系統(tǒng)中當(dāng)黑板中初始數(shù)據(jù)是第一類專家Expert1根據(jù)自己的知識(shí)計(jì)算的有關(guān)小行星的質(zhì)量、速度和運(yùn)行軌跡等數(shù)據(jù);第二類專家Expert2在看到這些數(shù)據(jù)后,根據(jù)自己的知識(shí)計(jì)算出了小行星4410)解釋器架構(gòu)解釋器架構(gòu)用于仿真當(dāng)前不具備的計(jì)算環(huán)境,通常包含四個(gè)組成部分:用來(lái)解釋偽碼程序的解釋引擎、包含待解釋程序的內(nèi)存、解釋引擎的控制狀態(tài),以及被仿真程序的當(dāng)前狀態(tài):45Example:JVM46基于規(guī)則的架構(gòu)基于規(guī)則的架構(gòu)是一種解釋器架構(gòu)風(fēng)格,它將人類專家的問(wèn)題解決知識(shí)編碼成規(guī)則,這些規(guī)則在系統(tǒng)執(zhí)行計(jì)算滿足指定的條件時(shí)被執(zhí)行或激活,通過(guò)規(guī)則不斷地被執(zhí)行和激活,最終使得問(wèn)題被解決。由于這些規(guī)則不能被計(jì)算機(jī)系統(tǒng)直接執(zhí)行,因此需要通過(guò)解釋器來(lái)解釋它們。4711)微內(nèi)核風(fēng)格微內(nèi)核概念來(lái)源與操作系統(tǒng)領(lǐng)域。微內(nèi)核是提供了操作系統(tǒng)核心功能的內(nèi)核,它只需占用很小的內(nèi)存空間即可啟動(dòng),并向用戶提供了標(biāo)準(zhǔn)接口,以使用戶能夠按照模塊化的方式擴(kuò)展其功能?,F(xiàn)在大多數(shù)操作系統(tǒng)都采用了微內(nèi)核架構(gòu)。4812)開(kāi)環(huán)和閉環(huán)控制風(fēng)格49舉例50DeploymentView(部署視圖)TheDeploymentViewisan“architecturallysignificant”sliceoftheDeploymentModel.ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

51又稱為物理視圖部署架構(gòu)風(fēng)格Client/Server3-tierFatClientFatServerDistributedClient/ServerServerlessPeer-to-peer(P2P)52Thinnerclient,thickerserverDatabaseServer(s)ApplicationBusinessObjectServicesClientABusinessObjectEngineClientCWWWBrowserClientBApplicationWebServerHTMLCGIASPJavaBusinessObjectServicesBusinessObjectEngineBusinessObjectServicesBusinessObjectEngineBusinessObjectServerDCOMADO/RCORBABeansCOMMTSBeansETS1)Client/ServerArchitectures53Example1:DeploymentDiagraminUML<<legacyRDBMS>>CourseCatalog<<CampusLAN>><<CampusLAN>><<CampusLAN>><<applicationserver>>RegistrationServer<<clientworkstation>>PCBillingSystem<<legacy>>0..200011111選課系統(tǒng)C/S54Example2:B/S和C/S混搭應(yīng)用實(shí)例:B/S結(jié)構(gòu)和C/S結(jié)構(gòu)組合——“內(nèi)外有別”模型55應(yīng)用實(shí)例:B/S結(jié)構(gòu)和C/S結(jié)構(gòu)組合——“查改有別”模型56Example3:DeploymentDiagram環(huán)境遠(yuǎn)程監(jiān)控系統(tǒng)57Example4:物聯(lián)網(wǎng)的云邊端一體化架構(gòu)58云是指位于核心網(wǎng)中具有高可擴(kuò)展的強(qiáng)大算力的計(jì)算中心;邊緣側(cè)是在移動(dòng)網(wǎng)絡(luò)邊緣部署的服務(wù)器,它們靠近產(chǎn)生數(shù)據(jù)的移動(dòng)終端,具備一定的數(shù)據(jù)存儲(chǔ)和處理能力;端通常是指移動(dòng)終端,它們具有更為受限的存儲(chǔ)和計(jì)算能力,但是會(huì)產(chǎn)生大量的數(shù)據(jù)和數(shù)據(jù)處理任務(wù)。2)Serverless架構(gòu)風(fēng)格Serverless是一種基于互聯(lián)網(wǎng)的技術(shù)架構(gòu),采用FAAS(FunctionasaService)架構(gòu),通過(guò)功能組合來(lái)實(shí)現(xiàn)應(yīng)用程序邏輯。同時(shí),Serverless架構(gòu)能夠讓開(kāi)發(fā)者在構(gòu)建應(yīng)用的過(guò)程中無(wú)需關(guān)注計(jì)算資源的獲取和運(yùn)維,由平臺(tái)來(lái)按需分配計(jì)算資源并保證應(yīng)用執(zhí)行的SLA,按照調(diào)用次數(shù)進(jìn)行計(jì)費(fèi),有效節(jié)省應(yīng)用成本。Serverless特點(diǎn):彈性伸縮、按需付費(fèi)、事件驅(qū)動(dòng)、無(wú)需運(yùn)維59一個(gè)典型的C/S三層應(yīng)用程序轉(zhuǎn)變?yōu)?0基于無(wú)服務(wù)器架構(gòu)的應(yīng)用在無(wú)服務(wù)器架構(gòu)中,沒(méi)有單一的傳統(tǒng)后端。通過(guò)API網(wǎng)關(guān),應(yīng)用程序的前端直接與服務(wù)、數(shù)據(jù)庫(kù)或計(jì)算函數(shù)進(jìn)行聯(lián)系。613)P2PArchitecture所有計(jì)算機(jī)節(jié)點(diǎn)都是對(duì)等的,可相互調(diào)用。多種風(fēng)格的混搭?B/S架構(gòu),Server端用P2P架構(gòu)62ProcessView(進(jìn)程視圖)TheProcessViewisan“architecturallysignificant”sliceoftheprocessesandthreadsoftheDesignModelProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

63Example1:ModelingProcesses64composition<<process>>CourseCatalogSystemAccess<<thread>>CourseCache<<process>>CourseRegistrationProcess<<thread>>OfferingCachedependency1111<<process>>StudentApplicationExample2:ModelingProcessesinUML選課系統(tǒng)65進(jìn)程間交互進(jìn)程交互關(guān)系可以使用時(shí)序圖(SequenceDiagram)來(lái)描述交互的參與方激活狀態(tài)(即交互參與方在此期間處于激活狀態(tài))同步請(qǐng)求消息異步請(qǐng)求消息請(qǐng)求返回消息66ImplementationView(開(kāi)發(fā)視圖)ProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemintegratorsSystemtopology

Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure

TheImplementationViewisan“architecturallysignificant”sliceoftheComponentModel.67WhatIsaComponentDiagram?AdiagramthatshowstheorganizationsanddependenciesamongcomponentsCourse68Howmanyviews?SimplifiedmodelstofitthecontextNotallsystemsrequireallviews:Singleprocessor:dropdeploymentviewSingleprocess:dropprocessviewVerySmallprogram:dropimplementationviewAddingviews:Technicalview,Dataview,securityview69技術(shù)視圖Technicalview技術(shù)選型:編程語(yǔ)言操作系統(tǒng)數(shù)據(jù)庫(kù)框架中間件庫(kù)70技術(shù)視圖描述方式:文本技術(shù)視圖在邏輯視圖上標(biāo)注在物理視圖上標(biāo)注選擇合適的編程語(yǔ)言命令式(imperative)語(yǔ)言馮.諾伊曼C,Ada,Fortran…面向?qū)ο骃malltalk,Eiffel,C++,Java…腳本式Perl,Python,PHP…說(shuō)明式(declarative)語(yǔ)言函數(shù)式Lisp/Scheme,ML,Haskell,Clean,Erlang,Miranda…數(shù)據(jù)流Id,Val…邏輯式或基于約束的Prolog,spreedsheets…基于模板的XSLT…量子編程語(yǔ)言Q#,Quipper,Sliq…71編程語(yǔ)言的排名TIOBEProgrammingCommunityIndex(/tiobe-index/)72選擇合適的框架/中間件/庫(kù)1.MVC框架SpringMVC、Struts2、JSF、Grails、GoogleWebToolkit(GWT)2.ORM框架MybatisHibernate、SpringDataJPA3.Web前端框架CSS框架:Bootstrap,F(xiàn)undationJS框架:VUE.JS,React.js,AngularJS,Ember.js4.并行計(jì)算框架

Hadoop,Spark,MapReduce5.服務(wù)與微服務(wù)框架

JAX-RS1.0+Jersey/CXF,SpringCloud,Dubbo6.深度學(xué)習(xí)框架

PyTorch,TensorFlow,Caffe等等73數(shù)據(jù)視圖DataViewItisoptional.IftherearesomepersistentobjectsthatrequirepersistentstorageStorageMechanismsObjectdatabasesRelationaldatabasesNoSQLdatabasesOtherflatfilesXMLstructuresPalmOSPDBfileshierarchicaldatabasesandsoon74RelationalDataModelGenerateRelationalDataModel(conceptualdatamodelorphysicaldatamodel)fromObjectOrientedModelThenimproveitNote:Youcanalsogenerateitduringobjectorientedanalysisphase.75Example:RelationalDataModelERDiagram76O-RMappingTheProblem:Aswithrelationaldatabases,arepresentationmismatchexistsbetweenobjectsandthesenon-object-orientedformats.TheSolution:O-RMappingserviceapersistenceservicetranslateobjectsintorecordsandsavetheminadatabase,andtranslaterecordsintoobjectswhenretrievingfromadatabaseO-RMappingMiddlewareorPersistenceFrameworkSuchasHibernate,iBatis7702-質(zhì)量因素的架構(gòu)設(shè)計(jì)戰(zhàn)術(shù)01-軟件架構(gòu)的多個(gè)視圖03-軟件架構(gòu)的質(zhì)量78質(zhì)量因素的架構(gòu)設(shè)計(jì)戰(zhàn)術(shù)可用性和可靠性戰(zhàn)術(shù)可維護(hù)性戰(zhàn)術(shù)性能戰(zhàn)術(shù)安全性戰(zhàn)術(shù)可測(cè)試性戰(zhàn)術(shù)易用性戰(zhàn)術(shù)79可用性(availability)戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)80錯(cuò)誤檢測(cè)查錯(cuò)方法被動(dòng)式查錯(cuò)在程序中需要進(jìn)行檢查的部位設(shè)置監(jiān)測(cè)點(diǎn),若實(shí)際執(zhí)行結(jié)果滿足接收判斷,則判定程序運(yùn)行正常,否則則出錯(cuò)。主動(dòng)式查錯(cuò)設(shè)計(jì)一個(gè)檢測(cè)監(jiān)視器,在規(guī)定時(shí)間或規(guī)定的時(shí)間間隔內(nèi),或者是在系統(tǒng)處于閑置或等待的狀態(tài)下,主動(dòng)對(duì)系統(tǒng)進(jìn)行檢測(cè)。查錯(cuò)技術(shù)命令/響應(yīng):ping/echo一個(gè)組件發(fā)送ping,期望在預(yù)期時(shí)間內(nèi)收到被審查組件的響應(yīng)心跳:heartbeat組件定期發(fā)送消息(心跳),如果另一個(gè)組件沒(méi)有收到,則通知糾錯(cuò)組件。異常:exceptions異常處理的程序接收判斷:judgment日志和監(jiān)控:logging/monitoring81被動(dòng)式查錯(cuò)原則零信任原則在設(shè)計(jì)任何一個(gè)單元或者模塊時(shí),需要假設(shè)和它相互關(guān)聯(lián)的單元或者模塊存在錯(cuò)誤。當(dāng)該單元或者模塊接收到數(shù)據(jù)時(shí),首先假設(shè)該數(shù)據(jù)是一個(gè)出錯(cuò)數(shù)據(jù),無(wú)論該數(shù)據(jù)來(lái)源于何處,然后盡力去證實(shí)該假設(shè)是否成立。對(duì)硬件錯(cuò)誤進(jìn)行檢測(cè)設(shè)計(jì)例如電源失效、電磁干擾、系統(tǒng)不穩(wěn)定、接口故障、干擾信號(hào)以及錯(cuò)誤操作等的設(shè)計(jì)。數(shù)據(jù)檢測(cè)設(shè)計(jì)按照已知的數(shù)據(jù)極限,檢查數(shù)據(jù)范圍。82錯(cuò)誤恢復(fù)——修復(fù)接收表決,即N版本程序(NVP)技術(shù)冗余處理器的每個(gè)進(jìn)程都有相同的輸入,它們計(jì)算并發(fā)送給表決者一個(gè)輸出值。(如果檢測(cè)到某個(gè)錯(cuò)誤,就停止該處理器)表決規(guī)則可以是“多數(shù)規(guī)則”或“首選組件”等注意多樣性問(wèn)題——冗余組件運(yùn)行不同算法主動(dòng)冗余(熱重啟)所有冗余組件都以并行的方式對(duì)事件做出反應(yīng)(僅用其一)發(fā)生錯(cuò)誤,就切換到某一個(gè)組件利用可靠傳輸協(xié)議,將傳遞給任何一個(gè)冗余組件的消息,都傳遞給其他所有組件被動(dòng)冗余(暖重啟/多重冗余)由一個(gè)組件負(fù)責(zé)對(duì)事件作出響應(yīng),并通知其他組件更新?tīng)顟B(tài)出錯(cuò)后,在繼續(xù)提供服務(wù)之前,確保備用狀態(tài)是最新的可以經(jīng)常切換“主組件”,保持新?tīng)顟B(tài)備件(冷重啟)替換各種的出現(xiàn)故障的組件定期對(duì)備件進(jìn)行備份、設(shè)定檢查點(diǎn),出錯(cuò)后重新初始化?;謴?fù)時(shí)間可能稍長(zhǎng)冗余技術(shù)83示例:航空控制軟件的N版本程序(NVP)設(shè)計(jì)要求

根據(jù)系統(tǒng)安全評(píng)估,軟件級(jí)別分為:A級(jí)軟件:軟件的失效或故障可能導(dǎo)致災(zāi)難性事故發(fā)生;B級(jí)軟件:軟件的失效或故障可能導(dǎo)致危險(xiǎn)性事故發(fā)生;C級(jí)軟件:軟件的失效或故障不會(huì)導(dǎo)致人身安全問(wèn)題,但會(huì)對(duì)機(jī)組造成較大影響;D級(jí)軟件:對(duì)飛行安全的影響已降低到較小的程度;E級(jí)軟件:無(wú)安全影響。NVP設(shè)計(jì)A級(jí)軟件,推薦的失效容限為2,要進(jìn)行5版本程序設(shè)計(jì);B級(jí)軟件,推薦的失效容限為1,要進(jìn)行3版本程序設(shè)計(jì);C和D級(jí),無(wú)需軟件冗余。84錯(cuò)誤恢復(fù)——重新引入影子Shadow以前出現(xiàn)故障的物體,在恢復(fù)之前,模仿工作組件的內(nèi)容狀態(tài)再同步組件重新提供服務(wù)之前,需要更新其狀態(tài)檢查點(diǎn)/回滾使用上一個(gè)一致的檢查點(diǎn)85錯(cuò)誤預(yù)防軟件運(yùn)維時(shí)運(yùn)行監(jiān)測(cè)利用監(jiān)視進(jìn)程檢查進(jìn)程中存在的錯(cuò)誤,監(jiān)視進(jìn)程可以刪除沒(méi)有在運(yùn)行的進(jìn)程。從服務(wù)中刪除執(zhí)行某些活動(dòng),防止預(yù)期可能發(fā)生的錯(cuò)誤重啟,防止內(nèi)存泄露軟件研發(fā)時(shí)減少和控制軟件的程序復(fù)雜度模塊化設(shè)計(jì)冗余設(shè)計(jì)提高數(shù)據(jù)傳遞和轉(zhuǎn)換的精確性改善信息傳遞方式軟件健壯性設(shè)計(jì)事務(wù):將一些有序的步驟綁定為事務(wù)86可維護(hù)性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)87局部化變更維持語(yǔ)義一致性語(yǔ)義,指的是模塊內(nèi)各責(zé)任之間的關(guān)系要確保這些責(zé)任能夠協(xié)調(diào)一致地工作,而不過(guò)多地依賴其他模塊耦合、內(nèi)聚的程度是度量一致性的一個(gè)指標(biāo)同時(shí)還應(yīng)該根據(jù)是否支持預(yù)期的變更,來(lái)判斷一致性程度預(yù)期可能的變更在實(shí)踐中,往往很難預(yù)期所有重要的變更(經(jīng)驗(yàn))泛化該模塊使模塊能根據(jù)輸入計(jì)算更廣泛的功能可以把輸入看作是為該模塊定義了一種語(yǔ)言,對(duì)其進(jìn)行解釋限制可能的選擇實(shí)際中可選范圍往往很大,可能會(huì)影響很多模塊例如,處理器的變更,可以限制使用相同家族的成員正交88防止連鎖反應(yīng)信息隱藏信息隱藏,就是把某個(gè)實(shí)體的責(zé)任分解為更小的部分,并選擇使哪些信息成為公有的,哪些私有,目的是使變更被隔離在一個(gè)模塊內(nèi)維持現(xiàn)有接口創(chuàng)建抽象接口,與具體實(shí)現(xiàn)相分離添加接口:提供最新的服務(wù)或數(shù)據(jù)添加適配器:給A添加適配器,把A包裝起來(lái),提供原始A的信息限制通信路徑限制與給定模塊A共享數(shù)據(jù)的模塊。即減少兩類模塊的數(shù)量,1,使用由A生產(chǎn)的數(shù)據(jù)的模塊數(shù)量。2,給A提供數(shù)據(jù)的模塊的數(shù)量仲裁者的使用對(duì)于非語(yǔ)義型的依賴,可以在A、B間插入一個(gè)仲裁者,管理與該依賴相關(guān)的活動(dòng)89推遲綁定時(shí)間支持部署時(shí)(變更)及非開(kāi)發(fā)人員的修改運(yùn)行時(shí)注冊(cè)即插即用。但需要額外的管理注冊(cè)的開(kāi)銷配置文件在開(kāi)機(jī)啟動(dòng)時(shí),根據(jù)其設(shè)置參數(shù)多態(tài)允許方法調(diào)用的后期綁定組件更換允許載入時(shí)綁定遵守已定義的協(xié)議允許各個(gè)獨(dú)立進(jìn)程在運(yùn)行時(shí)綁定90性能戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)91資源需求提高計(jì)算效率改進(jìn)關(guān)鍵算法。用一種資源換取另一種資源減少計(jì)算開(kāi)銷例如刪除一些仲裁者管理事件速率降低對(duì)環(huán)境監(jiān)視的強(qiáng)度控制采樣頻率限制執(zhí)行時(shí)間限制隊(duì)列的大小92資源管理引入并發(fā)不同的線程上處理不同的事件流維持?jǐn)?shù)據(jù)或計(jì)算的多個(gè)副本(注意一致性)例:高速緩存。增加可用資源提供額外的處理器、內(nèi)存、速度更快的網(wǎng)絡(luò)等。93資源仲裁:對(duì)競(jìng)爭(zhēng)的資源進(jìn)行調(diào)度常見(jiàn)的調(diào)度策略FIFO:適用于相同優(yōu)先級(jí)固定優(yōu)先級(jí)調(diào)度:可能使低優(yōu)先級(jí)請(qǐng)求等待過(guò)多時(shí)間。常見(jiàn)優(yōu)先級(jí)策略為:語(yǔ)義重要性時(shí)限時(shí)間:時(shí)限短(到期)的請(qǐng)求優(yōu)先級(jí)高速率單調(diào):對(duì)于周期任務(wù),選擇周期短的優(yōu)先級(jí)高動(dòng)態(tài)優(yōu)先級(jí)輪轉(zhuǎn)時(shí)限優(yōu)先靜態(tài)(脫機(jī))調(diào)度系統(tǒng)執(zhí)行前,基于被調(diào)度任務(wù)的時(shí)間參數(shù)來(lái)安排調(diào)度適用具有確定性時(shí)間要求的系統(tǒng),例如空管。94示例:實(shí)時(shí)嵌入式軟件的性能戰(zhàn)術(shù)跳過(guò)操作系統(tǒng)直接訪問(wèn)硬件軟硬件協(xié)同,利用硬件來(lái)實(shí)現(xiàn)軟件的功能,例如進(jìn)程間通信發(fā)揮硬件性能計(jì)算和IO的并行化用空間換時(shí)間,例如cache內(nèi)存池進(jìn)程池、線程池……95示例:淘寶的性能和可用性戰(zhàn)術(shù)應(yīng)用服務(wù)器微服務(wù)架構(gòu)容器、集群和彈性擴(kuò)容負(fù)載均衡和無(wú)狀態(tài)服務(wù)CDN數(shù)據(jù)庫(kù)讀寫分離分庫(kù)分表集群內(nèi)存數(shù)據(jù)庫(kù)NoSQL數(shù)據(jù)庫(kù)設(shè)計(jì)戰(zhàn)術(shù)多級(jí)緩存消息隊(duì)列、異步處理和限流異地多活熔斷和降級(jí)……96安全性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)97抵抗攻擊對(duì)用戶身份進(jìn)行驗(yàn)證確保用戶或計(jì)算機(jī)是它所聲稱的用戶或計(jì)算機(jī)密碼、數(shù)字證書對(duì)用戶進(jìn)行授權(quán)經(jīng)過(guò)身份驗(yàn)證的用戶,有什么樣的訪問(wèn)權(quán)限訪問(wèn)控制維護(hù)數(shù)據(jù)的機(jī)密性加密數(shù)據(jù),VPN,SSL維護(hù)完整性限制暴露信息限制訪問(wèn)防火墻根據(jù)消息源或目的端口,來(lái)限制訪問(wèn)98檢測(cè)攻擊將網(wǎng)絡(luò)通信模式與數(shù)據(jù)庫(kù)中的進(jìn)行對(duì)比檢測(cè)攻擊的“傳感器”將各傳感器進(jìn)行融合記錄日志分析工具和控制臺(tái)99100從攻擊中恢復(fù)恢復(fù)狀態(tài)(防守性)維持重要副本數(shù)據(jù)識(shí)別攻擊者(懲罰性)維持審計(jì)追蹤示例:平安銀行系統(tǒng)的安全性戰(zhàn)術(shù)101可測(cè)試性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)102可測(cè)試性戰(zhàn)術(shù)管理輸入輸出記錄/回放:捕獲跨接口的信息,將其作為測(cè)試專用軟件的輸入將接口和實(shí)現(xiàn)分離占位程序可以使得系統(tǒng)剩余部分得到檢測(cè)特化訪問(wèn)路線/接口測(cè)試工具獨(dú)立地捕獲某些變量值內(nèi)部監(jiān)視內(nèi)置監(jiān)視器103易用性戰(zhàn)術(shù)刺激響應(yīng)戰(zhàn)術(shù)104易用性戰(zhàn)術(shù)運(yùn)行時(shí)用戶主動(dòng):撤銷混合主動(dòng):提供進(jìn)展指示器系統(tǒng)主動(dòng):預(yù)測(cè)與用戶相關(guān)的某些信息維持任務(wù)的一個(gè)模型維持用戶的一個(gè)模型維持系統(tǒng)的一個(gè)模型設(shè)計(jì)時(shí)將用戶接口(可能頻繁改變)與應(yīng)用的其余部分分離開(kāi)支持該戰(zhàn)術(shù)的架構(gòu)模式:MVC、PAC、Seeheim、Arch/Slinky105多目標(biāo)權(quán)衡不同質(zhì)量屬性之間往往存在沖突,例如:性能VS.安全性可靠性VS.靈活性可維護(hù)性VS.高效性……排出優(yōu)先級(jí),進(jìn)行多目標(biāo)權(quán)衡106討論你的大作業(yè)項(xiàng)目中哪個(gè)非功能需求(質(zhì)量因素)最重要?采用哪些設(shè)計(jì)戰(zhàn)術(shù)?10702-質(zhì)量因素的架構(gòu)設(shè)計(jì)戰(zhàn)術(shù)01-軟件架構(gòu)的多個(gè)視圖03-軟件架構(gòu)的質(zhì)量108CharacteristicsofaGoodArchitectureResilientSimpleApproachableClearseparationofconcernsBalanceddistributionofresponsibilitiesBalanceseconomicandtechnologyconstraints1097種軟件設(shè)計(jì)的壞味道1)僵化性(Rigidity)很難對(duì)軟件進(jìn)行改動(dòng),因?yàn)槊總€(gè)改動(dòng)都會(huì)迫使對(duì)系統(tǒng)其他部分的許多改動(dòng)2)脆弱性(Fragility)對(duì)系統(tǒng)的改動(dòng)會(huì)導(dǎo)致系統(tǒng)中和改動(dòng)的地方在概念上無(wú)關(guān)的許多地方出現(xiàn)問(wèn)題3)牢固性(Immobility)很難解開(kāi)系統(tǒng)中某部分與其它部分之間的糾結(jié),從而難以使其中的任何部分可以被分離出來(lái)被其它系統(tǒng)復(fù)用1104)粘滯性(Viscosity)做正確的事情要比做錯(cuò)誤的事情困難。表現(xiàn)為兩種形式:軟件粘滯性需要對(duì)軟件進(jìn)行修改時(shí),可能存在多種方法。有的方法可以保持原有的設(shè)計(jì)質(zhì)量,另一些方法則會(huì)破壞原有的設(shè)計(jì)質(zhì)量。如果,破壞軟件質(zhì)量的修改比保持原有設(shè)計(jì)質(zhì)量的修改更容易實(shí)施時(shí),我們就稱該軟件具有“軟件粘滯性”。環(huán)境粘滯性當(dāng)開(kāi)發(fā)環(huán)境遲鈍、低效時(shí),就會(huì)產(chǎn)生環(huán)境粘滯性。例如:如果編譯時(shí)間很長(zhǎng),那么開(kāi)發(fā)人員可能會(huì)放棄那些能保持設(shè)計(jì)質(zhì)量,但是卻需要導(dǎo)致大規(guī)模重新編譯的改動(dòng)。1115)不必要的復(fù)雜性(NeedlessComplexity)設(shè)計(jì)中包含不具有任何好處的基礎(chǔ)結(jié)構(gòu)。6)不必要的重復(fù)(NeedlessRepetition)設(shè)計(jì)中包含一些重復(fù)的結(jié)構(gòu),這些結(jié)構(gòu)本來(lái)可以通過(guò)單一的抽象進(jìn)行統(tǒng)一使用Cut/Copy/Paste實(shí)施源代碼級(jí)的軟件復(fù)用容易導(dǎo)致這一問(wèn)題這種代碼級(jí)別的冗余,將帶來(lái)修改上的問(wèn)題7)晦澀性(Opacity)很難閱讀和理解,不要相信你永遠(yuǎn)都會(huì)如此清楚的了解你的每一行代碼,“時(shí)間會(huì)沖淡一切”。要站在閱讀者的角度進(jìn)行設(shè)計(jì)112軟件架構(gòu)的質(zhì)量評(píng)估基于場(chǎng)景的評(píng)估方法軟件架構(gòu)的評(píng)審基于度量和預(yù)測(cè)的評(píng)估方法軟件架構(gòu)的度量基于仿真和測(cè)試的評(píng)估方法軟件架構(gòu)的仿真與測(cè)試形式化驗(yàn)證113基于場(chǎng)景的評(píng)估方法

軟件架構(gòu)的人工評(píng)審初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備評(píng)審會(huì)議改進(jìn)重審方法舉例SAAM方法ATAM方法114軟件架構(gòu)Checklist符合軟件架構(gòu)的模板多個(gè)架構(gòu)視圖的選擇是合適的,每個(gè)視圖是正確的邏輯視圖、用例視圖、進(jìn)程視圖、部署視圖、數(shù)據(jù)視圖、開(kāi)發(fā)視圖等采用的架構(gòu)風(fēng)格是合適的質(zhì)量因素的架構(gòu)設(shè)計(jì)戰(zhàn)術(shù)是合適的支持所有的需求與目標(biāo)計(jì)算機(jī)的硬件/軟件特征(初始化、異步操作、同步和中斷等)之間不存在沖突軟件架構(gòu)設(shè)計(jì)是明確的、無(wú)歧義的、一致的。無(wú)重要的設(shè)計(jì)遺漏應(yīng)針對(duì)具體領(lǐng)域進(jìn)行細(xì)化115基于度量和預(yù)測(cè)的評(píng)估方法(靜態(tài)方法)

通過(guò)精確的度量,評(píng)估軟件架構(gòu)的內(nèi)部質(zhì)量特征復(fù)雜度耦合度內(nèi)聚度扇入扇出數(shù)接口數(shù)…利用預(yù)測(cè)模型評(píng)估軟件的外部特征(可維護(hù)性、可靠性等)116需要工具的支持方法舉例SAEM方法PASA方法SAABNet方法SACMM方法SASAM方法ALRRA方法基于仿真和測(cè)試的評(píng)估方法(動(dòng)態(tài)方法)

軟件架構(gòu)模型的仿真運(yùn)行用以評(píng)估架構(gòu)的性能、可靠性等比如,STOOD工具支持AADL模型的編輯、模擬仿真、性能分析等。軟件架構(gòu)原型的開(kāi)發(fā)與測(cè)試用以評(píng)估架構(gòu)的性能、可靠性、可擴(kuò)展性、正確性等比如,核心算法的測(cè)試117需要工具的支持性能指標(biāo)最大運(yùn)行時(shí)間平均運(yùn)行時(shí)間平均內(nèi)存利用量?jī)?nèi)存利用平衡率最大內(nèi)存占用量單位時(shí)間內(nèi)存利用量軟件架構(gòu)的形式化驗(yàn)證軟件架構(gòu)的形式化驗(yàn)證(formalverification)通過(guò)模型檢驗(yàn)或者推理驗(yàn)證的方式檢查軟件架構(gòu)設(shè)計(jì)模型中是否存在安全性、活性、公平性以及一致性等方面的問(wèn)題。安全性(safety):指系統(tǒng)不應(yīng)該達(dá)到的危險(xiǎn)狀態(tài),即壞的事情是從來(lái)不會(huì)發(fā)生的。如:無(wú)死鎖即是系統(tǒng)的一種安全屬性活性(liveness):指系統(tǒng)應(yīng)該達(dá)到的正確狀態(tài),即好的事情最終是會(huì)發(fā)生的。如:系統(tǒng)中某進(jìn)程進(jìn)行了一個(gè)請(qǐng)求,該請(qǐng)求總能夠得到回應(yīng)。公平性(fairness):指如何保證系統(tǒng)的資源能夠公平地得到各個(gè)任務(wù)的使用,不會(huì)導(dǎo)致某些任務(wù)長(zhǎng)期不能得到響應(yīng),即好的事情能否無(wú)限重復(fù)地發(fā)生。一致性(consistency):指對(duì)于同一個(gè)架構(gòu),不同的人員有著不同的看法,就會(huì)產(chǎn)生不同的軟件架構(gòu)視圖。如何采用形式化的方法來(lái)驗(yàn)證這些不同視圖之間的一致性問(wèn)題。118需要形式化建模和工具的支持高級(jí)軟件工程

SoftwareEngineering軟件質(zhì)量管理與測(cè)試軟件災(zāi)難蘇聯(lián)導(dǎo)彈預(yù)警系統(tǒng)軟件故障差點(diǎn)導(dǎo)致第三次世界大戰(zhàn)(1983年)造價(jià)80億美元的Ariane5型火箭因浮點(diǎn)數(shù)溢出,被迫引爆自毀。原因是5型的發(fā)射系統(tǒng)直接重用了4型的相應(yīng)代碼,而4型的飛行條件和5型的截然不同(1996年)由北京南站開(kāi)往福州站的D301次列車與杭州站開(kāi)往福州南站的D3115次列車發(fā)生追尾事故,造成40人死亡,直接經(jīng)濟(jì)損失2億元。原因是信號(hào)設(shè)備存在嚴(yán)重缺陷,遭雷擊發(fā)生故障后,導(dǎo)致本應(yīng)顯示為紅燈的信號(hào)機(jī)錯(cuò)誤顯示為綠燈(2011年)區(qū)塊鏈業(yè)界最大的眾籌項(xiàng)目TheDAO遭到攻擊,導(dǎo)致300多萬(wàn)以太幣資產(chǎn)被盜,原因是其智能合約中splitDAO函數(shù)有漏洞(2016年)印尼獅航一架波音737MAX8客機(jī)途中墜落,189人罹難,失事原因?yàn)檐浖O(shè)計(jì)缺陷,飛機(jī)的迎角傳感器“數(shù)據(jù)錯(cuò)誤”觸發(fā)“防失速”自動(dòng)操作,導(dǎo)致機(jī)頭不斷下壓,最終墜海(2018年)120問(wèn)題軟件系統(tǒng)功能齊全是不是就是質(zhì)量好?沒(méi)有BUG是不是就是軟件的質(zhì)量好?什么是用戶滿意的軟件項(xiàng)目?軟件測(cè)試是不是軟件質(zhì)量的全部?那么,什么是軟件的質(zhì)量?如何保證軟件的質(zhì)量?12102-軟件質(zhì)量管理01-基本概念03-軟件評(píng)審12204-軟件測(cè)試軟件質(zhì)量的定義ANSI/IEEEStd729-1983定義“與軟件產(chǎn)品滿足規(guī)定的和隱含的需求的能力有關(guān)的特征或特性的全體”。M.J.Fisher定義“所有描述計(jì)算機(jī)軟件優(yōu)秀程度的特性的組合”。123何謂軟件質(zhì)量好明確聲明的功能和性能需求、明確文檔化過(guò)的開(kāi)發(fā)標(biāo)準(zhǔn)、以及專業(yè)人員開(kāi)發(fā)的軟件所應(yīng)具有的所有隱含特征都得到滿足。軟件需求是進(jìn)行質(zhì)量度量的基礎(chǔ),與需求不符就是質(zhì)量不合格指定的標(biāo)準(zhǔn)定義了一組指導(dǎo)軟件開(kāi)發(fā)的準(zhǔn)則,如果不能遵照這些準(zhǔn)則,就極有可能導(dǎo)致質(zhì)量不好通常有一組隱含需求是不被提及的,如易維護(hù)性,如果軟件符合了明確的需求卻沒(méi)有滿足隱含需求,軟件質(zhì)量仍然值得懷疑124軟件的質(zhì)量屬性質(zhì)量的三種視角:內(nèi)部、外部、和使用質(zhì)量ISO/IEC25010:2011《軟件工程產(chǎn)品質(zhì)量》使用周境125ISO/IEC25010(SQuaRE)–Systemandsoftwarequalitymodels產(chǎn)品質(zhì)量模型(外部質(zhì)量和內(nèi)部質(zhì)量)126使用質(zhì)量模型127質(zhì)量與質(zhì)量特性軟件質(zhì)量是各種質(zhì)量特性的綜合體現(xiàn)但具體產(chǎn)品中各質(zhì)量特性的重要性與產(chǎn)品類型相關(guān),例如關(guān)鍵任務(wù)系統(tǒng)(如銀行)強(qiáng)調(diào)可靠性和安全性大眾娛樂(lè)軟件強(qiáng)調(diào)用戶可用性廣泛分發(fā)的軟件服務(wù)(銀行支付服務(wù)等)強(qiáng)調(diào)互操作性實(shí)時(shí)系統(tǒng)特別強(qiáng)調(diào)時(shí)間效率嵌入式系統(tǒng)特別強(qiáng)調(diào)資源效率具有一定用戶面的特定領(lǐng)域產(chǎn)品強(qiáng)調(diào)可配置性和可維護(hù)性128質(zhì)量特性之間的關(guān)系無(wú)關(guān)互補(bǔ)或依賴易理解性與易操作性可靠性與容錯(cuò)性:特性與子特性沖突安全性與性能可移植性與效率129質(zhì)量成本130分類質(zhì)量成本典型成分一致性成本預(yù)防成本質(zhì)量管理體系建立和維持、軟件過(guò)程改進(jìn)、培訓(xùn)、工具、供應(yīng)商評(píng)價(jià)等評(píng)價(jià)成本測(cè)試、評(píng)審、審核等非一致性成本內(nèi)部故障成本重新設(shè)計(jì)、工期延期、BUG修復(fù)、返工、回歸測(cè)試、糾錯(cuò)、資源閑置等外部故障成本客戶投訴處理、故障處理、處罰及賠償、市場(chǎng)影響、銷售影響等02-軟件質(zhì)量管理01-基本概念03-軟件評(píng)審13104-軟件測(cè)試如何進(jìn)行質(zhì)量管理?ISO9000:質(zhì)量計(jì)劃、質(zhì)量控制、質(zhì)量保證、質(zhì)量改進(jìn)。ISO12207和SWEBOK

:軟件質(zhì)量保證、驗(yàn)證和確認(rèn)、軟件評(píng)審、軟件審核、配置管理。SQuBOK:從組織級(jí)和項(xiàng)目級(jí)進(jìn)行質(zhì)量管理。132軟件質(zhì)量管理133項(xiàng)目級(jí)軟件質(zhì)量管理134軟件質(zhì)量計(jì)劃是軟件項(xiàng)目計(jì)劃的子計(jì)劃內(nèi)容:質(zhì)量目標(biāo)開(kāi)展質(zhì)量活動(dòng)的質(zhì)量標(biāo)準(zhǔn)、方法、規(guī)程和工具驗(yàn)證、確認(rèn)、評(píng)審、測(cè)試、審核、問(wèn)題解決等質(zhì)量活動(dòng)和任務(wù)的安排開(kāi)展質(zhì)量活動(dòng)的資源、日程和職責(zé)質(zhì)量記錄的標(biāo)識(shí)、收集、歸檔、維護(hù)和處理的規(guī)程135驗(yàn)證和確認(rèn)的定義V&V是一個(gè)用以分析、評(píng)價(jià)、測(cè)試系統(tǒng)和軟件文檔以及代碼系統(tǒng)的過(guò)程,從而盡可能地確保質(zhì)量、可靠性以及系統(tǒng)需求和目標(biāo)滿意度。

[IEEEStandardGlossary]驗(yàn)證(Verification)是“對(duì)系統(tǒng)或單元評(píng)價(jià)的過(guò)程,以確定一個(gè)給定的開(kāi)發(fā)階段的產(chǎn)品是否滿足在此階段開(kāi)始時(shí)所給定的條件”確認(rèn)(Validation)是“在軟件開(kāi)發(fā)過(guò)程期間或結(jié)束時(shí)評(píng)價(jià)系統(tǒng)或單元的過(guò)程,以確定它是否滿足給定的需求”我們是否正確地完成了產(chǎn)品?我們是否完成了正確的產(chǎn)品?136質(zhì)量評(píng)價(jià)在軟件開(kāi)發(fā)和運(yùn)維過(guò)程中,收集與其執(zhí)行過(guò)程、執(zhí)行結(jié)果和成果相關(guān)的數(shù)據(jù),進(jìn)行質(zhì)量評(píng)價(jià)。評(píng)價(jià)結(jié)果作為判定能否批準(zhǔn)接收成果和進(jìn)度狀況的依據(jù),并運(yùn)用于過(guò)程改進(jìn)。質(zhì)量評(píng)價(jià)的對(duì)象軟件產(chǎn)品(包括中間產(chǎn)品和最終產(chǎn)品)例如,項(xiàng)目在每個(gè)開(kāi)發(fā)迭代結(jié)束時(shí),都會(huì)以本次迭代的軟件版本為對(duì)象,以軟件需求規(guī)約為依據(jù),遵循軟件產(chǎn)品質(zhì)量模型,進(jìn)行正式的產(chǎn)品質(zhì)量的評(píng)價(jià),以確定項(xiàng)目是否進(jìn)入下一個(gè)迭代?需求是否必須改動(dòng)?軟件開(kāi)發(fā)是否需要更多的資源?等。軟件過(guò)程例如,項(xiàng)目在每個(gè)開(kāi)發(fā)迭代結(jié)束時(shí),在產(chǎn)品質(zhì)量評(píng)價(jià)的同時(shí),對(duì)項(xiàng)目過(guò)程的質(zhì)量進(jìn)行評(píng)價(jià),以確定是否要對(duì)過(guò)程進(jìn)行修改。尤其當(dāng)產(chǎn)品質(zhì)量出現(xiàn)問(wèn)題時(shí),需分析是否由于過(guò)程的問(wèn)題引起的。137軟件質(zhì)量管理技術(shù)138如何檢測(cè)軟件中的缺陷開(kāi)發(fā)活動(dòng)軟件制品缺陷檢測(cè)活動(dòng)需求分析軟件設(shè)計(jì)軟件實(shí)現(xiàn)軟件運(yùn)行需求模型設(shè)計(jì)模型源代碼可執(zhí)行代碼軟件系統(tǒng)評(píng)審模擬形式化驗(yàn)證代碼靜態(tài)分析軟件測(cè)試運(yùn)行時(shí)監(jiān)控靜態(tài)方法動(dòng)態(tài)方法139可靠性預(yù)測(cè)符號(hào)執(zhí)行各種方法的缺陷檢測(cè)效果來(lái)源:“美國(guó)國(guó)防部:軟件技術(shù)進(jìn)展”,2010年1401)軟件評(píng)審審查小組評(píng)審走查結(jié)對(duì)編程同級(jí)桌查輪查臨時(shí)評(píng)審正式化程度141系統(tǒng)分析和設(shè)計(jì)需求分析設(shè)計(jì)編碼系統(tǒng)方案評(píng)審需求規(guī)范評(píng)審設(shè)計(jì)文檔評(píng)審單元測(cè)試集成測(cè)試確認(rèn)測(cè)試系統(tǒng)測(cè)試2)軟件測(cè)試驗(yàn)收測(cè)試ɑ

測(cè)試

?

測(cè)試試運(yùn)行內(nèi)部外部項(xiàng)目產(chǎn)品1423)代碼靜態(tài)分析不運(yùn)行代碼,通過(guò)詞法分析、語(yǔ)法分析、控制流分析等技術(shù),對(duì)代碼進(jìn)行檢查,分析代碼的結(jié)構(gòu),查找代碼的問(wèn)題(例如內(nèi)存泄漏、安全漏洞、重復(fù)代碼、未使用變量等),度量代碼的質(zhì)量(例如耦合度、內(nèi)聚度、復(fù)雜度、重用度等)分析對(duì)象:源代碼、bytecode或二進(jìn)制代碼可以由人工進(jìn)行,也可以借助代碼分析工具進(jìn)行商用代碼分析工具:Understand(多語(yǔ)言)、Sourceinsight(多語(yǔ)言)等開(kāi)源代碼分析工具:PMD和Checkstyle(Java)、flake8和pylint(Python)、SonarQube(多語(yǔ)言)等143常用的代碼靜態(tài)分析技術(shù)詞法分析:從左至右一個(gè)字符一個(gè)字符的讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描,通過(guò)使用正則表達(dá)式匹配方法將源代碼轉(zhuǎn)換為等價(jià)的符號(hào)(Token)流,生成相關(guān)符號(hào)列表,Lex為常用分析工具。語(yǔ)法分析:判斷源程序結(jié)構(gòu)上是否正確,通過(guò)使用上下文無(wú)關(guān)語(yǔ)法將相關(guān)符號(hào)整理為語(yǔ)法樹(shù),Yacc為常用工具。抽象語(yǔ)法樹(shù)分析:將程序組織成樹(shù)形結(jié)構(gòu),樹(shù)中相關(guān)節(jié)點(diǎn)代表了程序中的相關(guān)代碼,目前已有javacc等抽象語(yǔ)法樹(shù)生成工具。語(yǔ)義分析:對(duì)結(jié)構(gòu)上正確的源程序進(jìn)行上下文有關(guān)性質(zhì)的審查??刂屏鞣治觯荷捎邢蚩刂屏鲌D,用節(jié)點(diǎn)表示基本代碼塊,節(jié)點(diǎn)間的有向邊代表控制流路徑,反向邊表示可能存在的循環(huán);還可生成函數(shù)調(diào)用關(guān)系圖,表示函數(shù)間的嵌套關(guān)系。數(shù)據(jù)流分析:對(duì)控制流圖進(jìn)行遍歷,記錄變量的初始化點(diǎn)和引用點(diǎn),保存相關(guān)數(shù)據(jù)信息。污點(diǎn)分析:基于數(shù)據(jù)流圖判斷源代碼中哪些變量可能受到攻擊,是驗(yàn)證程序輸入、識(shí)別代碼表達(dá)缺陷的關(guān)鍵。

1444)符號(hào)執(zhí)行

符號(hào)執(zhí)行(symbolicexecution)是指在不執(zhí)行代碼的前提下,用符號(hào)值表示代碼中變量值,然后模擬程序執(zhí)行來(lái)進(jìn)行相關(guān)分析的技術(shù),分析代碼的語(yǔ)義信息。符號(hào)執(zhí)行分為:過(guò)程內(nèi)分析是指只對(duì)單個(gè)過(guò)程的代碼進(jìn)行分析;過(guò)程間分析(又稱全局分析)指對(duì)整個(gè)軟件代碼進(jìn)行上下文敏感的分析。145intm=M,n=N,q=Q;intx1=0,x2=0,x3=0;if(m!=0){x1=-2;}if(n<12){

if(!m&&q){x2=1;}

x3=2;}assert(x1+x2+x3!=3)分析什么樣的輸入向量<M,N,Q>的情況下,得到的三個(gè)輸出變量的和等于35)形式化驗(yàn)證形式化驗(yàn)證用以驗(yàn)證軟件是否滿足其規(guī)約的要求,常用于驗(yàn)證關(guān)鍵軟件的安全性主要技術(shù):定理證明(Theoremproving)模型檢驗(yàn)(modelchecking)1466)模擬

模型的動(dòng)態(tài)模擬用于需求分析與設(shè)計(jì)模型的質(zhì)量控制例如:狀態(tài)圖與工作流的模擬運(yùn)行等目的:更深入地看到需求和設(shè)計(jì)的完整性、正確性和合理性等,從而確保需求反映了用戶的真實(shí)要求,設(shè)計(jì)能滿足預(yù)期的需求。代碼在宿主機(jī)/開(kāi)發(fā)環(huán)境上的模擬運(yùn)行模擬目標(biāo)機(jī)/運(yùn)行環(huán)境1477)運(yùn)行時(shí)監(jiān)控系統(tǒng)監(jiān)控是對(duì)運(yùn)行時(shí)軟件系統(tǒng)的性能和可靠性等進(jìn)行實(shí)時(shí)監(jiān)視的技術(shù),記錄和分析運(yùn)行日志、軌跡和拋出異常,檢查系統(tǒng)的在線服務(wù)質(zhì)量,并及時(shí)發(fā)現(xiàn)問(wèn)題。三種監(jiān)控手段:日志(Logging)、指標(biāo)(Metrics)、追蹤(Tracing)工具舉例:Actuator、Prometheus、Grafana、LogStash、APM等1488)可靠性預(yù)測(cè)采用可靠性增長(zhǎng)模型定量地評(píng)價(jià)軟件可靠性。可靠性增長(zhǎng)模型能根據(jù)測(cè)試階段和運(yùn)行階段的數(shù)據(jù)推斷出軟件可靠性。因?yàn)殡S著測(cè)試及運(yùn)行,缺陷被不斷發(fā)現(xiàn)與排除,可靠性會(huì)隨之增長(zhǎng),故稱為可靠性增長(zhǎng)模型。軟件可靠性增長(zhǎng)模型一般可分為:故障發(fā)生時(shí)間模型,如NHPP模型、馬爾可夫過(guò)程模型等故障發(fā)現(xiàn)數(shù)量模型,如貝葉斯模型、危險(xiǎn)率模型等149七種基本質(zhì)量工具(7QC)150質(zhì)量控制圖151魚(yú)骨圖152Pareto圖Pareto法則:80%的缺陷經(jīng)常由于20%的原因引起的15302-軟件質(zhì)量管理01-基本概念03-軟件評(píng)審15404-軟件測(cè)試評(píng)審目的提高質(zhì)量減少軟件開(kāi)發(fā)/維護(hù)的時(shí)間和費(fèi)用提高生產(chǎn)率提高估算準(zhǔn)確性培訓(xùn)EngineeringDocumentsRulesForwritingEng.Docs.軟件評(píng)審Defects發(fā)現(xiàn)缺陷、預(yù)防缺陷155投資回報(bào)率從4:1到30:1Review:評(píng)審方法審查小組評(píng)審走查結(jié)對(duì)編程同級(jí)桌查輪查臨時(shí)評(píng)審正式化程度從高到低156審查Inspection最系統(tǒng)化、最嚴(yán)密的評(píng)審技術(shù)被認(rèn)為是軟件工業(yè)中最實(shí)用的、最有效的評(píng)審方法嚴(yán)格定義的審查過(guò)程,明確的分工審查組長(zhǎng)、讀者、審查者作者、記錄員157審查過(guò)程初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審158受審查的工件初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備評(píng)審會(huì)議重寫重審項(xiàng)目計(jì)劃需求規(guī)格說(shuō)明書概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)系統(tǒng)測(cè)試計(jì)劃、用例和報(bào)告代碼

等159審查的規(guī)劃初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審審查組長(zhǎng)判斷是否已滿足審查的進(jìn)入標(biāo)準(zhǔn)作者和審查組長(zhǎng)協(xié)同對(duì)審查進(jìn)行規(guī)劃,確定審查員和時(shí)間進(jìn)度審查會(huì)議效率:每小時(shí)4~6頁(yè)

審查人員不超過(guò)7人或者更少審查人員可以是開(kāi)發(fā)人員、測(cè)試人員、項(xiàng)目經(jīng)理、用戶等160RelativeTeamEfficiency:MajorDefects/timeused(uniquetotal)2367CheckersonteamRelative

Effectiveness:MajorDefectsfoundperpage(totalbyteam).Source:S?renSkogstadNielsen,Denmark’sTechnologicalInstitute(DTI),Lyngby,Denmark(Switch+4543504350).MajorDefectsfoundperPage45MajordefectsfoundperHourNote:thischartisanapproximationandisnotexactEffectivenesspeaksataround5or6checkersEfficiencypeaksataround3to4checkers評(píng)審小組人數(shù)對(duì)效率的影響1161審查的準(zhǔn)備初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審將需求說(shuō)明書等到交給每位審查員每個(gè)審查員以審查清單為指導(dǎo),檢查文檔可能出現(xiàn)的錯(cuò)誤,并提出問(wèn)題75%的錯(cuò)誤是在準(zhǔn)備階段發(fā)現(xiàn)的162審查會(huì)議初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審參加人員:審查組長(zhǎng)、作者、記錄員、審查人員(選其中一個(gè)為讀者)每次會(huì)議不超過(guò)2小時(shí)審查目標(biāo):盡可能多地發(fā)現(xiàn)問(wèn)題,而不是解決問(wèn)題遞交:會(huì)議記錄(問(wèn)題和缺陷)、審查結(jié)論163重寫初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審由作者根據(jù)審查發(fā)現(xiàn)的問(wèn)題,重寫文檔164重審初始工件基線工件規(guī)劃總體會(huì)議準(zhǔn)備審查會(huì)議重寫重審由審查組長(zhǎng)或指派人單獨(dú)重審由作者重寫的文檔,確保所有問(wèn)題得到解決,所有錯(cuò)誤得到修改。由審查組長(zhǎng)判斷:是否已滿足審查的退出標(biāo)準(zhǔn)165小組評(píng)審TeamReview評(píng)審過(guò)程計(jì)劃、準(zhǔn)備、開(kāi)會(huì)、返工作者或評(píng)審組長(zhǎng)主持會(huì)議讀者這個(gè)角色被省略了,改由評(píng)審組長(zhǎng)詢問(wèn)其他評(píng)審者這一部分是否有問(wèn)題使用記錄員使用缺陷檢查表166走查Walkthrough評(píng)審過(guò)程計(jì)劃、開(kāi)會(huì)、返工作者主持會(huì)議,起主導(dǎo)作用,陳述產(chǎn)品常用走查方法使用一些樣品數(shù)據(jù)一步步執(zhí)行一個(gè)模塊,和同事一道檢查以確保正確的邏輯和行為。使用交互式調(diào)試器按腳本執(zhí)行,腳本描述了一項(xiàng)具體的任務(wù)或場(chǎng)景,用以說(shuō)明系統(tǒng)如何在用戶會(huì)話中發(fā)揮功能167結(jié)對(duì)編程PairProgramming極值編程XP中的一個(gè)實(shí)踐兩個(gè)開(kāi)發(fā)者在一個(gè)工作站上同時(shí)編寫同一個(gè)程序,進(jìn)行實(shí)時(shí)的、持續(xù)的、非正式的評(píng)審。司機(jī)和搭檔的角色還要不時(shí)地交換。由于搭檔的實(shí)時(shí)評(píng)審,結(jié)對(duì)者可以迅速糾正錯(cuò)誤??焖俚牡苁乖O(shè)計(jì)和程序更加強(qiáng)壯。結(jié)對(duì)編程技術(shù)除了能應(yīng)用于編碼,還能應(yīng)用需求、設(shè)計(jì)、測(cè)試等文檔。168同級(jí)桌查PeerDeskcheck在兩次編譯之間仔細(xì)地檢查源代碼以保證程序正確執(zhí)行,這就是桌查。桌查是PSP的組成部分,是一種自評(píng)審,不屬于同級(jí)評(píng)審。在同級(jí)桌查中,除作者外的一位評(píng)審者對(duì)工作產(chǎn)品進(jìn)行檢查。評(píng)審者可以和作者坐在一起討論,也可以獨(dú)立檢查。評(píng)審?fù)瓿珊?,評(píng)審者把錯(cuò)誤表交給作者,或者兩人一起坐下來(lái)共同準(zhǔn)備錯(cuò)誤表,或者簡(jiǎn)單地將做過(guò)標(biāo)記的工作產(chǎn)品交給作者。要尋找一位足夠?qū)I(yè)且值得信賴的人擔(dān)任評(píng)審者。169輪查Passaround輪查是由多人組成的并行同級(jí)桌查輪查有助于緩和同級(jí)桌查的兩個(gè)主要風(fēng)險(xiǎn)評(píng)審者不能及時(shí)提供反饋評(píng)審效果太糟170選擇合適的評(píng)審方法評(píng)審目標(biāo)審查小組評(píng)審走查結(jié)對(duì)編程同級(jí)桌查輪查查找產(chǎn)品缺陷√√√√√√檢查規(guī)范的一致性√√

√√檢查是否符合標(biāo)準(zhǔn)√

√√檢查完整性/正確性√

評(píng)估可理解性/可維護(hù)性√

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論