第3章结构化分析与设计Chapter3StructuredAnalysisandDesign3.1概述3.1.1结构化分析与设计的由来1.瀑布模型的首次实践REQUIREMENTSANALYSISSYSTEMDESIGNPROCESSDESIGNCODINGTESTINGOPERATION&MAINTENANCE2.SA与SD的流程结构化分析(工具:DFD、PSPEC)→分析模型(分层DFD图)+SRS→结构化设计(工具:SC图)→初始设计模型(初始SC图)→最终设计模型(最终SC图)注:数据流图(DFD,DataFlowDiagram)加工说明(PSPEC,ProcessSPECification)软件需求规格说明书”(SRS,SoftwareRequirementSpecification)结构图(SC,StructureChart)3.基本任务与指导思想(1)结构化分析●SA有两个主要任务:①建立分析模型(BuildAnalysisModel)通过对问题及其环境的理解、分析和综合,建立分析模型。该模型包括问题所涉及的信息流、功能、性能、用户界面及设计约束等,它是形成需求说明书、进行软件设计的基础。②编写需求规格说明书(SRS)在完全弄清用户对软件系统的确切要求的基础上,用“需求规格说明书”(SRS)把用户的需求表达出来。需求规格说明书为开发人员和用户提供软件开发完成时质量评价的依据。●SRS应该具有准确性;●SRS应该防止二义性;●SRS应该直观、易读、易于修改。●TheSRShavesomecharacteristics.–Correct–Consistent–Un-ambiguity–Feasible–Testable●需求规格说明书的特征:1、正确性。2、一致性:文档前后有无冲突?3、需求是无二义的吗?涉众的理解是一致的。4、可行性:需求是否可行?解决方案是否存在?5、可测试性:需求是可测试的。③SA的主要指导思想●抽象与分解(Abstractionanddecomposition)抽象(Abstraction)是控制复杂性的基本策略之一。在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。在软件需求分析阶段,在最高抽象级别上,用“做什么”来描述问题。然后不断具体化(分解)。抽象的层次愈低,呈现的细节愈多。SA法概述分解:对于一个复杂的系统,为了将复杂性降低到可以掌握的程度,可以把大问题分解成若干小问题,然后分别解决(如右图)。一、SA法的基本思想结构化分析方法的基本思想是“分解”和“抽象”。抽象:分解可以分层进行,即先考虑问题最本质的属性,暂把细节略去,以后再逐层添加细节,直至涉及到最详细的内容,这种用最本质的属性表示一个系统的方法就是“抽象”。1.11.21.3x2132.12.22.31.11.3软件工程9自顶向下地进行功能分解WW1W1.1W1.2W1.31、建立当前系统的“具体模型”。三、SA法的描述方法1、分层的数据流图2、数据词典3、描述加工逻辑的结构化语言、判定表及判定树二、SA法的步骤4、为了对目标系统做完整的描述,还需要考虑人机界面和其他一些问题。3、建立目标系统的逻辑模型。2、抽象出当前系统的逻辑模型。(2)结构化设计①软件设计分两个阶段完成:软件设计=总体设计+详细设计●总体设计(GeneralDesign;又称概要设计,PreliminaryDesign),进行总体结构设计和系统接口设计,把用数据流图(DFD)表示的系统分析模型转换为用结构图(StructureChart,SC)表示的系统结构模型。●详细设计(DetailDesign)用以确定各个软件组件(模块)的数据结构和操作(算法)。②SC图分两步完成:初始设计模型(初始SC图)→最终设计模型(最终SC图)初始SC图总体设计最终SC图软件设计详细设计:完成模块说明③软件设计的指导思想●分解与细化(DecompositionandRefinement)采用“自顶向下、逐步细化(Top-DownStepwiseRefinement)”的开发方法。软件工程13概要设计又称总体设计,基本任务将系统划分成模块结构形式;决定每个模块的功能;模块间的调用关系。主要产品:模块说明书:模块的组成及模块间的条用关系。模块的描述:功能、界面、过程、注释功能:模块的输入、输出及其功能界面:参数的传递关系过程:模块内部实现,在详细设计完成后补充进来注释:对模块的一些限制和约束。参加人员:高级设计人员。软件工程14详细设计基本概念基本任务:描述模块执行过程;局部数据组织;控制流和每一步具体加工要求及实现细节描述方式:图形描述:流程图、盒图、问题分析图语言描述:PDL表格描述:判定表参加人员:初级软件人员3.1.2SA模型的组成与描述例3.1教材销售系统第一步:通过对现实环境的调查研究,获取当前系统的具体模型(物理模型)。学生图3.1学生购买教材的当前系统模型(物理模型)购书申请张秘书购书发票王会计购书证明李出纳领书单赵保管学生书学生图3.2学生购买教材的逻辑模型(当前系统)购书单审查有效性购书发票开发票有效购书单开领书单领书单发书学生书第二步:分析需求,建立系统分析模型(逻辑模型),包括当前系统和目标系统模型。关注系统的功能,而不是执行功能的人或机构学生图3.3目标系统的逻辑模型购书单审查并开发票发票开领书单领书单发书学生书第三步:编写需求规格说明书。第四步:验证需求,完善和补充对目标系统的描述。通过目标系统的人-机界面,和用户一起确认目标系统功能;复审需求说明,补充迄今尚未考虑过的细节。学生图3.4改进了的目标系统逻辑模型购书单审查并开发票发票开领书单领书单学生无效书单●软件开发是要实现目标系统的物理模型。需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统“做什么”的问题。目标系统当前系统物理模型逻辑模型模型化抽象化物理模型逻辑模型具体化实例化导出怎么做做什么图3.5SA模型的组成实体关系图(E-R图)状态转换图(STD)数据流图(DFD)数据对象说明加工说明数据字典DD控制说明1.SA模型的组成●早期的(传统的)结构化分析模型是面向数据流的,采用“自顶向下、逐层分解”的分析策略,以数据字典(DD,DataDictionary)、数据流图(DFD,DataFlowDiagram)、和加工说明(PSPEC,ProcessSPECification)为主要工具,建立系统的逻辑模型(功能建模)。●扩充后的结构化分析模型,将建模技术扩展到数据建模和行为建模,以数据字典(DD,DataDictionary)、实体-联系图(Entity-RelationDiagram,E-R图)、状态-迁移图(StateTransformDiagram,STD)等为工具,从不同视点建立系统的分析模型。●本课程主要讲述传统的结构化分析模型2.SA模型的描述工具●传统的结构化分析采用3种描述工具:数据流图(DFD)、数据字典(DD)和加工说明(PSPEC)。(1)数据流图(DFD)①组成符号(数据流图中的4种图形元素)加工(Prosess):对数据流进行操作或变换数据源点或终点(又称外部实体:系统外的人员或组织)数据流(DataFlow):数据在系统内传播的路径数据文件(DataFile或DataStore):文件与加工之间的数据流可以不命名;从文件流出的数据流表示读文件或查询文件;流向文件的数据流表示写文件或修改文件。(2)DFD的性质:需求分析中,用分层的数据流图来表示。审查并开发票1开领书单2学生学生教材存量表购书单无效书单发票领书单各班学生用书表图3.7教材销售系统的数据流图软件工程26描述银行取款过程的数据流图②DFD的性质●DFD不能表示控制结构,如选择结构或循环结构。●在需求分析中,常常用一组DFD图由粗到细地表示不同级别上的功能模型,称之为分层数据流图。(2)数据字典(DD)数据字典的作用:对软件系统中的每个数据规定一个定义条目,以保持数据在系统中的一致性。出现在软件中的数据可分为3种情况:①只含一个数据的数据项;②由多个数据项组成的数据流;③数据文件。数据字典定义式中的符号符号含义举例=定义为+与x=a+b[...|...]或x=[a|b]{...}或m{...}n重复x={a},x=3{a}8(...)可选x=(a)..连结符x=1..9*¨¨¨*注释综合的例:x=[a|b]+c+(d)①数据流(条目):给出DFD中数据流的定义,列出该数据流的各组成数据项,通常写成公式的形状。例3.3发票=学号+姓名+{书号+单价+数量+总价}+书费合计对较长和较复杂的数据流,可分层次描述,使条目更清楚。如上述数据流“发票”可表示为:发票=(学号)+姓名+{发票行}+书费合计发票行=书号+单价+数量+总价②数据文件(条目):对数据文件的定义。例3.4文件名:各班学生用书表组成:{系编号+专业和班编号+年级+{书号}}也可写成公式的形状,如:各班学生用书表={系编号+专业和班编号+年级+{书号}}③数据项(条目):包含在数据流或数据文件中的数据项,一般都应在字典中设置相应的条目。例如:系编号=2{数字}2*二位数字,如01,12*年级=[F/M/J/S]*F:一年级(Freshman);M:二年级(sophoMore);J:三年级(Junior);S:四年级(Senior)*软件工程33存折格式软件工程34存折=户名+所号+帐号+开户日+性质+(印密)+1{存取行}50户名=2{字母}24所号=“001”..“999”帐号=“00000001”..“99999999”开户日=年+月+日性质=“1”..“6”注:“1”表示普通户,“5”表示工资户等印密=“0”注:印密在存折上不显示存取行=日期+(摘要)+支出+存入+余额+操作+复核(3)加工说明(条目):(ProcessSPECification,PSPEC)●对数据流图的每一个基本加工,必须有一个加工说明,其主要内容如下所示:(1)加工名;(2)加工编号;(3)输入数据流;(4)输出数据流;(5)加工逻辑;(6)执行频率。其中最重要的是加工逻辑。●加工逻辑描述基本加工如何把输入数据流变换为输出数据流的加工策略,而不需描述实现加工的细节。●加工逻辑通常采用结构化语言(StructuredLangauge)、判定表(DecisionTable)、或判定树(DecisionTree)作为描述工具。①结构化语言(StructuredLanguage)●是一种介于自然语言和形式化语言之间的语言。●结构化语言可使用顺序、选择、循环等控制结构,其中选择和循环结构可分为内外二层,外层有严格的语法,内层语法比较灵活,可以用自然语言来表示。●结构化语言的三种基本控制结构:–顺序结构–选择结构:if_then_else或switch_do;–循环结构:while_do或for_do或do_while。例3.6售书系统中“审查并开发票”的加工逻辑对购书单上的的每一个书号if(学生用书表中无此书号)then把书号写到出错通知上else按书号检索“教材存量表”,获得该书的单价和库存量if(库存量购书单上的数量)then进行缺书登记else将书号、单价、数量、总价等写入发票;更新“教材存量表”。软件工程39结构化语言特点:简单,易学,少二义性。不好处理组合条件。②判定表或判定树●判定表(DecisionTable)如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适。软件工程41判定表特点:可处理较复杂的组合条件,但不易理解.不易输入计算机。通常由四部分组成。条件框—条件定义。操作框—操作的定义。条件条目—各条件的取值及组合。操作条目—在各条件取值组合下所执行的操作。例如:对商店每天的营业额所收税率软件工程42例3.7某公司对推销员的奖励办法:(1)每周推销金额≤10000元,按预收货款是否超过50%,分别奖励推销额的6%或4%;(2)每周推