《高级软件工程ppt.ppt》由会员分享,可在线阅读,更多相关《高级软件工程ppt.ppt(124页珍藏版)》请在课桌文档上搜索。
1、高级软件工程,第12讲 软件工程新技术及体系,12.1 软件开发新技术概述12.2 能力成熟度集成模型12.3 微软软件工程体系12.4 敏捷软件工程体系12.5 形式化方法12.6 净室软件工程体系12.7 面向服务架构(SOA)技术,第12讲 软件工程新技术及体系,教学目标:掌握软件开发新技术的概念、特点及应用 了解能力成熟度集成模型CMMI及评估方法 理解微软等现代软件工程体系 了解形式化方法及净室软件工程体系 掌握面向服务架构(SOA)技术,12.1 软件开发新技术概述,12.1.1 软件构件技术概述 1、构件技术概念构件技术是基于OO技术更高级的抽象。将底层的对象集合打包,组成功能“
2、插件”。基于构件技术的软件开发就是将已存在的构件组装(集成)到当前软件系统的框架结构中,从而开发出新的软件产品,构件技术是软件产业化革命的必然发展趋势。,OO技术在“数据+算法”基础上,提升了对事物的认识方法。构件技术则在“对象+算法”的基础上,将认识事物的角度从对象个体本身提升到个体在群体中的作用,在认识上具有本质差异同。从抽象程度看,OO技术已达到类级重用(代码重用),以类为封装的单位。而构件则是对一组类的组合进行封装,可将底层的多个逻辑组合成高层次上的粒度更大的新构件,甚至直接封装到一个系统。,2、构件的属性及应用构件是可独立配置的单元,因此必须自包容。构件可以在适当的环境中被复合使用,
3、因此构件需要提供清楚的接口规范,可以与环境交互。构件沿袭了对象的封装特性,但同时并不局限于一个对象,其内部可以封装一个或多个类、原型对象甚至过程,结构是灵活的。,对于构件的应用。构件通过其接口特征进行标识,其所提供的服务与访问方式是接口特征的一部分内容,每个构件都需先注册才能使用。考虑的因素包括:应用编程接口(API);构件所需的开发和集成;运行需求,如资源的使用(内存和硬盘),时间或速度以及网络协议;服务需求,如操作系统的接口,或需要其他构件的支持等;安全特征,例如访问控制和身份验证协议等;嵌入式设计假定,有特定的数值/非数值算法使用;异常处理。,3、实现构件技术必备条件(1)以标准软件体系
4、结构,保证构件间通信协议统一,实现同步和异步操作控制,突破本地空间限制,充分利用网络环境。(2)构件有标准接口,保证系统可分解成多个功能独立的单元,用构件组装而成。(3)构件独立于编程语言。(4)构件提供版本兼容,来实现应用系统的扩展和更新。,4、软件构件设计由于软件构件依赖于开发平台环境,设计时有以下特殊要求:(1)以接口为核心,使用开放标准。(2)构件语义的描述要形式化。(3)提炼封装构件过程应严格记录。(4)设计模式也可重用。(5)利用开发工具。,5、J2EE技术概述 Sun公司提出了三个Java平台:(1)J2ME(Java 2 Platform,Micro Edition)(2)J2
5、SE(Java 2 Platform,Standard Edition)(3)J2EE(Java 2 Platform,Enterprise Edition)1)J2EE的核心技术 J2EE的核心技术如下图所示。其中:RMI-IIOP用于实现Java和CORBA应用之间互操作。,J2EE的核心技术,2)EJB技术 EJB(Enterprise Java Beans)是为开发和使用基于事务和分布对象应用的服务器端构件而定义的一种技术规约。其体系结构相对于CORBA,最大的特点是简单性,可帮助软件开发人员快速地构建分布式应用系统。EJB的特点包括:(1)清晰的体系结构。(2)简化的编程模型。(3)
6、通用的编程模型。(4)易移植性。(5)支持事务处理。(6)可扩展性。(7)安全性。,12.1.2 软件复用技术概述,1、软件复用概念及分类软件复用(Software Reuse)是指在软件研发中重复利用相关软件元素的过程。软件复用是提高软件研发效率和质量的一种重要技术。软件复用的主要思想是:将软件作为由不同功能部分的“组件”所组成的有机体,每个组件(元素)在设计编写时可被设计成完成同类工作的通用工具。,按照不同方式,可将软件复用分为:1)按复用的对象分。可以分为产品复用、过程复用。2)按对可复用信息进行复用的方式分。可以将软件复用区分为黑盒复用和白盒复用。3)按复用的组织方式分。将复用区分为系
7、统化的(或有计划的)复用和个别的复用。4)按所应用的领域范围分。可以划分为横向复用和纵向复用。,2、软件复用关键技术及级别 软件复用是将已有的软件成分(元素)用于构造新的软件系统。可被复用的软件成分常称为可复用构件,无论对可复用构件原样使用或作适当修改后再使用,只要是用于构造新软件,则都可称作复用。软件复用不仅是对程序的复用,还包括对软件生产过程中任何活动所产生的制成品的复用,如:项目计划、可行性报告、需求定义、分析模型、设计模型、详细说明、源程序、测试用例等等。,实现软件复用的关键技术主要包括:软件组件技术、领域工程、软件构架技术、软件再工程技术、开放系统技术、软件过程、CASE技术等。可划
8、分的复用级别为:代码复用、设计复用、分析的复用、软件测试信息的复用、应用程序生成器的使用、软件体系结构的复用等。影响着软件复用的主要因素包括:技术因素、人为因素、管理因素、教育培训因素、法律因素等。,3、通过复用设计类1)选择开发软件库的目的是从既存构件中选取符合需要的构件,也是设计类最简单的方法。在OO开发环境应提供常用的构件库,大多数语言环境都带有一个原始构件库。下表为建立在各层上的特定域的库。,表 一个面向对象构件库的层次,2)分解最初标识的“类”常为几个概念的组合。设计时可能发现所标识的操作属于分散的几个概念中,或发现数据属性被分开放到模型中拆散概念形成的几个组内。因此,需要将一个类分
9、成几个类,使新标识的类已存在或易于实现。,3)配置在设计类时,可能需要由既存类的实例提供类的某些特性。通过将相应类的实例声明为新类的属性配置新类。如,一种仿真服务器可能要求用一个计时器跟踪服务时间。设计者不必开发在此行为中所需的数据和操作,而应找到计时器类,并在服务器类的定义中进行声明。,4)演变准备开发的新类可能与一个既存类非常类似,但不完全相同。此时,不适宜采用“选择”操作,但可从一个既存类演变成一个新类,可利用继承机制来表示一般化特殊化的关系。特殊化处理可以选择以下3种方式。(1)由既存类建立子类。,轿车类,汽车类,建立子类,拖拉机类,汽车类,调整继承结构,(2)由既存类建立新类。,边形
10、类,三角形类,(3)建立既存类的父类。,建立一般类,12.1.3 虚拟化与云计算技术概述,云计算将网络上分布的计算、存储、服务构件和网络软件等资源集中起来,基于资源虚拟化的方式,为用户提供方便快捷的服务,它可以实现计算与存储的分布式与并行处理。如果把“云”视为一个虚拟化的存储与计算资源池,那么云计算则是这个资源池基于网络平台为用户提供的数据存储和网络计算服务。,云计算是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展,或者说是这些计算科学概念的商业实现。云计算是虚拟化(Virtualiza
11、tion)、效用计算(Utility Computing)、将基础设施作为服务IaaS(Infrastructure as a Service)、将平台作为服务PaaS(Platform as a Service)和将软件作为服务SaaS(Software as a Service)等概念混合演进并跃升的结果。,1、虚拟化技术概述虚拟化是将物理资源转变为逻辑上可以管理的资源,以打破物理结构间壁垒。可使虚拟世界运行在各种物理平台上,资源的管理都将按逻辑方式进行,完全实现资源的自动化分配,而虚拟化技术就是其实现的理想工具。,虚拟化环境需要多种技术的协调配合:服务器和操作系统的虚拟化、存储虚拟化、以
12、及系统管理、资源管理和软件提交,与非虚拟化环境一致的应用环境。由于虚拟化技术,企业不再需要建立耗资巨大的数据中心便可实现异地备份。虚拟技术主要包括:虚拟现实、虚拟显示、虚拟机、CPU虚拟化技术、文件虚拟化、桌面虚拟化技术等。,2、云计算的概念及架构云计算主要通过互联网以创新的计算模式,使用户随时获得所需的计算能力和丰富的信息服务,其创新的商业模式可使用户对计算和服务,如同使用水电一样取用自由、按量付费;目标是通过互联网将各种IT资源以服务的方式提供给用户,包括计算资源、存储资源、软件开发、系统测试、系统维护和各种丰富的应用服务。,现在,云计算融合了以虚拟化、服务管理自动化和标准化为代表的众多创
13、新技术。云计算借助虚拟化技术的抽象表达性、伸缩性和灵活性,提高了网络资源利用率,简化了资源和服务的管理和维护;利用信息服务自动化技术,将资源封装为服务交付给用户,减少了数据中心的运营成本;利用标准化,方便了服务的开发和交付,缩短了客户服务上线时间。,云计算实现复杂的企业环境的各种技术和方法正在不断深入,主要是研发软件系统的云计算架构。云计算架构的4个层次为:显示层、中间层、基础设施层、管理层管理层主要为横向的三层服务,并提供多种管理和维护技术等,包括6个方面:(1)帐号管理。(2)SLA监控。(3)安全管理。(4)计费管理。(5)负载均衡。(6)运维管理。,3、云计算的分类,云计算按照服务类型
14、大致可以分为三类,如下图所示:,(1)IaaS将硬件设备等基础资源封装成服务供用户使用,如亚马逊云计算AWS(Amazon Web Services)的弹性计算云EC2和简单存储服务S3。(2)PaaS对资源的抽象层次更进一步,它提供用户应用程序的运行环境,典型的如GoogleApp Engine。(3)SaaS的针对性更强,它将某些特定应用软件功能封装成服务,如Salesforce公司提供的在线客户关系管理CRM(Client Relationship Management)服务。,课堂讨论:(1)什么是软件构件技术?其特点如何?(2)什么是复用技术?这样应用复用技术?(3)怎样理解虚拟化和
15、云计算技术?,12.2 能力成熟度集成模型,12.2.1 CMMI概述 1、CMMI的由来CMMI(Capacity Maturity Model Integrated)是美国国防部规定的一种衡量软件企业或组织开发能力的度量标准。规定只有达到CMMI一定等级的公司才有参加美国国防软件项目竞标的资格。我国也鼓励企业进行CMMI等级评估,许多软件工程项目招标也看重承包商的CMMI等级。目前,CMMI已被应用到:评估机构评估一个软件企业或组织的软件开发能力成熟度等级;软件采购方用于考察软件承包方软件项目承包能力;软件企业或组织用于持续改进自身软件开发能力。,2、CMMI表示方法及要求CMMI有两种表
16、示方法:(1)连续模型。(2)阶段模型。CMMI中的各项要求,都来自于成功企业的最佳实践。尽管CMMI提供的实践不能针对所有情况,但CMMI能系统性地提供大量的实践(22个过程域),对于项目或组织的选择或参考很重要。CMMI提供能力成熟度评估,可帮助企业或组织找出自身的弱点进行改进。,12.2.2 CMMI能力成熟度级别,CMMI以5个级别分别代表软件团队能力成熟度的等级,级别较大的机构表明其成熟度较高,软件综合开发能力较强。主要包括:(1)CMMI 一级(执行级)。(2)CMMI 二级(管理级)。(3)CMMI 三级(明确级)。(4)CMMI 四级(量化级)。(5)CMMI 五级(优化级)。
17、,12.2.3 CMMI的评估及应用,1、CMMI的评估 软件企业或组织对CMMI级别的评估,可按照CMMI的具体要求进行。采取自行评估或外请评估,评估结果应得到外界认可,应由SEI认证的主任评估师和评估师进行评估,并依评估结果颁发相应证书。对于企业或组织的CMMI级别的评估,CMMI二级及其以上的每一级别都包含了一些PA(Process Area,过程域),若要达到CMMI某个级别的要求,就要达到该级别及其以下所有PA的要求。PA是要做好软件开发的某一个方面,如项目策划、技术方案、配置管理等。CMMI 共有22个PA,其中CMMI 二级有7个PA,三级有11个PA,四级有2个PA,五级有2个
18、PA,详见下表。,表 CMMI的过程域分布,“项目策划”是CMMI二级七个过程域之一,其特定目标(SG)有3项,特定实践(SP)有14项,通用目标(GG)有5项,通用实践(GP)有17项,详见下表。,项目策划的特定目标和特定实践,表 项目策划的通用目标和通用实践,2、CMMI的应用CMMI是一个庞大的过程元模型,自发布以来在国际软件界已产生了巨大影响,已成为业界公认的评估标准,获取其证书成为一个企业或组织能力和形象标志,否则难以获得国外项目,甚至也难以在国内一些项目的竞标中获胜。CMMI适合企业操作,避免了某些管理体系只重理论而忽视实践的缺陷。在我国随着媒体的宣传和政府的支持,许多企业引入了C
19、MMI咨询和认证,对于整个软件行业的管理提升及研发效率提高起到了很大促进作用。,课堂讨论:(l)CMMI有什么用途?(2)CMMI连续模型和阶段模型各自适应哪一种过程改进要求?(3)CMMI的五个级别分别是什么?,12.3 微软软件工程体系,12.3.1 MSF过程模型 MSF 过程模型将瀑布模型中基于里程碑的规划优势与螺旋模型中增量迭代的长处结合在一起,形成构思、计划、开发、稳定和发布5个阶段迭代改进、螺旋上升的流程,如下图所示。,MSF过程模型,下面分别简述各阶段的主要工作:(1)构思阶段:明确项目的任务、目标和范围。(2)计划阶段:编写功能说明书、完成概要设计、编写工作计划、制定费用预算
20、和制定进度表等。(3)开发阶段:实现整个解决方案代码和文档编写,结果可提供给用户试用。(4)测试阶段:完成所有代码的优化和测试,做好了产品发布准备。(5)部署阶段:进行产品发布,侧重解决发布出现的问题,发布过程完成后再将项目移交到运营和支持人员手中。,12.3.2 MSF团队模型,微软的软件开发团队实行矩阵式交叉管理。纵向垂直管理与汇报关系为:产品总经理部门经理小组长组员;横向管理为产品特性项目组,每个产品特性项目组负责开发一个组件,大的产品特性项目组通常要拆分成小的子项目组。产品特性项目组成员职能划分为六种角色,如下图所示。团队6种角色的职责如下表所述。,9.4.2 MSF团队模型,MSF团
21、队模型,表 MSF团队模型中各角色的职能与职责,MSF团队模型的特点是项目组小型化、多元化,各角色地位对等,在同一地点办公,熟练掌握相关的技术,相辅相成,以产品发布为中心,共同参与设计、管理、决策和分享产品前景,但各自又有足够的不同授权和责任。项目组可按职能或产品特性灵活划分,人员也可按照一定的原则兼任多个或不同的角色,如下表所示:,表 角色兼任匹配表,12.3.3 MSF开发基本原则,Microsoft 将开发经验总结为下述8条基本原则:(1)推动信息共享与沟通。(2)为共同目标工作。(3)充分授权和信任。(4)各司其职,对项目共同负责。(5)重视商业价值。(6)及时更新与时俱进。(7)注重
22、质量及效益。(8)交流总结经验。,12.3.4 团队协同开发平台与工具,微软的团队协同开发平台称为VSTS(Visual Studio Team System)。主要帮助开发团队各角色提高工作效率和更有效地合作与沟通,并通过开发过程中的每个步骤提高软件质量。微软已将VSTS打造成为一款商品化产品,从产品角度,包含一个服务器软件和一组客户端软件。其中:服务器软件TFS(Team oundation Server)是系统的中心,具有项目管理、工作项跟踪、版本控制、报告与业务智能、构建管理和流程指南等团队服务功能。,课堂讨论:(l)什么是MSF过程模型?(2)什么是MSF团队模型?(3)什么是MSF
23、开发的基本原则?,12.4 敏捷软件工程体系,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在软件开发过程中,经常面对快速变化带来的新问题,并被不断增加、繁杂的步骤、规则和文档所困扰。,12.4.1 敏捷宣言及原则,敏捷软件工程体系的核心思想,可概括为以下敏捷宣言。个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合同谈判 响应变化 胜过 遵循计划敏捷联盟认为,右项虽然也有价值,但是左项具有更大的实际意义和价值。,敏捷联盟定义的敏捷原则,包括以下12条:,(1)最优先要做的是通过尽早的、持续的交付有价值的软件使客户满意。(2)即使到了开发后期,也欢迎改变
24、需求。敏捷过程利用变化为客户创造竞争优势。(3)经常地交付可运行的软件,交付间隔从几周到几个月,交付时间间隔越短越好。(4)在整个项目开发期间,业务人员和开发人员尽量天天在一起工作与交流。(5)围绕被激励的个体构建项目,提供所需的环境和支持,并信任他们能够完成工作。,(6)在团队内部,最有效果和效率的传递信息方法就是面对面的交谈。(7)首要的进度度量标准是研发的软件。(8)敏捷过程提倡可持续的开发速度。团队和用户应保持一个长期恒定的开发速度。(9)不断地关注优秀的技能和好的设计以增强敏捷能力。(10)尽量简单只做必须的,这是艺术。(11)最好的构架、需求和设计出于自组织团队。(12)团队会不定
25、期地进行反省和调整,以求更有效地工作。,12.4.2 敏捷过程模型,是一渐进型开发过程,将开发阶段的4个活动:分析、设计、编码和测试结合在一起,消除了软件过程中不必要的步骤和提交物,在全过程中采用迭代增量开发、反馈修正和反复测试的策略。敏捷软件开发生存周期划分为用户故事、体系结构、发布计划、交互、接受测试和小型发布6个阶段,其中“用户故事”代替了传统模型中的需求分析,由用户用自己领域中的词汇准确地表达其需求而无须考虑任何软件开发技术细节。软件过程如下图所示。,9.5.2 敏捷过程模型,敏捷软件过程模型,敏捷过程遵循以下简便易行规则:,(1)有计划地开发(Planning Game)。(2)小版
26、本发布(Small Releases)。(3)用隐喻(Metaphor)沟通。(4)简单设计(Simple Design)。(5)测试驱动开发(Test-Driven)。(6)勇于重构(Refactoring)。(7)结对编程(Pair Programming)。(8)持续集成(Continuous Integration)。(9)代码集体所有(Collective Code Ownership)。(10)规范编码(Coding Standard)。(11)用户现场参与(On-Site Customer)。(12)每周工作40小时(Forty Hour Week)。,12.4.3 敏捷设计方法
27、,敏捷采取了面向对象的设计原则,主要包括:(1)单一职责原则(SRP)。(2)开放-封闭原则(OCP)。(3)替换原则(LSP)。(4)依赖倒置原则(DIP)。(5)接口隔离原则(ISP)。(6)重用发布等价原则(REP)。(7)共同封闭原则(CCP)。(8)共同重用原则(CRP)。(9)无环依赖原则(ADP)。(10)稳定依赖原则(SDP)。(11)稳定抽象原则(SAP)。,当软件中出现下面任何一种症状时,表明软件正在出现问题,就应进行重构。僵化性:系统很难改动,改一处就要改多处。脆弱性:改一处会牵动多处概念无关的地方出问题。牢固性:很难解开系统的纠结,使之成为一些可重用的组件。粘滞性:做正
28、确的事比做错误的事要难。不必要的复杂性:设计中含有不具任何直接好处的基础结构。不必要的重复性:设计中含有重复结构,而该结构本可用单一的抽象统一。晦涩性:很难阅读和理解,不能很好地表达意图。,12.4.4 极限编程实践,极限编程是敏捷软件工程体系中最著名且最重要的一个方法。主要由以下一些互相依赖的简单实践组成,其实践构成了敏捷过程的主要方面:(1)团队组织。(7)勇于改进。(2)计划策略。(8)持续集成。(3)客户测试。(9)代码集体所有。(4)简单设计。(10)规范编码。(5)结对编程。(11)系统隐喻。(6)测试驱动。(12)速度可持续。,课堂讨论:(l)敏捷的宣言是什么?敏捷规则是什么?(
29、2)什么是敏捷设计?什么是极限编程?(3)敏捷方法有何缺陷?,12.5 形式化方法,用自动化或半自动化的工具进行检查和分析,就是软件工程中的形式化方法。可将数学方法运用在以下3个方面:一是规范描述采用数学的形式和语义记法,形成软件形式化规范,以描述软件的规格、设计及实现。二是分析推理采用数学方法对软件形式化规范进行分析和推理,以研究它的各种静态和动态性质。三是实现代码运用数学方法从抽象的高层描述出发,按照语义逐步推导出更接近实现的、包含更多细节的规范,经过逐步精化,最终得到可正确运行的程序。,表 工业形式化软件开发实例简况,下表列举的两个实例都采用了工业化的形式化开发方法,其中巴黎地铁14号线
30、自动驾驶系统1998投入运行,巴黎Roissy机场自动穿梭车2006年投入运行。,12.5.1 形式化开发过程,纯粹应用形式化方法开发软件其过程可以划分为三个阶段:(1)阶段1:获取抽象模型。(2)阶段2:获取具体模型。(3)阶段3:获取可执行代码。,12.5.2 形式化方法分类,形式化方法的本质是用数学来描述目标软件系统属性。根据表达方法的不同,形式化方法可以分成下面五类:(1)基于模型的方法。(2)基于逻辑的方法。(3)代数方法。(4)过程代数方法。(5)基于网络的方法。,12.5.3 Z语言,语言以经典集合论和一阶谓词为基础,运用所谓的“schema(盒)”结构来描述一个规约的状态空间和
31、操作。规约由一系列“schema”组成,每个“schema”定义一个抽象的对象或操作,并用谓词判定描述给出新的对象或操作的语义约束。“schema”可以组合成新的“schema”,新的“schema”继承其构成成分的“schema”的一切属性和约束。,Z语言表示法概要包括:(1)schema X定义形式:x声明(declarations)谓词(predicates)(2)全局函数和常量的定义形式:声明(给出函数或常量的类型)谓词(给出函数或常量的值),(3)集合(sets):S X S被声明为X的集合xS x是S中的成员xS x不是S中的成员在此处键入公式。ST S是T的子集:S中每个元素均在
32、T中ST S和T的并:包含在S或T或二者中的每个元素ST S和T的交:包含同时在S和T中的元素ST S和T的差:包含在S中的而不在T中的每个元素空集:不包含任何成员x单元素集:仅仅包含x 自然数集合:0,1,2,S X S被声明为X的有限集max(S)非空集合S中的最大者,(4)函数(Functions):fXY f 被声明为从X到Y的部分内射dom f f的定义域:f(x)有定义的值x的集合ran f f的值域:x在f的定义域上变化而形成的f(x)值集合fxy 一个和f相同的函数,除了x被映射到y(x)值集合xf 一个和f相似的函数,除了x被从定义域中去除(5)逻辑(logic):PQ:P与
33、Q同时为真时其值为真PQ P蕴含Q:或者Q为真或者P为假时其值为真S=S在操作中schema S中没有成分改变,【案例12-1】形式化软件工程,在计算机操作系统中,创建文件时需获取未用的存储块,为此需要维持一个未用块池并保持对当前已用块的跟踪。删除文件时块被释放并加入到块队列中以等待进入未用块池。对于块处理子系统而言,存在未用块集合、已用块集合以及返回块队列,其数据不变式用自然语言表达为:一个块不能同时标记为未用和已用;返回块队列是当前已用块集合的子集;已用块和未用块的集合构成文件块总集;返回块队列中没有重复的块号;未用块集合中没有重复的块号;已用块集合中没有重复的块号;块处理子系统的操作包括
34、;将一已用块集合加到返回块队列尾;从返回块队列前移走一已用块集合放到未用块集合中;检查块队列是否为空。,下面的schema描述块处理子系统的状态和数据不变式:BlockHandler used,free:BLOCKS BlockQueue:seq BLOCKSusedfree=usedfree=AllBlocks i:dom BlockQueue.BlockQueue iused i,j:dom BlockQueue.ij BlockQueue i BlockQueue j=,课堂讨论:(l)形式化方法有什么优点和缺点?(2)形式化方法发展前途如何?(3)形式化方法分为哪几类?(4)课外了解有
35、穷状态机、Petri网两种形式化方法,12.6 净室软件工程体系,定义:采用形式化方法,主要基于数学和统计学,面向工作组,追求以经济的方式生产高质量的软件。12.6.1 净室开发过程每个软件增量通过9个净室开发阶段来实现:(1)增量计划。(7)统计性测试。(2)需求收集。(8)统计测试数据。(3)盒式规约。(9)认证。(4)形式化设计。(5)正确性验证。(6)代码生成、检查和验证。,12.6.2 净室功能规约,净室软件工程体系采用盒式规约,盒有三种类型:1、黑盒黑盒根据一组规则对特定事件作出某种反应,可表示系统或系统某部分。黑盒规约表示了对触发和反应的抽象,如右图所示。,黑盒规约,2、状态盒
36、状态盒是状态机的一种简单通用化,封装状态数据和操作,即通过盒式规约表示输入、输出和黑盒的历史变化状态数据。状态盒可与黑盒结合使用,外部的输入(激发)S,与内部系统状态T共同作用于黑盒,结果输出R、T,如下图所示。状态盒可用数学描述为:gS*T*RT其中,g是和特定状态t连接的子函数。当整体考虑时,状态-函数对(t,g)定义黑盒函数。,状态盒规约,3、明盒明盒(清晰盒)定义了状态盒的过程结构,原状态盒中的子函数由结构化编程所替代。例如,状态盒规约中的g被细化为一个选择结构时,就成为下图的明盒。明盒可以进一步细化为更低层的明盒,在细化的同时,也对盒规约的正确性进行形式化验证。,明盒规约,12.6.
37、3 净室设计验证与测试,1、净室设计的精化及验证净室设计主要使用自顶向下、逐步细化的结构化方法,由顶层的盒逐步细化到底层的盒。在细化过程中,盒中函数表示为逻辑连接词(如,if-then-else)和子函数构成的结构,这样不断地细化下去,直至所有标识出来的子函数可以用程序设计语言直接表示。,2、净室测试净室通过测试用例的统计样本来验证其是否满足软件需求。测试前,先分析软件每个增量的规约(黑盒),定义一组导致软件改变其行为的触发(输入或事件),通过和用户交流、建立使用场景和对应用领域的总体了解,为每个触发赋上一个使用概率,再按照使用的概率分布为每个触发集合生成测试用例集。例如,为了更简单地选择测试
38、用例,这些概率被映射到1至99的数字区间如下表所示。,表 程序的触发及其概率分布示例,3、净室认证认证是指在净室软件工程体系中,通过使用平均失效时间MTTF来度量软件构件和完整增量的可靠性。对于软件构件来说,认证不仅能在本净室项目中起作用,也可通过与构件及其使用的场景、触发、以及概率分布一起存储和发布,来扩大受益面。认证需要经过以下5个步骤:1)创建使用场景;2)刻划使用轮廓;3)从轮廓中生成测试用例;4)执行测试,记录并分析失败数据;5)计算并认证可靠性。,课堂讨论:(l)净室软件工程体系有什么优点和缺点?(2)净室软件工程体系的测试有什么特点?(3)净室和其他软件工程体系最根本的不同有哪些
39、?,12.7.1 面向服务体系架构的产生,随着软件系统规模的扩大,人们认识到软件体系结构的重要性,并认为对软件体系结构的深入探索对提高软件生产率和软件质量有很大的帮助。软件体系结构也在不断的改进中,可以分为三个阶段:传统的软件体系结构阶段、基于组件的软件体系结构阶段、面向服务的体系结构阶段。,12.7 面向服务架构(SOA)技术,1、传统的软件体系结构,由于程序规模不大,通过强调结构化程序设计方法学,自顶向下、逐步求精,并注意模块的耦合性就可得到相对良好的结构,该阶段的应用程序把操作的数据、用户的接口还有所有业务逻辑的处理都混杂在一个可执行的包中。如下图所示:,2、基于组件的软件体系结构,组件
40、是具有一定的功能,能够独立工作或能同其他组件装配起来协调工作的程序体。三层架构把应用程序从下到上基本划分为数据层、逻辑层、和表示层。功能独立的各层可以复用所需的组件,从而使得生产率大大的提高。数据访问层独立出来执行连接、查询或修改操作,并给逻辑层提供一个统一的数据视图。逻辑层就独立出来专门处理系统的业务逻辑,屏蔽了底层数据访问差异和表示层的呈现差异。,表示层只需要把请求交给逻辑层,不需要考虑业务逻辑,然后从逻辑层得到返回结果并以不同的方式呈现给用户。如下图:比较流行的组件模型有CORBA和COM。,3、面向服务体系阶段(SOA),面向服务体系架构(Service-Oriented Archit
41、ecture)的定义为:“一种应用程序体系结构,在这种体系结构中,将所有功能都定义为独立的服务,将这些服务带有定义明确的可调用接口,可以以定义好的顺序调用这些服务来形成业务流程。”,从微观角度,看看独立的单个服务内部的结构模型。服务模型的表示层从逻辑层分离出来,中间加了服务对外的接口层。,12.7.2 SOA的基本概念,1、SOA的定义SOA的概念是由Gartner公司给出的,SOA的定义为“客户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成。”SOA与大多数通用的客户端/服务器模型的不同之处,在于它着重强调软件组件的松散耦合,并使用独立的标准接口。,SOA是一种软件架构思想
42、,它并不是一个新概念。有人就将CORBA和DCOM等组件模型看成SOA架构的前身,SOA架构的实质就是将系统模型与系统实现分离,将其作为创建任务苛刻的应用程序和过程的“指导原则”;SOA是一种业务驱动的IT架构方式,支持对业务进行整合,使其成为一种互相联系、可复用的业务任务或者服务;,SOA并不是一种变革,而是一种进化。因为它是构建在许多一直在使用的技术之上,它将应用程序的不同功能单元服务(service),通过服务间定义良好的接口和契约(contract)联系起来,接口采用中立的方式定义,独立于具体实现服务的硬件平台、操作系统和编程语言;使得构建在这样的系统中的服务可以使用统一和标准的方式进
43、行通信。,2、SOA的架构,1)SOA架构的基本元素是服务,SOA指定一组实体(服务提供者、服务消费者、服务注册表、服务条款、服务代理和服务契约),这些实体详细说明了如何提供和消费服务。下图展示了面向服务体系架构中的协作,这些协作遵循“查询、绑定和调用”范例,其中服务请求者执行动态服务定位,方法是查询服务注册中心来查找与其标准匹配的服务。,(1)服务提供者,或者简称为服务。它们一般有定义良好的接口(对内的和对外的),并且接口的定义是平台和语言中立的,接口的描述信息被发布到目录服务(或称为服务注册表)中,这样就可以被动态发现和调用。,(2)服务消费者,或称为服务请求者。在需要某项服务的时候,先查
44、询服务目录,得到相关服务的描述信息,然后动态地绑定到相关服务,这样就可以以一种对服务消费者透明的方式调用服务。(3)目录服务,是连接服务提供者和服务消费者的桥梁。服务提供者可以向它注册服务,服务消费者可以通过它查询服务描述信息。在目录中注册的服务可以按某种准则分类,方便服务消费者查询。,2)SOA各层次的角色如下:(1)信息与访问(2)共享业务服务(3)表示服务(4)复合应用(5)基础架构服务,3、SOA的优点,1)从技术开发角度(1)屏蔽了业务逻辑组件的复杂性(2)跨平台和复用性(3)易维护和良好的伸缩性(4)开发角色更加明确(5)支持更多的客户端类型,2)从资源的整合角度(1)利用现有资源
45、(2)商品化基础架构(3)更快的产品上市速度和较低的成本,12.7.3 支持SOA的Web Service技术,1、SOA的基本原则1)SOA实践要遵守下列准则(1)业务驱动服务,服务驱动技术;(2)业务敏捷性是基本的业务需求,SOA不处理具体的业务需求,而是考虑下一层抽象,应对需求变化的能力在于“元需求”;(3)考虑一个有机体。,2)服务(service)是整个SOA实现的核心。其中关于服务以及SOA的一些重要特征如下:(1)封装性(encapsulation);(2)复用性(reuse);(3)互操作(interoperability);(4)自治的(Autonomous)功能实体;(5)
46、松耦合度(Loosly Coupled);(6)位置透明性(location trans-parency)。,2、基于SOA的解决方案,1.良好定义的接口和规则2.服务代表业务域3.服务使用模块化设计的思想4.服务之间的松耦合5.服务是可查找的6.服务传输机制的独立性7.服务地址的透明性8.服务的平台无关性,3、Web Service 技术,Web Services技术使用一系列标准和协议实现相关的功能。其中XML作为该技术的基础,是开放环境下描述数据和信息的标准技术。服务提供者可以用WSDL(Web服务描述语言)描述Web服务,用UDDI(Universal Description Disc
47、overy and Integration,统一描述、发现和集成)向服务注册代理发布和注册Web服务。服务请求者通过UDDI进行查询,找到所需的服务后,利用SOAP(简单对象协议)来绑定、并调用这些服务。,实现Web服务的主流开发平台有J2EE平台和M平台。下图是采用J2EE平台实现ERP系统的Web服务体系结构。,该系统的运行过程为服务请求者向主控制器发出HTTP请求,主控制器读出请求内容,利用JAXR发现UDDI服务注册表中的服务,然后根据请求内容创建一条SOAP Message,利用JAXM把SOAP Message提交给服务提供者调用相关的Web服务,由Web服务程序处理数据库。服务提
48、供者用JAXR向UDDI服务注册表发布Web服务,使用JSP和JSTL来实现,JSTL标记将辅助完成条件处理和对WEB服务所返回XML数据的分析,并将最后的结果用浏览器形式通过页面显示给用户。,系统中采取的几种技术分别如下:1.XML(Extensible Markup Language,可扩展标记语言)2.SOAP(Simple Object Access Protocol,简单对象访问协议)3.WSDL(Web Services Description Language,Web服务描述语言)4.UDDI(Universal Description Discovery and Integra
49、tion,统一描述、发现和集成)5.ESB(Enterprise Service Bus,企业服务总线),4、SOA架构的不足,不足之处在于:1.可靠性(Reliability)2.安全性(Security)3.编排(Orchestration)4.遗留系统处理(Legacy support)5.语义(Semantics)6.性能(performance)7.软件设计,12.7.4 适于SOA的建模方法,1、MDAMDA(Model-driven Architecture,模型驱动的架构),核心思想就是架构师应该从被构建系统的一个正规模型开始,这个模型可以用UML表示。MDA首先给出一个与平台
50、无关的模型来表示系统的功能需求和use cases,根据系统搭建的平台,架构设计师可以由这个平台无关的模型得到平台相关的模型,这些平台相关模型足够详细,以至于可以用来直接生成需要的代码。,2、敏捷方法,敏捷方法,即AM Agile Method)。这种方法中最著名的要数XP(eXtreme Programming),即极限编程。敏捷方法为在需求不明确或需求总在变动的环境中构建软件系统,它提供了一个灵活的迭代的开发过程。敏捷方法的核心作用在于它的敏捷性,即应付需求变化的能力。,3、SOA的五视图法,五视图实现方法(five-view approach):四个方框表示对一个架构的不同审视方法,分别