1、软软 件件 体体 系系 结结 构构天津商业大学天津商业大学1形象的比喻w 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。2软件体系结构软件行业?w 软件架构师软件软件架构师是软件行业中一种新兴职业,工作职责是在架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整开发计划及文本,并制定这个项目的总体架构,指导整个开发团
2、队完成这个计划。主导系统全局分析设计和实个开发团队完成这个计划。主导系统全局分析设计和实施、负责施、负责软件构架软件构架和关键技术决策的人员和关键技术决策的人员 。3w 架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作。他必须对开发技术非常了解,并且需要有良好的组织管理能力。领导与协调整个项目中的技术活动(分析、设计和实施等)推动主要的技术决策,并最终表达为软件构架确定和文档化系统的相对构架而言意义重大的方面,包括系统的需求、设计、实施和部署等“视图”确定设计元素的分组以及这些主要分组之间的接口为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风险,并保证相关决
3、定被有效的传达和贯彻理解、评价并接收系统需求评价和确认软件架构的实现 专业技能4架构师基础w 软件设计师软件设计师软件设计师是指能根据软件开发项目管理和软件工程的是指能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档的实用性人才。还写程序设计规格说明书等相应的文档的实用性人才。还能够组织和指导程序员编写、调试程序,并对软件进行能够组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程
4、师的实际工作能力和业务水平。量软件;具有工程师的实际工作能力和业务水平。5课程定位w 软件架构基础知识w 软件设计基本模式6引例w 从茅草房、木屋、土屋、.砖瓦房砖瓦房高楼大厦、摩天大楼高楼大厦、摩天大楼 (方法学:建筑学方法学:建筑学)w 分散的代码、小程序大型的软件大型的软件 (方法学:软件体系结构方法学:软件体系结构)7体系结构(Architecture)的定义w IEEE的定义体系结构是以组件、组件之间的关系、组件与环境之间体系结构是以组件、组件之间的关系、组件与环境之间的关系为内容的某一系统的基本组织结构以及指导上述的关系为内容的某一系统的基本组织结构以及指导上述内容设计与演化的原理
5、。内容设计与演化的原理。w 对Software architecture的常见中文翻译软件体系结构软件体系结构软件架构软件架构软件构架软件构架8课程教学内容w 第一章 软件体系结构概述w 第二章 软件体系结构建模(作业1)w 第三章 UML建模(作业2)w 第四章 软件体系结构风格(作业3)w 第五章 设计模式概述w 第六章 创建型模式实训w 第七章 结构型模式实训 w 第八章 行为型模式实训(作业4+5)9关关 于于 教教 材材课程邮箱:课程邮箱:tjcuSA key:tjcuSA201510课程考核w 闭卷(32学时,平时期末比列为5:5)期末考试(满分期末考试(满分100分,总评成绩分,
6、总评成绩*50%)平时成绩(满分平时成绩(满分100分,总评成绩分,总评成绩*50%)出勤占平时成绩的出勤占平时成绩的50%50%。出勤(点名)共考查。出勤(点名)共考查3 3次,出次,出勤勤1 1次得次得1515分,分,2 2次得次得3030分,分,3 3次全勤得满分次全勤得满分5050分。分。作业成绩占平时成绩的作业成绩占平时成绩的50%50%。11作业要求w 分组分组:以班为单位,班内3人一组,不足三人者由教师统一安排分组。w 完成形式完成形式:以组为单位完成5次作业,每次10分,共计50分。w 作业内容:作业内容:“4+14+1”建模(建模(1010分):建立一个分):建立一个4+14
7、+1模型视图,并简述其设计思想。模型视图,并简述其设计思想。UMLUML建模(建模(1010分):设计类图,要求画出类图,简述以分条的形式对每分):设计类图,要求画出类图,简述以分条的形式对每一个类的设计目的以及该类在整个系统中的作用进行描述。一个类的设计目的以及该类在整个系统中的作用进行描述。设计原则(设计原则(1010分):自学分):自学“第二章第二章 面向对象设计原则实训面向对象设计原则实训”,对所介,对所介绍的绍的7 7个设计原则进行总结,每一个原则用最短的、简洁、直观、有效个设计原则进行总结,每一个原则用最短的、简洁、直观、有效的方式描述(文字的方式描述(文字/图形图形/其他),描述
8、内容包括原则本身的基本含义其他),描述内容包括原则本身的基本含义和该原则的实现方式。和该原则的实现方式。设计模式实训(设计模式实训(1010分)。以组为单位完成一份设计模式讲稿作业。分)。以组为单位完成一份设计模式讲稿作业。实验报告(实验报告(1010分)。分)。2 2次实验,每组提交指定的次实验,每组提交指定的1 1次实验报告。次实验报告。12作业要求w 作业形式作业形式:手写完成,要求字迹清晰,组号(如软件1201-A组)标注清楚,三个人的学号、姓名按照对作业的贡献度排序(本人签名)。分数有级差,每次作业排名顺序可调整,但小组成员必须固定。w 提交时间提交时间:以课程进度要求为准,不交视为
9、放弃,小组为0分,晚交扣小组20%分数。13第一章第一章 软件体系结构概述软件体系结构概述天津商业大学天津商业大学14 软件危机的表现软件危机的表现 软件成本日益增长软件成本日益增长 开发进度难以控制开发进度难以控制 软件质量差软件质量差 软件维护困难软件维护困难从软件危机谈起15 软件危机的原因软件危机的原因 用户需求不明确用户需求不明确 缺乏正确的理论指导缺乏正确的理论指导 软件规模越来越大软件规模越来越大 软件复杂度越来越高软件复杂度越来越高从软件危机谈起16 如何克服软件危机 人们面临的不光是技术问题,更重要的是管理问人们面临的不光是技术问题,更重要的是管理问题。管理不善必然导致失败题
10、。管理不善必然导致失败 。要提高软件开发效率,提高软件产品质量,必须要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与工业化的生产技术。采用工程化的开发方法与工业化的生产技术。在技术上,应该采用基于重用的软件生产技术;在技术上,应该采用基于重用的软件生产技术;在管理上,应该采用多维的工程管理模式。在管理上,应该采用多维的工程管理模式。17 体系结构的兴起和发展 随着软件系统规模越来越大、越来越复杂,整个系统随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要。的结构和规格说明显得越来越重要。对于大规模的复杂软件系统来说,对总体的系统结构对于大规模的复杂软件
11、系统来说,对总体的系统结构设计和规格说明比起对计算的算法和数据结构的选择已设计和规格说明比起对计算的算法和数据结构的选择已经变得明显重要得多。经变得明显重要得多。对软件体系结构的系统深入的研究将会成为提高软件对软件体系结构的系统深入的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径。生产率和解决软件维护问题的新的最有希望的途径。18 体系结构的兴起和发展 事实上,软件总是有体系结构的,不存在没有体事实上,软件总是有体系结构的,不存在没有体系结构的软件。系结构的软件。软件体系结构虽脱胎于软件工程,但其形成同时软件体系结构虽脱胎于软件工程,但其形成同时借鉴了计算机体系结构和网络体系
12、结构中很多宝贵的借鉴了计算机体系结构和网络体系结构中很多宝贵的思想和方法,最近几年软件体系结构研究已完全独立思想和方法,最近几年软件体系结构研究已完全独立于软件工程的研究,成为计算机科学的一个最新的研于软件工程的研究,成为计算机科学的一个最新的研究方向和独立学科分支。究方向和独立学科分支。19 软件体系结构为软件系统提供了一个结构、行为和软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指
13、定了系统的组成。软件体系结构不仅指定了系统的组织结构组织结构和和拓扑拓扑结构结构,并且显示了系统需求和构成系统的元素之间的对,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。应关系,提供了一些设计决策的基本原理。软件体系结构的定义 20 软件体系结构的意义 体系结构是风险承担者进行交流的手段体系结构是风险承担者进行交流的手段 体系结构是早期设计决策的体现体系结构是早期设计决策的体现 软件体系结构是可传递和可重用的模型软件体系结构是可传递和可重用的模型 21 软件体系结构研究的问题w 结构性问题w 系统的组织,由哪些组件构成w 全局性的控制结构w 通讯、同步或访问
14、的协议w 将功能分配到不同的系统组成部分w 设计元素的组成w 系统的物理分布w 可扩展性、性能22 软件体系结构的主要内容w 软件体系结构的主要内容包括对系统组成元素的描述对系统组成元素的描述这些元素相互之间的交互这些元素相互之间的交互系统组成的模式系统组成的模式模式的约束模式的约束w 所以在软件体系结构中,系统以组件和组件之间的交互进行定义。w 当前的系统同时可以作为更高层次设计的一个系统组件。23 软件体系结构的描述w 对软件系统而言,有一个合适的体系结构是长期成功的保证。w 当前对软件体系结构的描述是非正式的非正式的因人而异因人而异针对特定系统的针对特定系统的通常由框图和线条以及相关的解
15、释组成通常由框图和线条以及相关的解释组成24 典型的体系结构描述w“Camelot系统采用了C/S结构,并且使用远程方法调用”w“系统设计中采用了抽象分层和模块分解的方法。”w“我们采用了一种分布式的、面向对象的方法进行信息管理。”w“将传统的顺序编译器改造成并发编译器的最简单的方法是将不同的编译阶段在多个处理器上并发执行。”25 软件设计的层次w 软件设计可以发生在多个不同的层次,在每一层我们都会发现相应的组件以及由这些组件组成更大的组件的组合机制。二进制执行层二进制执行层 位模式代码层代码层 编程语言的原语、操作符;记录、数组、过程;构架层构架层 模块26 通过提供一种新的体系结构描述语言
16、解决通过提供一种新的体系结构描述语言解决体系结构描述问题。体系结构描述问题。体系结构领域知识的总结性研究。体系结构领域知识的总结性研究。针对特定领域的框架的研究。针对特定领域的框架的研究。软件体系结构形式化支持的研究。软件体系结构形式化支持的研究。软件体系结构的研究领域 27 体系结构风格体系结构风格 设计模式设计模式 应用框架应用框架 软件体系结构的核心研究内容 28体系结构风格体系结构风格是描述特定系统组织方式的是描述特定系统组织方式的惯用范例,强调组织模式和惯用范例。惯用范例,强调组织模式和惯用范例。组织模式即静态表述的样例,惯用范例是组织模式即静态表述的样例,惯用范例是反映众多系统共有
17、的结构和语义。反映众多系统共有的结构和语义。体系结构风格独立于实际问题,强调软件体系结构风格独立于实际问题,强调软件系统中通用的组织结构。系统中通用的组织结构。体系结构风格 29设计模式设计模式是软件问题高效和成熟的设计模是软件问题高效和成熟的设计模板,模板包含了固有问题的解决方案。板,模板包含了固有问题的解决方案。设计模式可以看成规范了的小粒度的结构设计模式可以看成规范了的小粒度的结构成分,独立于编程语言或编程范例。成分,独立于编程语言或编程范例。每个模式处理系统设计或实现中一种特殊每个模式处理系统设计或实现中一种特殊的重复出现的问题。的重复出现的问题。设计模式 30应用框架应用框架是整个或
18、部分系统的可重用设计,是整个或部分系统的可重用设计,表现为一组抽象构件的集合以及构件实例间表现为一组抽象构件的集合以及构件实例间交互的方法。交互的方法。一个框架是一个可重用的设计构件,它规一个框架是一个可重用的设计构件,它规定了应用的体系结构,协作构件之间的关系,定了应用的体系结构,协作构件之间的关系,为构件复用提供上下文关系为构件复用提供上下文关系。应用框架 31 抽象抽象 分而治之分而治之 封装和信息隐藏封装和信息隐藏 模块化模块化 高内聚和低耦合高内聚和低耦合 关注点分离关注点分离 策略和实现的分离策略和实现的分离 接口和实现的分离接口和实现的分离 软件体系结构的设计原则 32 软件重用
19、 软件工业化生产是解决软件危机的唯一途径软件工业化生产是解决软件危机的唯一途径 工业化模式的基本方式:工业化模式的基本方式:(1 1)符合标准的零部件)符合标准的零部件/构件生产构件生产(2 2)基于标准构件的产品生产)基于标准构件的产品生产构件是核心和基础,重用是必要手段。构件是核心和基础,重用是必要手段。构件是指语义完整、语法正确和有可重用价值的单位软构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,件,是软件重用过程中可以明确辨识的系统;结构上,它是它是语义描述语义描述、通讯接口通讯接口和和实现代码实现代码的复合体。的复合体。33 软件重用
20、软件重用的定义软件重用的定义 软件重用是指在软件重用是指在两次或多次两次或多次不同的不同的软件开发过程中,软件开发过程中,重复使用重复使用相同相同或或相近相近软件元素的过程。软件元素的过程。软件元素(即软构件)包括:程序代码、测试用例、软件元素(即软构件)包括:程序代码、测试用例、设计文档、设计过程、需求分析文档、领域知识等。设计文档、设计过程、需求分析文档、领域知识等。34 软件重用 软件重用的层次软件重用的层次(1 1)知识重用)知识重用 -软件工程知识的重用软件工程知识的重用 (2 2)方法和标准的重用)方法和标准的重用 -面向对象方法或国家制定的软件开发规范面向对象方法或国家制定的软件
21、开发规范 的重用的重用 (3 3)软件成分的重用)软件成分的重用 35 软件重用 有效进行软件重用的业界经验总结有效进行软件重用的业界经验总结(1 1)关注特定领域的软件资源)关注特定领域的软件资源 是否在领域内已有解决方案?是否存在构件可重用业务是否在领域内已有解决方案?是否存在构件可重用业务资源的必要?资源的必要?(2 2)正确命名软件资源)正确命名软件资源 方法、类、组件、库、服务的命名,既要遵守一般的方法、类、组件、库、服务的命名,既要遵守一般的命名准则,还要与问题领域、软件目的与功能相联系。这命名准则,还要与问题领域、软件目的与功能相联系。这有利于资源的重用。有利于资源的重用。36
22、软件重用 有效进行软件重用的业界经验总结有效进行软件重用的业界经验总结(3 3)慎重考虑是否具备重用的必要)慎重考虑是否具备重用的必要l功能在当前项目之外是否真正可重用?功能在当前项目之外是否真正可重用?l将某些内容变为可重用的,是否会给现有的设计带来将某些内容变为可重用的,是否会给现有的设计带来 重大变化?重大变化?l是否理解了功能相关的问题域?是否理解了功能相关的问题域?l随着时间的推移,这个功能会怎样演进?随着时间的推移,这个功能会怎样演进?“通用之前先简单,重用之前先可用通用之前先简单,重用之前先可用”软件架构师应该知道的软件架构师应该知道的9797件事件事 37 软件重用 有效进行软
23、件重用的业界经验总结有效进行软件重用的业界经验总结(4 4)迭代演进可重用的资源)迭代演进可重用的资源 可重用的资源需要增加设计、开发和测试的时间,需要花可重用的资源需要增加设计、开发和测试的时间,需要花费大量资源,为减轻开发风险,可多次迭代来演进可重用的资费大量资源,为减轻开发风险,可多次迭代来演进可重用的资源。源。(5 5)保持一致性要比遵循行业标准更重要)保持一致性要比遵循行业标准更重要 跨应用创建可重用的软件组件和服务时,力争保持一致性跨应用创建可重用的软件组件和服务时,力争保持一致性要比符合标准更为重要。如果大量应用程序都使用了特定的可要比符合标准更为重要。如果大量应用程序都使用了特
24、定的可重用组件,那就可以跟往常一样,将现有接重用组件,那就可以跟往常一样,将现有接 口作为适配器,口作为适配器,让它在后台调用行业标准的让它在后台调用行业标准的APIAPI。注意:注意:尽量不要盲目地为已经有成熟标准的内容创建新代码。尽量不要盲目地为已经有成熟标准的内容创建新代码。38 软件重用 有效进行软件重用的业界经验总结有效进行软件重用的业界经验总结(6 6)进行代码审查)进行代码审查 有效地保证可重用资源被正确使用,保证代码的质量有效地保证可重用资源被正确使用,保证代码的质量与一致性,经常会找出新的可重用资源。与一致性,经常会找出新的可重用资源。(7 7)没有自动化的回归测试套件,就不
25、要发布可重用的软)没有自动化的回归测试套件,就不要发布可重用的软件资源件资源 回归测试是指修改了旧代码后,重新进行测试以确认回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。修改没有引入新的错误或导致其他代码产生错误。39 软件重用 有效进行软件重用的业界经验总结有效进行软件重用的业界经验总结(8 8)理解业务需求之后再去说服别人)理解业务需求之后再去说服别人 弄清楚业务需求,然后确定能被利用或开发的资源。弄清楚业务需求,然后确定能被利用或开发的资源。(9 9)尽可能与开发团队一起创建可重用的软件资产)尽可能与开发团队一起创建可重用的软件资产 团队是可重用资产的潜在用户。团队是可重用资产的潜在用户。(1010)从生产支持人员那里获取可重用资源的需求)从生产支持人员那里获取可重用资源的需求 将可重用资源投入生产环境之前,要与生产支持人员沟通。将可重用资源投入生产环境之前,要与生产支持人员沟通。让他们投入进来,分享你的设计,及早并经常获取他们的反馈。让他们投入进来,分享你的设计,及早并经常获取他们的反馈。4041