计算机科学导论-计算思维程序实践 课件 L15 (1)软件定义一切与软件思维、(2)软件构造与软件演化、生态_第1页
计算机科学导论-计算思维程序实践 课件 L15 (1)软件定义一切与软件思维、(2)软件构造与软件演化、生态_第2页
计算机科学导论-计算思维程序实践 课件 L15 (1)软件定义一切与软件思维、(2)软件构造与软件演化、生态_第3页
计算机科学导论-计算思维程序实践 课件 L15 (1)软件定义一切与软件思维、(2)软件构造与软件演化、生态_第4页
计算机科学导论-计算思维程序实践 课件 L15 (1)软件定义一切与软件思维、(2)软件构造与软件演化、生态_第5页
已阅读5页,还剩119页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15讲软件与软件思维(1)软件定义一切与软件服务第十五章软件与软件思维__________主题1、软件定义一切主题2、软件服务思维主题3、软件构造思维主题4、软件演化与生态思维15.1软件定义一切最初,软件是硬件的附庸;后来,软件一个独立工具现在,软件已经成为我们学习、生活、工作必不可少的部分——我们借助软件:从全球各地搜索知识,管理物理世界和虚拟世界,获得各种各样的服务——我们在软件的世界中成长,然后进一步创造新的软件,让这个世界发生了改变——我们通过软件改变世界的同时,软件也在改变我们软件正在拥有改变世界的力量!__________软件有个“好胃口”

软件创造软件的速度

超过

使用软件的速度

软件定义一切(SDX),跨界融合,一切皆服务(XaaS)…

开源开放开发,低代码编程,分布式远程办公软件正在吃掉世界……软件正在吃掉软件……软件正在吃掉码农?软件定义一切!(SoftwareDefinedEveryting,SDX)软件定义网络软件定义硬件软件定义数据中心软件定义IT价值软件定义一切!!《软件和信息技术服务业发展规划(2016-2020年)》提出,以数据驱动的“软件定义”正在成为融合应用的显著特征,通过软件定义硬件、软件定义存储、软件定义网络、软件定义系统等,带来更多的新产品、服务和模式创新,催生新的业态和经济增长点。思考什么是软件定义?怎样实现软件定义?为什么需要软件定义?思考:为什么出现智能锁?怎样实现智能锁?智能门锁指纹开锁密码开锁密码远程更新报警……?软件?硬件?普通门锁【你的宿舍】使用普通锁?使用智能锁?【全家老小】使用普通锁?使用智能锁?【智能民宿】使用普通锁?使用智能锁?15.1.1软件定义与硬件定义【硬件定义】是指设备/设施/产品的功能全部由机械装置、元器件、电路、芯片等硬件实现。【软件定义】是指除了最基本的硬件,用软件去定义系统的功能,用软件给硬件赋能,实现系统效率和能力的最大化。产品功能设计刚性需求适应性需求必须实现的基础必备需求根据产品定位选择不同途径实现的需求测练题:下列哪些产品是硬件定义的?智能密码门锁第一台电子计算机ENIACAB提交齿轮变速箱C依靠电瓶驱动的自行车D多选题1分测练题:下列哪些产品是软件定义的?智能穿戴手表2G时代的手机AB提交共享电动自行车C教室的日光灯D多选题1分从“硬件定义”到“软件定义”硬件定义软件基于CPU构建的庞大软件生态,这可以算作是“硬件定义软件”:先有CPU硬件,再有编译器,再有OS、应用等站在软件的角度,所有的系统实现均可以通过编程实现。软件更新换代很快,新的热点技术层出不穷。硬件的迭代周期过长,无法跟上软件迭代的节奏CPU通过指令系统,“完美”实现了软件和硬件的标准化解耦。因此,可以认为,在这个时候,不存在硬件定义软件或软件定义硬件,软件和硬件各自并行不悖的快速发展软件和硬件并行发展软件定义系统15.1.1软件定义与硬件定义软件定义网络

SDN(SoftwareDefinedNetwork)硬件定义网络——经过几十年的发展,网络芯片已经演进到了完全ASIC的实现,这意味着基于ASIC芯片的网络设备其功能是确定的,用户只能根据厂家实现的确定功能来使用网络设备基于设备可配置、但不可编程的部署与实施(上架、配置、测试)传统网络面临的挑战多元应用与业务层出不穷相对稳定的规划与部署赶不上快速变化的应用与业务需求分布式的架构、部署与管理厂商和设备的多样性业务弹性响应“捉襟见肘”“应接不暇”软件定义网络

SDN(SoftwareDefinedNetwork)问题的根源何在?!传统网络的只可配置、不可编程数据平面和控制平面的紧耦合解决问题的出路新的网络架构、新的网络设计能够弹性响应上层应用的网络可编程网络设备数据平面和控制平面的解耦软件定义网络

SDN(SoftwareDefinedNetwork)需求之难:一幅漫画带来的思考用户需求描述项目经理的理解系统分析员设计程序员编码商业顾问的诠释安装程序如此简洁实际需求。。。15.1.2为什么需要软件定义功能雾里看花——需求说不清:客户(用户)对需求只有朦胧的感觉隔靴搔痒——需求说不准:分析人员或客户(用户)理解有误刻舟求剑——需求说不全:需求自身经常变动15.1.2为什么需要软件定义功能软件定义是应对多样化需求的关键通用功能远不能满足现今多样化、个性化的需求;硬件迭代更新周期过长、升级维护成本高;软件迭代更新周期短、功能升级维护成本低廉、可面向多样化的需求。如汽车、手机、电视……软件定义的本质是基于软件编程的方式实现定制化功能在硬件资源数字化、标准化的基础上,通过软件编程去实现虚拟化、灵活、多样和定制化的功能,对外专用智能化、定制化的服务,实现应用软件与硬件的分层解耦与功能融合软件定义的泰迪熊眼部安装视频传感器、耳部安装麦克风、口部安装扬声器、体内安装三轴陀螺仪和压力传感器等软件系统对各个硬件进行控制泰迪熊+:更多功能应对多元化需求从硬件定义到软件定义15.1.3实现软件定义的基本途径软硬件解耦、分层设计、应用编程接口(API)和中间件、虚拟化设计思考:从普通锁

软件定义的智能锁?软件定义门锁指纹开锁密码开锁密码远程更新报警……?软件硬件软硬件解耦、分层设计、应用编程接口(API)和中间件……软件定义途径之一:软硬件解耦软硬件解耦耦合两个或两个以上的软(硬)件系统之间存在相互关联、相互依赖、相互影响的作用解除系统之间的相互作用全硬件的计算机是不可编程的,是完全的硬件定义,性能较高但完全没有灵活性,只能实现固定的功能通过软硬件解耦,将硬件资源抽象成标准化构件等形式,由软件可实现任意丰富的功能,提供满足用户需求的智能化、定制化的服务软件和硬件之间的耦合关系电子化数字化软件化(a)软件(钥匙-锁芯)与硬件(锁体-锁舌)紧密耦合,不可改变(b)软件(密码-锁芯)可改变,开锁方式较单一(c)软件(App-锁芯)和硬件部分解耦,可通过蓝牙连接开锁(d)软件(App-锁芯)和硬件完全解耦,可实现多种方式开锁。通过软件设计,还能够增加更多功能,如获知家庭成员回家信息、家庭内外监控、布控防盗、公寓门禁管理网络化智能化软硬件取舍(1)软硬件的关系:软硬件实现在功能上等效理论上,有两种极端实现方法:全硬件机器,包括操作系统、应用程序等全部用硬件实现硬件只有1位加法和分支操作,其他都用软件实现关键问题:性能与价格比软件硬件最少硬件不可编程软硬件比例软硬件分界的标志是指令系统。设置一条指令,就必须有相应的硬件支持。计算机系统结构设计者主要任务就是设计指令系统,确定软硬件的分界,确定软件、硬件和固件的功能分配软件兼容性,即软件可移植性软件向后兼容:在某一时间生产的机器上运行的目标软件能够直接运行于更晚生产的机器上向上兼容:在低档机器上运行的目标软件能够直接运行于高档机器上其中向后兼容最重要,必须做到软硬件取舍(2)

软件与硬件实现的特点硬件实现:速度快、灵活性差、占用内存少软件实现:速度慢、灵活性好、占用内存多成本年代软件硬件(3)发展趋势硬件集成度原来越高,成本不断降低,软件应用增多,越来越复杂,成本越来越高软件与硬件之间、系统软件与应用软件之间的功能边界更柔性化从处理器平台看软硬件耦合程度CPU(CentralProcessingUnit)GPU(GraphicsProcessingUnit)FPGA(Field-ProgrammableGateArray)ASIC(ApplicationSpecificIntegratedCircuit)灵活性多任务,有指令系统,易编程有指令系统,可编程无指令系统,可硬件编程无指令系统,不可编程,不可变更定制化通用通用半定制化全定制化能耗高

低设计成本低

高算力性能低

高开发周期短

长用途70%晶体管用来构建Cache,ALU少,适合逻辑控制运算80%以上晶体管是ALU,适合大规模并行计算适合大规模并行计算,但不适合大量浮点运算为专门目的而设计、制造。体积小、可靠性高、保密性强代表企业Intel,AMD,龙芯NVIDIA,Intel,景嘉微,华为海思Xilinx,Intel,Microsemi,安路科技Google(TPU),Intel(VPU),寒武纪(NPU),地平线(BPU)WSE-2实践:从普通锁

软件定义的智能锁指纹开锁密码开锁密码远程更新报警……解耦软件:密码验证、指纹验证、信息传输、报警、电压监测……硬件:触摸按键、把手、指纹感应器、蜂鸣器、时钟、无线模块、电池……进一步思考:软件定义的共享电动自行车?分层是一种复杂问题“分而治之”解决思想的应用各层“各司其职”,只要层间接口不变,各层可以分开设计实现,高层可以不必知道低层的细节分层是解耦合的基础,增加了设计和实现的灵活性操作系统互联网数据库软件定义途径之二:软件分层“机器语言”——————————>“汇编语言”——————————>“高级语言”打孔卡(punchcard)分层是复杂问题的

“分而治之”方法实践:从普通锁

软件定义的智能锁指纹开锁密码开锁密码远程更新报警……分层前端硬件层:触摸按键、把手、指纹感应器、蜂鸣器、时钟、无线模块、电池……前端软件层:控制开关锁、控制蜂鸣器、数据通信、电压监测……后端硬件层:应用服务器、数据服务器……后端软件层:密码与权限验证、开锁数据统计分析……进一步思考:软件定义的共享电动自行车?软件定义途径之三:API与中间件应用程序接口(ApplicationProgramInterface,API)是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信调用API函数进行开发,可减轻编程任务中间件(Middleware)位于各类应用/服务与操作系统/数据库系统以及其他系统软件之间,主要解决分布式环境下/不同应用程序之间的数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题将软件、硬件进行分离,对下层资源进行抽象、利用,对上层软件提供服务接口中间件将软件、硬件进行分离:对下层硬件资源进行抽象、利用,对芯片进行驱动并优化操作系统,对上层软件提供服务接口,为不同算法提供不同类型的插件。中间件解决数据传输、应用调度、系统集成和流程管理等问题,可大幅提升应用层软件的开发效率纵向层次:中间件位于各类应用/服务与操作系统/数据库系统以及其他系统软件之间,解决数据传输、数据访问、应用调度等问题,实现系统之间的互联互通中间件(Middleware),是一种应用于分布式系统的基础软件,在中间件出现之前,系统软件是直接基于操作系统开发,导致软硬件高度耦合。中间件:实现应用软件与操作系统的解耦软件定义途径之三:API与中间件应用程序组件的接口组件--接口的实现InterfaceMInterfaceN对象C对象A对象BInterfaceBInterfaceA调用OtherInterfaceA调用组件/构件:可独立发布的机器程序文件;将若干对象及内部关系进行封装所形成的一个可执行程序文件。软件中的构件/组件【接口与实现分离】---“接口”是对象或者组件的通信协议;---“实现”是对象或者组件的内部构造细节。【解耦】尽可能地消除软件不同部分之间的联系软件定义途径之三:API与中间件应用程序InterfaceCInterfaceD对象C对象A对象BInterfaceBInterfaceA调用OtherInterfaceA调用管理并运行组件的容器---中间件,如Apache的Tomcat、IBM的websphere、BEA的WebLogic等组件的接口组件--接口的实现基于复用的软件开发==用可重复使用的软件组件开发应用程序面向复用的软件开发==开发可重复使用的软件组件支持软件组件/构件运行的中间件软件定义途径之三:API与中间件实践:从普通锁

软件定义的智能锁指纹开锁密码开锁密码远程更新报警……API/中间件进一步思考:软件定义的共享电动自行车?前端软件手机APP中间件:分布式环境下的信息集成平台数据传输、数据集成、流程管理验权服务密码验证服务报警服务统计分析服务虚拟化(Virtualization)技术:将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源虚拟机技术:通过运行在物理服务器和操作系统之间的中间层软件——虚拟机监视器(hypervisor),使得多个操作系统和应用软件透明地共享一套基础物理硬件Hypervisor的逻辑服务器本质:由物理服务器上一个个文件组成,相对物理服务器,天生具备分区、隔离、封装和相对硬件独立等特征物理机CPU、内存、I/O、硬盘等硬件资源操作系统应程软件物理机CPU、内存、I/O、硬盘等硬件资源操作系统应程软件物理机CPU、内存、I/O、硬盘等硬件资源操作系统应程软件CPI、内存、I/O、硬盘等硬件资源虚拟机监视器(Hypervisor)虚拟机操作系统GuestOS应程软件虚拟CPU、内存、I/O、硬盘等资源虚拟机操作系统GuestOS应程软件虚拟CPU、内存、I/O、硬盘等资源虚拟机操作系统GuestOS应程软件虚拟CPU、内存、I/O、硬盘等资源软件定义途径之四:虚拟化计算虚拟化、存储虚拟化、网络虚拟化、软件虚拟化、桌面虚拟化、服务虚拟化软件定义汽车

(SoftwareDefinedVehicle,SDV)东风悦享联合武大计算机学院,推出的东风Sharing-VAN1.0Plus“樱花号”,在武大校园内正式启动无人驾驶展示,成为了赏樱路上的靓丽风景线Sharing-VAN1.0Plus是自主研发的L4级5G自动驾驶汽车,具备一键招车、动态限速、环岛通行、动态避障、多车编队、自动泊车等13项功能车辆搭载了5G通信技术,在车联网和北斗系统的加持下,能够实现远程遥控驾驶,如遇紧急情况,可通过远程遥控接管车辆【扩展阅读】软件定义汽车

未来汽车的创新功能主要来自于软件。软件成本已占到汽车成本的40%以上未来自动驾驶汽车60%的价值将源于软件车控软件:通过ECU(电子控制单元)直接向执行机构发送指令,以控制车辆转向机构、制动机构等关键部件协同工作,属于复杂测控系统。OSEK/VDX和AUTOSAR两个标准汽车操作系统:微软的WindowsEmbeddedAutomotive、黑莓的QNX、诸多基于Linux的定制操作系统以及众多基于Android开源项目(AOSP)的操作系统自动驾驶软件:自动驾驶核心软件和应用软件车载娱乐信息系统:如仪表,娱乐音响、导航系统、抬头显示、车载通信、无线上网等等,这类系统不直接参与汽车行驶的控制决策,不会对车辆行驶性能和安全产生影响(SoftwareDefinedVehicle,SDV)【扩展阅读】咖啡与服务:从设计“物”到设计“事”

星巴克不是只卖咖啡的,它更是提供工作、生活之外社交聚会服务的地方:

25元/杯的咖啡=咖啡5元

+体验轻松氛围20元

15.2软件服务思维古朴的室内环境、现代的家具、咖啡机发出滋滋声音、散发着浓香的咖啡所有的这一切都是被精心的组织在一起的体验是企业以服务为舞台、以商品为道具,环绕着消费者,创造出值得消费者回忆的活动。体验经济的表象似乎是出售产品,但其本质则是出售与消费者一齐度过的时光软件=程序+文档什么是程序?程序=算法+数据

=算法+数据+文档

什么是算法?算法是用计算装置能够理解的语言描述的一组有穷的规则,这些规则给出了求解特定问题的运算序列算法的5个特征:输入、输出、确定性、能行性、有限性算法的执行者:计算装置算法的执行过程:计算过程3815.2软件服务思维从开发者角度看软件软件是硬件的附庸软件是单独的产品软件是服务!软件是许可证3915.2软件服务思维从用户角度看软件40“对用户而言,真正需要的不是软件本身,而是软件所提供的服务。只要能满足需求、能支撑企业业务运转就行,而不在乎是否拥有代码和程序”——MarcBenioff,CEOofSalesforce服务定义了软件的价值服务定义了软件的价值服务的收费方式风险小,灵活选择模块,备份,维护,安全,升级让客户更专注核心业务灵活启用和暂停,随时随地都可使用按需定购,选择更加自由产品更新速度加快市场空间增大有效降低营销成本,精准面对面使用指导在全球各地,7×24全天候网络服务不需要额外增加专业的IT人员大大降低客户的总体拥有成本小型机大型机PC机桌面互联网移动互联网云服务计算机为中心网络为中心用户为中心云计算的核心是云服务“在未来5年至10年里,问题不再是我们的用户数量达到20亿或30亿。更大的问题是,我们还能提供什么样的服务,如何更有效地利用用户的共享信息,我认为,这才是真正的创新”——马克•扎克伯格,2012.10面向服务的软件开发汽车的组装服务的组合需求描述服务融聚需求牵引计算服务网络环境下的软件服务存储服务柔性生产......服务数据服务服务融合满足需求的规模化定制需求建模领域共性需求个性化、多元化需求领域知识按需服务万般皆服务测练题:下列哪些业务场景可以从“软件即服务(SaaS)”中得到益处?并非全年都需要,只是在短期项目中会使用到当初创企业没有时间、资金或专业知识来构建自己的基础应用程序时AB提交不一定拥有软件所有权,但需要拥有软件处理分析的结果C独立运行的非联网环境下,安装新购置的软件进行数据处理D多选题1分测练题:功能之间是内聚度越高越好,耦合度越低越好么?不是的,原因是……是的,原因是……AB提交判断分析题1分小结:从软件化到软件基础设施化Ourcivilizationrunson

software(人类文明运行在软件之上)——BiarneStroustrup,美国工程院院士,C++的发明人“软件化”:描述了根据业务需求来开发具有相应功能的软件应用系统的过程,关注的是行业知识、能力和流程等的软件实现“软件定义”是“软件基础设施化”,软件在泛在融合世界中打造更加高效、智能和便捷的基础设施,保证其功能灵活性、易扩展性、安全性、可管理性小结:新计算平台、新人机关系、新软件形态以“软件定义”为特征的融合应用开启信息经济新图景,网络为平台、软件为载体、数据为要素、云计算为方法和途径成为融合应用的显著特征。第15讲软件与软件思维(2)软件构造与软件演化、生态第十五章软件与软件思维主题1、软件定义一切主题2、软件服务思维主题3、软件构造思维主题4、软件演化与生态思维15.3软件构造思维“我们今天生活着的世界与其说是自然的世界,还不如说是人类的或人为的世界。在我们周围,几乎每样东西都有人工技能的痕迹”——HerbertAlexanderSimon(司马贺)HerbertAlexanderSimon(1916-2001)设计(Design)是有目标、有计划、针对未来的、技术性的创作与创意活动。软件的生产力是人的智慧create,establish,setup,install,try,preparecalculate,scheme,plan,stratagem,estimation软件是被设计出来的!设计生产运输仓储设计生产运输仓储硬件软件建筑物构造的演变:简单

复杂软件构造:起源木框架:狗窝砖木框架:小别墅钢混框架:摩天大楼建筑物构造的演变:简单

复杂软件构造:起源木框架:狗窝砖木框架:小别墅钢混框架:摩天大楼建筑物构造的演变:简单

复杂软件构造:起源木框架:狗窝砖木框架:小别墅钢混框架:摩天大楼宋·李诫《营造法式》中国古代大型建筑

营造法式软件构造:起源标准化设计造价估算预制件多工种施工建筑物构造的演变:错误构造的代价巨大软件构造:起源木框架:狗窝砖木框架:小别墅钢混框架:摩天大楼韩国三丰百货大楼倒塌事件哈尔滨私拆除承重墙事件软件构造的演变:简单

复杂软件构造:起源木框架:狗窝砖木框架:小别墅钢混框架:摩天大楼计算器信息管理系统数字孪生智慧园区如何“写软件?”硬件环境:处理能力弱,存储量小应用特点:科学计算(计算量大,输入/出量小)主要对象:小型程序和顺序程序软件开发:个体工作,个人技巧,执行功效驱动因素:平台与应用需求变化(广度、深度、共享度)硬件环境:外设发展迅速,处理能力显著增强应用特点:非数值应用,输入输出量大主要对象:大型程序,并发程序软件开发:程序失控和管理失控59软件功能/性能难以满足需求软件开发进度难以预测软件开发成本难以控制软件产品质量难以保证软件产品难以维护如何“大家一起”写软件?F.P.Brooks1999,Turing奖得主TheinherentpropertiesofthisirreducibleessenceofmodernsoftwaresystemsInvisibilityConformityChangeabilityComplexity复杂性——软件的本质问题复杂度。软件开发面对的是客观世界模型的构建问题,相对于物理学等自然科学,可以忽略大量无关的元素和性质,软件工程师却不能简单地这样操作。构成软件复杂度的实体和关系对学习和理解造成负担,从而是软件开发逐渐的演变的难以控制。软件设计的关键在于能否控制和降低软件系统而复杂度。一致性。大型软件开发过程中,为了保持各个子系统之间的逻辑一致性,软件必须随着时间的推移而修改,如果其中没有及时被抽象,软件的复杂性会随着时间的增加而增加。另外,多人开发也会带来不一致。可变性。软件相比硬件会持续面对变更的压力,这种变更又会造成一致性的破坏,这是软件开发面临的最大困难。不可见性。软件即使通过图表来描述其结构也无法反应其复杂度和细节,除非深入查看代码。不可见性让软件开发的沟通成本增大。另外,往往图表、设计模型没有随着软件的更新而同步更新。未持续维护和更新的模型,是软件开发变成混沌系统的主要原因。软件工程研究什么?如何“大家一起”写“好”软件?能用管用、好用适用、可信可靠群体智慧需求与服务设计构造保障测试持续演变组织管理系统架构高质量高效率高价值软件度量开源开发项目管理软件生态系统敏捷开发Devops需求工程代码分析流程挖掘服务科学服务推荐智能化软件工程设计模式编程语言设计复用软件工程经济学软件测试软件安全设计思维领域软件工程软件建模配置管理软件的特点导致软件工程的特殊性软件是逻辑产品而不是实物产品软件复杂程度正超出开发人员的理解力现代软件工程发展的趋势之一,便是越来越承认现实,承认人类的有限理性软件的功能依赖于硬件和软件的运行环境以及人们对它的操作无法确定程序的所有功能的和非功能的行为难以验证所有应用情况下程序的所有行为63为什需要架构设计——降低复杂性降低开发成本。复杂系统拆分成多个相对简单的服务,使得普通程序员都可以完成,降低了人力成本。帮助组织人员高效协作。通过抽象和拆分,让开发人员可以独立完成功能模块。组织好各种技术。选择合适的编程语言、协议、框架、组件等,最高效地实现需求目标保障服务稳定运行。利用成熟的架构方案,例如负载均衡、限流、降级、熔断等,保障服务的高可用。需求让技术变复杂。做一个博客和做一个谷歌,技术复杂度不是一个等级人员让技术复杂。软件开发通过是一个团队,成员水平不一样,擅长的技术方向也不一样,如何有效地协作是一个很大的考验。技术本身复杂。软件项目使用的编程语言、框架、组件、数据库、人工智能、大数据等技术,都有学习成本要让软件稳定运行也复杂。软件开发完成上线后,充满了各种不确定性,比如云服务商可能宕机,比如明星发个微博可能造成系统瘫痪,又比如有人删库跑路了如何理解软件架构?建筑学认为,所有的高楼大厦(复杂建筑),应该是由建筑结构、暖通系统、强电系统、弱电系统(监控系统、综合布线等)、给排水系统等构成。具体体现在建筑图、总平面图、综合管线、结构图、给排水、暖通、强电、弱电等图纸上。这种建筑学的思想方案,就是建筑设计的“架构体系”1986年3月15日,新加坡的新世界酒店坍塌。33人死亡,17人受伤原因:设计时完全忽视了整座大楼的静负荷,即大楼本身的重量1995年6月29日,韩国三丰百货大楼发生倒塌,502人死亡,937人受伤.原因:原定四层,加盖一层,支撑结构承重远超出最初设计1907年8月29日17:30,加拿大魁北克大桥竣工前坍塌,75名工人死亡。原因:设计有问题,监管不到位如何理解软件架构?在一个发展成熟的领域中,架构成为建立和考察系统的总体指导或基本出发点。例如:房屋的形态有砖混、钢混、框架、框剪等桥梁的形态具有拱形、板式支撑、吊索、斜拉式等计算机的主体结构形态具有单处理器、多处理器、云计算等架构是针对某种特定目标系统的具有体系性的、普遍性的问题而提供的通用的解决方案

架构让我们能够正确、合理地

理解、设计和构建复杂的系统理解1:高楼大厦是由钢筋、水泥和砖块构成理解2:信息系统是由数据和代码构成理解1:高楼大厦是由一个个楼层、一个个房间构成理解2:信息系统是由一个个模块、一个个对象和组件构成理解1:高楼大厦是由支撑框架、管道系统、强弱电系统、给排水系统……等构成理解2:信息系统是由组织机构、业务流程、业务功能、业务信息……等构成什么是软件架构(SoftwareArchitecture)?Garlan和Shawn,2019Booch、Rumbaugh和Jacobson,2019IEEE给出的定义:软件架构是一个软件系统的基本组织结构、基本组成构件和互相之间的关系,以及构件与外部环境间的关系。同时,软件架构为后续的设计和架构演化提供了指导性原则维基百科的定义:软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述软件需求技术环境设计师经验架构设计师软件架构软件系统软件功能/性能难以满足需求软件开发进度难以预测软件开发成本难以控制软件产品质量难以保证软件产品难以维护F.P.Brooks1999,Turing奖得主TheinherentpropertiesofthisirreducibleessenceofmodernsoftwaresystemsInvisibilityConformityChangeabilityComplexity软件的本质问题是复杂性软件工程的基本科学问题:如何大家一起写好的软件15.3软件构造思维15.3.1软件构造与软件架构架构是安全的有效保障:建筑架构如遭受破坏,将严重影响建筑物主体承重结构的安全软件架构设计可降低软件复杂性:软件架构是软件系统蓝图,是通用的解决方案架构让我们能够正确、合理地

理解、设计和构建复杂的系统理解1:高楼大厦是由钢筋、水泥和砖块构成理解2:信息系统是由数据和代码构成理解1:高楼大厦是由一个个楼层、一个个房间构成理解2:信息系统是由一个个模块、一个个对象和组件构成理解1:高楼大厦是由支撑框架、管道系统、强弱电系统、给排水系统……等构成理解2:信息系统是由组织机构、业务流程、业务功能、业务信息……等构成15.3.1软件构造与软件架构软件架构设计是软件构造的核心问题分析阶段:对“客观世界”的事物和问题进行最高层抽象表达设计阶段:将分析模型细化为架构、算法等设计模型,逐步向问题求解具体化靠近编码阶段:选用编程语言表达的计算模型,完成问题求解具体化的最终实现软件构造思维系统化:软件构造需要从整体上对软件进行顶层设计,如系统安全、统一事务处理、接口设计、业务逻辑等层次化:软件构造需要进一步体现“松耦合”和“分而治之”的思想,分层是软件构造中不可或缺的形式,分层可以提高软件的开发、维护、部署和扩展性标准化:软件分层的直接结果是上层业务逻辑层不再关心下层数据操作层的处理细节,只需按约定的接口进行数据调用即可软件构造思维:是软件构造过程中体现的抽象化、系统化、层次化、标准化等思维方法,本质是对“如何有效组织多个程序单位进行问题求解”的问题进行建模狗窝的设计建造

一个人就能搭建需要:设计方案(构思)在建造者的脑子里简单的过程:边建造边构思简单的工具15.3.2软件架构设计:分层与复用

狗窝的设计记录图片像素的软件设计功能需求为旺财遮风挡雨读取图片像素信息材料与工具木板、草垫等材料,钉子、锤子等工具9像素*6像素的图片设计把木板钉牢固;铺上草垫用8bit存储像素灰度值实施个人独立完成(边参考狗窝图片边建造)IT个体户(边参考示例边独立写代码)别墅的设计建造由一个团队,必须有效且高效地建造,需要有设计,要建模良好定义的过程强大的工具15.3.2软件架构设计:分层与复用

小别墅的设计图片信息隐藏的软件设计功能需求提供独立的生活区、工作学习区利用二进制灰度值最低位进行信息隐藏材料与工具混凝土、钢筋、轻质砖等材料,脚手架、吊机等工具9像素*6像素的图片设计框架结构设计,装修设计,家居布置设计等用8bit存储像素灰度值;用像素点二进制值的最低位与带隐藏信息的每一位进行位操作;实施多个小组分别组织施工用户层模块:绘制图片逻辑层模块:对位进行与操作、或操作数据层模块:记录图片灰度,隐藏信息摩天大厦的设计建造业主建筑师•设计•注册建筑师•同行审查结构工程师•设计•注册工程师•同行审查机电工程师•设计•注册工程师•同行审查项目经理总承包商

其他顾问•造价•能源理念•立面•火•地质技术•景观•生命安全•灯光•停车•地产管理•垂直交通•风材料供应商•顶棚•包层•电梯•立面维护设备•油漆/涂层•密封材料•钢

15.3.2软件架构设计:分层与复用分层设计与实施:结构、地基、材料、建筑外形、消防、电梯、电路等预制件复用:混凝土预制连接件、钢结构预制件10天建成原本应2年完成的武汉火神山医院15.3.2软件架构设计:分层与复用2020年1月,新冠疫情在武汉爆发。1月23日,党中央决定参照2003年抗击非典期间“北京小汤山医院”模式,在武汉职工疗养院,建设一座专门医院——火神山医院,集中收治新型冠状病毒肺炎患者。医院总建筑面积3.39万平方米,编设床位1000张,开设重症监护病区、重症病区、普通病区,设置感染控制、检验、特诊、放射诊断等辅助科室,不设门诊。15.3.2软件架构设计:分层与复用武汉火神山医院的设计与建造工期时间紧设备材料少防疫要求高协作难度大数字化设计模块化复用装配式施工……建筑信息模型(BIM,BuildingInformationModeling)火种山医院选址校宇武汉市蔡甸区知音湖畔,其场地与既有的武汉职工疗养院毗邻,场地现状为荒地,地势起伏不平,还间隔有跑塘、沟壑,除荒草杂木外,场地上还有一组临时建筑和一幢3层小楼,可以说光是场她设计都需委一番周折传染病医院本身所用到的设备和材料都显小众特殊产品。库存非常少,而火神山医院的建设正们春节与反情最严峻时期,生产复工不足,没备材料采购困难。再加上极短的工期要求,这其实是一个很大的难题,需委设计师权衡,用当时有限的,或者说可以采购到的设备材料来最大程度满足建筑的使间功能传染线医院的护等级要高如何避免医院内交叉感染以及医院对周边的影响,设计也面临巨大挑战新冠肺类朱势汹汹,如何在人员少聚集的情况,高效的完成建设阶段各专业的协作,是对工程人员的一个考验库存信息收集施工图设计物流运输现场施工主材厂房分布情况库存情况清单厂区堆放管理建筑设计结构设计机电设计工程量统计发货管理物流运输管理进度管理场布管理施工模拟质量管理绿建分析为了在十天内完成火神山医院建设,结合全国集装箱库存情况,综合考虑以箱式板房为病房楼主要的建设用材,6x3x2.9米的模块拼接形成标准单元,最大限度的实现项目的模块化、工业化、装配化,为工程进度加速。在施工过程中,采用基于云的网络协同和无人机航拍协助工程质量管理。15.3.2软件架构设计:分层与复用武汉火神山医院的“复用”15.3.2软件架构设计:分层与复用根据医疗建筑功能的特点,将病房区拆分为重复率高的小模块,便于同类型医疗建筑的设计提取和复用。采用基于BIM的数字化设计技术,对建筑物构件的几何信息、专业属性及状态信息,以及非构件对象(如空间、运动行为)的状态信息建立三维信息模型,在构件复用的基础上进行设计和协同利用已有的可复用软件搭建应用系统,可有效降低成本和开发时间,提升标准化,在不同的应用中保持一致代码的“城市”1,000行代码——写了再改100,000行代码——结构化编程10,000,000行代码——面向对象编程1,000,000,000行代码——?!架构设计中的思维模式步骤四:迭代重复复用思维——不要重复发明轮子软件复用:在两次或多次不同的软件开发过程中,重复使用相同或相近软件元素的过程复用是最佳的软件工程实践,复用的好处:较高的生产率较高的系统质量改善系统的可维护性所以,我们在进行架构设计时也需要使用复用思维,将各个模块需要用到的共性功能抽取为可复用的共性组件。复用是软件设计的金科玉律有哪些可重用的元素/软件元素?程序代码设计文档需求分析文档测试用例设计过程领域知识简单的平房复杂的特色建筑如:巨大拱顶和圆顶如何建设?不能倒塌是第一位的现代化复杂的高楼如:地基、承重、结构怎样?如:各建筑之间的互连互通?城镇与城市的构建结构化程序:算法+数据结构子程序+函数调用对象化程序:对象+消息构件化程序:构件+体系结构服务化程序:服务+服务总线面向软件复杂性,实现可靠性、可用性等软件系统构造方法的演变过程15.3.2软件架构设计data2.Text对象名.属性名该对象的名字为data2,其有一个属性为Textadd_Click()对象名_事件名()该对象的名字为add,其有一个事件为Click无架构:紧耦合的软件结构业务处理程序与用户界面程序紧耦合在一起15.3.3典型软件架构用户界面实现用户界面的代码处理业务的各种程序,类及其中的函数对象的:标识id,值value,事件onclick,类型typeonclick事件的驱动程序dbAccount用户界面与业务处理程序两组件的结构框架15.3.3典型软件架构:C/S两层架构15.3.3典型软件架构:C/S两层架构C/S(Client/Server)软件架构将系统架构一分为二,以实现数据和应用部署到多台计算机上的模式客户端主要负责与用户的人机交互响应,以及向服务器应用程序发送请求消息,对存在于客户端的数据执行应用逻辑要求服务器负责有效地管理系统资源(如数据库安全性的要求、数据库访问并发性的控制、数据库的备份与恢复等),并分析客户端请求,返回响应消息给客户端五子棋游戏软件架构设计软件架构设计案例一分组讨论:分层设计(C/S两层)?模块设计?引入C/S两层架构?C/S(Client/Server)软件架构将系统架构一分为二,以实现数据和应用部署到多台计算机上的模式客户端主要负责与用户的人机交互响应,以及向服务器应用程序发送请求消息,对存在于客户端的数据执行应用逻辑要求服务器负责有效地管理系统资源(如数据库安全性的要求、数据库访问并发性的控制、数据库的备份与恢复等),并分析客户端请求,返回响应消息给客户端五子棋游戏软件架构设计软件架构设计案例一示例:包括客户端(用户界面)和服务器端(游戏逻辑和数据存储)(1)客户端(用户界面):客户端主要负责展示游戏界面,提供玩家进行游戏操作的交互功能。例如,展示棋盘、落子、选择难度等级、开始游戏、结束游戏等功能。(2)服务器端(游戏逻辑和数据存储):服务器端主要负责处理游戏逻辑和数据存储。游戏逻辑包括人机对战、人人对战、联网对战等功能。数据存储则包括棋盘状态、玩家信息、游戏结果等数据的保存和读取。五子棋游戏软件架构设计软件架构设计案例一客户端界面:(1)主界面:展示游戏开始界面、游戏规则介绍、游戏设置等;(2)游戏界面:展示棋盘、玩家轮流下棋、棋子样式、胜利条件等;(3)设置界面:玩家可以修改设置,如音效、棋子样式等;(4)关于界面:展示游戏版本信息、开发团队等。五子棋游戏软件架构设计软件架构设计案例一客户端功能:(1)游戏开始:玩家可以选择2人对战或与AI对战,点击开始游戏按钮进入游戏;(2)轮流下棋:玩家轮流在棋盘上放置棋子,每人每次只能放置一个棋子;(3)棋子样式:提供多种棋子样式供玩家选择;(4)胜利条件:玩家需在棋盘上形成连续的五个棋子,即可获得胜利;(5)游戏设置:玩家可以修改游戏音效、棋子样式等设置。五子棋游戏软件架构设计软件架构设计案例一客户端数据处理:对玩家下棋的动作进行处理,如判断棋子是否符合规则、计算棋子间的距离等。同时,客户端还需要将玩家的游戏数据存储在本地,如棋盘状态、游戏进度等,以便在下次使用时能够快速调用。五子棋游戏软件架构设计软件架构设计案例一服务器端数据接口:(1)游戏开始接口:玩家通过此接口发起游戏请求,服务器返回游戏初始化数据;(2)下棋接口:玩家通过此接口发送下棋动作,服务器接收并处理;(3)游戏结束接口:玩家通过此接口发送游戏结束请求,服务器判断胜负并返回结果;(4)游戏回放接口:玩家通过此接口请求游戏回放数据,服务器返回回放数据。五子棋游戏软件架构设计软件架构设计案例一服务器端设计:采用JavaSocket实现多线程服务,处理多个客户端的请求。主要职责包括:(1)接收客户端的游戏请求,初始化游戏数据;(2)处理客户端的下棋动作,更新棋盘状态;(3)判断游戏胜负,返回胜负结果;(4)处理游戏回放请求,返回回放数据。客户端和服务器端通过网络通信进行数据交互,实现五子棋游戏的联机对战功能。15.3.3典型软件架构:三层架构双层C/S架构存在如客户端负载重、服务器性能无法满足要求等问题如双层C/S架构的系统需求发生变化,客户端和服务端的维护和升级工作量巨大B/S(Browser/Server)架构主要业务逻辑在服务器端实现,减轻客户端的压力为了满足更大规模的客户机群和服务器群的业务需求,采用三层B/S软件架构,分为表示层、业务逻辑层、数据层,将双层C/S架构中客户端的业务逻辑层迁移出来,客户端只保留表示层将软件的各部分分离实现,以实现灵活组合

OKButton_ClickCancelButton_ClickGenButton_ClickProcess1(){…}Process2(){…}

Process3(){…}Case:OKButton_ClickProcess1();Case:CancelButton_ClickProcess2();Case:GenButton_ClickProcess3();界面要素及其操作业务处理程序界面要素及其操作与业务处理程序的映射ViewModelController用户界面、业务处理程序与映射控制程序三组件的架构15.3.3典型软件架构:MVC架构MVCMVC(Model-View-Controller)架构15.3.3典型软件架构:MVC架构基于MVC的构造实例Model:程序Controller:界面要素与程序的映射View:界面业务处理程序(Model)与用户界面(View)是分离的,相互之间通过控制器(Controller)联系和映射15.3.3典型软件架构:MVC架构校园在线选课系统架构设计软件架构设计案例二校园选课系统是高校中非常重要的一个信息系统,可以帮助学生选修课程、查询课程信息、查看课程进度等。随着互联网技术的快速发展,如何设计一个易用、高效、可扩展的校园选课系统?分组讨论:分层设计?模块设计?校园在线选课系统架构设计软件架构设计案例二示例:(1)分层设计:将系统功能分为四个层次,分别是表示层、业务逻辑层、数据访问层和数据层。(2)模块化设计:将业务逻辑层拆分为多个模块,如课程管理模块、学生信息管理模块、教师信息管理模块等。(3)数据库设计:使用关系型数据库存储课程、学生、教师等数据,并建立相应的表结构。校园在线选课系统架构设计软件架构设计案例二Model(模型层):包括课程管理、学生信息管理、教师信息管理等功能。(1)课程模型:负责课程信息的存储和更新,如课程名称、课程描述、上课时间等。(2)学生模型:负责存储学生信息,如学号、姓名、性别、年级等。(3)教师模型:负责存储教师信息,如教师编号、姓名、性别、职称等。校园在线选课系统架构设计软件架构设计案例二View(视图层):负责展示数据和接收用户的输入。(1)课程列表视图:展示所有课程的列表,包括课程名称、上课时间等。(2)学生信息视图:展示学生的基本信息,如姓名、年级等。(3)教师信息视图:展示教师的基本信息,如姓名、职称等。(4)选课视图:展示选课过程中的相关信息,如已选课程、可选课程等。校园在线选课系统架构设计软件架构设计案例二Controller(控制器层):处理用户的请求,将用户的输入转换为模型层的操作。(1)课程控制器:负责处理课程相关的请求,如查询课程、添加课程等。(2)学生控制器:负责处理学生相关的请求,如查询学生、添加学生等。(3)教师控制器:负责处理教师相关的请求,如查询教师、添加教师等。(4)选课控制器:负责处理选课请求,如查询已选课程、选课等。校园在线选课系统架构设计软件架构设计案例二变化:需要增加一个新的功能:对学生已选课程进行退课操作怎样对软件进行升级改造?分组讨论:(1)在无架构设计时,怎样对软件进行升级改造?(2)采用MVC架构时,怎样对软件进行升级改造?校园在线选课系统架构设计软件架构设计案例二模型层(Model):我们可以在学生模型中添加一个表示退课状态的字段(例如:is_withdraw)。当学生进行退课操作时,更新这个字段。同时,需要修改课程模型中的相关字段,如学生选课状态等。控制器层(Controller):添加一个新的方法,用于处理学生的退课请求。当接收到退课请求时,首先验证用户身份和课程选择情况,然后更新学生模型和课程模型的相关字段,最后返回退课结果。视图层(View):添加一个新的视图,用于展示学生已选课程的列表,并增加一个按钮,用于触发退课操作。当用户点击退课按钮时,向控制器发送退课请求。同时,需要更新已选课程列表,以反映退课操作的结果。校园在线选课系统架构设计软件架构设计案例二无架构:需要对代码进行较大改动,修改的代码与功能紧耦合,移植性弱MVC:通过这样的分层设计,我们可以方便地增加一个新的功能,而不会影响到其他功能的正常运行。此外,由于分层设计使得各层之间的耦合度较低,因此我们在增加新功能时,可以独立对每个层次进行修改,从而提高系统的可扩展性和可维护性。第十五章软件与软件思维主题1、软件定义一切主题2、软件服务思维主题3、软件构造思维主题4、软件演化与生态思维“软件定义”对软件系统的挑战超大规模:-大量用户109-大量感知、受控设备1010-海量计算与通信进程

1012-超量的非结构化动态数据1018持续演变:

-移动互联网

-智能电网,智能交通-军事全球信息栅格泛在分散:-多部门、多领域、多产业、多地域软件工程要素109

质量效率方法人过程软件开发质量与效率过程思维过程是人们解决一个任务时,采取的行动步骤、步骤应遵循的规则、步骤所使用资源的总和传统思维:以任务为中心过程思维:以过程为中心以过程为中心的好处协调组织的活动,为达到共同的目标而努力为每个人提供度量的基准增强过程的一致性和可重复性过程思维是在立足历史和现实的基础上,以动态和发展的眼光考察和预测未来,用互动的共生的认识来规划未来和指导现在。思维活动本质上是一个信息的加工、处理、转换的过程,过程思维在对信息的选择上是以过程中活动和事件作为思维对象的,在对信息的组织上以相关性、历时性作为手段,在对信息的解释上以主客体的互动和差异性作为基础。什么是软件过程?DefinesWhoisdoingWhat,Whentodoit,andHowtoreachacertaingoal.SoftwareProcessNeworchangedrequirementsNeworchangedsystem软件过程包含了软件生命周期里所涉及的一系列相关过程,它为管理那些软件开发过程中较难控制的活动提供了一个统一的框架软件过程过程是活动的集合,活动是任务的集合,任务要起到把输入加工成输出的作用。活动的执行可以是顺序的、迭代的(重复的)、并行的、嵌套的,或者是有条件地引发的如何做一个软件项目?软件过程与软件演化软件演化(SoftwareEvolution)软件演化是指对软件进行维护和更新的一种行为,它是软件生命周期中始终存在的变化活动开发演化和运行演化。运行演化又称为软件维护,是软件系统被交付使用以后,为了改正错误或满足新的需要而修改软件的过程,是软件演化的一个特定时段的活动静态演化:软件在停机状态下的演化动态演化:软件在执行期间的软件演化迭代思维——没有最好,只有更好迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值计算机特定编程中一组指令(或一定步骤)进行一次重复执行或循环,直到满足某条件为止,亦称为迭代敏捷开发:Scrum迭代式增量开发敏捷不是一种方法论,也不是一种软件开发的具体方法,更不是一个框架或过程,而是一套价值观和原则Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发软件维护(SoftwareMaintenance)软件的维护活动是:交付前完成的活动:交付后运行计划、维护计划交付后完成的活动:软件修改、培训、帮助资料软件维护有四种情况:纠错性维护完善性维护预防性维护适应性维护软件开发组织方式的演化社会化软件开发虚拟组织开源社区分布协同开放共享群智开发小作坊式软件开发工业化软件开发公司化系统化流程化有没有可能用修建集市的方式,造出一所大教堂?《大教堂与集市》(TheCathedral&

theBazaar)是埃里克·斯蒂芬·雷蒙(EricStevenRaymond)所撰写的软件工程著作,被称为开源运动的圣经。他说,世界上的建筑可以分两种:一种是集市,天天开放在那里,从无到有,从小到大;还有一种是大教堂,几代人呕心沥血,几十年才能建成,投入使用。当你新建一座建筑时,你可以采用集市的模式,也可以采用大教堂的模式。一般来说,集市的特点是开放式建设、成本低、周期短、品质平庸;大教堂的特点是封闭式建设、成本高、周期长、品质优异一般读者会认为「大教堂模式」指代闭源,「集市模式」指代开源,但仔细读这本书会发现,前者更多指「强有力管理」或「高手精心打造」,后者更多指「基于兴趣」的去中心化协作。Raymond:大教堂模式:在与世隔绝的环境下,(软件)由天才式专家或几个行家里手精心打造。集市模式:在Linux社区里,没有建筑大教堂那样的安静和虔诚,倒更像是一个乱糟糟的大集市,充满了各种不同的计划和方法。集市要变成大教堂的前提(必要)条件你不能从零开始建设集市,你必须先有一个原始项目。(It'sfairlyclearthatonecannotcodefromthegroundupinbazaarstyle.)你的原始项目可以有缺陷,但是它必须能运行。(Itcanbecrude,buggy,incomplete,andpoorlydocumented.Whatitmustnotfailtodoisrun.)你必须向用户展示一个可行的前景,且让潜在的合作者相信在可预见的将来它会变成一个真正漂亮的东西。(Whenyoustartcommunity-building,whatyouneedtobeable

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论