




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级软件工程
SoftwareEngineering软件开发方法02-面向对象方法01-结构化方法03-基于构件的开发方法204-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法软件过程和软件方法是相对独立的结构化方法核心:自顶向下,逐步求精手段:分解(模块化)、抽象常用建模工具:需求建模:DFD(数据流图)DD(数据字典)、ERD(实体关系图)STD(状态图)设计建模:概要设计:结构图(SC)详细设计:程序流程图、N-S图、PAD图、伪代码3DFD的分层建模随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)421432.42.32.22.11.31.21.1X数据字典的描述符号符号名称举例=定义为x=…表示x由…组成+与a+b表示a和b[…,…]或[a,b]表示a或b[…│…]或[a│b]表示a或b{…}重复{a}表示a重复0或多次{…}重复{a}表示a重复3到8次(…)可选(a)表示a重复0或1次″…″基本数据元素″a″表a是基本数据5数据流组成示例(发票)
单位名称商品名数量单价金额总金额日期营业员
发票=单位名称+{商品名+数量+单价+金额}
+总金额+日期+(营业员)51注:营业员的签名可有可无6ERD示例7结构设计的工具--结构图用结构图(StructureChart)来描述软件系统的体系结构描述一个软件系统由哪些模块组成,以及模块之间的调用关系结构图的基本成分有:模块、调用和数据8OQNRUVaa,cbccda,da,dMSffjPTSWghiSC图示例9流程图示例S1C4C5C3C2C1S2S3S4S5NYNYNNNYYY10伪代码示例:拼词检查程序PROCEDUREspellcheckIS
BEGIN
splitdocumentintosinglewords
lookupwordsindictionary
displaywordswhicharenotindictionary
createanewdictionary
ENDspellcheck
1102-面向对象方法01-结构化方法03-基于构件的开发方法1204-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法面向对象方法九十年代以来的主流开发方法符合人们对客观世界的认识规律开发的系统结构易于理解、易于维护继承机制有力支持软件复用常见的面向对象方法Boochmethod 1994CoadandYourdonmethod 1991Rambaughmethod--OMT 1991Jacobsonmethod–OOSE1992Wirfs-Brockmethod 1990……13国际标准统一建模语言UML
1997
面向对象分析与设计面向对象分析用例建模概念类识别和概念建模用例实现分析类识别分析类的时序图建模和通信图建模分析类图建模14面向对象设计架构设计分析类到设计类的转换4+1View详细设计子系统的设计类的设计面向对象分析──用例模型15SelectCoursestoTeachProfessorStudentBillingSystemRegistrarViewGradesAlterCourseSelectionsGetClassListforaCourseCloseRegistrationSubmitGradesRegisterforCoursesCourseCatalogSystemRequestCourseCatalog面向对象分析──概念模型16面向对象分析──用例实现针对每个用例CreateUse-CaseRealizationIdentifyanalysisclassesModelanalysisclassinteractionsinsequencediagramsGeneratecommunicationdiagramsfromsequencediagramFindclassrelationshipsandoperations,andfinishVOPCclassdiagrams17UseCaseCommunicationDiagramsSequence
DiagramsUse-CaseRealizationClassDiagramsProcessViewDeploymentViewLogicalViewUse-CaseViewImplementationViewEnd-userFunctionalityProgrammers
Softwaremanagement
PerformanceScalabilityThroughput
SystemintegratorsSystemtopology
Delivery,installationcommunicationSystemengineeringAnalysts/DesignersStructure
面向对象设计──软件架构“4+1View”18面向对象设计──子系统设计19SubsystemComponentSubsystemInterfaceICourseCatalogSystemgetCourseOfferings(forSemester:Semester):CourseOfferingList(fromExternalSystemInterfaces)<<Interface>>11CourseOfferingListnew()add()(fromUniversityArtifacts)10..*CourseOfferingnew()setData()(fromUniversityArtifacts)<<Entity>>StatementexecuteQuery()executeUpdate()(fromjava.sql)ConnectioncreateStatement()(fromjava.sql)ResultSetgetString()(fromjava.sql)DBCourseOfferringcreate():CourseOfferingread(searchCriteria:string):CourseOfferingListCourseCatalogSystemgetCourseOfferings(forSemester:Semester):CourseOfferingList<<subsystem>>DriverManagergetConnection(url,user,pass):Connection(fromjava.sql)面向对象设计──类的设计优化实体类、边界类和控制类定义类的属性和方法20AnalysisFatClassLazyDataHelper-rarelyUsedAttr1-rarelyUsedAttr2DesignFatClass-privateAttr+getCommonlyUsedAttr1()+getCommonlyUsedAttr2()+getRarelyUsedAtt1()+getRarelyUsedAtt2()FatClassDataHelper-commonlyUsedAttr1-commonlyUsedAttr210..1FatClass-
privateAttr-commonlyUsedAttr1-commonlyUsedAttr2-rarelyUsed1-rarelyUsed2<<Entity>>面向对象设计──状态图21superstatesubstateaddStudent/numStudents=numStudents+1OpenUnassignedAssignedHaddaprofessorClosedCanceleddo/SendcancellationnoticesFullCommitteddo/GenerateclassrostercloseRegistrationcloseremoveaprofessorclose[numStudents<3][numStudents=10]closeRegistration[numStudents>=3]close[numStudents>=3]closeRegistration[hasProfessorassigned]close
/numStudents=0removeStudent[numStudents>0]/numStudents=numStudents-1cancelcancel双向工程Round-tripengineeringistheabilitytomovebackandforthbetweenmodelandcode.ForwardengineeringReverseengineering22SourceCodeModelCodeGenerationUML建模工具IBMRhapsodySybasePowerDesignerSparxSystemsEABorlandTogetherMicrosoftVisioStarUML开源ArgoUML开源…2302-面向对象方法01-结构化方法03-基于构件的开发方法2404-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法构件构件由构件规约与构件实现两部分组成可复用构件的要求:1.通用性和可变性(variability)强
2.易于调整
3.易于组装
4.具有可检索性
5.经过充分的测试25ComponentinterfaceComponentimplementation举例26基于构件的开发A1A2A3A4基础构件B1B2B3B4功能构件C1C2接口构件A1A2ABCDRA3A4B1B2B3B4C1C2D1D2DA1B1C1A2B2应用系统标准规范与质量保证应用构架库构件生产车间组装车间应用构架提取车间构件库界面构件D1D2应用系统27软件工具领域工程软件再工程软件架构技术开放系统技术构件获取构件标准化与描述构件复用软件过程非技术因素软件构件技术构件分类、存储与检索应用系统领域遗产软件系统构件复用的关键因素28构件的获取存在大量可复用的构件是复用的前提据分析大约10万个构件才有可能满足一般用户的需求获取构件的途径 从头开发新构件:领域工程 从现有系统中提炼:再工程 演化现有构件构件的实现模型示例OSOA的SCA模型(ServiceComponentModel)OMG的CCM模型(CORBAComponentModel)微软的DCOM模型SUN的EJB模型29构件的复用系统分析系统设计系统实现用户需求系统模型系统设计软件系统领域模型领域架构构件复用库应用工程可交付系统可复用资产3002-面向对象方法01-结构化方法03-基于构件的开发方法3104-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法面向服务的软件分析和设计(SOAD)ClassLayerServiceLayer
ComponentLayerStructuredDevelopServiceOrientedDevelop
ComponentOrientedDevelopObjectOrientedDevelop32服务的特征服务的抽象性(基于接口的编程)服务是实际程序、数据库、业务过程等软件实体的抽象了的逻辑视图。实现平台透明性服务的自治性(实现分布式应用)Youdon’t“new”aservice–it’sjustthere.服务间的松耦合式绑定,基于标准化消息进行通信服务的自描述性(支持动态发现与延迟绑定)服务具有可发布、可发现、机器可处理的接口契约服务的粗粒度(支持基于业务逻辑的积木式装配)33SOA模型
34基于SOA的C/S系统的典型架构35示例:基于微服务架构的网络订餐系统36基于服务的业务流程管理系统的架构示例37基于服务的应用集成示例38面向服务的软件开发方法SOAD服务分析服务设计服务实现服务测试39服务分析-step1服务识别自顶向下方法,由业务需求驱动,设计服务。如果没有已有的软件服务相对应,就需要设计一个全新的服务。优点:业务流程中的业务服务和软件服务之间的交互是完全匹配的;缺点:可能对现有软件服务的利用率不高,因为识别出来的业务服务有可能与现有软件服务之间不能完全匹配,导致可能会彻底放弃现有软件服务。自底向上方法,以现有服务驱动进行匹配优点:通过不断地将业务服务与已有的软件服务进行匹配,使得对已有软件服务能够进行最大限度的复用;缺点:可能会发现很多业务服务无法找到合适的现有服务进行匹配,导致需要新开发的服务数量变多。40服务分析-step2服务粒度的确定以对业务的精确掌握和理解为基础,在性能、可维护性和随需应变之间进行平衡,选择适合的粒度进行服务的识别和划分。服务粒度太细会使得服务流程过于复杂,而且服务流程执行的效率也会降低很多;服务流程太粗会使得服务流程难以改动,从而使得随需应变无法实现。从随需应变出发,需要我们能够预判业务流程在将来有可能出现的变化,然后根据这种预判来设计服务的粒度。具体来说,我们要求对业务流程中的各个环节进行抽象表示,然后根据考虑在流程上哪些部分是随着业务的发展有可能产生变化的,然后将这些有可能产生变化的地方识别成细粒度的服务来表示。41服务分析-step3服务的组织编制(orchestration)在流程中有一个作为流程中心的服务,它负责控制流程中其他参与交互的服务,协调服务间的消息传递。除流程中心服务之外的其他参与交互的服务通常是不关心其他的服务的存在,也不需要知道自己被谁调用或正在参与一个什么样的具体业务流程。编排(choreography)参与业务过程的Web服务之间是协作关系,为了实现一个业务流程,每一个参与其中的服务都需要明确地知道自己应该在什么情况下与哪些其他服务进行交互。42服务设计-step1SOA实现方案WebService应用范围:EAI、面向网络的分布式应用CORBA早期的实现技术,因过于复杂,应用较少。OSGI应用范围:基于Java的单虚拟机内的应用JINI应用范围:网络设备的嵌入式应用43服务设计-step2SOA中间件分布式服务框架,如Dubbo,SpringCloud服务注册、发现和调用、软负载均衡及容错等ESB(企业服务总线),如EMS,WebSphereESB实现数据、系统接口的服务化实现各种通信协议的适配实现消息的路由转换过滤BPEL引擎,如OracleBPELProcessManager
实现流程的编排与执行、跨域系统的协同共享MQ(消息队列),如ActiveMQ、RabbitMQ、Kafka实现数据的可靠传递和交付44服务设计-step3服务内部的详细设计45bigbank.accountcompositeAccountServiceComponentServiceAccountServiceReferenceStockQuoteServiceAccountDataServiceComponentbigbank.accountcompositeAccountServiceComponentServiceAccountServiceReferenceStockQuoteServiceAccountDataServiceComponent举例4602-面向对象方法01-结构化方法03-基于构件的开发方法4704-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法SeparationofConcernsconcernconcernconcernconcern48软件中的Concern举例1ImplementationofApacheTomcatwebserverAnalyzedimplementationof3concerns:XMLparsingconcernURLpatternmatchingconcernLoggingconcern49XMLparsingconcernGoodmodularization
XMLparsingisimplementedinitsownmodule50URLpatternmatchingconcernGoodmodularizationURLpatternmatchingisimplementedin2modules51LoggingconcernBadmodularization
loggingisimplementedinalotofdifferentplaces,spreadthroughoutothermodules52软件中的Concern举例2TransferConcernAuthenticationConcernLoggingConcernTransactionConcernCashWithdrawalConcernAuthenticationConcernLoggingConcernTransactionConcernCashDepositConcernAuthenticationConcernLoggingConcernTransactionConcernBankingSystem53TransactionConcernLoggingConcernTransactionConcernTransactionConcern代码示例54Authentication
Concern
voidtransfer(AccountfromAccount,AccounttoAccount,intamount)throwsException{ if(!getCurrentUser().canPerform(OP_TRANSFER)){ thrownewSecurityException();} Transactiontx=database.newTransaction(); try{ if(fromAccount.getBalance()<amount) {thrownewInsufficientFundsException();} fromAccount.withdraw(amount); toAccount.deposit(amount);
mit(); systemLog.logOperation(OP_TRANSFER,fromAccount,toAccount,amount); } catch(Exceptione) {tx.rollback(); throwe;}}
55/2156/21aspectauthentication//thisistheaspect{
before:call(publicvoidTransfer(..))//thisisapointcut
{
//thisistheadvice
inttries=0; stringuserPassword=Password.Get(tries);
while(tries<3&&userPassword!=thisUser.password())
{
//allow3triestogetthepasswordright
tries=tries+1;
userPassword=Password.Get(tries);
}
if(userPassword!=thisUser.password())then
//ifpasswordwrong,assumeuserhasforgottentologout
System.Logout(thisUser.uid);
}}//authenticationAspect编码示例57编程语言:AspectJ,JAsCo,CaesarJ,AspectS,ObjectTeams,HyperJ,JBOSSAOP,Compose*,DemeterJ,AspectC++,...58AspectWeaving59面向方面软件开发的原理RequirementBusinessLogicPersistenceSecurityLogging6002-面向对象方法01-结构化方法03-基于构件的开发方法6104-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领域工程07-形式化方法模型驱动开发将软件的开发集中于模型而不是程序(代码)的一种开发方法从模型自动产生程序(代码)主要用来提高开发生产率和代码的可靠性OMG定义模型驱动的体系结构(Model-DrivenArchitecture,简称MDA)的初衷定义一组标准来支持模型驱动的开发UML是MDA的基础之一62模型和元模型63MDA中的三种模型Computation-
IndependentModel(CIM)Platform-
IndependentModel(PIM)Platform-
SpecificModel(PSM)MoreAbstractMoreSpecific64计算无关模型(CIM)举例
65Usesthevocabularyofthedomain.Noinformationinthemodelindicatesthatacomputer-basedsolutionwillbeused.平台无关模型(PIM)举例
66LessabstractthanCIMClosertoimplementationbutnottiedtoaplatform.平台有关模型(PSM)举例
67LessabstractthanPIMClosertoimplementationJ2EEelementscapturedinmodel模型间的转换68测试系统工程需求设计编码计算无关模型CIM业务模型平台无关模型PIM分析模型平台有关模型PSM设计模型代码实现模型测试模型模型驱动的软件开发(MDD)以模型为中心(相对于以代码为中心)的软件开发方法基于以下两种久经考验的技术69SC_MODULE(producer){sc_inslave<int>in1;intsum;//voidaccumulate(){sum+=in1;cout<<“Sum=“<<sum<<endl;}«sc_module»
producerstartout1(1)抽象(2)自动化«sc_module»
producerstartout1SC_MODULE(producer){sc_inslave<int>in1;intsum;//voidaccumulate(){sum+=in1;cout<<“Sum=“<<sum<<endl;}建模语言建模工具MDD主要方法(半)自动的转换:PIM->PSM,PSM->代码通过标记、profile、OCL或者其他途径进行平台无关模型(PIM)的刻画,然后定义相关的转换规则来完成从平台无关模型到平台相关模型或代码的转换。例如:SCADE实现了PSM(状态图+数据流图)至代码的生成基于DSL的开发方法领域描述语言(DomainSpecificLanguage,DSL)通过适当的表示方法和抽象机制来提供对特定问题领域的表述能力,因此,DSL常用来生成特定应用领域中的一个产品/应用家族的应用。例如:无代码开发可执行的UML(xUML)xUML=UML-Semanticallyweakelement+preciselydefinedactionsemantics7002-面向对象方法01-结构化方法03-基于构件的开发方法7104-面向服务方法06-模型驱动开发方法05-面向方面方法08-产品线开发方法和领
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育竞赛赛事标识系统设计与实施考核试卷
- 毛皮制品的原材料价格波动考核试卷
- 质量体系测试题及答案
- 请问的英语面试题及答案
- 制定合理CPMM学习计划的试题及答案
- 日用化学产品对绿色生活的引导考核试卷
- 投资组合的业绩评价方法与技巧解析应用与挑战分析与应用考核试卷
- 康复辅具在康复医学领域社会服务功能的拓展与实践考核试卷
- 国际物流市场调研能力试题及答案
- 烟草制品零售风险管理策略考核试卷
- 农村沼气安全使用知识讲座
- 2024年中考英语热点阅读练习9 中秋节(含解析)
- CT设备维保服务售后服务方案
- 法人治理主体“1+3”权责表
- 2023年贵州省贵阳市云岩区中考模拟语文试题( 含答案解析 )
- 陶瓷瓷砖企业(陶瓷厂)全套安全生产操作规程
- 机械手自动控制系统的PLC实现方法研究
- 关于软件升级服务方案
- 一定溶质质量分数的氯化钠溶液的配制
- GB/T 43241-2023法庭科学一氧化二氮检验气相色谱-质谱法
- 沙袋土围堰施工方案
评论
0/150
提交评论