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

下载本文档

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

文档简介

第15讲软件与软件思维(2)软件构造与软件演化、生态第十五章软件与软件思维主题1、软件定义一切主题2、软件服务思维主题3、软件构造思维主题4、软件演化与生态思维15.3软件构造思维“我们今天生活着的世界与其说是自然的世界,还不如说是人类的或人为的世界。在我们周围,几乎每样东西都有人工技能的痕迹”——HerbertAlexanderSimon(司马贺)HerbertAlexanderSimon(1916-2001)设计(Design)是有目标、有计划、针对未来的、技术性的创作与创意活动。软件的生产力是人的智慧create,establish,setup,install,try,preparecalculate,scheme,plan,stratagem,estimation软件是被设计出来的!设计生产运输仓储设计生产运输仓储硬件软件建筑物构造的演变:简单

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

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

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

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

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

-移动互联网

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

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

theBazaar)是埃里克·斯蒂芬·雷蒙(EricStevenRaymond)所撰写的软件工程著作,被称为开源运动的圣经。他说,世界上的建筑可以分两种:一种是集市,天天开放在那里,从无到有,从小到大;还有一种是大教堂,几代人呕心沥血,几十年才能建成,投入使用。当你新建一座建筑时,你可以采用集市的模式,也可以采用大教堂的模式。一般来说,集市的特点是开放式建设、成本低、周期短、品质平庸;大教堂的特点是封闭式建设、成本高、周期长、品质优异一般读者会认为「大教堂模式」指代闭源,「集市模式」指代开源,但仔细读这本书会发现,前者更多指「强有力管理」或「高手精心打造」,后者更多指「基于兴趣」的去中心化协作。Raymond:大教堂模式:在与世隔绝的环境下,(软件)由天才式专家或几个行家里手精心打造。集市模式:在Linux社区里,没有建筑大教堂那样的安静和虔诚,倒更像是一个乱糟糟的大集市,充满了各种不同的计划和方法。集市要变成大教堂的前提(必要)条件你不能从零开始建设集市,你必须先有一个原始项目。(It'sfairlyclearthatonecannotcodefromthegroundupinbazaarstyle.)你的原始项目可以有缺陷,但是它必须能运行。(Itcanbecrude,buggy,incomplete,andpoorlydocumented.Whatitmustnotfailtodoisrun.)你必须向用户展示一个可行的前景,且让潜在的合作者相信在可预见的将来它会变成一个真正漂亮的东西。(Whenyoustartcommunity-building,whatyouneedtobeabletopresentisaplausiblepromise,andconvincepotentialco-developersthatitcanbeevolvedintosomethingreallyneatintheforeseeablefuture.)项目的主持者本身不一定是天才,但他一定要能够慧眼识别出他人的优秀想法。(itisnotcriticalthatthecoordinatorbeabletooriginatedesignsofexceptionalbrilliance,butitisabsolutelycriticalthatthecoordinatorbeabletorecognizegooddesignideasfromothers.)项目的主持者必须要有良好的人际关系、交流技能和人格魅力。这样才能吸引他人,使别人对你所做的事感兴趣,愿意帮助你。(Abazaarprojectcoordinatororleadermusthavegoodpeopleandcommunicationsskills.)集市要变成大教堂成功的充分条件项目首先必须是你自己感兴趣的,但是最终能对其他人有用。将用户当作合作者。尽快地和经常地做出改进,多听取用户的意见。健壮的结构远比精巧的设计来得重要。换句话说,结构是第一位的,功能是第二位的。保持项目的简单性。设计达到完美的时候,不是无法再增加东西了,而是无法再减少东西了。开源项目的盈利模式占领市场:利用开源软件建立或维护专有软件(能产生直接收入)的市场地位。硬件糖霜:市场压力迫使硬件公司编写和维护软件,但软件本身不是盈利中心,它是一项开销——并且常常是一项很实在的开销。送配方,开餐馆:开源软件不是为闭源软件而是为服务占领市场。附属物策略:出售开源软件的附属物当下收费,未来免费软件免费,品牌收费软件免费,内容收费Instagram:开源开放开发的传奇数据采集数据存储管理AmazonClo

温馨提示

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

评论

0/150

提交评论