软件类中的方法可以通过uml的哪一个uml图形类型确定

(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
&&|&&0次下载&&|&&总128页&&|
您的计算机尚未安装Flash,点击安装&
阅读已结束,如需下载到电脑,请使用积分()
下载:50积分
0人评价43页
0人评价166页
0人评价88页
0人评价58页
0人评价40页
所需积分:(友情提示:大部分文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
文档内容侵权
已存在相同文档
不属于经济管理类文档
源文档损坏或加密
若此文档涉嫌侵害了您的权利,请参照说明。
我要评价:
下载:50积分eclipse中根据源码生成UML类图的插件哪个好
eclipse中根据源码生成UML类图的插件哪个好
为什么没有大神帮我回答一下【uml建模工具】uml建模工具哪个好 - 121下载站
121下载站最安全的官方软件下载基地!
您的位置: -
- uml建模工具
uml建模工具
uml建模工具主要用于UML类型的创建、编辑和导出等操作,此类软件主要适用于专业的设计师使用,小编这里为大家整理的uml建模工具拥有灵活、可扩展性强、操作简单的特点,部分软件体积非常小,上手操作也极其容易,那么uml建模工具哪个好呢?小编觉得像StarUML、Astah等挺不错的,欢迎下载。
15 MB/ 简体中文 /v10.40免费版
Software Ideas Modeler是一款体积小巧、实用的UML建模工具,支持类图,用例图,通讯图,序列图,包图,...
85.2 MB/ 简体中文 /v8.6 中文绿色版 附激活码
Edraw Max 8又称亿图图示专家,这是一款专业的流程图绘制软件,可以应用于业务流程图、组织结构图、商业图...
15 MB/ 简体中文 /v0.34中文免费版
Argo UML是一款免费开源的UML建模软件,软件支持所有uml1.4的标准图形,且可以运行于任何java平台上,内...
493 KB/ 简体中文 /v2.05免费版
NCH ClickCharts是一款体积小巧的流程图制作软件,当然也可以称之为思维导图软件,这款软件拥有着不足1M...
7.2 MB/ 简体中文 /v0.0.2 官方版
Gridraw是一款免费好用的uml绘图工具,可以用于各类用例图、静态图、行为图、交互图的配置以及绘制操作,软...
5.2 MB/ 简体中文 /v8043免费版
PlantUml是一款体积小巧的语言流程图制作工具,软件可以独立制作,也可以与各类开发程序配合使用,可以轻松...
243 MB/ 简体中文 /v13.1官方免费版
Visual Paradigm是一款强大的UML建模工具,主要用于各类工程的建模操作,软件功能强大、易于上手,而且支...
30.1 MB/ 简体中文 /v6.8.7免费版
BOUML是一款强大的UML2建模工具,可以程序员对代码进行编译和反编译操作,支持Java、Idl、c++、PHP、...
27.3 MB/ 简体中文 /v5.0.2.1570
StarUML简称SU,这是一款专业的UML建模工具,主要用于绘制例图、类图、序列图、状态图、活动图、通信图...软件工程(完整版)_伤城文章网
软件工程(完整版)
高级软件工程主讲 陈春玲V4.1南京邮电大学软件学院025- 高级软件工程目的和要求: 了解软件开发技术的发展与现状,掌握目前大型软件系统 的开发方法和技术,培养用规范化的方法开发大型软件。 重点和难点: 建立起面向对象软件开发方法的思维方式,用统一建模语 言(UML)对复杂的软件系统建立可视化的系统模型。 先修课:面向对象程序设计,数据结构,操作系统 学时:40 教材与参考书: (1)周之英,《现代软件工程》(中、下),科学出版社 (2)郑人杰等,《实用软件工程》(第二版),清华大学出版社 (3)张龙祥,《UML与系统分析设计》,人民邮电出版社 (4)Mary Shaw,《Software Architecture》,清华大学出版社 教学内容第一章 软件工程概述 1 软件技术概述(概念与特点、计算机软件技术、软件复用) 2 软件危机(产生的原因 、解决方法) 3 软件工程(概念、原理、开发方法简介、软件工程环境) 第二章 需求分析工程 1 需求分析工程概述 2 需求分析工程 3 需求分析技术 第三章 软件开发的结构化方法 1 问题的定义,可行性研究 2 结构化分析和设计 3 软件测试,程序调试 第四章 软件开发的面向对象方法 1 面向对象方法概述 2 面向对象分析和设计 3 面向对象测试 第五章 统一建模语言UML与实例 1 UML概述 2 UML视图 3 可视化建模工具Rose 4 UML实例 第六章 面向对象开发中的设计模式 1 设计模式概述 2 四种设计模式 3 设计模式编目 4 设计模式选择及使用 第七章 软件体系结构 1 软件体系结构概述2 体系结构不匹配问题3 软件体系结构描述语言 4 体系结构风格 第八章 分布式系统与部件技术 1 分布式系统与部件技术概述2 CORBA技术3 COM技术 第一章 软件工程概述高级软件工程第一章 软件工程概述 在学习了“高级程序设计语言”和“数据结构” 后,编写小程序不会有太大问题。但要开发一个大 型软件一定有许多困难,例如在接到项目后,应该 从哪儿入手、用什么方法、按照哪 些步骤进行开发,如何评价一个 第一章 软件工程概述 软件的好坏,等等,这些都是初 1.1 软件技术概述 次参加大型软件的开发人员要遇 1.2 软件危机 到的问题。 1.3 软件工程 1.4 软件工程环境 因此,必须学习软件工程。南京邮电大学软件学院陈春玲 高级软件工程1.1 软件技术概述 一、软件的概念与特点 程序是一系列指令序列的集合,它能被计算机 理解和执行。 文档是指用自然语言或者形 式化语言所编写的文字资料和图 第一章 软件工程概述 表,用来描述程序的内容、组成、 1.1 软件技术概述 1.1.1 软件的概念与特点 设计、功能规格、开发情况、测 1.1.2 计算机软件技术 试结果及使用方法,如程序设计 1.1.3 软件复用 1.2 软件危机 说明书、流程图、用户手册等。 1.3 软件工程1.4 软件工程环境 软件是计算机系统中与硬件子系统相互依存的 另一个子系统,是一个包含程序及其文档资料的完 整集合,提供了用户与硬件子系统之间的接口。 随着计算机科学技术的发展,人们对软件的认 识也在不断深化,这从下面式子变化就可以看出: 70年代以前:软件=程序; 70年代:软件=程序+文档; 80年代以后:软件=文档+程序。 在软件的可维护性变得越来越重要的今天,文 档的地位也提高到前所未有的高度,并且能够自动 化地生成。 与小型软件不同,大型软件具有如下特点: ⑴ 规模大 现在的软件动咎上百兆,需要处理的数据量大,占用的内 存也大。对于实时软件,除了规模大以外,还要求可靠性高。 ⑵ 复杂性高 大型软件由大量的模块集成,模块间的关系、调用方式以 及数据和文件的关系都相当复杂。 ⑶ 开发周期长 大型软件从立项到交付使用,需几十人、几百人经过几个 月甚至几年的时间。 ⑷ 开发、维护和使用人员不同 ⑸ 多学科综合 软件开发人员除了具有必备的软件知识外,还应该具有多 方面的专业知识和经验。 二、计算机软件技术 计算机软件技术是指开发计算机软件所需的所 有技术的总称。 按照软件分支学科的内容划分,计算机软件技 术相应有如下几个领域: (1)软件工程技术 包括软件开发的原则与策略、 第一章 软件工程概述 软件开发方法与软件过程模型、 1.1 软件技术概述 1.1.1 软件的概念与特点 软件标准与软件质量的衡量、软 1.1.2 计算机软件技术 1.1.3 软件复用 件开发的组织与项目管理和软件 1.2 软件危机 1.3 软件工程 工程工具和环境等。1.4 软件工程环境 ⑵ 程序设计技术 包括程序的结构与算法设计、程序设计的风格、 程序设计语言、程序设计方法和程序设计自动化、程 序的正确性证明和程序的变换。 ⑶ 软件工具环境技术 包括人机接口技术、软件自动生成、软件工具的 集成、软件开发环境和软件的复用等。 ⑷ 系统软件技术 包括操作系统、编译方法、分布式系统的分布处 理与并行计算、并行处理技术和多媒体软件技术 ⑸ 数据库技术包括数据模型、数据库与数据库管理系统、分 布式数据库、面向对象的数据库技术、工程数据库 、多媒体数据库,以及数据仓库和数据挖掘等。 ⑹ 实时软件技术 ⑺ 网络技术 包括网络软件技术、调试工程、网络管理、局 域网技术、网络互连技术和智能网络等。 三、软件复用 1. 软件复用(软件重用)概述 从1968年提出可复用库的思想后,软件复用的 概念被推广了。 软件复用是指在构造新的软件系统过程中,对 已存在的软件产品(设计结构、源 代码、文档等)重复使用的技术。 第一章 软件工程概述 软件复用有三个层次:知识 复用、方法复用和软件成分复用。 1.1 软件技术概述 1.1.1 软件的概念与特点 前两个属于知识工程的范畴, 1.1.2 计算机软件技术 1.1.3 软件复用 1.2 软件危机 这里只讨论软件成分的复用。1.3 软件工程 1.4 软件工程环境 软件成分的复用包括以下三个级别: ⑴ 代码的复用可以采用源代码剪贴、源代码包含和继承来实现。 ⑵ 设计结果的复用 指复用某个软件系统的设计模型。适用于软 件系统的移植。⑶ 分析结果的复用是指复用某个软件系统的分析模型。适用于用户需求未改变,而系统体系结构变化的场合。 不属于软件复用的范畴:程序的重复运行、执行期间的重复调用等。 软件复用的优点: 由于软件复用利用已有的软件成分来构造新的软件,因此大大缩减了软件开发所需的人力、物力、财力和开发时间,并且能提高软件的可靠性和可维护性。 2. 软件复用技术 软件复用技术分为两类:合成技术和生成技术。 (1)合成技术 利用部件(component,组件,构件)合成软件系统的技术。 部件是可复用的一小段软件(可为二进制形式),可以是对 某一函数、过程、子程序、数据类型、算法等可复用软件成分 的抽象,封装了功能细节和数据结构,有详细的接口。 Microsoft等公司提出了OLE/COM(Object Linking Embeding /Component Object Model,对象链接和嵌入/组件 对象模型)概念,并开发出各种独立的标准组件,用户使用这 些组件集成自己的软件,提高了软件的质量,软件维护更加容 易,同时降低了软件开发成本。 目前有三个重要的部件技术: ①OMG的CORBA技术 ②Microsoft的COM+技术 ③Sun公司JavaBeans API,基于Java的部件 技术标准。 CORBA技术,是异构系统中的分布式部件技术。 CORBA(Common Object Request BrokerArchitecture, 公共对象请求代理体系结构)是由OMG(Object Management Group)提出的应用软件体 系结构和对象技术规范,其核心是一套标准的语言 、接口和协议,以支持异构分布应用程序间的互操 作性及独立于平台和编程语言的对象重用。在1990年开始制定并且逐步完善的部件标准。CORBA 3.0。 COM+是微软公司在新的企业应用体系结构下,将COM、DCOM和MTS统一起来,形成真正适合于企业级应用的部件技术。 “COM+”容易使人产生误解,以为它是COM的新 版本,其实COM+的含义远比COM丰富得多。 COM+是一种中间件技术的规范,其要点是提供建立在操作系统上的、支持分布式企业级应用的“服务”。 COM+是在20世纪末随着Windows 2000发布才面 世的。 有三种方法将部件合成更大的部件: ①连接 标准函数库中的标准函数靠编译和连接程序与其 它模块一起合成系统。②消息传递和继承 smalltalk。 ③管道机制 UNIX中用管道(pipe)连接命令shell,使前一命 令的输出做为后一命令的输入,用管道机制把多个 shell命令连接在一起完成一个更加复杂的系统。 (2)生成技术 利用可复用的模式,通过生成程序产生一个新 的程序或程序段,产生的程序可以看成是模式的实 例。 可复用的模式有两种:代码模式和规则模式。 ①代码模式 可复用的代码模式存在于应用生成器中,通过 特定的参数替换,生成抽象软件模块的具体实体。 各种程序生成器。 ②规则模式 利用程序变换系统,把用超高级规格说明语言 编写的程序转化成某种可执行语言的程序。IDL― ―CORBA的接口定义语言。 高级软件工程1.2 软件危机一、软件危机概述 “软件工程”起因于“软件危 机”。60年代末期出现的软件危机, 使软件陷入到“泥潭”之中。 什么是软件危机?软件危机是指 在软件开发过程中遇到的一系列严重 问题,如:开发周期延长,成本增加, 可靠性降低等。第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.2.1 软件危机概述 1.2.2 产生的原因 1.2.3 解决方法 1.3 软件工程1.4 软件工程环境 例1 IBM OS/360系统,有346万条汇编语句,1968至 1978年投入5000人年,共改21版,结果不能使用。例2 1962年美国飞往金星的探测卫星发射失败,原 因是控制系统中的一个FORTRAN循环语句DO 5 I=1,3 被误写成DO 5 I=1.3,由于空格对FORTRAN编译程序 没有意义,误写的语句被当成了赋值语句DO5I=1.3 ,一点之差,使卫星偏离轨道,只好下令引爆,导 致1850万美元的损失。DO 5 I=1,3 循环体 5 K=X/Y+34.6 除了不能正常运行的软件,软件危机还反映在 如下几个方面: ⑴ 对软件成本、开发成本和开发进度的估计不 准确;软件成本在计算机系统总成本中所占的 比例逐年上升; ⑵ 用户对“己完成的”软件系统不满意的现象 时常发生; ⑶ 软件产品的质量往往靠不住; ⑷ 软件通常没有适当的文档资料,维护困难。 ⑸ 软件开发生产率的提高速度远跟不上计算机 应用的普及和深入的趋势。 高级软件工程二、软件危机产生的原因 46年第一台计算机“诞生 ”后的很长一段时间里,人们都 是用计算机来解决一些“小问题 ”,编制一些小程序。随着计算 机软硬件的发展,人们用计算机 来解决的问题越来越大,程序规 模也越来越大,而开发大型软件 与编制小程序有一定区别:第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.2.1 软件危机概述 1.2.2 产生的原因 1.2.3 解决方法 1.3 软件工程1.4 软件工程环境 ⑴ 人员。小程序从确定要求、设计、编制、使用 ,直到维护通常由一个人完成;大型软件则必须 由用户、项目负责人、分析员、初级程序员、资 料员、操作员等组成一支开发队伍来协同完成。 ⑵ 文档。小程序是编制者脑中的“产品”,很少 有书面文档;大型软件则是集体劳动的“产物” ,必须有规范化的文档,便于开发和维护。 ⑶ 产品。小程序通常是一次性的,如果需作大的 修改,则宁可舍弃旧程序而重新编写;但大型软件 的开发耗费了大量的人力与物力,所以不可能轻易 抛弃,而总是在旧软件的基础上一再改动,以延长 它的使用期,因此“版本”在不断升级。 大型软件的开发提出了许多新的问题,而开发 方法却还停留在编制小程序的方法上,经验和技巧 已不能满足开发大型软件的需要,导致软件开发过 程混乱;使用的开发方法和技术不当,没有适当的 文档,不易交流,维护困难,开发成本高,软件质 量低等等,这些问题是造成软件危机的主要原因。 高级软件工程三、软件危机的解决方法 以“工程化”的思想来指导软件开发。 软件危机使人们认识到,软件的研制和开发不能 象以前那样――开发过程混乱、无 规范化的文档、个体作坊式的开 第一章 软件工程概述 发,而必须立足于科学理论的基 1.1 软件技术概述 础上,像生产产品、研制一台机 1.2 软件危机 器或建造一座楼房那样,以“工 1.2.1 软件危机概述 1.2.2 产生的原因 程化”的思想来指导软件开发, 1.2.3 解决方法 1.3 软件工程 解决软件研制中面临的困难和混 1.4 软件工程环境 乱,从根本上解决软件危机。 第一章 软件工程概述高级软件工程从技术上,以软件工程技术、程序设计方法和技术为基础,力求将软件工程与知识工程、人工智能技术结合起来,以构造基于知识的软件开发环境;从管理上,以管理学为依托,对开发人 员、成本、项目、文档等加强管理,对软件 开发全过程进行控制。南京邮电大学软件学院陈春玲 第一章 软件工程概述高级软件工程1.3 软件工程一、软件工程的概念软件工程是指用工程的概念、原理、技术和方法来开发和维护软 件,把经过时间考验证明正确的 管理技术和当前能够得到的最好 的技术方法结合起来,指导计算第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.3 软件工程 1.3.1 软件工程的概念 1.3.2 软件工程原理 1.3.3 软件开发方法简介 1.4 软件工程环境30机软件的开发和维护的工程学科。南京邮电大学软件学院陈春玲 软件工程采用的生命周期方法学是指从时 间的角度对软件开发和维护的复杂问题进行分 解,把软件生存的漫长周期依次划分为若干阶段,每个阶段都有相对独立的任务,然后逐步完成每个阶段的任务。 软件的生命周期:把从软件开发项目的提出到 软件产品完成使命而报废的整个时期。31 软件生命周期划分为三个大的阶段: 软件定义阶段:包括问题定义、可行性研究和需求分析三个子阶段;软件设计阶段:包括总体设计、详细设计、编码和测试四个子阶段;软件维护阶段:使软件在运行期间满足用户 的需要。32 软件生命周期可以用瀑布模型来表示。 传统瀑布模型的特点: 问题定义 可行性研究 (1)阶段间有顺序性 和阶段性 需求分析 (2)推迟实现的观点 总体设计 (3)质量保证的观点 详细设计 经验表明,越早潜伏的错误,越 编码与 晚发现,纠正错误所花费的代价也越 单元测试 高。因此,及时审查和纠正错误,是 综合测试 保证软件质量、降低软件成本的重要 软件维护 措施。 图1-1 瀑布模型33 高级软件工程二、 软件工程原理B.W.Boehm总结出七条软件工程 基本原理: ⑴ 严格按照计划进行管理; ⑵ 坚持进行阶段评审; ⑶ 实行严格的产品控制; ⑷ 采用现代化的程序设计技术; ⑸ 结果应能清楚地审计; ⑹ 开发小组的人员应该少而精; ⑺ 承认不断进行软件工程实践的 必要性。第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.3 软件工程 1.3.1 软件工程的概念 1.3.2 软件工程原理 1.3.3 软件开发方法简介 1.4 软件工程环境34 第一章 软件工程概述三、软件开发方法简介简单介绍三种常用的方法: 结构化方法、快速原型法和面向对象法。 1、结构化方法结构化方法是以“结构化” 的思想、方法和工具进行软件 开发。 “结构化” 是指用一组标 准的准则和工具从事某项工作, 它最早出自结构化程序设计。结构化程序设计?结构化 系统设计?结构化系统分析南京邮电大学软件学院陈春玲第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.3 软件工程 1.3.1 软件工程的概念 1.3.2 软件工程原理 1.3.3 软件开发方法简介 1.4 软件工程环境35 结构化程序设计?结构化系统设计?结构化系统分析“GOTO语句是有害的”。 结构化程序设计的基本思想:只使用顺序、选择、 循环三种基本结构来编写程序,它们都是单入口单出口的;使用自顶向下逐步求精的程序设计方法,即利用三种基本结构实现程序结构的连续分解,产生较低层次的 结构,直到设计下降到能使用低层伪代码或高级语言中 的三种基本语句表达为止。 结构化程序设计是成功的程序设计方法,但不能解 决系统的结构问题,更不能解决系统总体模型表达方面 的问题。36 结构化程序设计?结构化系统设计?结构化系统分析 结构化系统设计原则: (1)一个系统由层次化的程序模块构成; (2)每个模块只有一个入口和一个出口; (3)每个模块归其上级模块调用;(4)应当构造内部联系紧密的模块,降低模块间的联系;(5)使用系统结构图等图形工具表达系统结构; (6)结构化设计采用自顶向下的模块化设计方法。37 结构化程序设计?结构化系统设计?结构化系统分析 结构化设计并不能对系统分析有帮助。当问题比 较复杂,软件规模较大时,系统分析是必不可少的阶段。不论从用户角度还是从系统结构设计角度都需要有一个逻辑模型定义系统的逻辑功能。结构化分析是定义系统逻辑模型的一种方法学。38 结构化方法把软件开发过程分成六个阶段: 调查、分析、设计、编码、测试和维护。 在分析、设计和编码阶段均采用结构化的思想和工具进行软件的开发,如分析阶段的数据流图、数据字典、实体联系图和状态转移图等,设计阶段的软件 结构图、层次图等,编码阶段的结构化编程等。39 结构化方法的优点:简单易学,易交流。结构化方法的缺点:第一,它试图在系统建立之前对用户需 求进行严格定义或预先加以明确说明,这通常是不切实际的;第二,用户只参加软件开发的软件定义阶 段的工作,不易发现开发中的问题,导致维护代价增加。 第三,静态的建模工具(文字和图形)缺 乏直观的感性认识。40 2、快速原型法原型是系统的早期版本,是系统的物理模 型,只实现了系统的一些最基本的功能, 反映系统的行为特性,但不一定满足全部需求。快速原型法是在结构化生命周期的编码阶 段之前插入一个建立系统原型的阶段。41 建立原型分四步: 第一步,确定用户的基本需求,而不是全部需求; 第二步,建立一个工作原型; 第三步,试用原型; 第四步,修改和补充原型。 原型要求快速建立,通常只有几周时间,所以称这种方法为快速原型法。42 快速原型法的优点: (1)容易理解和沟通; (2)通过与原型交互,用户可以及早发现需求中的问题; (3)开发人员可以检查设计的可行性。可以在目标系统有一个可以“运行”的物理模型;的详细设计之前较容易地改正原型设计的问题。总之,快速原型法缩短了软件开发周期,降低了开 发和维护费用,也提高了用户的满意度。快速原型法需要有快速地建立系统原型的工具, 其中包括超高级语言。43 3、面向对象方法结构化方法和快速原型法使用的核心技术是结构分析与设计技术。结构化方法和快速原型法存在的缺陷: 软件的稳定性、可修改性和可重用性比较 差。44 原因:(1)结构分析与设计技术的本质是功能分解;是围绕实现处理功能的“过程”来构造系统的,而用户需求的改动大部分是针对功能的,这必然引起软件结构的变化。 (2)它严格地定义了目标系统的边界; 很难把这样的系统扩展到新的边界,系统较 难修改和扩充。45 (3)它把处理分解成子处理的过程有些任意性;不同的开发人员开发相同的系统时,可能经分解而得出不同的软件结构; (4)开发出的软件复用性较差,或不能实现真正 意义上的软件复用。 基于上述种种因素,诞生了一种新的软件开 发方法――面向对象方法。46 面向对象方法(Objected-Oriented,OO):尽可能模拟人类习惯的思维方式,使软件开发方法与 过程尽可能地接近人类认识世界解决问题的方法与过程。最主要的特征之一是整个生命周期使用相同的概念、 表示法和策略,即每一件事都围绕对象进行。面向对象方法: 面向对象分析(Object-Oriented Analysis,OOA) 面向对象设计(Object-Oriented Design,OOD) 面向对象程序设计(Object-Oriented Programming,OOP) 面向对象程序设计?面向对象设计?面向对象分析47 OOA是软件开发过程中的问题定义阶段。它从对问题的初始陈述开始,运用应用领域知识来识别该领域中的物理实体和概念,提取出对象,分析对象之间存在的相互关系,最后建立 系统模型。 系统模型描述了系统的对象结构,是对问题论域精确、清晰的定义。48 OOD决定如何将系统组织成子系统,每个子 系统分成更小的子系统。较低层的子系统称模块。一个遵循对话独立 性原则的交互软件系统常分成用户界面和应用功 能核心两个子系统。面向对象系统的控制结构方式可以是过程驱 动、事件驱动或共行方式的。OOP是将OOD的结果用一种程序设计语言实现。 通常总是选择一种面向对象的程序设计语言。49 第一章 软件工程概述高级软件工程1.4 软件工程环境 软件开发手段经历了从手工编码到使用支撑软件产品的自动化软件工具的变迁。现在,从软件的开发、运行到维护各阶段都有软件工具,这些工具形成了现代化软件工 程环境的基础。第一章 软件工程概述1.1 软件技术概述 1.2 软件危机 1.3 软件工程 1.4 软件工程环境50南京邮电大学软件学院陈春玲 软件工具是指可以用来帮助开发、测试、 分析、维护其它计算机程序的程序以及文档资 料的集合,它可以实现软件生产过程自动化, 提高软件的生产率、可靠性,降低软件生产成 本。 软件工具在各种状况下都能被简单、方便 地使用,能给软件的开发带来极大的方便。51 大型软件生产所使用的软件工具是一种自动化系统, 包括需求分析工具、设计工具、编码工具、确认工具、维 护工具等。 需求分析工具能够辅助系统分析员把用户所提出的含 糊的用户说明,经过分析及一致性、完备性检查后,快速 生成指导系统设计用的“ 需求规格说明书”及其相应的 文档资料。 设计工具能够依据输入的需求规格说明,自动设计出 一系列软件设计文档,如软件结构说明、模块接口说明等。 编码工具的主要功能是输入设计阶段产生的文档,自 动生成特定语言编制的程序。如各种应用程序生成器等。52 尽管软件工具种类繁多,形式多样,但都只 是用于软件生存周期中的某一个阶段或某一个环 节,而不能对整个生命周期有效。为了能够对软 件整个生命周期提供支持,于是出现了软件工程 环境的新课题。 软件工程环境(Software Engineering Environment, SEE)是指用以支持需求定义、程 序生成,以及软件维护等整个软件生命周期全部 活动的,并把方法、规模和计算机程序集成在一 起的整个体系。软件工程环境又称为软件开发环 境,软件支撑环境,自动开发环境等。53 软件工程环境的全部需求可以概括为:⑴ 应该是集成化的系统; ⑵ 应该是通用的系统; ⑶ 应该是既可剪裁又可扩充的系统; ⑷ 应该是实用的、经济合算的系统。54 近几年,软件工程领域中出现一种新趋势,即将软 件工程方法、工具与环境方面的新技术同形式化语义理论有机地结合起来,形成高水平的计算机辅助软件工程(Computer Aided Software Engineering,CASE)系统 ,标志着软件开发技术的发展进入到一个新阶段。 CASE系统可以帮助开发人员执行许多和软件开发有 关的艰苦工作,包括对各种计划、合同、规格说明、设 计、源代码和管理信息之类的文档进行组织。可以说, CASE系统可以对软件生产过程的每一步提供辅助手段。55 第二章 需求分析工程高级软件工程第二章 需求分析工程 需求分析是软件开发过程 中最重要的阶段,如果不清楚系统“做什么?”,也就谈不上“怎么做”。 把需求当作一项工程,足 见需求分析的重要。南京邮电大学软件学院陈春玲第二章 需求分析工程 2.1 概述 2.2 需求分析工程 2.3 需求分析技术56 2.1 概述 一、问题的引出 软件危机引起人们对需求分析的重视。以下 五个事实说明了这一点: (1)在软件生命周期中,一个错误发现越晚,修复 错误的费用越高。 (2)许多错误是潜伏的,且在错误产 第二章 生后很长一段时间才被检测出。 需求分析工程 (3)需求分析中会产生大量错误。 2.1 概述 (4)需求分析中的错误多为疏忽、 2.2 需求分析工程 2.3 需求分析技术 不一致和二义性。 (5)需求错误是可以被检测出来的。 因此,有必要将需求过程上升为需求工程。57 二、什么是需求工程需求:是一个待开发软件中各个有意义陈述的集 合,它必须是清晰的、简洁的、一致的和无二义 性的。需求工程:是指应用已证实有效的原理、方法, 通过合适的工具和记号,系统地描述待开发软件 及其行为和相关约束。 需求工程有四个步骤: (1)需求获取 (2)需求分析 (3)编写需求规格说明书(SRS) (4)验证58 需求工程的最终目标: 得到待开发软件的系统模型。它必须是清晰 的、易于理解的、一致的和无二义性的。模型:是对现实系统的描述,是现实系统的抽 象和简化。 原型:是系统的早期版本,是系统的物理模型, 只实现了系统的一些最基本的功能,反映系统 的行为特性,但不一定满足全部需求。59 三、需求工程中的角色需求工程会涉及到三方面人员: (1)需求方 对软件开发起决定作用的一方,个人或企业等。 需开发软件者。不一定是最终用户。(2)系统分析方(系统分析员)对待开发软件的需求进行详细描述。不一定与开发方同一个企业(代理,趋势)。(3)开发方 构造系统。设计员、编程员和项目管理员。60 用户系统分析员程序员SRS系统分析员的作用61 高级软件工程2.2 需求分析工程 需求工程有四个步骤:(1)需求获取(2)需求分析(3)编写需求规格说明书(SRS)(4)验证 需求工程即包括这四个方面的工作。第二章 需求分析工程 2.1 概述 2.2 需求分析工程 2.3 需求分析技术62 一、需求获取 主要工作:收集信息,理解需求,归纳整理。功能要求 非功能要求 弄清需求 澄清概念 保留合理需求抛弃不可能需求获取的困难之处: 误解、交流障碍、缺乏共同语言、需求不完备、 需求不稳定、用户意见不统一、错误的要求、认识混 淆等,都会影响需求的获取。解决方法:仔细研究需求分析资料,深入进行市场调查,多 与用户沟通,请教应用领域专家,考察现场等。63 二、需求分析需求获取后,必须对需求进行分析。目的:细化、精化软件的作用范围,确定 软件的功能和性能、约束、环境等。 从两个方面分析用户的需求: 功能性需求,非功能性需求。指系统必须完 成的所有功能 性能要求 运行要求 未来要求 数据要求 如联机系统的响应时间,系统需要的存储容量 以及系统的健壮性和安全性等方面的要求。 指系统运行所需要的软硬件环境。 指系统将来可能的扩充要求、可重用性、可移 植性等。 指系统所要处理的数据以及它们之间的联系。64 三、编写需求规格说明书(SRS)需求分析工程最重要的结果是《软件需求规格 说明书》。 编写SRS的指导性原则: 1. 从实现中分离功能,即描述“做什么”,不必描 述“怎么做”; 2. 要求有一个面向处理的系统规格说明语言,以描 述系统级的动态行为; 3. 必须对以该软件为元素的系统进行说明,以描述 清楚系统各元素之间的关系; 4. 必须对系统的运行环境进行说明,以保持系统接 口描述的一致性; 65 5. 必须是认识的模型而不是实现的模型,即它必须以用户能够接受和理解的形式进行描述,将实际规则、条例组合到规格说明中;6. 必须是可操作的;7. 必须可容忍不完备性和可修改性; 8. 必须局部化和松散耦合,使得信息发生变化时 只有唯一的一个片段(理想情况下)需要修改。66 四、验证 验证即是对需求工程的结果――SRS进行评审,纠正错误, 弥补缺陷,以保证SRS的质量。从以下几个方面评审:正确性,无二义性,完整性,可验证性,一致性,指SRS中陈述的事情有注明页码、图和 包含软件要做 存在技术和经济上可行的 术语、特性和定时等 指SRS中对需求的描 注明系统对有效和 且仅有一种解释。 表等的编号。 的全部事情。 手段对需求验证和确认。 的一致,不矛盾。 述与用户要求一致。 无效输入的反应。非计算机人员能理解,可修改性,可跟踪性,注释。形式化和非形式化的矛盾。 修改方便。 每个需求的来源和流向清晰。 向用户和设计者给出提示。67 第二章 需求分析工程高级软件工程2.3 需求分析技术需求分析技术有: (1)结构化分析技术(SAT); (2)结构化分析与设计技术(SADT) ; (3)面向对象技术(OOT);(4)时序图(5)有限状态机(FSM); (6)Petri网;等等。第二章 需求分析工程 2.1 概述 2.2 需求分析工程 2.3 需求分析技术68(4)、(5)、(6)用于(控制)系统动态分析。南京邮电大学软件学院陈春玲 2.3.1 时序图时序图可以描述系统中处理事件的时序与相 应的处理时间。下图中事件e被功能1、功能2和功能3处理的时间共为(T1+T2+T3),功能间的切换 时间为0。第二章 需求分析工程 2.1 概述 2.2 需求分析工程 2.3 需求分析技术 2.3.1 时序图 2.3.2 有限状态机 2.3.3 Petri网69 右图采用扩充时序图表示进程间的通信流,可以用于分析几个事件的交错执行。右图可以做出如下分析: “必须设计成HOST1在等待C1 的应答R1期间要能够接收从 HOST2发出的命令C2。”70 第二章 需求分析工程高级软件工程2.3.2 有限状态机一、基本模型 有限状态机(Finite State Machine,FSM)是一种描述控 制方面特性为主的建模方法。 FSM应用于软件生存周期的所有阶段。 第二章 FSM描述如下: 需求分析工程 (1)一个有限的状态集合Q; 2.1 概述 (2)一个有限的输入集合I; 2.2 需求分析工程 (3)一个变迁函数?:Q?I?Q 是一个状态函 2.3 需求分析技术 2.3.1 时序图 数。在某一状态下,给定输入后FSM转入该 2.3.2 有限状态机 2.3.3 Petri网 函数产生的新状态。南京邮电大学软件学院陈春玲71 FSM用有向图表示。 顶点:表示状态; 有向边:表示状态的变迁。从弧 尾状态向弧头状态变迁。 边上的值:表示在该值的输入下 状态发生变迁。 左上图有四个状态q0,q1,q2, q3,输入集有三个元素a,b,c。 变迁函数?(q1,a)=q2表示在输 入值a下状态q1转变为状态q2。q0caq1baq2bq3 按下关开 按下开 有限状态机关72 FSM在需求分析中的作用:描述系统内状态以及 状态之间的转换。例:化学反应控制系统的FSM。 问题描述:某化工设备中的一个控制部件。考虑安全,要 观察和控制生产中温度和压力,安装一些传感器。当某个 传感器测量到的温度和压力中有一个超过安全值时就报警 和关闭该装Z。正常后,手工重新启动。 压力信号 温度信号 状态: (开,关) 压力 输入: (高温,高压,启动)高温/示警 高压/示警 正常 恢复成功 恢复不成功温度 反应 反应恢复成功恢复不成功 关闭开重新启动关温度信号压力信号73系统的有限状态机系统的改进有限状态机 二、FSM存在的问题 1.“计算能力”有限 FSM最大的优点是简单,但系统复杂时就成了 弱点,“计算能力”有限,因为它只能存储有限的 状态。当状态很多(无限)时,就无法用FSM建模。 改进的办法: (1)简化。放弃系统的细节。(如前述的化学反应控 制系统)(2)转换。改用其他模型或用FSM的变形。(3)扩充。增加新特性扩充FSM的能力。74 2.复合增长问题 例:生产者和消费者问题。三个分离的FSM,合并 (复合)后的FSM有12个状态。 &1,P1,C2&状态表示缓冲 区有一个消息,生产者进程 处于状态P1,消费者进程处 于状态C2。 当缓冲区容量增加后, 则合并后的FSM的状态将增加, 规模增大,无法完成分析, 出现复合增长问题。 另外,FSM是同步模型, 不能描述异步。75 第二章 需求分析工程高级软件工程2.3.3 Petri网一、概述 Petri网的思想是62年由德国人C.A.Petri提出,Peterson 详细定义和描述。 Petri提出该网是用来表达异步系统的 第二章 控制的,但现在已广泛用于硬件和软件系统 需求分析工程 的开发中。用于各种系统的模型化。 2.1 概述 它适于描述与分析并发执行的处理系 2.2 需求分析工程 2.3 需求分析技术 统――相互独立、协同操作的处理系统。 2.3.1 时序图 在软件分析与设计阶段都可使用。 2.3.2 有限状态机2.3.3 Petri网76南京邮电大学软件学院陈春玲 二、基本理论 Petri网简称PNG(Petri Net Graph),是一种 有向图,它有两种结点: (1)位Z(库所)○:表示系统的状态,或使系统工 作的条件。 (2)转移(变迁)―或|:表示系统中的事件。(3)有向边:表示对转移的输 入,或由转移输出: 符号??:表示事件发生的前 提,即对转移(事件)的输入; 符号|?:表示事件的结束, 即由转移(事件)输出。处于静止状态的系统77 称转移的起动为激发(fire),它是转移的输出。只有作 为输入的所有位Z(库所)的条件都满足时(“使能”)才能引 起激发。 为了描述系统的动态行为,引入标记或令牌(token)(黑 点),表示处理要求的到来。 例如,P3和P5出现了标记,表示它们有了处理的要求, 即转移 t3激发的条件已经具备,转移t3 激发。执行的结果,P3和P5的标 记移去,转移到P4上。 标记在PNG上的移动,就出 现了“状态的迁移”。78 79 80 并行系统模型,可以用Petri网描述之。(1)冲突。 左图中存在两个独立的动作 流,共享一个公共资源(P3)。两 个动作流中只有一个获得资源并 被激发,而哪一个获得是不确定 的,称这种情况为两个转移(变 迁)是冲突的。 进程同步机制的PNG。 (2)饿死。 左边的动作流总竞争到资源 而不断执行,右边的进程将“饿 死”。81 (3)冲突和资源竞争的调整。 在P3中设有两个标记(两个共享资源),则t3和 t4就不会发生冲突和资源竞争,可以并发执行。改进?82 (4)死锁。 执行序列&t1,t3’,t2,t4’&,将死锁。?Petri网很好地描述了该模型。83 可达树 PR1:写数据到缓冲区PR2:从缓冲区读数据若出现叶结点,则 系统中有死锁。84 三、示例――生产者和消费者 Petri网能解决FSM存在问题。 Petri网状态空间复杂度 是各子系统的状态数相加, FSM是相乘的关系。85 FSM不能描述异步问题。 Petri网可以描 述异步问题。 &生产,写入,生产,读出,初始状态 消费,写入,读出,消费&86 &生产,写入,生产,读出, 消费,写入,读出,消费&&生产,写入,生产,读出, 消费,写入,读出,消费&87 第二章 需求分析工程高级软件工程&生产,写入,生产,读出,消费,写入,读出,消费&88南京邮电大学软件学院陈春玲 第二章 需求分析工程高级软件工程四、Petri网的局限性及扩展 1、令牌缺乏表示信息内容的能力 令牌只是表示动作控制的流向,无法表达 信息的内容。 右图转发消息,若消息形式正确(消 息中含偶数个1),则从通道1转发;若消 息形式不正确(消息中含奇数个1),则从 通道2转发。 通道1 但是,令牌并未表达消息的内容和数 值,因此,无法确定向哪个通道转发。南京邮电大学软件学院陈春玲P通道289 对Petri网扩展,使令牌可以携带适当类型的值, 以改善令牌缺乏表示信息内容的能力。准备好元组:令牌的值满足谓词要求的元组。P P P 右图中令牌被赋值为整数。 1 4 4 3 7 t1的谓词逻辑:P2&P1, P4:=P1+P2 t2的谓词逻辑:P3=P2,P4:=P3-P2, t t P5:=P3+P2 P P t1有两个准备好元组:&3,7&,&3,4& 令牌赋值的Petri网 t2有一个准备好元组:&4,4& 若用&3,4&激发t1,则t2变为非“使能”; P 若用&3,7&激发t1,则可以用&4,4&激发t2。1 2 1 2 4 5 3扩展方案同样可解决通道选择问题。通道1通道290 2、缺乏描述选择“使能”变迁的策略存在激发序列&t1,t3,t5&无限循 环,而 &t2,t4,t6&被“饿死”,原 因是Petri网不能描述选择策略。 修改Petri网,强制它使用一 种选择策略,避免了t3在t4 激发之 前激发两次。 但在一般情况下Petri网无力 描述选择策略,而不确定的Petri 网是不实用的。 可以对Petri网扩展,使转移 带一定的优先级。如果存在多个转 移处于“使能”,则只有最大优先 级的转移被激发。91 3、定时问题Petri网不能描述有定时要求的计算问题,而 很多系统的定时问题则很重要。 右图也可能存在定时问题, 但它不能表达出来。 比如,要求t2在t3之前被点 燃,Petri网不能表达出来。对Petri网扩展,将时间序对&tmin,tmax& 与变 迁关联,则可解决Petri网的定时问题。92 时间Petri网的思想:即使一个变迁处于使 能状态,它也必须经过tmin之后才能被点燃,且 必须在tmax之前。 例1,P2中获得一个令牌。t1和t2都有可能被点 燃,但只能点燃一个。例2,P4中获得一个令牌。t1和t3都有可能被点 燃,但只能点燃一个。 加上时间序对的Petri网称为时间Petri网。 93 将时间Petri网中的变迁与优先级关联,则可 更加详细地描述系统的定时问题。t1 t2 t3 0 1 2 3 4 5例:P2中获得一个令牌。P4中获得一个令牌。94 下面是时间Petri网示例。(1)问题描述消息被复制为三份,三份拷贝必须经过三个不同的物理 通道转发,而接收端至少接收到 三个消息中的两个相同的拷贝才 认为转发成功,并接受该消息。 (2)建模 一旦发现消息的两个拷贝相 同,便立即接受该消息。 tvoting1的逻辑谓词:PC1=PC2 tvoting2的逻辑谓词:PC1=PC3 tvoting3的逻辑谓词:PC2=PC395 右图形式化地表示了需求的另外一个不同的解 释。此方案要求所有的消息都到达以后才进行判断, 决定接受什么。 tvoting的逻辑谓词: PC1=PC3或PC2=PC3; tvoting的函数: if PC1=PC3 then PC1 elseif PC2=PC3 then PC2 elseif PC1=PC3 then PC1 else ERROR96 五、Petri网用于系统分析――电梯控制系统设计和实现一个系统,用于控制一个高层建筑中电梯的运行。 要求必须高效合理地调度电梯。到达面板 召唤按扭 和指示灯 到达面板 目的按扭召唤面板目的面板图3-3a 从电梯门外看电梯图3-3b 从电梯门内看电梯97 1. 问题描述 一个有m层的楼中有n部电梯。控制规则已给定: (1)每部电梯都有一系列的接钮,每层对应一个按钮。如果按 下一个按钮,则该按钮就点亮,并且使电梯运行到相应的楼层。 (2)每一层都有两个接钮(UP和DOWN),按下后要点亮。电梯到 达相应楼层后,该楼层的按钮将熄灭。同时,或者在请求服务的 方向上继续运行,或者不再有未完成的请求。如果两个按钮都被 按下,那么只能有一个相应的按钮将熄灭。控制算法会决定应该 先对哪一个请求进行服务,并在最少的等待时间内使两个请求都 获得服务。98 (3)如果一部电梯没有任何请求需要服务,那么就停在最后 一次服务的目的地,关闭电梯门,等待下一次服务请求。(4)所有楼层上发出的所有要求电梯服务的请求最终都要获 得服务,所有的楼层具有相同的优先级。(5)所有在电梯内发出的请求最终都要获得服务,而且按照 电梯运行的顺序进行服务。 (6)每一部电梯的内部都有一个紧急情况按钮,按下它电梯 就会向电梯管理员发出-个报警信号,这部电梯就会被认为“终 止服务”。每一部电梯都有一种机制使电梯脱离“终止服务” 状态。99 2. 初步分析 (1)对说明缺省知识的补充。 “每一层都有两个接钮”。(召唤面板) (2)分清模糊不清的含义。 “电梯到达相应楼层后,该楼层的按钮将熄灭。” (3)查出不严密处。“控制算法会决定应该先对哪一个请求进行服务,并在最 少的等待时间内使两个请求都获得服务。”100 3. 电梯控制系统的简单模型按下第j+1 层内部按钮 电梯在第j+1层 按钮点亮 电梯在第j层按钮模型该模型太简单,太抽象,也存在一些问题,如描述不全面、 还存在一些错误。但它揭示了电梯位置和决定电梯运动的事件, 可以此为起点,通过细化(或分解)来得到系统的完整模型。101 4. 电梯控制系统的Petri网模型 (1)构造策略 需求分析的常用手段:分解和抽象。 分解成一系列模块,每个模块用Petri网描述系统的一个部件。 (2)系统描述结构 n部电梯类型的说明模块 m个楼层类型的说明模块 各模块的关系及规则电梯位置类型模块:电梯所处楼层 电梯按钮类型模块:电梯内部按钮状态 向上服务请求按钮模块 向下服务请求按钮模块102 (3)各模块的Petri网模型tmin(C)=0.05 tmax(C)=0.05按下tmin=0.1103 104 第三章 软件开发的结构化方法高级软件工程第三章 软件开发的结构化方法 结构化方法是Yourdon、 Constatine等人提出的。 它是一种面向数据流的开 发方法。 它的一些重要概念也渗透 到其他开发方法中。第三章 软件开发的结构化方法3.1 3.2 3.3 3.4 3.5 3.6 问题的定义 可行性研究 结构化分析 结构化设计 软件测试 程序调试105南京邮电大学软件学院陈春玲 3.1 问题的定义 问题定义、可行性研究和需求分析是软件生命 周期中的软件定义阶段,而问题定义又是整个软件 生命周期的第一个步骤。问题定义 可行性研究 需求分析总体设计第三章 软件开发的结构化方法3.1 3.2 3.3 3.4 3.5 3.6 问题的定义 可行性研究 结构化分析 结构化设计 软件测试 程序调试106详细设计编码与 单元测试综合测试软件维护图 1-1 瀑布模型 一、问题定义的任务 主要任务:是确定“软件要解决的问题是什么?” 如果不知道问题是什么,或者只了解一点皮 毛,就急于去开发软件,显然是盲目的,只能白 白浪费时间和费用,最终开发出的软件肯定是毫 无实际意义。 在实践中又是最容易被忽视的一个步骤。107 二、 问题定义的结果 问题定义的结果:《问题目标和规模报告书》系统分析员应该提出关于问题性质、工程 目标和规模的书面报告。通过对系统的实际用 户和使用部门的访问调查,分析员应该扼要地 写出对问题的理解,并在用户和使用部门负责 人参加的会议上认真讨论这份报告,澄清含糊 的地方,改正分析员理解得不正确的地方,最 后得出一份令双方都满意的问题定义文档。108 3.2 可行性研究一、可行性研究的任务主要任务: (1)“确定问题定义阶段定义 的问题是否有可行的解?” (2)对建议的系统进行仔细的成 本/效益分析。 并不是所有问题都有简单明 显的解决方法。第三章 软件开发的结构化方法3.1 3.2 3.3 3.4 3.5 3.6 问题的定义 可行性研究 结构化分析 结构化设计 软件测试 程序调试109 二、可行性研究的目的可行性研究的目的:就是用最小的代价,在最短的时间内 确定问题是否能够解决,是否值得去解决。 从以下四个方面分析系统的可行性: ⑴技术可行性。分析系统采用的技术是否先进,能否实现 系统目标,开发人员的素质是否具备等。 ⑵经济可行性。分析目标系统能否用最小的代价获得最大 的经济效益、社会效益和技术进步。⑶操作可行性。分析系统的操作方式在用户范围内是否可 行。⑷法律可行性。分析系统开发可能造成的责任问题。有无 违法行为?如合同的责任问题、专利版权问题等。110 问题定义阶段提出的对工程目标和规模的报 告通常比较含糊。可行性研究阶段应导出系统的高层逻辑模型 (通常用数据流图表示),并且在此基础上更准 确、更具体地确定工程规模和目标。 分析员更准确地估计系统的成本和效益。对 建议的系统进行仔细的成本/效益分析是这个阶 段的主要任务之一。111 三、可行性研究的结果 可行性研究的结果:《可行性研究报告》。 可行性研究的结果是使部门负责人作出是 否继续进行这项工程决定的重要依据,一般说 来,只有投资可能取得较大效益的那些工程项目才值得继续进行下去。对不值得投资的工程项目,系统分析员则应建议终止,可以避免更 大的浪费。112 3.3 结构化分析 可行性研究后,软件系统就可以立项开发, 进入软件需求分析阶段。第三章 该阶段的任务不是具体解 软件开发的结构化方法 决问题,而是准确地确定“为 3.1 问题的定义 了解决这个问题,目标系统必 3.2 可行性研究 3.3 结构化分析 须做什么”的问题,主要是确 3.3.1 结构化设计方法概述 定目标系统必须具备哪些功能。 3.3.2 数据流图 3.3.3 数据字典3.3.4 处理的逻辑表达方式 3.3.5 数据分析113 从五个方面分析系统的综合要求:⑴ 功能要求。指系统必须完成的所有功能。 ⑵ 性能要求。如联机系统的响应时间,系统需 要的存储容量以及系统的健壮性和安全性等方面 的要求。 ⑶ 运行要求。指系统运行所需要的软硬件环境。⑷ 未来要求。指系统将来可能的扩充要求。 ⑸ 数据要求。指系统所要处理的数据以及它们之 间的联系。 需求分析的结果:《需求规格说明书》114 系统分析员在需求分析阶段必须和用户密切 配合,充分交流信息,分析系统的综合要求,导 出经过用户确认的系统逻辑模型。系统逻辑模型完整准确地反映了用户的要求,是以后设计和实现目标系统的基础。 需求分析有多种方法和工具,其中结构化分 析方法是目前常用的方法之一。适用于分析大型 的数据处理系统。115 3.3.1 结构化分析方法概述结构化分析(Structured Analysis,SA) 采用软件工 程中控制复杂性的两个基本手段:“分解”和“抽象”, 将系统自顶向下逐层分解,直到找到满足所有功能要求 的可实现软件为止。分解:为把复杂性降到人们可以 掌握的程度,将复杂的问题拆成 若干小问题再分别解决的过程。 抽象:先考虑问题最本质的属性, 暂时略去细节,再逐层添加细节, 直至达到必要的详细程度(理解和 表达)。第三章 软件开发的结构化方法3.3 结构化分析 3.3.1 结构化设计方法概述 3.3.2 数据流图 3.3.3 数据字典 3.3.4 处理的逻辑表达方式 3.3.5 数据分析116 SA方法具有如下特点:⑴ 用户共同参与系统开发,面向用户;⑵ 建立系统的逻辑模型,强调逻辑而不是物理; ⑶ 使用图表工具明确表达系统逻辑模型,作为 与用户和系统开发人员的通讯媒介; ⑷ 采用自顶向下的方法进行系统分析; ⑸ 使用同一份系统分析资料,避免了重复性, 增强了一致性。117 大多数计算机系统都是用来替代一个已存在的 系统,它可以是一个计算机系统也可以是一个人工 系统。 SA可按如下步骤进行: ⑴ 分析当前系统,导出当前系统的物理模型(用 DFD描述); ⑵ 从当前系统的物理模型抽象出当前系统的逻辑 模型(用DFD描述); ⑶ 分析目标系统与当前系统逻辑上的差别, 建立目标系统的逻辑模型;⑷ 补充目标系统的逻辑模型。118 SA方法采用介于形式语言和自然语言之间的 描述方式书写系统《需求规格说明书》。系统《需求规格说明书》包括四个部分: ⑴ 一套分层的数据流图; ⑵ 一本数据字典; ⑶ 一组小说明; ⑷ 补充材料,如表达数据分析结果的实体联系 图等。119 总之,SA方法的本质就是采用一套分层的数据 流图及相应的数据字典和小说明来作为系统的模型(建模工具)。SA方法从总体上看是一种强烈依赖数据流图 的自顶向下的建模方法,它不但是需求分析技术, 也是完成规格说明文档的技术手段。 SA方法能够清楚地提供组织和描述系统信息 的方法,也提供了检查信息精确性的指标,为理 解和分析一个现存系统提供了有效的工具。120 3.3.2 数据流图数据流图是描述系统逻辑功能的图形工具,用来表 达系统的逻辑功能。数据流图中无具体物理元素如显 示终端、磁盘文件、打印输出等。表 明数据在系统内的逻辑流向和数据的 逻辑处理。 数据流图是结构化方法的核心。数据流图有四种基本成分: 外部项、处理、数据流和数据 存储。第三章 软件开发的结构化方法3.3 结构化分析 3.3.1 结构化设计方法概述 3.3.2 数据流图 3.3.3 数据字典 3.3.4 处理的逻辑表达方式 3.3.5 数据分析121 数据流图的四种基本成分(外部项、处理/加工、数据流、数据存储): ⑴ 外部项(源点或汇点)。 外部项是指系统以外的事物、人或组织,它表达了该系统数据 的外部来源或去处。 用方框□表示。方框内是外部项的名字。 名字通常是名词,如人或事物。 为避免在数据流图上出现数据流的线条交叉,同一外部项可以 在一张图上出现若干次。 确定了外部项,实际上也就确定了系统和外部环境的分界线。122 ⑵ 处理(加工)。 处理表达了对数据的逻辑加工或变换功能。对数据的加工处理的结果,或是变换了的数据的结构, 或是在原有数据的基础上产生新的数据。 处理用圆○表示,圆中是处理的名字。 名字应恰当地反映处理的含义,使之容易理解,通常是 动宾结构。 可以用数字对数据流图中的处理编号。一个处理可以对 应于一个模块,一个程序,也可以是“穿孔”、“打印输出” 或者甚至是“目视检查数据正确性”的人工处理过程。123 ⑶ 数据流。 数据流指示数据的流动方向。用带箭头的直线→或弧线表示。直线或弧线上带有数据流的名称。名称通常是名词。 数据流可以由一个外部项产生,也可由某一处理产生,或者 来自某一数据存储。 数据流的含义: (a)数据流是成份已知的信息包; (b)数据流经处理后可合并或分解; (c)意义清楚时可省略数据流名; (d)数据流不是控制流。124 ⑷ 数据存储。 数据存储指明了保存数据的地方。它并不代表具体的存储介 质。可以是文件的一个部分、数据库的元素或记录的一部分。数据可以存储在磁盘、磁带、内存及任何物理介质。 数据存储使用右端开口的矩形框表示。 框内标有存储的数据的名称,通常是名词。同外部项一样,为避免图中线条交叉,可在一张图中多次出 现相同的数据存储,这时只须在矩形左侧加竖线,并标上数据存 储的名字。125 数据流图的画法:采用自顶向下的方法分层(先外后内)画。 画数据流图的步骤:(1) 提取数据流图中的四个基本成分;(2) 画出高层数据流图; (3) 逐层分解较高层数据流图中的处理,得到一套分层数据流图; (4) 命名各元素。126 分解数据流图时应遵循下列原则: ⑴ 分解要自然,概念要合理;⑵ 以分层方式对处理编号;⑶ 注意父图与子图的平衡,即子图中所有的输入和输出数据 流应当和父图中相应处理的输入和输出数据流一致; ⑷ 一个处理一般可分解成7士2个子处理,不宜过多; ⑸ 当进一步分解可能涉及具体的物理实现手段时,分解应 终止。127 例子:某工厂采购部门每天要开出定货清单,清单中包括订购部 件的部件号、部件名、规格、说明、订购量、当前价格、主要 供应商和辅助供应商。 部件入库或出库称为业务,通过仓库中的终端把业务报告 给定货系统,处理库存业务。 当某种部件的库存量少于标准线以下时,仓库管理员就应该及时通知定货系统开出定货清单,交由采购员采购。128 根据画数据流图的步骤画出定货系统的数据流图。(1)从系统的简述中提取数据流图的四个成分; 1) 源点和汇点。仓库管理员视为源点,采购员视为汇点。2) 处理。处理通常是系统简述中的动词短语,如产生定货 清单,处理库存业务等。 3)数据流。从系统的源点流出和流入汇点的数据流即是系统 的输入数据流和输出数据流。4)数据存储。确定哪些数据应保存在数据存储中。库存业务一 旦产生就立即被处理,所以不必保存。定货清单一天只产生一 次,故需要保存产生定货清单的数据。有关库存零部件的信息 包括定货标准线也应作为数据存储,统称为库存数据。129 定货系统数据流图的基本成分源点/汇点 管理员 采购员 处理 产生定货清单 处理库存业务 数据流 定货清单 库存业务 数据存储 定货数据 库存数据注意:这些成分有的直接从系统问题简述中提取,有的则 是隐含在问题简述中。130 (2)画出系统的高层数据流图;高层数据流图强调源点、 汇点和输入输出数据流。 (3)逐步分解高层数据流图;高层数据流图毕竟太抽象了,需要分解其 中的处理,得到功能级 的数据流图。131 通过分解关键处理,对数据流图进行细化,得到细化的数 据流图。注意:分解过程中要遵循数据流图的分解原则。最后必须检查得到的数据流图,注意数据是否守恒,父图 和子图是否平衡。132 数据流图的优点: (1)简洁、清楚地描述了系统的逻辑模型,易于理解和评价。 (2)作为信息交流的工具,数据流图易于系统分析员与用户交流。 数据流图是结构化软件设计的基础,由它出发可以映射 出软件的结构。数据流图反映了数据在系统中的流向和数据被加工处理的 情况,但它无法详细描述数据流、数据存储、处理逻辑和外部 项的内容,这样数据流图就不严格,也难以发挥作用,因此还 必须辅以其它工具。这些工具包括数据字典、结构化自然语言 、判定表和判定树等。133 第三章 软件开发的结构化方法高级软件工程3.3.3 数据字典数据字典是关于数据信息的集合,也 就是对数据流图中四个基本成分详细 定义或说明的集合。 为便于查阅,数据字典中的条目应按 一定次序排列,并提供检索手段。第三章 软件开发的结构化方法3.2 可行性研究 3.3 结构化分析 3.3.1 结构化设计方法概述 3.3.2 数据流图 3.3.3 数据字典 3.3.4 处理的逻辑表达方式 3.3.5 数据分析134基本数据元素(简称数据元素)是数据字 典中数据的最小单位,不可再分解。若干数据元素,或若干数据元素加上数 据的结构构成数据结构。南京邮电大学软件学院陈春玲 数据字典中除了数据流图中的四个成分需描述外,还 要包括数据元素和数据结构一览表。定货系统数据字典。135 136 另外,还可以用数据字典运算符描述。 = :由...组成; + :和; 供应商=供应商编号+供应商名称+供应商地址 {} :重复; 课程表={星期几+第几节+教室} [|] :选择一个; 存期=[1|2|5] ( ) :可选(也可不选)。137 高级软件工程3.3.4 处理的逻辑表达方式数据流图中的每个“处理”应 该有一个“小说明”,用来描述处 理的逻辑加工。 一般对数据流图中最底层的 “处理”进行定义。 小说明通常采用结构化自然语 言、判定树、判定表等工具来表达 处理的逻辑。第三章 软件开发的结构化方法3.2 可行性研究 3.3 结构化分析 3.3.1 结构化设计方法概述 3.3.2 数据流图 3.3.3 数据字典 3.3.4 处理的逻辑表达方式 3.3.5 数据分析138 ⒈ 结构化自然语言结构化自然语言是介于自然语言和程序设计语言之间的一种半 形式语言。它是在自然语言的基础上加上了有限的词汇和语句 而形成的语言。结构化自然语言的词汇表包括数据字典中定义的数据元素、数据结构、数据流等名词,加上自然语言中有限的含义明确的 执行性动词以及一些常用的运算符,包括算术、关系和逻辑运算符等。使用的语句仅限于简单的祈使语句,判断语句和循环语句以及由这三种语句组成的复合语句。139 下面是结构化自然语言的语句表达处理1.1“接收库存业 务”的例子:GET 库存业务;EDIT 库存业务; IF 库存业务有错 THEN 置库存业务的错误标志 ELSE 去掉库存业务的错误标志140 2. 判定树表示判断逻辑使用判定表、判定树比结构化自然语言更直观、 清楚,易于理解。判定树是表达嵌套的多层判断的有效工具。例如:某工厂的职工超产奖励政策如下: 对产品X,实际生产数量超过计划指标50件(含50件)以下, 每超产1件奖励1元;超产数量在51~100件,超过50件部分,每 超产1件奖励1.2元;超产数量在100件以上,超过100件部分, 每超产1件奖励1.5元。对产品Y,实际生产数量超过计划指标25 件以下(含25件),每超产1件奖励2元;超产数量在25件以上, 每超产1件奖励3元。141 奖励政策用判定树表达如下:? ?1 ? N ? 50 ? 1? N元 ? ? 产品 X ?50 ? N ? 100 ? 50 ? 1.2? (N - 50)元 ? ? ?N ? 100 ? 110? 1.5? (N - 100) 元 奖励政策? ? ? ?产品 Y ?1 ? N ? 25 ? 2 ? N元 ? ? ?N ? 25 ? 50 ? 3 ? (N - 25)元 ?142 ⒊ 判定表判定表是表达条件和操作之间相关关系的一种规范的方法。当某个处理依赖于多个逻辑条件时,判定表比判定树更有效。 例如一个用结构化自然语言表达的“检查订购单”处理的逻辑描述如下 : IF 金额超过500元且未过期 THEN 发出批准单和提货单; IF 金额超过500元且已过期 THEN 不发批准单; IF 金额低于500元 THEN 不论是否过期都发批准单和提货单,在过期的情况下 还发出通知书。143 用判定表描述下表。判定表和判断树只适合表达判断,不适宜表达循环。144 第三章 软件开发的结构化方法高级软件工程3.3.5 数据分析 软件系统本质上是信息 处理系统,在软件系统的整 个开发过程中都应该考虑两 个方面的问题 ――“数据” 及对数据的处理。因此,分 析系统的数据要求是系统分 析的一个重要任务。南京邮电大学软件学院陈春玲第三章 软件开发的结构化方法3.2 可行性研究 3.3 结构化分析 3.3.1 结构化设计方法概述 3.3.2 数据流图 3.3.3 数据字典 3.3.4 处理的逻辑表达方式 3.3.5 数据分析145 系统的数据分析应当包括收集系统所使用的数据,适当地将数据元素组织成合理的数据结构。 在细化数据流图的过程中,已收集了数据元素并录入数据字典中。数据结构表示数据元素间的逻辑关系。数据流和数据存储中的数据是基于数据的结构的,这并不是数据的最恰当的组织方 式,通常用ER(Entity-Relationship)图表示数据的组织及数 据之间的关系。 为减少数据冗余,简化修改数据的过程,还应该对数据进行 规范化。146 3.4 结构化设计分析阶段得到了软件的《需求 规格说明书》,它明确地描述了用 户要求系统“做什么”的问题,下 面是决定“怎么做”的时候了,即 建立一个符合用户需求的软件系统。 软件开发进入软件设计阶段。第三章 软件开发的结构化方法3.1 3.2 3.3 3.4 3.5 3.6 问题的定义 可行性研究 结构化分析 结构化设计 软件测试 程序调试147 设计阶段通常分为两步:第一步:系统的总体设计或一般设计。它的任务是确定软件结构。第二步:系统的详细设计。进行各模块内部的具体设计。 软件设计方法有多种,本节介绍结构化设计方法。148 3.4.1 结构化设计方法概述结构化设计(Structured Design, SD)方法用于设计软件结构。 SD的目标:根据系统分析资料确定软 件应由哪些子系统或模块组成,它们 应采用什么方式连接,接口如何,才 能构成一个好的软件结构,如何用恰 当的方法把设计结果表达出来。同时 考虑数据库的逻辑设计。第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计149 SD方法的基本思想: 采用自顶向下的模块化设计方法,按照模块化原则和软件 设计策略,将软件分析得到的数据流图,映射成由相对独立、 单-功能的模块组成的软件结构。 SD是一种面向数据流的设计方法。 两种数据流图:变换型和事务型。 将数据流图映射为软件结构也就有两种方法: (1)以变换为中心的方法;变换型的软件结构 (2)以事务为中心的方法;事务型的软件结构。150 SD方法的优点: (1)模块可以独立地被理解、编程、调试、排错和修改(2)减少设计复杂性,研制工作得以简化,缩短了软件开发周期,也减少了开发软件所需的人力。 (3)模块的相对独立性也能有效地防止错误在模块之间扩散蔓延,提高了系统的可靠性。(4)提高了代码的可复用性。151 3.4.2 软件结构图软件结构图是精确表达系统内模 块组织结构的图形工具。模块是具有一定功能的可以 用名词调用的程序语句集合。 软件结构图清楚地反映出系 统中各模块之间相互的联系以及 模块间的层次关系和调用关系。第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计152 结构图是SD中一个重要结果,对结构图的理解和应用是SD的 一个核心。结构图要能表明三件事情:模块、模块间的调用关系和模块间的信息传递。模块用矩形框表示,矩形框中的文字是模块名。模块名应能简单 地表达模块功能,常用动宾结构的短语。以前已实现的可复用的 模块用双纵边矩形框表示。更新库存打印清单(a)待实现的模块 (b) 已实现的可复用模块 2-4 模块的表示153 模块间的调用关系模块间调用关系的表示A BAAA DB模块间循环调用的表示BBC(a) 单个下属模块的判断调用 (b) 多个下属模块的判断调用 模块间判断调用的表示模块间的信息传递查询学生成绩 查询学生成绩找到否 学号 地址查找学生记录 查找学生记录数据信息控制信息154模块间传递信息的表示 第三章 软件开发的结构化方法高级软件工程什么是好的软件结构?好的软件结构应该具有层次性(腰鼓形),最高层模块只有一个, 上层模块调用下层模块,同层模块互不调用,上层模块不能越层调 用,最下层模块完成基本操作。M A深度扇出BC G H扇入结构图中,最上层模块 为第一层,第一层的直接下 属模块为第二层,依次类推。DIEFJ宽度155南京邮电大学软件学院陈春玲 第三章 软件开发的结构化方法高级软件工程3.4.3 软件设计原理SD方法采用模块化原理进 行软件结构的设计。 模块:单独命名的可以通过名 字访问的数据说明、可执行语 句等程序对象的集合。 例如,过程、函数、子程序、宏 等等都可作为模块。第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计156南京邮电大学软件学院陈春玲 模块有两个方面的特征:外部特征和内部特征。模块的输入、输出和功能构成模块的外部特征; 内部数据和程序代码构成模块的内部特征。 模块化:把一个复杂的大型程序划分成若干个模块,每个模块 完成一个子功能,把这些模块汇总起来组成一个整体,可以完 成指定的功能而满足问题的要求。采用模块化原理可以使软件结构清晰,便于设计、阅读和 理解,从而便于维护。一个好的模块应该符合信息隐蔽和模块独立性原则。157 信息隐蔽:是指一个模块内所包含的信息(数据和代码)对于 不需要这些信息的模块来说是不能访问的。 抽象数据类型的栈stack就是信息隐蔽的一个例子。由于信息隐蔽,就减少了错误在模块间传递的可能性。模块独立性: 是指软件系统中的每个模块只完成一个相对独立的子功能,且与其它模块间的接口简单158 模块独立性用两个定性标准度量:内聚和耦合。 内聚:衡量一个模块内各组成部分之间彼此联系的紧 密程度。 模块内联系越紧密内聚性越好; 耦合:衡量不同模块间相互联系的紧密程度。 模块间联系越松散耦合性越好。 结构化设计追求的目标是模块内的高内聚和模块 间的低耦合。159 影响模块间耦合性的因素:模块间的联系方式、模块间接口的性质和接口上通过 的数据量。 模块间的联系方式是指一个模块调用另一模块的方式。 比如,是通过过程调用语句正常调用另一模块,还 是不通过正常入口而直接转入另一模块内部,或者直接 访问另一模块的内部数据等。 模块间接口的性质由接口上传递的信息的性质决定。 通过模块接口的信息有三种类型:数据型、控制型和描 述性标志。160 数据型信息记录某些事实,常用名词表示;描述性标志表示某些数据的状态和性质,如无效帐号,文 件结束等;控制型信息传递到被调用模块用于控制模块内部的语句执 行次序和方式。描述性标志也是一种控制信息。 还有一种混合型(也称控制/数据型),它传递的是 指令,一个模块修改另一模块的指令。这种情况只出现于 汇编语言程序中。161 模块间的耦合程度按从低到高分类如下: ⑴无耦合。如果两模块之间没有任何联系,每一个都能 独立地工作而不需要另一模块的存在,是彼此完全独立 的,则这两个模块间属于无耦合的情况。 ⑵数据耦合。如果两个模块是通过参数表仅传递数据型信息,则这种耦合称为数据耦合。数据耦合是松散的耦合,模块间的独立性较强。软 件结构中至少有这种耦合。162 ⑶特征耦合。若两个模块通过参数表传递的是某一数据结 构的子结构,而不是简单变量,这就是特征耦合。是数据耦合的一种变种。增加出错的机会,不易改动 (数据结构变化时)。将该数据结构上的操作全部集中在 一个模块中,就可消除这种耦合。 ⑷控制耦合。如果传递控制型信息,这就是控制耦合。 对被控制的模块做任何修改,都会影响到控制模块,降 低模块的独立性。 模块1 标志标志模块2163 ⑸公共耦合。若一组模块使用了公共数据,则它们之 间的耦合称为公共耦合。公共数据包括全程变量、共享的通信区、内存的 公共覆盖区等。公共数据的使用,必然降低软件的可 读性、可修改性和可靠性。 如FOTRAN中的COMMON语句。C L F 公共数据区 N M O PDE164 ⑹内容耦合。如果发生下列情况之一,两个模块间就是内 容耦合:一个模块直接访问另一个模块的内部数据; 一个模块通过不正常入口直接转入另一模块内部; 一个模块有多个入口; 两模块有一部分代码重叠(只在汇编语言中出现); 内容耦合是耦合性最高的耦合,即是模块间最坏的 联系方式,现在大多数高级程序设计语言中已经不会出 现这种耦合。 在进行设计时应该采取以下原则:以数据耦合为主 ,特征耦合为辅,少用控制耦合,限制公共耦合,杜绝 内容耦合。165? ? ? ? 模块的内聚性按从低到高分类如下: ⑴偶然内聚。如果模块中各组成成分间彼此没有实质联 系,即使有联系也是很松散的,模块功能模糊,则称为 偶然内聚。 有时写完一段程序后,发现一组语句在程序中多处 出现,便将其组织在一个模块内以节省内存,就出现了 偶然内聚的模块。在模块设计时,如果发觉一个模块难 以命名,就应考虑是否出现偶然内聚。166 ⑵逻辑内聚。如果一个模块完成的是逻辑上相同或相似 的一组功能,则称为逻辑内聚。例如,设计一个模块打印各种报表,如固定资产报 表、产品成本报表、利润报表等,打印何种报表靠传递 控制参数调用。由于不同功能在一个模块中,通常在设 计模块时会出现几种功能共用部分代码,从而使得修改 、添加或去掉功能都很困难。167 ⑶时间内聚。若一个模块中包含的任务必须在同一时间 内执行,而这些任务的次序无关紧要,则叫时间内聚。例如各种初始化工作由初始化模块完成,而各种结 束工作被组合到结束模块中,这样它的执行将涉及到其 它许多模块。 ⑷过程内聚。如果一个模块内的处理成分间是相关的, 而且必须以特定顺序执行,则称为过程内聚。 例如把程序流程图中的循环、判断和计算分成三个 模块,则这三个模块就是过程内聚的模块。168 ⑸通信内聚。模块内的所有成分都通过公共数据而发 生关系的内聚就是通讯内聚。 如对同一文件进行输入、修改、输出操作。模块 中各成分经模块的局部的公共数据进行通信。存入 打印 修改 删除结果数据引用同一个数据产生同一个输出169 ⑹顺序内聚。若模块中每个处理成分对应一个功能,且 这些处理必须按顺序执行,则称为顺序内聚。例如一个处理成分的输出是下一个处理成分的输入 的模块就是顺序内聚。构造 矩阵矩阵矩阵 转置功能内聚 顺序内聚矩阵解未 知数⑺功能内聚。模块中各处理成分属于一个整体,都为 了完成同一功能,很难分割,这就是功能内聚。 这种模块通常有明确表达模块功能的名称。170 第三章 软件开发的结构化方法高级软件工程3.4.4 软件设计原则 软件结构通常采用模块分 解的方法得到,分解时应遵循下 列四个原则:原则1:提高模块的独立性。可 以通过降低模块间的耦合,提 高模块的内聚达到。 原则2:模块规模适中。 模块的大小一般在一页纸 内,大了不易理解,小了不易 表现功能。南京邮电大学软件学院陈春玲第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计171 原则3:模块的扇入、扇出适当。 扇出过大,表明该模块分解太细,需要控制和协调过多的下 属模块。经验表明,当一个模块的扇出大于7时,出错率会急 剧上升。 扇出过小,软件结构的层次过多。扇出一般以3~5为宜。扇出过大的模块,适当增加中间层次的控制模块。扇出过小 的模块,考虑将其并入其上级模块中。当然分解或合并模块应 遵循模块独立性原则,并符合问题结构。 模块的扇入大表明模块复用性好,应适当加大模块扇入。一个好的软件结构通常呈“腰鼓”形,顶层模块扇出大,中 间层模块扇出较小,底层模块扇入大,但不必刻意追求。172 原则4:作用域保持在控制域中。 模块的作用域是指受该模块内一个判定影响模块的集合。 模块的控制域是该模块本身及其直接或间接的下属模块的 集合。 一个好的软件结构中,所有受判定影响的模块都应从 属于作出判断的模块,最好是直接下属模块。 下图是作用域和控制域的示例,其中的双矩形框表示 属于作用域中的模块,◇表示判断。173 top X A C (a)作用域在控制域外 top X A C (c)有一个不必要的穿越 Y B D Y B D Xtop Y A C (b)判定的层次太高 top X A C D Y B B D(d)作用域等于控制域模块的作用域和控制域示例174 第三章 软件开发的结构化方法高级软件工程3.4.5 软件设计策略 在软件需求分析阶段, 用结构化分析方法得到了描 述系统逻辑功能的数据流图第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计175,结构化设计就是要将数据流图映射为软件结构。 本节介绍如何将数据流 图映射为软件结构。南京邮电大学软件学院陈春玲 一、数据流图的类型 有两种典型的数据流图:变换型数据流图和事物型数 据流图。 变换型数据流图是以变换为中心,由输入、主处理、输出 (Input-Process-Output,IPO)三部分组成。 主处理的输入数据流称 为逻辑输入,主处理的输出 数据流称为逻辑输出。主处理是加工变换的中 心,它对输入的逻辑输入流 进行加工变换后,转换成逻 辑输出流。176 事务型数据流图是以事务为中心的,一个中心处理将其输入数据流分 离成一串平行的输出数据流。 二、结构图的类型 与上述两种数据流图相对应,软件结构图也有两种:变换型结构图和事务型结构图,它们分别由变换型数据流图和事务型数据流图得到。177 下图是典型的变换型结构图:变换型结构图中,每个模块都是功能型的,模块间只传递少量的数据型参数,接口清楚,因此模块的内聚 性较高,模块间的耦合性较好。178 右图是典型的事务型结构图:它通常接受一项事务 ,根据事务处理的特点和 性质,选择一个适当的处 理模块进行事务处理,给 出结果。除顶层模块外,事务型结构图通常有三个层次:事务层、操作层 和细节层。顶层模块按所接受的事务,选择调用一个事务处理模块。 事务层除若干事务处理模块,还有一个取事务模块和一个输出模块。 操作层由若干操作模块组成,供事务模块调用。 细节层由细节模块组成,供操作模块调用。事务型结构图也有较高的内聚性和较好的耦合性。179 三、设计策略将数据流图映射成软件结构图,采用变换分析和事务 分析策略,前者用于构造变换型结构图,后者用于构造事 务型结构图。 变换分析策略的步骤: (1)找出逻辑输入、主处理、逻辑输出; (2)设计结构图的第一层和第二层; (3)自顶向下设计下层模块。逻辑输入主控主处理逻辑输出180 找逻辑输入可以从物理输入端开始,离物理输入端最 远但仍然是物理输入的那个数据流就是逻辑输入。 同样离物理输出端最远但仍然是物理输出的那个数据 流就是逻辑输出。逻辑输入和逻辑输出间的那个(或那些)处理就是主 处理。181 182 183 事务分析策略的步骤:(1)识别事务中心处理和事务处理; (2)设计结构图的第一层和第二层。第一层为事务中心处 理模块,第二层为各事务处理模块,加上一个取事务模块 和一个输出模块; (3)为每个事务处理设计下层操作模块,可以共享; (4)设计细节模块,也可以被操作模块共享。184 185 一般来说,大型软件系统的数据流图是由变换型和事务型组成的混合型数据流图,由它映射的软件结构图是混合型结构图。对于混合型数据流图,在映射成结构图时,应该以变换分析为主,事务分析为辅的映射方式进行软件结构设计。186 定货系统结构图如下图:上图不一定是最优的结构图,读者可以根据模块 化等原则对其优化。总的原则是:“先使它工作,然 后再使它快起来。”187 第三章 软件开发的结构化方法高级软件工程3.4.6 数据库的逻辑设计如果是数据处理系统, 则应该在需求分析阶段对数 据要求所作分析的基础上, 进行数据库的设计。数据分析已经得到了E-R 图,如果采用关系模型,则 可以将其转化成对应的关系 模式,并进行规范化。南京邮电大学软件学院陈春玲第三章 软件开发的结构化方法 3.3 结构化分析 3.4 结构化设计 3.4.1 结构化设计方法概述 3.4.2 软件结构图 3.4.3 软件设计原理 3.4.4 软件设计原则 3.4.5 结构化软件设计策略 3.4.6 数据库的逻辑设计188 第三章 软件开发的结构化方法高级软件工程3.5 软件测试 编码之后,一般都应对程序进行检查,发现和改正 程序中存在的语法错误或逻 辑错误,但是程序中仍然会 隐藏各种各样的错误。南京邮电大学软件学院陈春玲第三章 软件开发的结构化方法3.1 3.2 3.3 3.4 3.5 3.6 问题的定义 可行性研究 结构化分析 结构化设计 软件测试 程序调试189 软件测试就是在软件投入生产性运行前,发 现和改正隐蔽在程序中的各种错误,以保证程序 的正确性、提高程序质量。 软件测试的目的: 尽可能多地发现程序中的错误。(不是证明程 序正确) 程序调试诊断程序中错误的准确位Z,研究 错误的原因,改正错误。190 3.5.1 软件测试的目的和原则软件测试是指为了发现错误而执 行程序的过程。或者说,软件测 试是根据软件开发各阶段的规格 说明和程序的内部结构而精心设 计的一批测试用例(即输入的测第三章 软件开发的结构化方法3.4 结构化设计 3.5 软件测试 3.5.1 软件测试的目的 和原则 3.5.2 软件测试步骤 3.5.3 软件测试方法 3.6 程序调试191试数据及其预期的输出结果),并用它们去执行程序,以发现程 序错误的过程。 例1,某程序从键盘输入三个整数a、b、c表示 三角形的边长,判断该三角形是等边三角形、等 腰三角形或是一般三角形。if(a==b&&b==c) printf(‘等边三角形’) else if(a==b) printf(‘等腰三角形’) else printf(‘任意三角形’) “证明程序正确”,选择三组测试数据: a=4,b=4,c=4; a=4,b=4,c=5; a=3,b=4,c=5 实际上程序中存在着严重错误。(负数,两边之和小于 第三边)192测试的关键:“发现错误”而不是“证明程序正 确”。 软件测试是一项积极的活动,旨在发现错误。软件测试的目的: (1)测试是程序的执行过程,目的是发现错误; (2)一个好的测试用例在于能够发现迄今为止尚未发现 的错误;(3)一次成功的测试在于发现了迄今为止尚未发现错误的测试。193 软件测试应该遵循的原则: (1)应当把“尽早地和不断地进行测试”作为座右铭; (2)测试应避免程序员自己进行; (3)测试用例应包括测试数据和与其对应的预期输出结果; (4)测试用例应包括合理的和不合理的输入数据; (5)注意错误群集的地方; 如:IBM370 OS,由用户发现的47%的错误集中在4%的模 块中。 (6)严格执行测试计划,排除测试的随意性; (7)全面检查每一次测试结果; (8)妥善保存测试计划、测试用例、出错统计和最终的分析 报告。194 第三章 软件开发的结构化方法高级软件工程3.5.2 软件测试步骤大型软件的测试必须分步进行:单元测试 集成测试 确认测试第三章 软件开发的结构化方法3.4 结构化设计 3.5 软件测试 3.5.1 软件测试的目的 和原则 3.5.2 软件测试步骤 3.5.3 软件测试方法 3.6 程序调试195南京邮电大学软件学院陈春玲 (1)单元测试 单元测试又称模块测试,测试对象是软件设 计中最小的单元――模块,其目的是发现模块内 部存在的错误。 单元测试发现编码阶段的错误。 测试内容: (a)模块间的接口; (b)模块内的局部数据结构 (c)模块内的重要通路尤其是错误处理的通路 和影响上述各方面的边界条件。196 (2)集成测试 集成测试又称组装测试或联合测试。 集成测试发现软件设计阶段的错误。 在单元测试的基础上,需要将所有模块按设计要求组 装成系统。在经过单元测试未发现错误的模块,组装之后 仍可能出现各种问题。 例如,数据通过接口可能丢失;一个模块对另一个模 块由于疏忽而造成的有害影响;子功能组合起来不能产生 预期的总功能;全程数据结构有错误;个别看似可以接受 的误差,组装后可能积累到不能接受的程度等等。这些问 题必须通过集成测试才能发现。197 集成测试的基本方法:边组装边测试。 两种方法:自顶向下或自底向上。 (a)自顶向下测试 从主控模块开始,沿着模块层次,边组装边测试已组 装部分的功能,直到全部组装完毕,系统达到设计的功能 和性能要求为止。 为保证测试进行,必须提供保证测试条件的桩模块。 桩模块:用来模拟被测模块的下层模块的模块。 再用实际的下层模块代替桩模块,并进行回归测试。 回归测试是相对于原始测试而言的,它部分或全部地 重复前面进行过的测试工作。198 (b)自底向上测试与自顶向下测试相反,它先组装最低层模块, 向上逐步组装。每组装一个模块,便测试由此模 块及其下层模块组成的子功能。直到全部装配完 毕,达到系统设计的功能和性能要求为止。 为保证测试的进行,必须提供保证测试条件 的“驱动程序”。用实际的上层模块代替该驱动程序。199 (3)确认测试确认测试又称有效性测试或验收测试。确认测试检查系统的功能和性能是否达到 系统分析说明书提出的设计指标,即是否满足 用户要求,检查文档是否齐全等。 确认测试发现软件分析阶段的错误。200 第三章 软件开发的结构化方法高级软件工程3.5.3 软件测试方法常用的测试方法有黑盒测试和白盒测试两种方法。 根据不同的测试对象和 环境,选择不同的测试方法 是很重要的。南京邮电大学软件学院陈春玲第三章 软件开发的结构化方法3.4 结构化设计 3.5 软件测试 3.5.1 软件测试的目的 和原则 3.5.2 软件测试步骤 3.5.3 软件测试方法 3.6 程序调试201 ?黑盒测试 黑盒测试法是根据程序的功能和性能进行 测试的方法。 它把被测程序(模块)看成一个黑盒子, 完全不考虑程序内部的数据结构和逻辑通路。 也就是说,黑盒测试是在程序接口进行的测试 ,它只检查程序功能和性能是否满足预期需要 ,程序是否能适当地接收输入数据产生正确的 输出数据,并保持外部信息(如文件或数据库 )的完整性。202 ?白盒测试白盒测试法是根据程序的逻辑结构进行测试的方法。它把程序看成是装在一个透明的白盒中,也就是完全了解程序内部的结构和处理过程。这种方法按程序内部的逻辑来测试程序 ,检验程序的每条通路是否都能按规定要求正 确工作。203 进行穷举测试是否可行? 黑盒测试,要进行穷举测试,则必须对所有输入 数据的各种可能值的排列组合都进行测试,但是这些 排列组合数往往大到实际无法测试的程度。 例如,某程序输入三个整型数,计算机字长16位 ,每个整数可能取的值有216个,三个整数总共有 216?216?216(?3?1014)种可能的排列组合。若每执行 一次测试为1毫秒,则共需1万年! 严格地说,还要对一切可能的输入数据,包括无 效数据(如不合法的整数,实数,字符串等)。204 白盒测试,为了做到穷举测试,程 序中每条可能的通路至少应执行一次( 严格地说每条通路都应该在每种可能的 输入数据下执行一次)。 右图的程序流程图,共有520( ?1014)条可能执行的通路,若每秒钟 测试一条通路,则需要3170年。循环20次的嵌套分支结构 由于不可能穷举测试,所以软件 测试不可能发现程序中的所有错误,也就是说,通过测 试并不能证明程序是正确的。但可以做到的是,通过软 件测试保证软件的可靠性。205 采用抽样测试,这样抽样测试数据就很重要。产生黑盒测试的测试用例的方法有如下几种: (1)等价类划分法 等价类是指某个输入域的子集合。 等价类应满足下述假定: 每类中的一个典型值在测试中的作用与这一类中所 有其它值的作用相同。?如果该类中的一个用例 能发现错误,其它测试 用例也能发现该错误; ? ? ?如果该类中的一个用例 不能发现错误,其它测 试用例也不能发现该错 误; ?206 为了划分等价类,需要研究程序的功能说明,从而 确定输入数据的有效等价类和无效等价类。 为了确定输入数据的等价类,常常还需要分析输出 数据的等价类,以便根据输出数据的等价类导出对应的 输入等价类。 等价类划分的启发性规则: ①如果输入条件规定了一个输入值的范围,则可划分出 一个有效等价类和两个无效等价类。 例如,1≤x≤600 有效等价类:1≤x≤600 无效等价类:x<1,x>600。207 ②如果输入条件规定了输入数据的个数,也可划分出 一个有效等价类和两个无效等价类。例如,规定每个学生可选修1~3门课,有效等价类:选修1~3门, 无效等价类:未选修和选修门数超过3门。 ③输入条件包含一个“必须成立”的情况。 例如,标识符第一个字符必为字母 有效等价类:第一个字符是字母 无效等价类:第一个字符为非字母。208 ④如果输入条件指定一个输入数据的离散值,且每一种 值用不同的处理,则每个允许的输入值都是一个有效等价类,此外还有一个无效等价类,即不为规定的取值。例如,某校教师分房方案中规定对助教、讲师、副 教授和教授分别计算分数,作相应处理。 有效等价类:助教、讲师、副教授、教授, 无效等价类:为其它不符合上述身份人员的集合。 ⑤如果有理由相信,在已划分的等价类中的元素不被程 序以相同方式处理,则应将其进一步划分成更小的等价 类。209 划分等价类后,可按下述原则设计测试用例:①设计一组测试用例,使之尽可能多地覆盖尚未覆盖的 有效等价类。重复这一步骤,直到所有有效等价类都被覆}

我要回帖

更多关于 uml图形符号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信