软件体系结构 主讲老师:刘玮 liuneway@126.com
教学计划 理论课10次 上机课5次 设计课1次 Rational Rose的 安装和使用 Visio的基本操作 Visio的应用 软件体系结构概述 软件体系结构模式 Rational Rose的 安装和使用 Visio的基本操作 软件体系结构描述 软件体系结构建模理论和方法 Visio的应用 软件体系结构分析与评估理论和方法 面向对象的软件工程过程 面向服务的体系结构 面向对象系统分析 面向对象实例软件系统的体系结构设计
考核方法 考试50% 平时40% 随堂考核 抽查式点名 上机10%
参考书(主) 参考书(辅) 软件体系结构教程(高等学校教材) 清华大学出版社 作者:李代平 2008第一版 软件构架实践(影印版·第2版) 卡内基·梅隆大学软件工程丛书 2003 年8月
第一讲 软件体系结构概述
大纲 什么是软件 软件的分类 软件的发展 软件生存期模型 软件危机
什么是软件? 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料 强调文档的作用
大纲 什么是软件 软件的分类 软件的发展 软件生存期模型 软件危机
软件的分类(1) 按软件的功能进行划分: 系统软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
软件的分类(2) 支撑软件 文本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和支持管理的软件
软件的分类(3) 应用软件 商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
软件的分类(4) 按软件规模进行划分: 类别 参加人员数 研制期限 源程序行数 微型 1 1~4周 0.5k 小型 1 1~6月 1k~2k 类别 参加人员数 研制期限 源程序行数 微型 1 1~4周 0.5k 小型 1 1~6月 1k~2k 中型 2~5 1~2年 5k~50k 大型 5~20 2~3年 50k~100k 甚大型 100~1000 4~5年 1M(=1000k) 极大型 2000~5000 5~10年 1M~10M
软件的分类(5) 按软件工作方式划分: 按软件服务对象的范围划分: 实时处理软件(如地震、卫星监测系统) 分时软件(如操作系统) 交互式软件(如ATM软件) 按软件服务对象的范围划分: 项目软件(定制软件) 产品软件 实时处理软件:地震、卫星监测系统 常见的通用操作系统是分时系统与批处理系统的结合 在早期的计算机系统中,计算机处理多个用户发送出的指令的时候,处理的方案即为分时(time-sharing),即计算机把它的运行时间分为多个时间段,并且将这些时间段平均分配给用户们指定的任务。轮流地为每一个任务运行一定的时间,如此循环,直至完成所有任务。 这种使用分时(time-sharing)的方案为用户服务的计算机系统即为分时系统。
软件的分类(6) 按使用的频度进行划分: 一次使用 频繁使用 按软件失效的影响进行划分: 高可靠性软件 一般可靠性软件
软件种类和软件工程的关系 功能分类中应用软件的复用性高,适合使用具有复用思想的软件工程方法。 软件规模越大,使用软件工程技术越能提高效率。 高可靠性软件要求软件开发过程的安全性,即安全软件工程
大纲 什么是软件 软件的分类 软件的发展 软件生存期模型 软件危机
软件发展阶段 程序设计阶段 — 40至60年代 程序系统阶段 — 60至70年代 软件工程阶段 — 70年代以后 程序设计阶段 — 40至60年代 使用者和开发者相同,专业人员,规模小 开发软件就是编写程序,提高程序的运行效率 程序系统阶段 — 60至70年代 某一领域广泛用户,规模越来越大 多人分工合作,软件作坊 软件工程阶段 — 70年代以后 硬件发展对软件提出更高要求,出现软件危机 软件工程实践 程序规模小,开发、使用、维护都是同一个人; 软件作坊 软件危机促使软件工程出现和发展
什么是软件工程 为达到一定的“目标”,我们建立起相应的“项目”,在某种“方法论”的指导下,按照一定的“过程”,生产出相应的软件“产品”。 理论与经验”和“工具”可以认为是2个比较独立的概念, 其他概念可以被分为4组——“方法论”、“过程”、“目标”、“项目”,分别标以不同颜色。 软件工程可以描述为:为达到一定的“目标”,我们建立起相应的“项目”,在某种“方法论”的指导下,按照一定的“过程”,生产出相应的软件“产品”。 是不是只有软件公司才关注软件工程技术呢? 1.微软中国研发集团将卓越软件工程部(Engineering Excellence Group)带入了中国 2. 1999年年初,华为技术公司研究管理部副总裁陈青与华为总裁任正非签下了一纸“军令状”——“到2000年,使我们的软件研发能力有一个质的提高,基本达到cmm二三级间的水平。” 2001年12月,华为技术的印度研究所成为中国第一个获得cmm4国际认证的软件研发机构。它是国际上最流行、最实用的软件生产过程标准,以及软件企业成熟度认证标准。 为达到一定的“目标”,我们建立起相应的“项目”,在某种“方法论”的指导下,按照一定的“过程”,生产出相应的软件“产品”。
是不是只有软件公司才关注软件工程技术呢? 微软中国研发集团将卓越软件工程部(Engineering Excellence Group)带入了中国 1999年年初,华为技术公司研究管理部副总裁陈青与华为总裁任正非签下了一纸“军令状”——“到2000年,使我们的软件研发能力有一个质的提高,基本达到cmm二三级间的水平。” 2001年12月,华为技术的印度研究所成为中国第一个获得cmm4国际认证的软件研发机构。它是国际上最流行、最实用的软件生产过程标准,以及软件企业成熟度认证标准。
软件工程的定义 IEEE: 软件工程是开发、运行、维护和修复软件的系统方法 Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法 为了解决“软件危机”,北大西洋公约组织于1968年在西德召开的NATO会上,首次提出“软件工程”的概念。
软件工程过程 软件规格说明:规定软件的功能及其运行的限制 软件开发:产生满足规格说明的软件 软件确认:确认软件能够完成客户提出的要求 软件演进:为满足客户的变更要求,软件必须在使用的过程中演进
大纲 什么是软件 软件的分类 软件的发展 软件生存期模型 软件危机
软件生存期 life cycle 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期 软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护
瀑布模型
制定计划 确定要开发软件系统的总目标 给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究(技术可行性、经济可行性、操作可行性、社会可行性) 估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查 可行性研究
需求分析和定义 对用户提出的要求进行分析并给出详细的定义 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审
软件设计 概要设计 — 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计 — 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编写设计说明书,提交评审。
程序编写 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的
软件测试 单元测试,查找各模块在功能和结构上存在的问题并加以纠正 组装测试,将已测试过的模块按一定顺序组装起来 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用
运行/维护 改正性维护 运行中发现了软件中的错误需要修正 适应性维护 为了适应变化了的软件工作环境,需做适当变更 改正性维护 运行中发现了软件中的错误需要修正 适应性维护 为了适应变化了的软件工作环境,需做适当变更 完善性维护 为了增强软件的功能需做变更
软件生存期模型 软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架 瀑布模型 螺旋模型 喷泉模型 演化模型 智能模型
瀑布模型 缺点 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量; 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险; 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。 不可逆转 适合需求变化能力较弱的系统
螺旋模型 螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即: 缺点 制定计划──确定软件目标,选定实施方案,弄清项目开发的限制 风险分析──分析所选方案,考虑如何识别和消除风险 实施工程──实施软件开发 客户评估──评价开发工作,提出修正建议 缺点 需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。 过多的迭代次数会增加开发成本,延迟提交时间。
喷泉模型 迭代 重复 演进 无间隙 各阶段间无明显界限 喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。 缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。 缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。
演化模型 由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。 做两次 第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求 第二次则在此基础上获得较为满意的软件产品
智能模型 基于知识的软件开发模型 ,把瀑布模型和专家系统结合在一起,利用专家系统来帮助软件开发人员的工作 需要四代语言(4GL)的支持 用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序 一种声明式、交互式和非过程性编程语言
面向知识的软件开发框架 ? 网格 P2P 需 求 描 述 资源 需求牵引 柔 性 生 产 Meet in Middle 满足需求的规模化定制 需求建模 领域共性需求 个性化、多元化需求 ? 领域 知识 资源聚合 计算资源 通信资源 一方面,目前网络环境下的资源聚合已成事实,Web服务、网格、P2P、普适计算等各种形态的网络式软件分别从不同角度、不同层面积累了大量的软件服务资源,相关技术得到了极大发展。 另一方面,需求牵引的发展则无论从方法论研究、产业支撑技术,都略显滞后,两者之间呈现出失衡的态势,从而使得需求工程正日益成为网络化软件发展的瓶颈。 存储资源 信息资源 网络环境下的软件服务 Web服务 网格 P2P 普适计算
软件工程三要素: 方法、工具和过程 软件工程方法为软件开发提供了 “如何做” 的技术 软件工程三要素: 方法、工具和过程 软件工程方法为软件开发提供了 “如何做” 的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境 软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的
本讲思考题 试图用软件工程思想描述自己曾经开发软件的过程,能够和哪些工程步骤相对应。