第5章结构化分析与设计•一种面向数据流的传统软件开发方法•以数据流为中心构建软件的分析模型和设计模型•分为:–结构化分析–结构化设计–结构化程序设计内容摘要5.1结构化分析方法概述5.2数据流图5.3分层数据流图的审查5.4数据字典5.5描述基本加工的小说明5.6结构化设计概述5.7数据流图到软件体系结构的映射5.8初始结构图的改进5.1结构化分析方法概述1.抽象和分解•抽象:在每个抽象层次上忽略问题的内部复杂性,只关注整个问题与外界的联系从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出•分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止。将系统不断分解为子系统、模块…•随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)•结构化方法就是采用自顶向下逐层分解的思想进行分析建模,充分体现了分解和抽象的原则2.42.32.22.12.42.32.22.12.42.32.42.42.32.32.22.12.22.22.12.12131.31.21.11.31.21.11.31.31.21.21.11.1X顶层图0层图1层图图1图2人事档案管理系统2结构化分析过程获得当前系统的物理模型获得当前系统的逻辑模型建立目标系统的逻辑模型补充结构化分析模型包括三部分•数据流图和加工规约•状态转换图和控制规约•实体关系图和数据对象描述以上三个部分都与数据字典的定义有关3结构化分析模型的描述形式实体-关系图数据流图状态转换图数据字典核心,它包含了软件使用和产生所有数据的描述功能建模,描述系统的数据加工过程数据建模,描述数据字典中数据之间的关系行为建模,描述系统接收外部事件以及响应5.2数据流图•数据流图(DFD):描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模。5.2.1数据流图的图形表示1.基本图形元素数据流:由一组固定成分的数据组成,代表数据的流动方向加工:描述了输入数据流到输出数据流的变换文件:用于保存数据结果,如文件、数据库等源或宿:存在于系统之外的人员或组织,表示系统输入数据的来源和输出数据的去向数据流•每个数据流用由一组固定成分的数据组成并拥有一个定义明确的名字标识•数据流的流向–从一个加工流向另一个加工–从加工流向文件(写文件),不必命名–从文件流向加工(读文件),不必命名–从源流向加工–从加工流向宿加工•加工:描述输入数据流到输出数据流的变换–每个加工用一个定义明确的名字标识–至少有一个输入数据流和一个输出流文件•文件:保存数据信息的外部单元-每个文件用一个定义明确的名字标识,由加工进行读写-数据流流入文件表示写,流出表示读,双向箭头表示修改-文件也可以用数据库系统等实现源或宿•存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,因此也称为源点和终点•源或宿用相同的图形符号表示–当数据流从该符号流出时表示是源–当数据流流向该符号时表示是宿–当两者皆有时表示既是源又是宿•讨论:图书订购系统业务流程1.客户订购2.收费3.库存修改4.发货•图书订购系统业务流程1.客户订购2.核查并修改库存3.收费4.发书示例图5.4:图书订购系统DFD图书库存入库单图书代理商书库管理收费制作财务报表财务报表经理帐务数据库制作发书单图书订购核准的订购单发书单订购单顾客顾客收费数据帐单2.数据流图的扩充符号•描述一个加工的多个数据流之间的关系–星号(*):与•所有输入数据流同时存在时,才能进行加工•加工结束后同时产生所有输出数据流–加号(+):或•至少存在一个输入数据流就进行加工•加工结束后至少产生一个输出数据流–异或(⊕):“异或”(互斥)•必须存在且仅存在一个输入数据流时,才能进行加工•加工结束后产生且仅产生一个输出数据流3.数据流图的层次结构•根据自顶向下逐层分解的思想将数据流图画成层次结构•每个层次画在独立的数据流图中,加工个数可大致控制在“7加减2”的范围中,从而构成一套分层数据流图•一套图•将上层图(父图)中的某个加工逐个分解,加工x分解后记为图x•图x中的加工编号为x.1,x.2…•一张图,一个加工,代表整个系统•描述系统与源或宿之间的数据流分解•一张图,分解顶层加工•分解后加工编号为1,2,3…分解•加工不能再被分解中间层图顶层图0层图1层图底层图...顶层图0层图(加工1,2,3)图1(加工1.1,1.2)图2(加工2.1)图3(加工3.1,3.2)图1.1(加工1.1.1,1.1.2)图1.2(加工1.2.1,1.2.2,1.2.3)•分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试•考试的合格标准将根据每年的考试成绩由考试中心确定•考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中5.2.2分层数据流图的画法简化的资格和水平考试的考务处理系统功能需求•1.对考生送来的报名单进行检查•2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站•3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者•4.制作考生通知单送给考生•5.进行成绩分类统计和试题难度分析,产生统计分析表送给考试中心部分数据流的组成•报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址•正式报名单=准考证号+报名单•准考证=地区+序号+姓名+准考证号+考试级别+考场•考生名单={准考证号+考试级别}其中{w}表示w重复多次•考生名册=正式报名单•统计分析表=分类统计表+难度分析表•考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志1.系统的输入输出(顶层图)•在需求中出现的人员或部门考生、阅卷站和考试中心•顶层图唯一的加工是考务处理系统•源(宿)与加工之间的输入/输出考务处理系统考试中心考生阅卷站报名单准考证考生名单成绩清单考生通知单合格标准统计分析表确定源或宿:加工:确定数据流:图5.5考务处理系统顶层图考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表2.系统内部(0层图)•将顶层图中的加工分解成若干个子加工(1)确定加工–根据功能分解来确定加工将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解–根据业务处理流程确定加工分析父图中待分解加工的业务处理流程,业务流程中的每一步都可能是一个子加工–注意:在业务流程中数据变化的地方,应该存在一个加工考务处理系统0层图使用功能分解,将分解为两个加工:考试报名、统计成绩考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表1考试报名2统计成绩考务处理系统顶层图加工分解(2)确定数据流–父图中加工的输入/输出数据流都是且仅是子图边界上的输入/输出数据流–分解后的子加工之间应增添相应的新数据流表示加工过程中的中间数据–如果某些中间数据需要保存以备后用,那么可以成为流向文件的数据流考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表1考试报名2统计成绩考务处理系统顶层图加工分解考务处理系统0层图考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单考生名单1.确定各子加工的边界数据流2.确定子加工之间的数据流(3)确定文件–在分解后的子图中,可以将需要保存的中间数据组成一个新的文件–首次出现的文件至少应有一个加工写入,另一个加工读取–如果被分解的加工有读写文件的数据流,则相应的文件和数据流都应画在子图中(4)确定源和宿–0层图和其它子图中通常不必画出源和宿–为了避免数据流交叉,可以将一个源或宿重复画在一张图的不同位置考务处理系统0层图考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单考生名单•复习1.结构化方法的基本思想:自顶向下逐层分解2.结构化方法的步骤:结构化分析,结构化设计,结构化程序设计3.结构化分析模型包括:•数据流图和加工规约•状态转换图和控制规约•实体关系图和数据对象描述•数据字典4.数据流图:描述输入数据流到输出数据流的变换过程,用于对系统的功能建模。5.组成DFD的元素:数据流,加工,文件,源或宿6.分层数据流图顶层图0层图(加工1,2,3)图1(加工1.1,1.2)图2(加工2.1)图3(加工3.1,3.2)图1.1(加工1.1.1,1.1.2)图1.2(加工1.2.1,1.2.2,1.2.3)考务处理系统顶层图考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表确定源和宿,确定加工,确定数据流考务处理系统0层图合格标准考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表考生通知单错误成绩清单成绩清单考生名单1.确定子加工2.确定各子加工的边界数据流3.确定文件4.确定子加工之间的数据流3.加工内部(1…n层图)复杂的加工可以继续分解成1张子图分解方法1.确定子加工2.将父加工的数据流作为边界流分配给子加工3.确定子加工新增加的源或宿4.确定子加工新增加的文件5.确定新增的数据流•将0层图中加工1(考试报名)分解–相关的业务流程:首先检查报名单,然后编准考证号,并产生准考证,最后产生考生名单和考生名册(文件)考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单考生名单0层图图1:考务处理系统加工1子图•将加工1分解为3个子加工:检查报名单、编准考证号、登记考生•确定子加工边界数据流•在分解中没有新的文件产生•确定子加工之间的数据流:“合格报名单”和“正式报名单”1.3登记考生考生名单1.2编准考证号准考证正式报名单1.1检查报名单合格报名单报名单不合格报名单考生名册考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单考生名单图2:考务处理系统加工2子图业务流程:•检查阅卷站送来的成绩清单,并根据考试中心制订的合格标准审定合格者•制作考生通知单送给考生•进行成绩分类统计和试题难度分析,产生统计分析表图2考务处理系统加工2子图2.5分析试题难度难度分析表2.4分类统计成绩分类统计表考生名册2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单考务处理系统顶层图考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表考务处理系统0层图考生名册1考试报名报名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单考生名单1层图:图1考务处理系统加工1子图1.3登记考生考生名单1.2编准考证号准考证正式报名单1.1检查报名单合格报名单报名单不合格报名单考生名册1层图:图2考务处理系统加工2子图2.5分析试题难度难度分析表2.4分类统计成绩分类统计表考生名册2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单总结:画分层数据流图的步骤•1.确定源或宿,画出顶层图•2.确定子加工•3.确定子加工的边界数据流•4.确定子加工新产生的文件•5.确定子加工之间和子加工与新文件之间的数据流•6.重复第2步,直至每个尚未分解的加工都足够简单•构造分层DFD图与建立数据字典同时进行,在画DFD时应给出每个数据流和文件的组成