




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计基础软件工程内容何为软件设计设计的对象、任务和过程以及产生的设计元素软件设计原则抽象、求精、模块、隐藏、多视点、分离软件设计方法结构化设计方法面向对象设计方法软件设计输出及评审软件设计软件制品、软件设计缺陷及评审要求1.1何为软件设计?软件设计针对软件需求,综合考虑各种制约因素,探究软件实现的解决方案设计前提:软件需求定义了要做什么样的软件设计考虑:制约因素资源:时间、人力、财力、开发辅助工具技术:技术平台,如DBMS还是文件系统软件设计软件需求解决方案制约因素软件设计是要给出软件需求的实现解决方案何为软件系统的解决方案?描述了如何来构造和实现软件系统模块的组织模块的功能和接口模块间的交互模块内部的算法人机交互的界面和方式数据结构设计数据库的设计和组织……软件系统的解决方案类似于软件实现图纸从实现的角度,软件设计方案应该是什么样的?不同设计内容不同设计层次不同设计视角示例:“小米便签”的软件实现解决方案整体架构层面的设计模块组织接口交互算法数据……从需求到设计和编码需求
设计回答如何做(How)
设计图纸根据需求来进行设计,确保设计的质量设计
实现基于设计来指导施工和实现设计的好坏直接决定了最终产品的好坏!软件设计关注于软件需求的实现问题软件需求软件设计编码实现1.2需求分析、软件设计、软件实现间的关系软件设计模型和文档设计的制约因素和质量要求源程序代码软件需求模型和文档软件设计处于承上启下的作用需求分析软件设计编码实现软件设计是需求分析和软件实现间的桥梁软件需求软件设计软件代码要做什么,明确问题和目标如何做,绘制图纸做出来,开展施工思考和讨论直接根据软件需求来编写代码行吗?为什么?1.3设计的多样性和差异性:质量用户需求如何区分设计的差异性?如何评价设计的优劣?除了满足需求之外,设计还需要注意哪些要素?设计结果1设计结果2设计结果n软件设计软件设计是一个创作的过程一个软件需求会有多种软件设计方案软件设计的质量要求正确性正确实现所有的软件需求项;设计元素间无逻辑冲突;在技术平台和软件项目的可用资源约束条件下,采用程序设计语言可完整地实现设计模型充分性所有的设计元素已充分细化,模型易于理解,编程人员勿需再面对影响软件功能和质量的技术抉择或权衡优化性以合理的、充分优化的方式实现软件需求模型,目标软件产品能够表现出良好的软件质量属性,尤其是正确性、有效性、可靠性和可修改性简单性模型中的模块的功能或职责尽可能简明易懂,模块间的关系简单直观,模型的结构尽可能自然地反映待解软件问题的结构高质量软件设计的特点正确性可靠性可维护性可重用性可追踪性可移植性可互操作性有效性安全性……设计不仅要满足需求,还要有好的质量!要从多个利益相关者的角度来理解设计的“质量”用户、开发者、维护人员等设计要内外兼修内在质量和外在质量思考和讨论为什么要关注设计的质量?如果软件设计质量不高,会带来什么样的问题?如何来确保软件设计的质量?1.4软件设计过程体系结构设计人机交互设计软件详细设计文档化软件设计软件设计评审软件设计管理软件需求迭代软件设计过程–软件体系结构设计从全局和宏观视角、站在最高抽象层次来设计软件系统构成要素及其关系职责分派、接口定义相互交互及协作行为每个模块为“黑盒子”设计关注的质量要素可扩展、可维护、可重用、可移植、可互操作等等要素:函数、方法、类、程序包关系:依赖、交互区别:粒度示例:分层的软件体系结构服务业务界面合理地设计抽象层次和组织软构件是关键交互和约束
软件设计过程–用户界面设计设计软件对外展示以及与用户进行交互的界面,关注软件如何与用户进行交互输出:告诉给用户的信息输入:需要用户提供的信息设计关注的质量要素直观、友好、易于操作和理解等软件设计过程–软件详细设计对体系结构设计和人机交互设计成果进行细化和精化,获得高质量的、充分细化的软件设计模型构件和类设计:细化各个构件和类设计,如属性、操作、状态等接口设计:构件和类等提供的交互接口算法设计:实现特定功能的具体执行流程和算法数据设计:信息描述
计算机可以处理的数据描述设计关注的质量要素有效、高效、可靠、易于维护等等示例:软构件及接口设计软构件及其之间的关系示例:类设计publicclassContact{privatestaticHashMap<String,String>sContactCache;privatestaticfinalStringTAG="Contact";privatestaticfinalStringCALLER_ID_SELECTION;publicstaticStringgetContact(Contextcontext,StringphoneNumber)……}给出类层次的设计信息属性方法及其算法等软件设计过程–其它工作撰写设计文档基于软件设计及其成果,按照软件设计规格说明书的规范和要求,撰写软件设计文档,详细记录软件设计的具体信息评审软件设计对软件设计制品(包括设计模型和文档)进行评审,验证软件设计是否实现了软件需求,分析软件设计的质量,发现软件设计中存在的缺陷和问题,并与多方人员一起协商加以解决软件设计管理对软件设计变化以及相应的软件设计制品进行有效的管理,包括追踪软件设计变化、分析和评估软件设计变化所产生的影响、对变化后的软件设计制品进行配置管理等等思考和讨论不按照上述过程来进行软件设计行吗?先进行详细设计,再进行体系结构设计会产生什么样的问题?1.5三类软件设计元素过程、函数和设计类它们既是最基本的设计单元,也是最基本的模块单元软构件可分离、可独立部署和执行、可单独重用的一类设计元素如动态链接库(.DLL)、可运行的JavaJAR包、微服务镜像等就属于软构件子系统完成特定功能、逻辑上相互关联的一组模块集合有助于管理软件系统的复杂度,简化软件设计和实现,如软件包所有的设计元素在编码实现时都有相应的对应物软件设计元素之间的关系软件系统子系统函数、过程和设计类软构件11..n10..n1..n0..n0..n0..n0..11..n0..11..n示例:软件设计元素小米便签软件体现了哪些设计元素?内容软件设计概述设计元素、任务和过程软件设计原则抽象、求精、模块、隐藏、多视点、分离软件设计方法结构化设计方法面向对象设计方法软件设计输出及评审软件设计软件制品、软件设计缺陷及评审要求2.1软件设计要考虑的因素满足需求正确、一致、可行、完整、无冗余等权衡抉择多种设计方案,明确优缺点,综合考虑多方因素关注质量要求应对变化易于理解和扩展,高效处理等如何才能得到高质量的软件设计呢?==》软件设计原则2.2软件设计的基本原则抽象与逐步求精模块化,高内聚度、低耦合度信息隐藏多视点和关注点分离软件重用迭代设计可追踪性1.抽象原则何为抽象?在认识事物、分析和解决问题的过程中,忽略那些与当前研究目标不相关的部分,以便将注意力集中于与当前目标相关的方面抽象是管理和控制复杂性的基本策略如在架构设计时不考虑实现细节抽象在软件设计中的应用软件开发就是一个从高层抽象到低层抽象逐步过渡过程高层设计(架构设计)
底层设计(详细设计),“逐步求精”过程软件设计抽象层次的变化体系结构设计抽象模块抽象(类、函数)算法设计抽象逐步求精结构性全局性关键性过程性局部性细节性软件设计过程中不采用抽象的原则会产生什么样的结果?示例:体系结构层次的设计抽象关注有哪些构件,它们的职责和接口(体系结构设计的抽象),无需关注构件内部的细节(构件设计的抽象)外部的功能和服务示例:构件层次的设计抽象考虑构件内部设计元素的职责和协同(构件设计的抽象),无需关注每个类的实现细节(类设计的抽象)构件内部的结构和交互2.模块化、高内聚度和低耦合度原则将软件系统的整体结构分解为一组相对独立的模块模块:包、子系统、构件、类、方法等等每个模块实现单一的功能通过模块之间的交互来组装模块,形成整体框架体现了“分而治之”思想如何达成模块化模块内部强内聚模块之间低耦合模块n模块m不按照模块化的原则来进行软件设计会怎样?模块内部强内聚模块之间低耦合高内聚度原则何为模块的内聚度?指该模块内各成分间彼此结合的紧密程度,越高越好,高内聚内聚度分类偶然性内聚:模块内各成分为完成一组功能而结合在一起,关系松散逻辑性内聚:模块完成的诸任务逻辑上相关时间性内聚:模块内诸任务必须在同一时间段内执行过程性内聚:模块内各成分相关且必须按特定次序执行通讯性内聚:模块内各成分对数据结构的同一区域操作顺序性内聚:模块内各成分与同一功能相关且顺序执行功能性内聚:模块内各成分是一整体,完成单个功能低耦合度原则何为模块间的耦合度?模块间的相关程度,越低越好,低耦合耦合度分类非直接耦合:二个模块都不依赖对方而独立存在数据耦合:二个模块通过参数交换信息且仅限于数据控制耦合:二个模块通过参数交换信息包含控制信息特征耦合:介于数据耦合和控制耦合之间外部耦合:二个模块与同一外部环境相关联(文件等)公共耦合:模块间通过全局数据环境相互作用内容耦合:一个模块使用另一模块内的数据和控制信息,或者直接转移到另一模块内执行模块分解与开发成本之间的关系工作量或成本设计模块总数最小成本区域用于接口的开销每个模块的成本按照模块化原则开展软件设计,有助于得到模块数量适中、开发工作量和成本较低、易于维护的设计结果3.信息隐藏原则何为信息隐藏?模块应该设计得使其所含的信息对那些不需要这些信息的模块不可访问;模块间仅仅交换那些为完成系统功能所必需交换的信息信息隐藏的优点模块的独立性更好支持模块的并行开发(设计和编码)减少错误向外传播,便于测试和维护便于增加新的功能信息隐藏示例模块只提供对外接口,不提供内部实现细节Public方法对外可访问某些方法或属性设计为不可访问Private不可访问面向对象方法学如何支持信息隐藏?4.关注点分离原则何为关注点针对概念、任务和目标的某个部分或者侧面的聚焦关注点:结构、行为等何为关注点分离设计师将若干性质不同的关注点分离开来,以便在适当的时间处理不同的关注点,随后将这些关注点整合起来,形成局部或者全局性的设计结果防止“胡子眉毛一把抓”关注点不分离会产生什么样的后果?5.软件重用原则尽可能地重用已有的软件资产来实现软件系统的功能,同时要确保所开发的软件系统易于重用可被重用的软件资产代码形式:代码片段、过程、函数、类、软构件、开源软件其他形式:软件设计模式、软件开发知识支持软件重用的技术手段封装、接口、继承、多态等为什么软件重用可以提高软件设计的质量和开发效率?6.软件设计的其它原则设计可追溯到分析模型经常关注待建系统的架构数据设计和功能设计同样重要必须设计接口用户界面设计必须符合最终用户要求设计表述要尽可能易于理解设计应该迭代进行内容软件设计概述设计元素、任务和过程软件设计原则抽象、求精、模块、隐藏、多视点、分离软件设计方法学结构化设计方法面向对象设计方法软件设计输出及评审软件设计软件制品、软件设计缺陷及评审要求何为软件设计方法?软件设计方法明确了按照什么样的思想、理念和技术来开展软件设计抽象:模块及交互过程:设计步骤语言:设计描述工具:设计支撑有哪些软件设计方法结构化软件设计方法面向对象软件设计方法3.1结构化软件设计结构化软件设计方法学(StructuredDesignMethodology)产生于二十世纪七十年代,代表性成果是面向数据流的软件设计方法学基本思想基于结构化需求分析结果(如数据流图),将其设计为以功能模块为核心的软件设计模型(如模块化、层次化的设计模型),最后交由结构化程序设计语言(如C、Fortran等)加以实现面向数据流的设计方法学主要用于支持软件的体系结构设计,其思想简单、技术成熟,在软件产业界得到广泛应结构化软件设计的输出结果模块层次图–软件体系结构模块1模块2.1模块2.2模块2.3模块2.k模块3.1模块3.2模块3.3模块3.4模块3.r模块n.m模块n.1第1层第2层第3层第n层模块作为软件体系结构的基本单元模块之间的交互表现为模块调用软件体系结构变现为层次化的形式结构化软件设计方法的输入、输出和方法输入需求分析阶段得到的数据流图输出层次化的软件体系结构图方法将数据流图映射为软件体系结构图数据流图转换方法软件体系结构数据流图的形式变换流和事务流外部形式外部形式内部形式内部形式事务中心(a)变换型数据流图(b)事务型数据流图将数据流图映射为软件体系结构图的方法变换型数据流图的映射方法事务型数据流图的映射方法3.1.1变换流的映射方法–输入输入:变换型数据流图示例:变换型的数据流图“Mini-12306”中“查询车次”转换进行精化后所得到的2级数据流图步骤1:确定输入流、输出流和变换流划定输入流界和输出流界,将数据流图划分为三个部分输入流、输出流、变换流示例:划定流界步骤2:执行一级分解一级分解的任务是要导出具有三个层次的软件结构最顶层为主控模块,负责协调和控制中间层的模块最底层对应于输入流、输出流和变换流中的转换经过变换后所映射的软件模块中间层的三个控制模块,用于控制最底层软件模块示例:一级分解得到的软件体系结构粗胚主控模块变换流控制模块
输入流控制模块
输出流控制模块
输入流部分的转换映射来的模块变换流部分的转换映射来的模块输出流部分的转换映射来的模块顶层中间层底层步骤3:执行二级分解将数据流中输入流、输出流、变换流中的转换映射为软件模块,并将它们放在软件结构底层的适当位置沿着输入流界和输出流界往外移动,把所遇到的每一个转换映射为一个相应的模块输入流部分的转换所映射的模块放置在“输入流控制模块”之下。输出流部分的转换所映射的模块放置在“输出流控制模块”之下沿着输入流界向输出流界移动,把所遇到的每一个转换映射为一个相应的模块,放置在“变换流控制模块”之下示例:二级分解得到的软件体系结构主控模块变换流控制模块输入流控制模块输出流控制模块顶层中间层底层产生异常状况提示信息获取家属和医生的手机信息建立与家属和医生的连接将提示信息发到家属和医生手机上将老人信息传送到网络连接中播放语音和显示图像视频信息示例:二级分解得到的软件体系结构Mini-12306中的案例主控模块变换流控制模块
输入流控制模块
输出流控制模块
顶层中间层底层分析查询信息的合法性查询列车信息库显示车次信息步骤4:优化软件体系结构删除不必要模块、合并高耦合度模块、拆分低内聚度模块,得到高内聚度、低耦合度、易于实现和测试的软件体系结构主控模块输出流控制模块
顶层中间层底层产生异常状况提示信息获取家属和医生的手机信息建立与家属和医生的连接将提示信息发到家属和医生手机上将老人信息传送到网络连接中播放语音和显示图像视频信息示例:优化软件体系结构Mini-12306中的案例主控模块顶层底层分析查询信息的合法性查询列车信息库显示车次信息3.1.2事务流的映射方法–输入输入:事务型数据流图示例:事务型的数据流图Mini-12306中的案例步骤1:确定事务中心和动作路径分析事务中心,整个事务型数据流图就可分为三个部分:事务中心、接收路径、动作路径集合示例:划定事务型数据流图的流界Mini-12306中的案例步骤2:执行一级分解将事务型数据流图映射为软件体系结构整体框架它主要由“接收路径控制”和“散转”二部分的模块组成事务控制接收路径控制散转接收路径部分的转换经映射产生的模块动作路径1经转换映射产生的模块动作路径n经转换映射产生的模块步骤3:处理事务中心和每条路径的数据流图把事务中心和每条路径的数据流图映射为相应软件模块事务控制接收路径控制分析控制命令读取控制命令评估机器人传感器控制命令的安全性和合法性评估机器人移动控制命令的安全性产生运动指令示例:映射事务处理中心和每条路径Mini-12306中的案例事务控制接收路径控制分析用户类别提取用户类别查询旅客库查询售票员库分析登录结果分析登录信息合法性步骤4:优化软件体系结构对软件体系结构进行优化处理,以便提高整个软件体系结构的模块化程度和质量事务控制分析控制命令读取控制命令评估机器人传感器控制命令的安全性和合法性评估机器人移动控制命令的安全性产生运动指令示例:优化软件体系结构Mini-12306中的案例事务控制分析用户类别提取用户类别查询旅客库查询售票员库分析登录结果分析登录信息合法性结构化软件设计方法的特点以数据流为输入,以层次化的软件体系结构为输出采用转换和映射的方法得到的是软件体系结构,属于软件体系结构设计工作在此基础上可以进一步开展详细设计工作3.2面向对象软件设计方法学针对面向对象需求分析所得到的软件需求模型(如用例图、交互图、分析类图),对其进行不断精化(而非转换),获得软件系统的各类软件设计元素,如子系统、构件、设计类等,产生不同视角、不同抽象层次的软件设计模型,如软件体系结构图、用例设计交互图、设计类图、活动图等,形成软件系统完整和详尽的设计方案面向对象软件设计方法学面向对象软件设计方法学面向对象软件需求模型面向对象软件设计模型提供了概念、机制、过程、策略等来支持OO软件设计,产生高质量软件设计面向对象软件设计过程软件体系结构设计用户界面设计构件/子系统设计用例设计数据设计类设计详细设计面向对象的概念、机制和建模语言(如UML)等面向对象软件设计建模-包图用包图表示的软件体系结构设计包来表示体系结构要素软构件来表示体系结构要素面向对象软件设计建模-顺序图顺序图用于表示对象之间的交互时序及内容面向对象软件设计的优势(1/2)高层抽象和自然过渡面向对象概念更加贴近于现实世界,有助于对应用问题以及软件系统的直观理解和建模采用相同的一组抽象和概念来进行描述和分析,基于模型的精化手段来实现软件设计,极大简化了软件设计工作面向对象模型更易于为人们所接受,可减少软件工程师与用户之间的交流鸿沟,有助于支持大型复杂软件系统的开发多种形式和粗粒度的软件重用提供了多种方式来支持软件重用,进而有助于提高软件开发的效率和质量面向对象软件设计的优势(2/2)系统化的软件设计系统地支持软件设计阶段的所有工作,包括体系结构设计、用户界面设计、数据设计、软构件设计、子系统设计、用例设计、类设计等等支持软件的扩展和变更提供了接口、抽象类、继承、实现等多种机制,可以设计出易于扩展和变更的软件设计模型3.3软件设计的CASE工具软件设计文档撰写工具如借助于MicrosoftOffice、WPS等软件设计模型绘制工具如MicrosoftVisio、StarUML、ArgoUML等工具软件设计分析和转换工具如IBMRationalRose等软件工具配置管理工具和平台如Git、Github、Gitlab、PVCS、MicrosoftSourceSafe等,支持软件需求制品(如模型、文档等)的配置、版本管理、变化跟踪等3.4软件设计工程师负责软件设计的各项工作,包括体系结构设计、数据设计、用户界面设计、详细设计等包括架构师、数据设计工程师、用户界面设计工程师等等创新能力抽象和建模能力质量保证能力组织、沟通和协调能力权衡抉择能力内容软件设计概述设计元素、任务和过程软件设计原则抽象、求精、模块、隐藏、多视点、分离软件设计方法结构化设计方法面向对象设计方法软件设计输出及评审软件设计软件制品、软件设计缺陷及评审要求4.1软件设计的输出软件设计模型它从多个不同的视角、不同的抽象层次描述了软件的设计信息,并采用诸如UML、模块图、层次图等图形化的方式来加以刻画软件设计文档它采用自然语言的形式,结合软件设计模型,详细描述软件系统的各项设计,包括体系结构设计、子系统和构件设计、用户界面设计、用例设计、数据设计等等4.2软件设计文档规范及其内容文档概述系统概述设计目标和原则设计约束和现实限制体系结构设计用户界面设计子系统/构件设计用例设计类设计数据设计接口设计软件设计文档采用图文并茂的方式详细描述软件设计的具体内容4.3软件设计中的缺陷设计不满足需求对软件需求的理解存在偏差,未能正确地理解用户的软件需求,导致所设计的软件无法满足用户的需要设计质量低下设计过程中未能遵循设计原则、缺乏设计经验,导致软件设计质量低下,如设计的软件不易于维护和扩展设计存在不一致不同软件设计制品对同一个设计有不同的描述,或者存在不一致甚至相冲突的设计内容;多个不同软件设计要素之间存在不一致设计不够详尽未能提供设计细节性信息,导致程序员无法根据设计来开展编码工作4.4软件设计的评审目的:发现软件设计模型和文档中的缺陷谁参与评审设计工程师、程序员、测试工程师、用户、质量保证人员等评审什么内容文档规范性,软件设计文档是否符合软件设计规格说明书设计制品的可理解性,是否简洁、易于理解设计内容的合法性,设计结果是否符合相关的标准、法律和法规设计的质量水平,软件设计是否遵循设计原则,质量如何设计是否满足需求,设计是否完整和正确地实现了软件需求设计优化性,软件设计是否还有待优化的内容4.5软件设计的管理软件设计的变更管理明确哪些方面发生了变更、这些变化反应在软件设计模型和文档的哪些部分、导致软件设计模型和文档的版本发生了什么样变化软件设计的追溯管理搞清楚是什么原因导致了软件设计的变更,评估设计变更的影响域,评估设计变更对软件项目开发带来的影响软件设计的基线管理一旦软件设计模型和文档通过了评审,纳入到基线库中拓展阅读设计原本“TheDesignofDesign:EssaysfromAComputerScientist”,FrederickP.Brooks著,高博朱磊王海鹏译,机械工业出版社,2013.该书是《人月神话》作者、著名计算机科学家、软件工程教父、美国两院院士、图灵奖和IEEE计算机先驱奖得主Brooks的另一项重要著作。该书从工程师和架构师的视角深入探讨了软件设计的过程,尤其是复杂系统的设计过程,旨在提高软件产品的实用性与有效性,以及设计的效率。作者分析了软件设计过程的演进,探讨了协作和分布式设计,阐明了哪些因素造就了真正卓越的软件设计者课后作业和课程实训访问/paths/1944完成第八章“软件设计基础”的实训闯关任务本章知识图谱小结软件设计是要给出软件需求的实现解决方案设计既要满足需求,也要关注质量;设计用于指导实现和编码软件设计有其过程,要循序渐进地开展设计从体系结构设计、用户界面设计、详细设计软件设计要遵循一系列的基本原则模块化、信息隐藏、逐步求精、多视点等面向对象软件设计的特点基于面向对象的概念和抽象,系统性的设计支持,具有多种优点对软件设计结果进行文档化和评审撰写软件设计文档,发现和纠正软件设计中存在的缺陷综合实践一任务:搜寻可支持新需求实现的开源软件或其它可重用软件资源方法分析开源软件的实现技术和运行环境,到开源软件托管平台中寻找合适的开源软件要求深入理解软件设计需要满足的约束和限制,找到可有效支持新需求实现的可重用软件资源结果:无综合实践二任务:搜寻可有效支持软件实现的开源软件或其它的可重用软件资源方法基于软件开发平台(如编程语言环境)所提供的软件开发包来寻找可重用的软件资源,或者到开源软件托管平台(如Github、Gitee)寻找合适的开源软件要求结合软件开发的各种约束和限制来理解软件设计的约束和限制,尽可能多的找到可支持软件实现的可重用软件资源结果:无问题和讨论软件体系结构设计软件工程内容何为软件体系结构概念、视图、模型及UML表示软件体系结构风格如何开展软件体系结构设计任务、目标、要求和原则体系结构设计过程软件体系结构设计的结果及评审文档模板、验证原则1.1软件体系结构的概念软件体系结构(SoftwareArchitecture,SA)也称软件架构,从高层抽象角度刻画组成软件系统的设计元素及它们之间的逻辑关联MMMMMMMMM软件体系结构如何体现高层和抽象特征?这里的设计元素是什么?1.2软件体系结构的设计元素构件(Component)构成体系结构的基本功能部件连接件(Connector)组件之间的连接和交互关系约束(Constraint)组件中的元素应满足的条件以及组件经由连接件组装成更大模块时应满足的条件MMMMMM1.构件何为构件软件系统中的物理模块,具有特定的功能和精确定义的对外接口,外界可通过接口来访问它特点可分离:一个或数个可独立部署执行码文件可替换:构件实例可被其它任何实现了相同接口的另一构件实例所替换可配置:可通过配置机制修改构件配置数据,影响构件对外服务的功能或行为可复用:构件可不经源代码修改,无需重新编译,即可应用于多个软件项目或软件产品示例:构件.dll文件.jar文件构件不是源程序,而是可运行的二进制代码构件是物理存在的(有实际的文件),而非是逻辑存在的构件是可访问的,以获取其功能和服务构件应该是粗粒度的,而非细粒度的示例:软构件Acrobat软件中的软构件物理存在粗粒度可访问可运行分布的(可能)构件的UML表示可以用不同的UML图符来表示软构件思考和讨论举例和示范你计算机中安装的软件及其构件对比软构件与源代码、软构件与.class之间的区别和联系为什么要将软件组织为一组构件2.连接子连接子表示软构件之间的连接和交互关系每个软构件并非孤立,它们之间通过连接进行交互交互的目的是为了交换数据、获得功能和服务软构件之间的典型交互方式消息传递(MessageSending)事件通知和广播过程调用远程过程调用(RemoteProcedureCall,RPC)主题订阅等等硬件接口连接和接口二种接口(Interface)供给接口:对外提供的接口需求接口:请求其他构件帮助所需的接口连接端口(Port)每个端口绑定了一组供给接口和/或需求接口构件通过端口与外部世界交互当外部请求到达端口时,构件的端口知道如何将外部请求路由至合适的接口的实现体当构件通过端口请求外部服务时,端口也知道如何分辨该请求所对应的需求接口构件通过接口对外提供服务构件通过接口访问其他构件,获得功能构件与接口构件的实现与构件的接口相分离构件开发者可自由选择实现方法,只要它实现供给接口中的操作及属性两个构件的实现遵循相同接口定义,它们就可自由替换构件交互示例:构件之间的连接和交互节点A节点B节点C订阅者发布者话题/消息订阅者发布者话题/消息客户端服务请求服务端服务响应连接和接口的表示对外提供的接口需要访问其他构件的接口硬件的接口软件的接口思考和讨论如果一个软构件没有对外的接口是否可以?是否有意义?没有接口的软构件会带来什么问题?1.2.3约束约束对软构件的布局及相互之间的交互进行必要的限制示例高层次软件元素可向低层次软件元素发请求,低层次软件元素完成计算后向高层次发送应答,反之不行每个软件元素根据其职责位于适当的层次,不可错置,如核心层不能包含界面输入接收职责每个层次都是可替换的,一个层次可以被实现了同样的对外服务接口的层次所替代1.3软件体系结构的不同视图逻辑视图:要素及关系,站在结构视点和抽象层次运行视图:在特定时刻软构件的具体情况开发视图:构件的代码组织及其形式物理视图:软构件的部署及其连接和交互软件体系结构是从结构的角度来刻画软件系统可从不同视角来理解、认识、表示和分析软件体系结构1.软件体系结构的逻辑视图:包图包模型刻画包间的构成和依赖关系包可以包含一组具有逻辑关联的UML模型元素包间逻辑关系:构成关系、依赖关系包图可描述软件系统的高层结构包图以结构化、层次化方式组织、管理大型的软件模型,使得分别处理不同包的开发团队之间的相互干扰程度降至最低包图:系统(子系统)、软构件及逻辑关系示例:软件体系结构的包图表示包图表示软件体系结构2.软件体系结构的逻辑视图:构件图描述软件系统中构件及构件间的关系结点:构件、类和包关系:交互、依赖关系对软件体系结构的描述描述软件系统中构件的接口定义及构件间的依赖关系,以便评估软件变更的影响范围描述软件系统或其中某个局部的构件化设计,为在后续开发阶段实现构件化的软件模块订立设计规约示例:软件体系结构的构件图表示“Customer”子系统的内部体系结构构件接口和端口关系(依赖)3.软件体系结构的开发视图各软件要素源代码的程序分包及目录结构体系结构的类库、中间件、框架和子系统,它们与逻辑视图中各个软件元素之间的映射关系小米便签的代码开发视图4.软件体系结构的部署视图部署图软件安装部署的物理机器及其连接,各个构件元素在这些机器上的部署位置表示软件系统可执行工件在运行环境中的分布情况工件(Artifact)工件:软件系统中相对独立的物理实现单元示例:Windows平台下DLL文件、Java系统中类库(jar)文件两种部署图逻辑层面的描述性部署图物理层面的实例性部署图示例:描述性部署图构件通信计算节点工件5.软件体系结构的运行视图软件运行时进程、线程的划分,它们之间的并发和同步,它们与逻辑视图和开发视图之间的映射关系可用UML的活动图、对象图来表示1.4描述软件体系结构的三类UML图包图构件图部署图包图©CopyrightXinjunMao118视点图(diagram)说明结构
包图(packagediagram)从包层面描述系统的静态结构类图(classdiagram)从类层面描述系统的静态结构对象图(objectdiagram)从对象层面描述系统的静态结构构件图(componentdiagram)描述系统中构件及其依赖关系行为
状态图(statechartdiagram)描述状态的变迁活动图(activitydiagram)描述系统活动的实施通信图(communicationdiagram)描述对象间的消息传递与协作顺序图(sequencediagram)描述对象间的消息传递与协作部署部署图(deploymentdiagram)描述系统中工件在物理运行环境中的部署情况用例用例图(usecasediagram)从外部用户角度描述系统功能1.包图功效刻画包间的构成和依赖关系图的构成节点:包边:包间的关系包间的关系组成和依赖何为包?一组具有逻辑关联的UML模型元素(例如用例、类等)、模型图(用例图、类图、交互图、状态图、活动图等),以及其他的包包在模型管理过程中是配置管理的基本单元,同时也为访问控制提供基本手段Name包的作用作为软件模型的组织单元将大型软件系统划分成不同包,以构建各类模型作为模型管理的基本单元以包为单位分派开发任务安排计划,包是天然的基本处理单元作为系统高层结构中的组成元素。逐级细分的包才是软件高层结构中恰当的组成元素作为访问控制的基本手段将包视为名字空间,每个模型元素可通过在其名称之前拼接包名,构成全系统范围内的唯一限定名来指称它,正如在文件系统中以文件的全路径名来唯一地指称一个文件示例:包图包gtask.data.Node2.构件图视点图(diagram)说明结构
包图(packagediagram)从包层面描述系统的静态结构类图(classdiagram)从类层面描述系统的静态结构对象图(objectdiagram)从对象层面描述系统的静态结构构件图(componentdiagram)描述系统中构件及其依赖关系行为
状态图(statechartdiagram)描述状态的变迁活动图(activitydiagram)描述系统活动的实施通信图(communicationdiagram)描述对象间的消息传递与协作顺序图(sequencediagram)描述对象间的消息传递与协作部署部署图(deploymentdiagram)描述系统中工件在物理运行环境中的部署情况用例用例图(usecasediagram)从外部用户角度描述系统功能构件图功效描述软件系统中构件及构件间的构成和依赖关系图的构成节点:构件,具有对外接口、可分离和独立功能物理模块边:构件间的依赖关系构件及其接口构件一个或者多个可独立部署的执行码文件具有精确定义的供给接口和需求接口可分离,接口和实现分离可替换,构件实例可被任何实现相同接口的同一构件实例所替换接口一组操作和/或属性的说明(不含操作的实现),它用作服务提供方和使用方之间的协议每个构件还可以定义一些端口(port),每个端口绑定了一组供给接口和/或需求接口接口由类或构件实现©CopyrightXinjunMao125构件和接口的表示构件的三种图元构件及其接口的两种表示方法供给接口需求接口示例:构件图©CopyrightXinjunMao127依赖关系示例:构件图端口接口3.部署图视点图(diagram)说明结构
包图(packagediagram)从包层面描述系统的静态结构类图(classdiagram)从类层面描述系统的静态结构对象图(objectdiagram)从对象层面描述系统的静态结构构件图(componentdiagram)描述系统中构件及其依赖关系行为
状态图(statechartdiagram)描述状态的变迁活动图(activitydiagram)描述系统活动的实施通信图(communicationdiagram)描述对象间的消息传递与协作顺序图(sequencediagram)描述对象间的消息传递与协作部署部署图(deploymentdiagram)描述系统中工件在物理运行环境中的部署情况用例用例图(usecasediagram)从外部用户角度描述系统功能部署图功效表示软件系统可执行工件(artifact)在运行环境中的部署和分布情况工件是指软件中相对独立的物理实现单元,如动态链接库(DLL)文件、Java类库(jar)文件图的构成节点:计算节点、工件、构件边:通信和依赖两种部署图逻辑层面的描述性部署图描述软件的逻辑布局物理层面的实例性部署图针对具体运行环境和特定的系统配置描述软件系统的物理部署情况©CopyrightXinjunMao130描述性部署图的节点节点表示软件运行环境中的一组计算资源(如Web服务器、应用服务器、数据库服务器等),软件工件驻留于其中,并依赖其提供的基础服务工件以构造型<<artifact>>标识,工件位于节点图元之内构件位于节点之内的构件表示该构件部署于相应节点,位于节点之外的构件主要用来指明工件与构件之间的依赖关系与用例有关的执行者在部署图中引入执行者意在强调执行者与部署于节点中的工件之间的使用关系及信息交互描述性部署图的边节点之间的通信关联表示两个节点间的通信连接工件之间的依赖关系如果工件定义了对外接口,那么应确保工件间的依赖关系表现为工件接口上的依赖关系,如此可降低工件之间的耦合度工件与构件之间的依赖关系表示工件具体实现了构件用例执行者与工件之间的依赖关系表示执行者使用工件提供的服务或工件使用执行者提供的服务示例:描述性部署图实例性部署图实例性部署图与描述性部署图之间的关系可类比为对象图与类图之间的关系实例性部署图中节点的命名方式为“节点名:类型名”,其中类型名为描述性部署图中的节点名部署图的建模原则节点按行上下对齐,按列左右对齐,边绘制成水平线段、垂直线段或者由水平、垂直两种线段组合而成的折线,避免斜线工件和构件的放置应尽量使依赖关系的方向从左至右供给接口位于构件的左侧,需求接口位于构件的右侧示例:实例性部署图通讯协议通讯协议实例节点1.5软件设计模式借用以往的经验来解决问题以设计重用为目的,采用一种良定义的、正规的、一致的方式记录的软件设计经验关注在一般或特定设计环境中可能重复出现的设计问题,并给出经过充分实践考验的软件解决方案名称问题施用和约束条件解决方案效果不同抽象层次的设计模式体系结构风格面向整个软件系统构件设计模式面向子系统或者构件实现设计模式针对子系统或构件中的某个特定问题整体、全局局部细节体系结构设计风格面向整个软件系统,在抽象层次给出软件体系结构的结构化组织方式提供一些预定义的子系统或者构件,规定其职责,明确它们之间的相互关系、协作方式的规则或指南针对不同的问题采用不同的体系结构模式常用软件体系结构风格分层风格管道与过滤器风格黑板风格MVC风格SOA风格总线风格……1.分层体系结构模式模式思想将软件系统按照抽象级别逐次递增或递减的顺序,组织为若干层次,每层由一些抽象级别相同构件组成典型层次示例顶层:直接面向用户提供软件系统的交互界面底层:则负责提供基础性、公共性的技术服务,它比较接近于硬件计算环境、操作系统或数据库管理系统中间层:介乎二者之间,负责具体的业务处理何为抽象级别?示例:分层体系结构风格服务业务界面合理地设计抽象层次和组织软构件是关键交互和约束构件连接子约束分层体系结构模式的约束层次间的关系每层为其紧邻上层提供服务,使用紧邻下层所提供的服务(约束)上层向下层发出服务请求,下层为上层反馈服务结果(连接)下层向上层提供事件信息,上层对下层通知做出处理(连接)服务接口的组织方式(连接)层次中的每个构件分别公开其服务接口每个层次统一对外提供整合的服务接口分层体系结构模式的特点松耦合减低整个软件系统的耦合度可替换一个层次可以有多个实现实例可复用层次和整个系统可重用标准化支持体系结构及其层次、接口的标准化2.管道与过滤器风格构件将软件功能实现为一系列处理步骤,每个步骤封装在一个过滤器构件中连接子相邻过滤器间以管道连接,一个过滤器的输出数据借助管道流向后续过滤器,作为其输入数据数据软件系统的输入由数据源(datasource)提供软件最终输出由源自某个过滤器的管道流向数据汇(datasink)典型数据源和数据汇包括数据库、文件、其他软件系统、物理设备等管道与过滤器模式的示例数据汇管道过滤器数据源管道与过滤器风格的约束过滤器与管道之间的协作方式(连接和约束)过滤器以循环的方式不断地从管道提取输入数据,并将其输出数据压入管道,称为主动过滤器管道将输入数据压入到位于其目标端过滤器,过滤器被动地等待数据,称为被动过滤器管道负责提取位于其源端过滤器的输出数据设计考虑如果管道连接的两端均为主动过滤器,那么管道必须负责它们之间的同步,典型的同步方法是先进先出缓冲器如果管道的一端为主动过滤器,另一端为被动过滤器,那么管道的数据流转功能可通过前者直接调用后者来实现示例:管道与过滤器风格词法分析语法分析生成中间码代码优化源代码词法分析结果语法分析结果中间码可执行代码编译器采用的就是一个典型的管道/过滤器风格管道过滤器管道管道过滤器过滤器过滤器管道与过滤器模式的特点自然地解决具有数据流特征的软件需求可独立地更新、升级过滤器来实现软件系统的扩展和进化3.黑板风格将软件系统划分为黑板、知识源和控制器三类构件黑板:负责保存问题求解过程中的状态数据,并提供这些数据的读写服务知识源:负责根据黑板中存储的问题求解状态评价其自身的可应用性,进行部分问题求解工作,并将此工作的结果数据写入黑板控制器:负责监视黑板中不断更新的状态数据,安排(多个)知识源的活动。黑板风格示意图构件构件构件连接知识源实际上是处理数据黑板风格的约束控制构件通过观察黑板中的状态数据来决定哪些知识源对后续的问题求解可能有所贡献,然后调用这些知识源的评价功能以选取参与下一步求解活动的知识源被选中的知识源基于黑板中的状态数据将问题求解工作向前推进,并根据结果更新黑板中的状态数据控制构件不断重复上述控制过程,及至问题求解获得满意的结果黑板风格的特点可灵活升级和更换知识源和控制构件知识源的独立性和可重用性好知识源之间没有交互软件系统具有较好的容错性和健壮性知识源的问题求解动作是探索性的,允许失败和纠错4.MVC风格模型构件负责存储业务数据并提供业务逻辑处理功能视图构件负责向用户呈现模型中的数据控制器在接获模型的业务逻辑处理结果后,负责选择适当的视图作为软件系统对用户的界面动作的响应MVC体系结构示意图模型构件,处理数据视图构件,展示数据控制构件,根据数据选择视图展示连接MVC风格的约束创建视图,视图对象从模型中获取数据并呈现用户界面视图接受界面动作,将其转换为内部事件传递给控制器所有视图在接获来自模型的业务数据变化通知后向模型查询新的数据,并据此更新视图控制器将用户界面事件转换为业务逻辑处理功能的调用控制器根据模型的处理结果创建新的视图、选择其他视图或维持原有视图模型进行业务逻辑处理,将处理结果回送给控制器,必要时还需将业务数据变化事件通知给所有视图5.SOA风格将软件系统的软构件抽象为一个个的服务(Service),每个服务封装了特定的功能并提供了对外可访问的接口任何一个服务既可以充当服务的提供方,接受其他服务的访问请求;也可充当服务的请求方,请求其他服务为其提供功能任何服务需要向服务注册中心进行注册登记,描述其可提供的服务以及访问方式,才可对外提供服务SOA软件体系结构风格示意图服务注册中心服务请求方服务提供方1.注册和发布服务2.查询服务3.访问和获得服务构件SOA风格的特点将服务提供方和服务请求方独立开来,因而支持服务间的松耦合定义允许任何一个服务在运行过程中所扮演角色的动态调整,支持服务集合在运行过程中的动态变化,因而具有非常强的灵活性提供了诸如UDDI、SOAP、WSDL等协议来支持服务的注册、描述和绑定等,因而可有效支持异构服务间的交互6.消息总线风格包含了一组软构件和一条称为“消息总线”的连接件来连接各个软构件消息总线成为软构件之间的通信桥梁,实现各个软构件之间的消息发送、接收、转发、处理等功能每一个软构件通过接入总线,实现消息的发送和接收功能消息总线风格示意图消息总线(事件、消息、数据、……)软构件软构件软构件软构件软构件构件讨论:实践项目的软件体系结构基于上述软件体系结构模式,思考你的实践项目应该采用什么样的软件体系结构模式?为什么?内容何为软件体系结构概念、视图、模型及UML表示软件体系结构风格软件体系结构设计任务、目标、要求和原则体系结构设计过程文档化和评审软件体系结构设计文档模板、验证原则2.1软件体系结构设计的任务建立满足软件需求的软件体系结构明确定义各子系统、构件、关键类的职责划分及协作关系明确它们在物理运行环境下的部署特点针对软件系统全局性、基础性技术问题给出技术解决方案宏观、全局、层次、战略、多视点、关键性软件体系结构设计示意图软件体系结构设计功能性需求非功能性(质量)需求开发约束需求软件体系结构风格遗留软件和可重用软件资源软件体系结构模型2.2软件体系结构设计的目标满足软件需求实现软件需求……追求高质量可扩展可伸缩易维护…….软件体系结构设计软件需求软件体系结构模型制约因素满足高质量非功能需求在体系结构设计中起着非常重要的作用软件体系结构设计vs软件需求体系结构是以软件需求实现为目标的软件设计蓝图软件需求是体系结构设计的基础和驱动因素软件需求,尤其是非功能需求,对软件体系结构具有关键性的塑形作用软件体系结构设计软件需求软件体系结构模型制约因素软件体系结构设计vs详细设计体系结构设计为详细设计提供可操作指导详细设计是对体系结构设计中设计要素的局部设计详细设计须遵循体系结构设计:如接口和约束详细设计只能实现、不能更改体系结构设计中规定模块的接口和行为体系结构设计人机界面设计详细设计整合与验证迭代设计、反复精化、持续优化基于体系结构设计的结果来指导详细设计软件体系结构设计的重要性和关键性承上启下软件需求—详细设计,后续的详细设计和软件实现的主要工作基础影响深远对性能、灵活性、可修改性、可扩充性等质量需求的影响是决定性的,软件质量的瓶颈定型质量对软件质量的全局性、决定性影响思考和讨论对比建筑物的体系结构设计,如果软件体系结构设计的不好,会产生什么样的问题?何为一个高质量的软件体系结构设计?2.3软件体系结构设计的过程设计初步的软件体系结构重用可用的软件资源精化软件体系结构设计部署模型文档化和评审软件体系结构软件体系结构模型初步软件体系结构初步软件体系结构软件体系结构模型软件体系结构设计的原则高层抽象和组织模块化信息隐藏软件重用多视点分离遵循这些设计原则有助于得到高质量的软件体系结构1.设计初步的软件体系结构任务基于功能性和非功能性软件需求,参考业界已有的软件体系结构设计风格,设计出目标软件系统的初始体系结构,明确每个构件的职责以及构件间的通信和协作关系输出:初步的软件体系结构针对软件需求,寻求体系结构风格,给出初步和粗糙的顶层架构,以供后续设计阶段的精化和细化无需关注架构中各个子系统或构件内部的实现细节用UML中的包图对所设计的顶层架构进行直观的表示初始体系结构设计的方法初创体系结构设计关键软件需求体系结构风格一个或者多个初始体系结构模式软件开发经验辨识关键软件需求确定最能体现待开发软件特色的核心功能需求通常是杀手功能,独有的功能确定核心或基础性功能其他功能依赖于这些功能或仅当这些功能实现后其他功能才有意义确定为实现对外接口所必需的支持功能对外接口的实现依赖于这些功能需求项的实现标识实现难度较大、实现风险较高的功能高难度、高风险功能的设计,及其可操作的风险化解策略确定对用户满意度影响大的功能需求直接影响用户对软件系统的评价剔除对体系结构塑形无贡献的功能需求项抛弃不重要的软件需求根据关键需求选择合适体系结构风格积累体系结构风格清单人们总结出了几十种软件体系结构风格对风格进行分门别类便于快速找到适合于关键需求的风格要熟悉每种风格的特点和应用场所各种风格适合解决的问题和需求针对关键需求对比多种风格正面效果是否适合、负面效果是否可容忍、是否与关键需求相冲突不同体系结构风格适合的应用类别特点典型应用管道/过滤器风格数据驱动的分级处理,处理流程可灵活重组,过滤器可重用数据驱动的事务处理软件,如编译器、Web服务请求等层次风格分层抽象、层次间耦合度低、层次的功能可重用和可替换绝大部分的应用软件MVC风格模型、处理和显示的职责明确,构件间的关系局部化,各个软构件可重用单机软件系统,Web应用软件系统SOA风格以服务作为基本的构件,支持异构构件之间的互操作,服务的灵活重用和组装部署和运行在云平台上的软件系统消息总线风格提供统一的消息总线,支持异构构件之间的消息传递和处理异构构件之间消息通信密集型的软件系统示例:初步软件体系结构的设计(1/2)“空巢老人看护软件”的关键软件需求监视老人、自主跟随老人、获取老人信息、检测异常状况、通知异常状况、控制机器人、视频/语音交互、提醒服务等八项功能性需求为核心软件需求。其他二项软件需求为非关键软件需求。分析不同质量需求对软件系统的竞争力带来的影响和挑战,可将性能、易用性、安全性、私密性、可靠性、可扩展性等质量需求作为关键需求“空巢老人看护软件”需要采用分布式的运行和部署形式,前端软件制品部署在Android手机上,后端软件制品要支持多种机器人的运行,以方便老人家属和医生的灵活和便捷使用。该开发约束将作为关键软件需求来指导软件体系结构的设计示例:初步软件体系结构的设计(2/2)“空巢老人看护软件”初步软件体系结构设计示例:初步软件体系结构的设计(1/2)Mini-12306软件具有以下的关键软件需求注册、登录、查询车次、购票、退票、改签、支付等功能性需求为关键软件需求。设置系统为非关键软件需求根据对该软件系统的质量需求描述,软件性能、易用性、安全性、私密性、可靠性、可扩展性等质量需求作为关键需求针对该软件的应用场景,Mini-12306软件需要采用分布式部署和运行形式,前端软件制品部署在Android手机上,后端软件制品运行在云平台或客户方的远端服务器上。该开发约束将作为关键软件需求来指导软件体系结构的设计。示例:初步软件体系结构的设计(2/2)基于大模型的软件体系结构生成软件体系结构的设计对软件设计工程师提出很高的要求软件工程知识水平、软件设计经验和阅历等基于大模型技术的智能化软件体系结构设计给大模型工具提示软件系统的关键软件需求大模型工具生成软件体系结构设计的具体内容,包括采用什么样的体系结构风格、关键构件的设计、技术选型、注意事项等等可为软件设计工程师提供重要的参考示例:基于大模型的软件体系结构生成(1/3)示例:基于大模型的软件体系结构生成(2/3)示例:基于大模型的软件体系结构生成(3/3)
2.重用开源软件及已有软件资产搜索已有的粗粒度软件资产可重用的软件开发包,如函数库、类库、构件库等互联网上的云服务,为特定问题提供独立功能,如身份验证、图像识别、语音分析等等遗留软件系统,已存在的软件系统开源软件,提供针对特定功能的完整程序代码寻找可用于支持目标软件系统构建的软件制品实现软件架构中某个(些)子系统或构件的功能将软件资产集成到体系结构设计中可直接使用的软件资产清晰地定义它们与当前软件系统间的交互接口包括数据交换的格式、互操作协议等不可直接使用但具复用潜力的设计资产采用接口重构、适配器等方法将其引入到当前体系结构中接口重构是指,调整当前体系结构中面向可复用设计资产的调用接口,使之与其提供的服务接口相匹配到哪里找开源软件?Github(/)开源软件托管平台和开源社区,180万商业组织,2700万开发者,8000万个版本库SourceForge(/)开源软件仓库和开发平台,370万用户,43万项目Gitee(/)
中国人的开源社区......示例:搜寻和重用软件资产(1)软件系统需要实现“视频/语音双向交互”的功能访问GitHub,在搜索框输入“Linphone”点击进入,查看开源软件项目说明,了解功能及使用方法下载和获取“Linphone”开源代码示例:搜寻和重用软件资产(2)机器人的自主跟随功能搜寻和重用ROS代码“turtlebot_follower”来实现在Github搜索“turtlebotapp”,理解其功能和使用点击“turtlebot_follower”,阅读和下载其开源代码示例:搜寻和重用软件资产(3)搜寻和重用“离线语音合成”软件包OLVTI-SDK实现文字到语音转换讯飞开放平台(/)提供“离线语音转换和合成”功能平台提供软件开发包SDK理解其功能和使用示例:“空巢老人看护软件”的开源软件重用可重用软件资产示例:“Mini-12306”的开源软件重用PostgreSQL思考和讨论为什么软件体系结构设计时要考虑重用粗粒度软件资产?如果在此过程中没有考虑软件重用,会带来什么样问题?软件体系结构设计阶段的软件重用有何特点?3.精化软件体系结构选择软件体系结构所依赖的公共基础设施确定其中的基础性服务,从而为目标软件系统的运行提供基础性的技术支撑,如操作系统、软件中间件、数据库管理系统、软件开发框架、安全服务等确定软件体系结构中的设计元素包括子系统、软构件和关键设计类等,明确其职责和接口,从而为开展详细设计奠定基础确定公共基础设施及服务软件体系结构中的各个要素(如软构件、子系统等)都需要依赖于特定的基础设施来运行从最底层的操作系统,到稍高层次的软件中间件、软件开发框架等等,或者表现为诸如数据库管理系统、消息中间件等形式为目标软件系统的运行提供基础性的技术支持,而且还为目标软件系统的构造提供可重用的基础服务设计其所需的基础服务结合软件需求以及基础设施提供的功能及接口,开展基础服务的设计如数据持久服务、隐私保护服务、安全控制服务、消息通讯服务等等基础服务应具有良好的稳定性,即使软件需求发生了变化,基础服务仍可为其提供服务示例:“空巢老人看护软件”的基础设施基础服务访问基础服务接口示例:Mini-12306的精化提交体系结构确立设计元素基于初步软件体系结构,以实现软件需求为目标,精化和确立设计元素,明确设计元素的职责划分及相互间的协同设计元素三类:子系统、构件和类设计元素的接口及相互间的协作子系统构件类(1)确定子系统及其接口遵循问题分解和系统组织思想,将分析类按相关性原则加以组织和归类,形成软件系统的若干子系统用例相关性原则:将用例按业务相关性或相似性进行分组,每组用例组成一个子系统,参与这些用例的实现的分析类均成为此子系统的“设计类”实现途径相关性原则:分析用例的交互图,将具有相关或相似业务处理职责的控制类归为一个子系统;或将所有这些控制类的职责归并后按某种业务上的相关性或相似性进行分组,每组职责归为一个子系统实体类相关性:从便于管理和控制的角度,将分析模型中的实体类进行分组,每组对应于一个子系统,由子系统对所属的实体类加以管理评估和改进所确立的子系统每个子系统有明确、独立的职责不同子系统间的职责是正交的,不应具有相同或相似职责所有子系统职责覆盖软件系统所有职责避免特别庞大或特别细小的子系统子系统接口极小化,仅公开为外界使用该子系统所必需的接口函数,尽可能隐藏内部实现细节确定子系统的接口每个子系统需要提供二类接口与外界进行交互服务提供接口:支持外部设计元素访问子系统服务请求接口:支持子系统访问外部设计元素以完成子系统职责一个子系统可根据业务处理的需要,定义一个或者多个服务提供接口和服务请求接口示例:
确定“空巢老人智能看护系统”子系统子系统OlderMonitoringRobotBiCallUserReminder……示例:确定Mini-12306的子系统(2)
确定构件及其接口将一些分析类的相似或相关职责封装为一个构件,通过接口向软件系统的其他部分提供功能和服务构件的内聚度应该高于子系统构件的设计应该追求可复用性目标构件的规模小于子系统子系统中可以包含构件,但构件中不会包含子系统(3)确定关键设计类及其接口关键设计类对于软件需求的实现具有比较重要的作用,但未归入子系统和构件的某项职责与子系统或构件交互,或者作为软件体系结构中已有的设计元素之间的交互“桥梁”,缺少这种交互将导致体系结构无法完整地实现某项重要的软件需求所谓关键是指重要、不可或缺4.设计部署模型设计软件系统的物理部署模型刻画软件系统的各个子系统、软构件如何部署到计算节点上运行的,描述它们的部署和运行环境《Artifact》ElderCarerApp智能手机《OS》AndroidPC机《Artifact》RobotControl《Framework》ROS《Component》DataService《DBMS》MySQL《OS》UbuntuTurtlebot2Robot思考和讨论子系统和构件都提供了接口,可对外提供服务和功能,那么二者有何区别和联系?在什么情况下应该设计为子系统,在什么情况下应该设计为软构件?2.4整合体系结构设计整合和组织体系结构设计产生的设计结果包括引入的开源软件和软件资产、顶层软件架构、确定的各类设计元素等等整合的目的理清设计元素间的关系,明确它们之间的交互和协作确保所产生的软件设计模型具有更好的模块性、封装性、可重用性等特征最终获得目标软件系统体系结构的完整逻辑视图整合体系结构设计整合外部系统对应的子系统与分析模型中负责与外部系统交互的边界类子系统是服务提供方,边界类是服务请求方整合引入的开源软件或者软件资产必要时引入相关的接口以实现开源软件或者软件资产与设计元素之间的交互,从而它们与软件系统的设计融合整合外部系统与目标软件系统中的设计类进一步清晰地定义相关的接口,支持它们之间的协作优化体系结构设计分解一些规模较大的子系统合并若干职责相同或相似的设计元素以软件重用为目的适当调整设计元素所封装的功能、承担的职责和对外提供的接口用简洁的软件元素,以尽可能高效、合理的方式实现所有软件需求将不同设计元素中的公共职责提取成为服务构件或服务类整合体系结构设计结果设计元素的职责划分更为明确系统与外部接口、相关设计元素间的接口和协作更为清晰整体体系结构设计方案更为优化支持软件体系结构设计的CASE工具软件设计文档撰写工具,如MicrosoftOffice、WPS等软件设计建模工具,如利用CodeArtsModeling、MicrosoftVisio、StarUML、ArgoUML等工具软件设计分析和转换工具,如IBMRationalRose等配置管理工具和平台,如Git、Github、Gitlab、PVCS、MicrosoftSourceSafe等智能化设计工具,如ChatGPT,CodeArtsSnap等软件架构师负责软件体系结构的设计工作需要有丰富的软件开发经验强烈的质量意识熟练掌握软件架构及其开发技术(如微服务架构、Serverless架构等)内容何为软件体系结构概念、视图、模型及UML表示软件体系结构风格如何设计软件体系结构任务、目标、要求和原则体系结构设计过程文档化和评审软件体系结构设计文档模板、验证原则软件体系结构设计文档示例文档概述系统概述设计目标和原则设计约束和现实限制逻辑视点的体系结构设计部署视点的体系结构设计开发视点的体系结构设计运行视点的体系结构设计评审软件体系结构设计满足性体系结构是否能够满足软件需求,体系结构怎样满足软件需求优化性体系结构是否以充分优化方式实现所有软件需求项可扩展性是否易于扩展,以应对软件需求的变化可追踪性软件体系结构中的所有设计元素是否有相对应的软件需求项详尽程度体系结构的详略程度是否恰当软件体系结构设计的输出软件体系结构设计模型用UML包图、部署图、构件图等描述软件体系结构设计文档体系结构设计规格说明书文档拓展阅读软件架构实践,LenBass,PaulClements,RickKazman著,清华大学出版社,2017.这是一本荣获大奖且影响深远的经典著作,至今已经进行了多次修订。本书以全新的角度介绍软件架构的相关概念和最佳实践,阐述软件系统是如何构建的,软件系统中的各个要素之间又是如何相互作用的。作者从四个方面介绍了他们多年的软件架构设计研究成果与实践经验,包括:架构创想、架构创建、架构分析和架构泛化课后作业和课程实训访问/paths/1944完成第九章“软件体系结构设计”的实训闯关任务本章知识图谱小结软件体系结构设计的特殊性具有宏观、全局、层次、战略、多视点、关键性等特点逻辑视点、物
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 影视剧群众演员化妆间租赁及化妆师服务协议
- 物流仓储货架安装与物流信息系统对接合同
- 抖音平台用户隐私保护与数据安全合作协议
- 2025年中国八氟戊醇行业市场规模及投资前景预测分析报告
- 2025年中国按摩机器人行业市场前景预测及投资价值评估分析报告
- 湿地公园水生植物种植与生态修复工程合作协议
- 桥梁加固工程临时检测员职责与聘用合同
- 电商平台会员体系与大数据分析服务合同
- 数字直播电商渠道服装选品及供应链管理协议
- 痘博士服务协议书
- 大数据与人工智能营销智慧树知到期末考试答案章节答案2024年南昌大学
- 工程建设平移合同范本
- 新《主体结构及装饰装修》考试习题库(浓缩500题)
- 免拆底模钢筋桁架楼承板图集
- 寻梦环游记(Coco)中英文台词对照
- 宁夏2022年中考地理试卷(含答案)
- 颈椎骨折的护理课件
- 道德与法治《我们的衣食之源》教案教学设计(公开课)四年级下册
- Unit6 Living History of Culture同步梳理-【中职专用】高三英语寒假自学课(高教版2021·基础模块3)
- 反应堆热工分析课程设计报告书
- TL-PMM180超低烟尘使用及维护培训
评论
0/150
提交评论