高级软件工程(SA概述、SA风格及实例)
(完整word版)软件工程课程教学大纲

《软件工程》课程教学大纲一、课程代码与名称(小四号宋体加粗)课程代码: CS132201中文名称: 软件工程英文名称: Software Engineering二、课程概述及与相关课程关系软件工程是计算机科学与技术专业的专业必修课, 是指导学生按照工程化、标准化和规范化的方法开发软件系统的一门课程。
通过本课程学习, 学生能够掌握现代软件设计与开发的基本原理、方法和技术;熟悉结构化和面向对象软件设计与开发的全过程;了解软件项目管理、软件维护等方面知识。
软件工程与前后课程间关联关系、课程群对应的局部鱼骨图分别如下所示:图例:应用方向软件工程课程群及对应课程群项目、学年项目(局部)图图例:三、课程教学对象与教学目的适用专业: 计算机科学与技术教学目的:通过理论教学和实践相结合, 使学生初步具备运用软件工程的概念、原理、技术和方法开发与维护软件的能力, 并提高学生编写相关技术文档的能力, 及分析问题和解决问题的能力和团队工作交流能力。
*注: 该表所列指标可对照培养方案中所列指标来解释。
A: 认知, 指从教、学活动中、从生活经验和社会经验等多种信息渠道获得知识, 侧重知识的获取, 没有实训要求。
B: 训练, 指教、学活动中由教师引导开展的基础测试或练习, 匹配有课程讨论、课后研讨等环节。
C: 实践, 指以学生为主导, 通过实练而形成的对完成某种任务所必须的活动方式, 匹配有课程的三级项目或其它实践环节。
D: 探索, 指学生独立探寻问题、摸索、解答的活动, 不设置专门的考核。
(留空表示无该项要求)四、课程内容、学时分配及主要的教学方法本课程对主要软件开发方法采用项目驱动教学模式, 结合实验和项目开发实践, 使课程的实践与理论教学内容紧密配合, 同步进行, 达到理论指导实践, 实践促进理论学习目的。
通过理论教学、实践(实验)、团队项目开发实践3环节将理论与实践紧密联系。
教学中采用问题引导方式推进学生基于问题的学习(problem based learning), 以为学生为中心鼓励学生参与课程讨论, 促进学生采用主动学习方法(active learning)。
软件工程笔记(完整版)

第一章第二章第三章第四章软件工程概述1.软件危机(software crisis):是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
即“两低一高”问题:质量低、效率低、成本高。
软件危机也成为“软件萧条(depression)”或“软件困扰(afflication)”2.软件危机主要表现1)开发成本和进度估计不准2)用户对“已完成的”软件系统不满意3)软件质量往往靠不住4)软件常常是不可维护的5)软件通常没有适当的文档资料6)软件成本逐年上升7)软件开发生产率滞后于硬件和计算机应用普及的趋势3.产生软件危机的原因1)与软件本身的特点有关a. 软件不同于硬件,是逻辑部件而不是物理部件缺乏可见性难于测试管理和控制开发过程困难不会因使用时间过长而被“用坏”难以维护b.软件不同于一般程序,规模庞大,而且程序复杂性随着程序规模的增加而呈指数上升2)和软件开发与维护的方法不正确有关a.对软件开发和维护有关的错误认识和作法忽视软件需求分析的重要性认为软件开发就是写程序轻视软件维护b. 对软件开发过程与方法的认识与应用软件开发要经历一个漫长的时期(编程占10-20%)程序仅是完成软件配置的一个组成部分软件开发方法要有利于软件维护4.软件的特点(1)软件是无形的(intangible)(2)软件副本的大批量生产轻而易举(3)软件业是劳动密集型的(4)一个没有经过充分训练的软件开发人员很容易编写出难以理解和修改的软件(5)软件本身很容易修改。
但由于它的复杂性,又很难正确地修改。
(6)软件不像其他的工业产品那样会因使用而磨损,随着反复修改,它的设计会逐渐退化5.消除软件危机的途径1)对计算机软件的正确认识2)认识到软件开发不是个体劳动的神秘技巧,而是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目3)推广使用成功的软件开发技术和方法4)开发和使用更好的软件开发工具总之, 为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程课件(全)

03
识别项目中的关键路径,确保项目按计划进 行
04
及时调整项目计划,应对项目变更和不确定 性
风险管理策略制定
识别项目中的潜在风险, 包括技术风险、市场风险、 资源风险等
制定相应的风险应对策略 和措施,如风险规避、减 轻、转移和接受等
评估风险的概率和影响程 度,制定风险优先级列表
监控风险状态,及时调整 风险管理计划
质量改进
根据质量评估结果,制定相应的改进措施, 如优化性能、增强安全性等。
经验教训总结
对测试过程中遇到的问题进行总结,形成经 验教训,为后续项目提供参考。
06
项目管理与团队协作
项目计划制定与监控
01 制定详细的项目计划,包括项目目标、范围 、时间表、资源需求、成本估算等
02 设立项目里程碑,对项目进度进行阶段性监 控
开发方向。
持续集成和测试
03
迭代增量模型强调持续集成和测试的重要性,以确保每个迭代
周期都能交付高质量的软件产品。
03
需求分析与管理
需求获取与整理
确定需求来源
与客户、利益相关者、业务领 域专家等进行沟通,收集原始
需求。
需求分类
将收集到的需求按照功能、性 能、安全、易用性等方面进行 分类。
需求筛选
去除重复、模糊、不切实际的 需求,确保需求的准确性和可 行性。
处理变更请求
根据实际情况,决定是否接受变更请求,并 制定相应的实施计划。
跟踪和验证变更
对实施的变更进行跟踪和验证,确保变更的 正确性和完整性。
04
系统设计与实现
系统架构设计
分层架构
将系统划分为表示层、业务逻辑层和数据访问层,实现高内聚、 低耦合的设计。
高级软件工程课件 Lecture1

13年5月19日星期日
3. 软件工程
1993年IEEE给出的一个较全面的定义
IEEE软件工程的定义
软件工程是: (1)将系统化、规范的和可量化的方 法应用于软件的开发、运行和维护。 (2)在(1)中所述方法的研究
19
13年5月19日星期日
3. 软件工程
软件工程的一个重要的思想是
尽可能的预防错误的产生 尽可能在靠近错误的位置发现错误
5
13年5月19日星期日
1.软件是什么?
软件的特性
ü软件是设计开发的,而不是生产制造出来 软件不会磨损 虽然整个工业向着基于构件的模式发展, 然而软件依然是根据客户的需求定制的
6
13年5月19日星期日
1.软件是什么?
软件不会磨损
软硬件失效曲线图
初期失效率 磨损
失效率
时间
7
13年5月19日星期日
1.软件是什么?
对于一个成功的软件项目,可执行程序是 唯一可交付的成果。
软件工程将产生大量的无用文档,从而降 低工作效率。
13年5月19日星期日
24
第一一讲 绪论
软件是什么
软件危机
软件工程
软件神话
ü课程目标
13年5月19日星期日
25
5. 课程目标
通过本课程的学习,学生应具备
评价软件工程的相关方法和技术的能力
在实际项目开发过程中做出正确判断的能 力
13
13年5月19日星期日
2. 软件危机
软件危机的根源
软件是一个复杂逻辑产品 影响软件生产率和质量的因素复杂
软件规模 14
13年5月19日星期日
复杂度
第一一讲 绪论
什么是软件 软件危机
软件工程案例

• 系统总体结构图
仓库信息系统
用
仓
业
系
户
库
务
统
登
管
查
设
录
理
询
置
• 用户登录功能模块
用户登录
用
用
用
户
户
户
登
注
退
录
销
出
• 仓库管理功能模块
仓库管理
仓
仓
仓
仓
商
仓
库
库
库
库
品
库
进
退
领
退
调
盘
货
货
料
料
拨
点
• 系统设置功能模块
二、系统用例模型
创建用例图分为以下几个步骤: • 确定角色 • 创建用例 • 创建角色—用例关系图
• 类图
六、系统部署
仓库管理系统部署是整个项目实施过程中最后 的阶段,就是把该系统中涉及到的硬件软件、 整合到一起,并且可以让系统运行起来。
• 组件图
• 配置图
案例2:ATM系统
• 建立一个具有基本功能的ATM机软件
客户可以存钱,取钱 客户可以查询节余 客户可以修改密码 客户可以使用信用卡付帐
1、确定角色
2、创建用例
仓库信息系统根据业务流程可以分为以下的几个用例(Use Cases): • 仓库进货 • 仓库退货 • 仓库领料 • 仓库退料 • 商品调拨 • 仓库盘点 • 库存查询 • 业务分析 • 仓库历史记录查询 • 供应商信息维护 • 仓库信息维护 • 用户登录 • 用户注销 • 退出系统
管理员 (from Actors )
库存查询 (from Us e Cas es)
第1讲 软件工程概述

集 成 测 试
系 现 统 场 测 试
变更代价随时 间变化的趋势
早期 中期 晚期 时间
28
软件危机的原因
(1)没有统一的、规范的方法论的指导。 文件资料不全,忽视交流,缺乏方法论的指导 (2)忽视软件开发前期的需求分析。 编程越早,需求分析不充分,完成时间越长 (3)忽视软件文档也是造成开发效率低下的原因。 对软件开发、维护、用户都很重要 (4)忽视测试阶段的工作,或不负责任的测试员,提 交用户的软件质量差。 “错误是不可避免的”,该如何理解这句话? (5)轻视软件的维护。 (6)开发计划不合理,缺乏经验和数据积累。 29
26
3 、软件不同于一般程序 :规模庞大,必须有严格 而科学的管理。
4、软件专业人员对软件开发和维护有不少的糊涂 观念,在实践过程中或多或少地采用了错误的方法和技术, 忽视软件需求分析的重要性,认为开发软件就是写程序并 使之运行,轻视软件维护,这可能是软件危机的主要原因。
失效率 磨合 调整 磨损 用坏
24
60年代后期软件开发出现的问题
①软件开发费用和进度失控。费用超支、进度 拖延的情况屡屡发生。
②软件的可靠性差。尽管耗费了大量的人力物 力,而系统的正确性却越来越难以保证,出错 率大大增加,造成的损失惊人。
③生产出来的软件难以维护。很多程序缺乏相 应的文档资料,程序中的错误难以定位,难以 改正,有时改正了已有的错误又引入新的错误 ④用户对“已完成”的系统不满意现象经常发 生。
4
授课内容
软件工程概述 可行性研究 需求分析(UML) 概要设计(UML) 详细设计 人机交互 编码 软件测试 软件维护
5
主要学习内容:
软件工程各章名词解释

名词解释一个三分 五个十五分第一章 绪论1. 软件2. 文档3. 软件工程4. 软件工程过程5. 软件生存周期6. 软件生存周期模型第二章 软件可行性研究与项目开发计划1. 投资回收2. 纯收人第三章 软件需求分析1. 需求分析2. 数据流3. 数据字典4. 加工5. 数据流图第四章 软件概要设计1. 模块2. 模块化3. 抽象4. 信息隐蔽5. 模块独立性6. 耦合性7. 无直接耦合8. 数据耦合9. 标记耦合10. 控制耦合11. 公共耦合12. 内容耦合13. 内聚性14. 偶然内聚15. 逻辑内聚16. 时间内聚17. 通信内聚18. 顺序内聚19. 功能内聚第五章 软件详细设计1. PAD2. 过程设计语言(PDL)第六章 软件编码1. 程序设计风格2. 程序可移植性第七章 软件测试1. 语句覆盖2. 判定覆盖3. 条件覆盖4. 判定/条件覆盖5. 条件组合覆盖6. 路径覆盖7. 环路复杂性8. 黑盒测试9. 白盒测试10. 驱动模块11. 桩模块12. 单元测试13. 集成测试14. 确认测试15. 调试第八章 软件维护1. 维护2. 校正性维护3. 适应性维护4. 完善性维护5. 预防性维护6. 软件可维护性第九章 软件开发的增量模型1. 原型第十章 面向对象的方法1. 对象2. 类3. 消息4. 方法5. 继承性6. 单重继承7. 多重继承8. 多态性9. 抽象10. 信息隐藏11. 链12. 关联第十一章 软件质量与质量保证1. 软件可靠性2. 效率3. 可维护性4. 可移植性5. 可互操作性6. 适应性7. 可重用性8. 软件设计质量9. 软件程序质量10. 冗余第十二章 软件工程管理1. 软件配置管理2. 软件配置项3. 基线4. 文档第十三章 软件开发环境1. 软件开发环境2. 软件工具3. CASE4. CASE生存期5. CASE工作台软件工程自考名词解释答案第一章 绪论1. 计算机程序及其说明程序的各种文档.2. 文档是有关计算机程序功能,设计,编制,使用的方案或图形资料.3. 用科学知识和技术原理来定义,开发,维护软件的一门学科.4. 软件工程过程规定了获取,供应,开发,操作和维护软件时,要实施的过程,活动和任务.5. 软件生存周期是指一个软件从得出开发要求开始直到该软件报废为止的整个时期.6. 软件生存周期模型是描述软件开发过程中各种活动如何执行的模型.第二章 软件可行性研究与项目开发计划1. 投资回收期就是使累计的经济效益等于最初的投资费用所需的时间.2. 在整个生存周期之内的累计经济效益(折合成现在值)与投资之差.第三章 软件需求分析1. 需求分析是指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非不甘落后将用户非不甘落后 需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程.2. 数据流是数据在系统内传播的路径,因此由一组成分固定的数据项组成.3. 数据字典(Data Dic onary, 简称DD)就是用来定义数据流图中的各个成分的具体含义的,它以一种准确的,无二义性的说明方式为系统的分析,设计及维护提供了有关元素的一致的定义和详细的描述.4. 加工又称为数据处理,是对数据流进行某些操作或变换.5. 数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程.第四章 软件概要设计1. 模块在程序中是数据说明,可执行语句等程序对象的集合,或者是单独命名和编址的元素,在软件的体系结构中,模块是可组合,分解和更换的单元.2. 模块化是指解决一个复杂问题自顶向下逐层把软件系统划分成若干模块的过程.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个要求的功能.3. 抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素.4. 信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的.5. 模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单.6. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程序的一种度量.7. 无直接耦合指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息.8. 数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递.9. 标记耦合指两个模块之间传递的是数据结构,如高级语言的数组名,记录名,文件名等这些名字即为标记,其实传递的是这个数据结构的地址.10. 控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关,标志等),被调模块通过该控制变量的值有选择地执行块内某一功能.11. 公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合.公共数据环境可是是全程变量或数据结构,共享的通信,内存的公共覆盖区及任何存储介质上的文件,物理设备等(也有将共享外部设备分类为外部耦合).12. 当一个模块直接使用另一个模块的内部数据,或通过非正常口转入另一个模块内部,这种模块之间的耦合为内容耦合.13. 内聚块又称块内联系指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量.14. 偶然内聚指一个模块内的各处理元素之间没有任何联系.15. 逻辑内聚指模块内执行个逻辑上相似的功能,通过参数确定该模块完成哪一个功能.16. 把需要同时执行的动作组合在一起形成的模块为时间内聚模块.17. 通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据.18. 顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入.19. 功能内聚指模块内所有元素共同完成一个功能,缺一不可.因此模块不能再分割.第五章 软件详细设计1. PAD图指问题分析图(Problem Analysis Diagram),是一咱算法描述工具,它是一种由左往右展开的二维树型结构.PAD图的控制流程为自上而下,从左到右地执行.2. 过程设计语言(Process Design Language,简称PDL),也称程序描述语言(Program Descrip on Language),又称为伪码.它是一种用于描述模块自法设计和处理细节的语言.第六章 软件编码1. 程序设计风格指一个人编制程序时所表现出来的特点,习惯逻辑思路等.2. 指程序从一个计算机环境移值到另一个计算机环境的容易程序.第七章 软件测试1. 语句覆盖是指设计足够的测试用例,使被测程序中每个语句至少执行一次.2. 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次”真”和”假”值,从而使程序的每一个分支至少都通过一次.3. 条件覆盖指设计足够的测试用例,使得判定表达工中每个条件的各种可能的值出现一次.4. 判定/条件覆盖标准指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次.5. 条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次.6. 路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径.7. McCabe定义程序图的环路为程序图中区域的个数.区域个数为边和结点圈定的封闭区域数加上图形外的区域数1.8. 黑盒测试是功能测试又称为功能测试或数据驱动测试.9. 白盒测试是对程序中尽可能多和逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致.10. 驱动模块是用来模拟被测模块的上级调用模块的模块,功能要比真正的上级模块简单得多,它只完成接受测试数据,以上级模块调用被测模块的格式驱动被模块,接收被测模块的测试结果并输出.11. 桩模块用来代替被测试模块所调用的模块它的作用是返回被测模块所需的信息.12. 单元测试指对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误.13. 集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行测试,故也称组装测试或联合测试.14. 确认测试又称有效性测试.是为了检查软件的功能与性能是否与需求规格说明书中确定的指标相符合所进行的测试.15. 调试是为了确定错误的原因和位置,并改正错误所进行的工作,因此调试也称为纠错.第八章 软件维护1. 在软件运行/维护阶段对软件产品所进行的修改就是维护.2. 为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护.3. 随着计算机的飞速发展,计算机硬件,软件及数据环境在不断发生变化,为了使应用软件适应这种变化而修改软件的过程称为适应性维护.4. 在犯罪分子件运行时期中,用户往往会对软件提出新的功能要求与性能要求.这种增加软件功能,增强软件性能,提高软件运行效率而进行的维护活动称为完善性维护.5. 为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护.6. 软件可维护性是指软件能够被理解,校正,适应及增强功能的容易程度.第九章 软件开发的增量模型1. 软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性.第十章 面向对象的方法1. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则,计划或事件.2. 具有相同或相似性质的对象的抽象就是类具有相同或相似性质的对象的抽象就是类3. 对象之间进行通信的构造叫做消息.4. 类中操作的实现过程叫做方法,一个方法有方法名,参数,方法体.5. 继承性是子类自动共享父类数据结构和方法的机制这是类之间的一种关系.6. 在类层次中,子类只继承一个父类的数据结构和方法,称为单重继承.7. 在类层次中,子类继承了多个父亲的数据结构和方法,称为多重继承.8. 多态性是指相同的操作或函数,过程可作用于多用户种类型的对象上并获得不同结果.不同的对象收到同一消息可以产生不同的结果,这种现象称为多态性.9. 抽象是指强调实体的本质,内在的属性,忽略一些无关紧要的属性.10. 信息隐蔽是指所有软件部件内部都有明确的范围以及清楚的外部边界每个软件部件都有友好的界面接口,软件部件的内部实现与外部可访问性分离.11. 链表示对象间的物理与概念联结.12. 关联表示类之间的一种关系,就是一些可能的链的集合.第十一章 软件质量与质量保证1. 软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度.2. 为了完成预定功能,软件系统所需的计算机资源和程序代码数量的程度.3. 找到并改正程序中的一个错误所需代价的程度.4. 将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需的工作量.5. 将一个系统耦合到另一个系统所需的工作量.6. 修改或改进一个已投入运行的软件所需工作量的程度.7. 一个软件能再次用于其他相关应用的程度.8. 设计的规格说明书要符合用户的要求.9. 程序要按照设计规格说明所规定的情况正确执行.10. 冗余是指实现系统规定功能是多余的那部分资源,包括硬件,软件,信息和时间.第十二章 软件工程管理1. 软件配置管理,简称SCM,是一组管理整个软件生存期各阶段中变更的活动是一组管理整个软件生存期各阶段中变更的活动2. 软件配置项是软件工程中产生的信息项,它是配置管理的基本单位.3. 基线是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果.4. 文档是指某种数据媒体和其中所记录的数据.在软件工程中,文档用来表示对需求,工程或结果进行描述,定义,规定,报告或认证的任何书面或图示的信息.它们描述和规定了软件设计和实现的细节,说明使用软件的操作命令.第十三章 软件开发环境1. 软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成.2. 软件工具是指为支持计算机软件的开发,维护,模拟,移植或管理而研制的程序系统.3. CASE是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发.4. 一个组织中的CASE系统从被始需求到完全废弃这一生存期.5. 一个CASE工作台是一组工具集,支持像设计,实现或测试等特定的软件开发阶段.。
完整的软件工程示范案例

(6)单击Build->compiler Options,确定 D:\jdk1.6\bin\javac.exe 显示在Compiler Path 窗口中,然后单击OK (7)单击Build->compile File 为了查看编译信息, 确定在View菜单中选择了log窗口
步骤: (1)单击开始,运行,cmd 注:在Applet Viewer中会看到小应用程序时的输出。 确定Hello.html文件和代码在一个目录下。打开命 令窗口。 (2)进入D:\MyHelloWorld目录,输入
MDA(Model-Driven Architecture)技术还不成 熟,整个项目都通过建模生成代码是不现实的。 在实际中,重要的问题是如何保持代码和设计的统 一。 UML的优势是可视化。 代码生成技术主要用于维护系统框架。
(9)在browser中右击paint,然后单击Open Specification
注:Methods Specification Window将显示出来
(10)在返回类型域中选择void
(11)单击Arguments的New(Insert)按钮,在
Name域中键入g
(12)扩展java->awt, 然后双击Graphics,单击
பைடு நூலகம்
步骤: (3)给paint操作添加一个信息,使得运行小程序时, 能够看到一些信息。 在图中右击HelloWorldApplet类,然后单击Java>J2EE->Edit Code 注:确定编辑器窗口显示出来 (4)在paint操作内,键入g.drawString("Hello World!",50,25); (5)在File菜单中单击Save
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)管道流水线
输入介质
输入
循环移位
序列化
输出
输出介质
40
优点: 维护处理的直接性 支持复用 易于修改 缺点: 不便于进行引入交互机制 对空间的利用不足
41
(5)比较
共享 数据 隐式 调用
ADT
管道/ 过滤器
算法改变 数据表示改变
功能改变 性能 复用
— —
—
+
—
+
—
+
—
+ +
—
+
— —
+
—
软件体系结构
概述 软件体系结构风格 OMA DNA
1
一、概述
1、为什么需要研究软件体系结构
规模增加 复杂性增加 需要演化 “算法+数据结构”对于软件的描述不全面
需要提高对软件总体结构的认识 构成成分、成分之间的关系 提供交流基础 反映高层设计 便于系统演化
2
2、什么是软件体系结构
对系统结构的总体设计与说明 是一种高层设计 关注三方面问题:构件、构件间关系、关系约束
输入介质
输出介质34优点:来自允许数据有效地表达 计算问题被划分到不同的模块中
缺点:
处理变化的能力不足 例如:数据存储格式的变化将影响 到几乎所有的模块 不易进行处理算法的改进与系统功能增强 对复用的支持不明显
35
(2)抽象数据类型
主控制程序
输入
输出
字符集
循环移位
排序
输入介质
输出介质
36
优点:
算法与数据表示可以在独立的模块中改变 对复用的支持好 对功能增强支持不足
达到一个新的状态。
适合于嵌入式系统,涉及连续的动作与状态。
24
(2)控制系统的定义
输入变量 控制器 过程 操作变量差 受控变量
设置点
25
(3)控制系统模型的构成 计算型模型 过程定义:包括操作某些过程变量的机制 控制算法:用来决定如何操纵过程变量 数据元素 过程变量:指定的输入、操纵变量等 设置点:受控变量的参考值 传感器:用于获得控制所需的过程变量值 控制环模型 建立控制算法之间的关系,它收集关于过程 实际的和欲达到的状态,并调节过程变量, 以使实际状态向目标状态发展
32
所考虑的问题: (1)处理算法的变化 例如,何时进行移位 (2)数据表示的变化 例如,行、单词、字符的不同存放方式 (3)系统功能的增强 例如,部分单词的过滤 (4)性能 空间、时间 (5)复用 构件的复用程度
33
(1)主程序/子程序加共享数据
主控制程序
输入
循环移位
排序
输出
字符集
索引
排序过的索引
17
6、Layered systems
(1)基本结构
过程调用 有用的系统 基本工具
内核层
不同元素组合
用户
18
(2)应用 分层通信协议 操作系统 数据库系统 (3)优点 支持基于抽象程度递增的系统设计,使得设计者 可以把一个复杂系统按递增的步骤分解开。 支持功能扩展,每一层至多和相邻的层次交互。 支持复用,只要服务接口定义不变,不同的实现 可以交换使用。 (4)缺点 适应面不宽
19
7、Repositories
(1)基本结构
直接存取 知识源
计算
知识源
知识源
知识源
黑板 (共享数据)
知识源
知识源
知识源 知识源 知识源
存储器
20
(2)特点 知识源之间的交互只通过黑板完成 问题的解决是通过知识源不断地改变黑板完成的 (3)应用 (数据库) 信号处理 松耦合代理数据共享存取 其它例子: 带有全局数据库的批处理系统 编程开发环境 编译器等
例如:
I am a teacher I give lecture of ASE We learn software architecture now
a teacher I am am a teacher I I am a teacher teacher I am a
ASE I give lecture of give lecture of ASE I I give lecture of ASE lecture of ASE I give of ASE I give lecture ...
4
4、目前软件体系结构的研究热点 (1)软件体系结构描述 ADL (2)软件体系结构分类 原理、模式 (3)特定领域的框架 框架 (4)体系结构形式化的基础 过程代数、化学抽象机等
5
二、体系结构风格
大量地采用设计模式、风格 在许多工程中是十分普遍的 成功工程领域的一个重要特征之一 是对设计形式具有公共的理解 软件也有组织结构风格 需要对这些风格进行研究 以在开发人员之间建立 “公共认识”
29
(3)处理异构复合匹配问题的方法 不同构件之间不能协调工作的原因可能是它们 事先作了对数据表示、通信、包装、同步、语法等方 面的假设(统称形式)。 解决方法(以构件A与B为例): 形式A改变为B的形式 在数据传输过程中从A的形式转变为B的形式 为B提供进口/出口转换器 A与B协商以一种中间形式交流 IDL RTF
13
4、Data Abstraction and Object-Oriented Organization
(1)基本结构
:对象
:调用
14
(2)特征 对象负责维持本身的完整性:维护内部变量 对象具有信息隐藏特性:对象的内部结构对其它 对象不可见。 (3)优点 封装: 继承: 多态: (4)缺点 过程调用依赖于对象标识的确定 不同对象的操作关联性弱
6
内 容
1、什么是体系结构风格 2、常见的体系结构风格 3、Pipes and Filters 4、Data Abstraction and Object-Oriented Organization 5、Event-Based Implicit Invocation 6、Layered systems 7、Repositories 8、Interpreters 9、Process Control 10、Other Familiar Architecture 11、Heterogeneous Architecture 12、不同体系结构风格的比较
缺点:
37
(3)隐式调用(事件)
主控制程序
输入
循环移位
排序
输出
输入介质
行
行
输出介质
38
与主程序/子程序模式的不同: 数据接口更加抽象 不直接将存储格式暴露给计算模块 当数据被修改时,计算体被隐式调用 交互是基于“主动数据”进行的 优点: 对功能增强的支持好 对复用的支持好
缺点: 难以控制隐式调用模块的处理顺序 占用空间资源较多
26
10、Other Familiar Architecture
(1)分布式处理 特定拓扑结构: 星型、环型、令牌环、层次等 客户/服务器模型: 松散耦合的计算模式
(2)主程序/子程序组织 主程序调用各个子程序 通常需要提供一个控制循环
27
(3)特定于领域的体系结构 DSSA:Domain Specific Software Architecture 缩小考虑范围 增加描述能力 提高代码复用率 提高开发效率
21
8、Interpreters
(1)基本结构
存储器
输入
数据
解释执行中 的程序
计算状态机
输出
模拟 解释 引擎 数据存取
内部 解释器 状态
22
(2)作用 解释器通常被用来建立一种虚拟机 以祢合程序语义与硬件语义之间的差异
典型的例子是专家系统
23
9、Process Control(Loop)
(1)背景 当软件被用来操作一个物理系统时,软件与硬件 之间可以粗略地表示为一个反馈循环,这个反馈循环通 过接受一定的输入,确定一系列的输出,最终使环境
(4)状态转换系统 许多被动系统的公共组织是状态转换系统 这种系统根据一组状态和命名的转换来定义 这些转换可以使系统从一种状态过渡到另一种状态
28
11、Heterogeneous Architecture
(1)异构是不可避免的 不同风格的结构适合于不同的应用场合 新系统需要和老系统协调工作
(2)异构体系结构的复合 层次式 以某种体系结构实现的系统,其组成部分 内部可以是另一种体系结构,其连接部分 内部也可以具有体系结构。 对等式 系统以一种体系结构实现一个子系统, 以另外一种体系结构实现另一个子系统
+ +
+
42
15
5、Event-Based Implicit Invocation
(1)基本结构
16
(2)特征 一个部件可以广播一个或多个事件,或者向系统 注册,希望接受一个或多个事件。 一个事件的激发隐含地导致了对其它模块的过程 的调用。 (3)优点 事件广播者不必知道哪些部件会被事件影响,部 件之间关系弱。 对软件复用提供有力的支持。 易于系统升级。 (4)缺点 部件放弃了对计算的控制。 不易准确测试系统性能。
9
3、Pipes and Filters
(1)基本结构
(2)特征 过滤器是独立实体,相互之间不共享状态 过滤器不了解其它过滤器的信息
10
(3)例子 利用 Unix Shell 编写的程序 ls | find ... 编译器 词法分析 语法分析 语义分析 代码生成
11
(4)优点
允许设计者将一个系统的整体输入/输出行为理解 为各个独立过滤器行为的简单合成。 对复用的支持好:任何两个过滤器之间,如果交流 的数据格式匹配,即可以连接在一起。 系统的维护与扩展方便:新的过滤器可以添加到现 有系统中,或者利用改进的过滤器替换老的过滤器。 方便系统分析:例如,吞吐量、死锁等 并发性好:每一个过滤器可以作为一个单独的任务 实现,可以与其它过滤器并行执行。