第二章系统分析——结构化分析方法本节内容:结构化方法概述结构化建模工具数据流图数据字典描述语言/方法为什么需要建模?软件工程中模型的概念对客观世界的问题领域进行抽象并用某种描述方法给予表示的结果称为模型。特点由于软件工程中多数模型是用于表示问题领域中的元素以及元素间的关系或相互作用等,故在建模过程中应该注意问题域中有什么对象,应该选择什么样的关系或动作,然后用适当的模型给予表示。1、结构化方法概述分析建模的开始于20世纪60-70年代,但结构化分析方法的第一次出现是作为另一个重要课题—“结构化设计”的附属品。其目的是需要一种图形符号体系来表示数据和对数据进行变换的处理,这些处理最终能被映射到软件体系结构的设计中。结构化分析这个词汇最初由DouglasRoss提出,由DeMarco进行了推广,定义了创建信息流模型的关键图形符号。一种面向数据流的传统软件开发方法,以数据流为中心构建软件的分析模型和设计模型。分为:结构化分析(StructuredAnalysis简称SA)结构化设计(StructuresdDesign简称SD)结构化程序设计(StructuredProgrammin简称SP)1、结构化方法概述主要思想:抽象与自顶向下的逐层分解(控制复杂性的两个基本手段)抽象:在每个抽象层次上忽略问题的内部复杂性,只关注整个问题与外界的联系。分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止。1、结构化方法概述抽象:从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出。分解:将系统不断分解为子系统、模块……随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)。2.42.32.22.121431.31.21.1X2、结构化建模主要工具数据词典数据流图实体关系图状态迁移图控制规格说明数据对象描述加工规格说明数据字典:是模型的核心。数据流图(DFD图):描述数据流在系统中流动的过程,及对数据流进行变换的功能,用于功能建模。实体关系图(ER图):描述数据对象间的关系,用于数据建模。状态迁移图(STD图):描述对外部事件的响应方式,表示系统的各种行为模式(称为状态)以及在状态间进行变迁的方式,用于行为建模。3、数据流图DataFlowDiagram(简称DFD):描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模,基本元素包括:数据流(dataflow):由一组固定成分的数据组成,代表数据的流动方向;加工(process):即处理,描述输入数据流到输出数据流的变换;文件(file):使用文件、数据库等保存某些数据结果供以后使用;源或宿(sourceorsink):即外部实体,表示数据输入源和输出汇点,用实体名字来表示;或或或(1)源或宿存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,因此也称为源点和终点。例如,对一个图书馆信息管理系统而言读者向系统提供查询条件(输入数据流),所以读者是管理系统的一个源管理系统向供货商发出购书请求(输出数据流),所以供货商是管理系统的一个源源或宿用相同的图形符号表示当数据流从该符号流出时表示是源当数据流流向该符号时表示是宿当两者皆有时表示既是源又是宿(2)加工和文件加工:描述输入数据流到输出数据流的变换每个加工用一个定义明确的名字标识至少有一个输入数据流和一个输出流可以有多个输入数据流和多个输出数据流文件:保存数据信息的外部单元每个文件用一个定义明确的名字标识由加工进行读写DFD中称为文件,但在具体实现时可以用文件系统实现也可以用数据库系统等实现(3)数据流每个数据流用由一组固定成分的数据组成并拥有一个定义明确的名字标识如:图书馆管理系统中,读者信息(数据流)由编号、姓名、性别、有效证件号码、联系方式、登记日期、有效期等数据组成数据流的流向从一个加工流向另一个加工从加工流向文件(写文件)从文件流向加工(读文件)从源流向加工从加工流向宿例:图书订购系统DFD图书库存入库单图书代理商书库管理收费制作财务报表财务报表经理帐务数据库制作发书单图书订购核准的订购单发书单订购单顾客顾客收费数据帐单库存状态库存查询采购单数据流图的扩充符号描述一个加工的多个数据流之间的关系星号(*):表示数据流之间存在“与”关系所有输入数据流同时存在时,才能进行加工处理或加工处理的结果是同时产生所有输出数据流加号(+):表示数据流之间存在“或”关系至少存在一个输入数据流时才能进行加工处理或加工处理的结果是至少产生一个输出数据流异或(⊕):表示数据流之间存在“异或”(互斥)关系必须存在且仅存在一个输入数据流时,才能进行加工处理或加工处理的结果是产生且仅产生一个输出数据流多个数据流之间的关系对数据流图进行分层根据自顶向下逐层分解的思想将数据流图画成层次结构GeorgeMiller在著名的论文“神奇的数字7加减2:我们处理信息的能力的某种限制”中指出:人们在一段时间内的短期记忆似乎限制在5~9件事情之内每个层次画在独立的数据流图中,加工个数可大致控制在“7加减2”的范围中数据流图的各个层次顶层图只有代表整个软件系统的1个加工,描述了软件系统与外界(源或宿)之间的数据流。顶层图中的加工经分解后的图称为0层图(只有1张)。中间层图中至少有一个加工(也可以有多个)在下层图中分解成一张子图。处于最底层的图称为底层图,其中所有的加工不再分解成新的子图。图和加工的编号顶层图只有一个代表整个软件系统的加工,该加工不必编号。0层图中的加工编号分别为1,2,3,…(或1.0,2.0…)子图号:若父图中的加工号x分解成某一子图,则该子图号记为“图x”子图中加工的编号:若父图中的加工号为x的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、x.3…数据流图的分层示意图顶层0层1层n层…实例说明——图书馆信息管理系统(1)书籍管理书籍类别管理:增、删除、改等管理。书籍信息管理:新书入库,书籍信息修改,管理员按不同方式查询、统计,读者按不同方式查询。出版社信息管理:增、删除、改等管理。图书注销:从书籍信息表中删去破损的书籍记录。(2)读者管理读者类别信息管理:增、删除、改等管理。读者信息管理:办理、挂失、暂停借、注销阅卡,录入、修改、删除读者信息。(3)借阅管理借书管理:根据借阅卡编号和图书编号,进行借书登记。把超期图书以列表的形式显示出来,并以电子邮件或打印成书面通知读者。提供读者网上查询自己的借阅情况(包括超期提示)。续借管理:提供读者在符合规定的情况下网上续借。还书管理:在借阅信息表中找到相应的记录,将借书记录删除,更新该记录的相应数据(图书信息表)。根据违反规定情况计算和登记罚款记录。顶层图0层图1层图——对1.0的分解2.2读者信息管理2.1读者类别管理管理员读者信息表借阅信息表读者类别表读者信息读者情况读者信息读者信息借阅信息读者信息(类别)读者类别信息读者类别信息读者查询条件1层图——对2.0的分解1层图——对3.0的分解2层图(底层图)——对3.2的分解(1)管理员借还(还)书信息罚款信息3.2.2过期罚款管理3.2.3图书丢失管理罚款数过期信息丢失信息3.2.1还书审查借阅信息表借阅信息读者信息表借阅信息表还书信息还(丢)书信息图书信息表3.2.4更新还书信息图书基本信息还书信息还(丢)书信息读者基本信息2层图(底层图)——对3.2的分解(2)管理员读者信息表借阅信息表借还(还)书信息还书信息还(丢)书信息图书信息表罚款单3.2.2过期罚款管理3.2.3图书丢失管理罚款数过期信息罚款数丢失信息3.2.1还书审查3.2.4更新借阅记录3.2.5更新读者信息3.2.6更新图书信息图书基本信息还书信息借/还书信息借/还书信息借/还(丢)书信息借阅信息表借阅信息读者基本信息总结:画分层数据流图的步骤1.画系统的输入和输出2.画系统内部3.画加工内部4.重复第3步,直至每个尚未分解的加工都足够简单(即不必再分解)绘制数据流程图的规则Interface1Interface2A对于源点/宿点:数据不能直接从源点移动到宿点。必须由加工移动数据;否则该数据流不在DFD上出现;源点/宿点的标签时名词短语;Interface1Interface2AProcessB正确:绘制数据流程图的规则对于加工:不存在只有输出的加工处理,如果只有输出,那它必定是一个源点;不存在只有输入的加工处理,如果只有输入,那它必定是一个宿点;加工处理的标签是动词短语。ProcessBAProcessABProcessABC对于文件(数据存储):数据不能从一个文件直接移到另一个文件,数据必须由加工移动;数据不能直接从外部源点移动到文件;数据不能直接从文件移动到外部宿点;文件标签是名词短语。绘制数据流程图的规则DataStore1DataStore2BDataStore1DataStore2AProcessBInterface1DataStore1AInterface1DataStore1AProcessB绘制数据流程图的规则对于数据流:一个数据流在符号之间的流动是单向的。若是双向移动,应用两个单独的箭头表示。数据流中分叉意味着完全相同的数据从一个共同的位置转向两个或多个不同的加工、文件或外部实体。数据流不能直接回到它离开的同一个加工。另外必须至少有一个加工操作该数据流、产生另外的数据流和最初的数据流返回给开始的加工。到达文件的数据流意味着更新(增、删、改)。离开文件的数据流意味着检索或使用。数据流的标签是名词短语。在同一箭头上所有流作为一个包一起移动时,可以在一个箭头上出现多个数据流名词短语。Interface1Interface2AProcessDataStore1Process1Process2Process3ABProcess2AInterface1Interface2AProcessBProcessABDataStore1Process1Process2Process3AAProcess1Process2Process3AABAC分层数据流图的审查检查图中是否存在错误或不合理(不理想)的部分一致性:分层DFD中不存在矛盾和冲突完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素其他需要注意的问题(1)分层数据流图的一致性父图与子图平衡任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致数据守恒一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生多余的数据流:加工未使用其输入数据流中的某些数据项局部文件一个加工的输出数据流不能与该加工的输入数据流同名父图与子图不平衡的实例加工2的输入数据流有M和N,输出数据流是T而子图(右图)边界上的输入数据流是N,输出数据流是S和T123ABCMNT2.12.22.3NPSTQ父图与子图平衡的实例注意:如果父图某加工的一个数据流,对应于子图中几个数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这个数据流,那么它们仍算是平衡的.e2.52.42.32.22.1b2b1acdb21acde(a)父图(b)子图数据不守恒的实例由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3自己产生,因此,加工2.3不满足数据守恒的条件考生名册2.5分析试题难度难度分析表2.4分类统计成绩分类统计表2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单由此可见:1.数据流的组成对DFD是有影响的2.构建DFD与建立数据字典应交替进行,以便于对分层DFD的校验加工的输出数据流不能与该加工的输入