面向数据流的软件设计方法面向数据流的软件设计方法软件工程导论之2010-12-182前言前言�软件设计基础知识�软件的需求分析及其需求规格说明书(SRS)�软件的SRS-软件设计信息�面向数据流的设计方法:提供了方法和策略2010-12-183本讲内容本讲内容1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-184输入流输出流变换流时间外部表示内部表示信息订票员订票员预定机票准备机票记帐订票单航班目录航班号航班费用帐单机票记帐数据库帐目面向数据流设计基本概念和过程面向数据流设计基本概念和过程�前提–经过评审后的需求模型--数据流图2010-12-185数据流的类型数据流的类型�变换流–信息通常以“外部世界”所具有的形式进入系统,经过处理后,又以这种形式离开系统输入流输出流变换流时间外部表示内部表示信息订票员订票员预定机票准备机票记帐订票单航班目录航班号航班费用帐单机票记帐数据库帐目2010-12-186事务处理中心动作路径事务事务型的数据流图事务型的数据流图�数据沿输入通道到达一个转换,该转换根据输入流类型和特征在若干动作序列中选择一条来执行–输入数据(事务)–具有一个转换(事务中心)–一组动作执行路径2010-12-187数据流图类型的特点数据流图类型的特点�实际上所有的数据流图都是变换流,事务流是变换流的一种特殊形式�为什么要将事务型的数据流图独立出来考虑?�大多数系统的数据流途中,事务流和变换流往往交织在一起2010-12-188aaaabbbbccccddddeeeeqqqqrrrrsssspppp事务处理中心混合型数据流图混合型数据流图2010-12-189面向数据流的软件设计过程面向数据流的软件设计过程�面向数据流的设计方法的主要过程–确定数据流的类型:变换流还是事务流–划定流界–将数据流图转换为软件结构–通过设计复审和启发式策略精化所得到软件结构2010-12-1810流类型确定事务中心和动作路径映射为事务结构确定输入和输出流界映射为变换结构利用启发式策略精化设计描述接口和数据设计复审详细设计精化数据流图事务流变换流变换分析法事务分析法有问题2010-12-1811本讲内容本讲内容1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-1812面向数据流的软件设计方法变换型数据流图软件总体结构变换分析方法变换分析方法�基本思想–通过一系列的设计步骤,将变换型的数据流图映射为软件结构–输入:SRS(数据流图、数据字典、小说明)–输出:软件总体结构2010-12-1813步骤步骤1.1.1.1.1.1.1.1.复审基本系统模型复审基本系统模型�什么是基本系统模型–基本系统模型即SRS中的顶级数据流图�为什么需要对基本系统模型进行复审–对系统规格说明书和SRS进行评估,以确保系统的输入和输出数据符合实际2010-12-1814步骤步骤2.2.2.2.2.2.2.2.复审和精化数据流图复审和精化数据流图�为什么需要复审和精化数据流图–确保DFD给出目标系统正确的逻辑模型–以获得足够详细的DFD–确保DFD中每个转换代表一个规模适中、相对独立的子功能2010-12-1815步骤步骤3.3.3.3.3.3.3.3.确定数据流图的类型确定数据流图的类型�信息流都可用变换流表示,但是如果有明显的事务流特征,则还应采用事务流的映射方法�设计人员负责判定在数据流图中占主导地位的信息流是变换流还是事务流2010-12-1816划分因人而异,在一般情况下有点出入对整个目标软件系统的影响不是很大步骤步骤4.4.4.4.4.4.4.4.划分输入流、输出流边界划分输入流、输出流边界�输入流处理部分�变换中心�输出流处理部分输入流输出流变换流时间外部表示内部表示信息2010-12-1817IIIIDDDDAAAACCCCEEEEFFFFGGGGHHHHBBBBJJJJ输出流输入流变换流划分流界例子划分流界例子2010-12-1818步骤步骤5.5.5.5.5.5.5.5.执行一级分解执行一级分解�任务:导出三个层次结构的软件结构–底层模块:用于输入、输出和计算等基本功能–中间层模块:协调、控制底层模块的工作–高层模块:用于协调和控制所有的从属模块�原则–在确保完成系统功能并保持低耦合度、高内聚度的情况下尽可能的减少模块数目�一级分解的结果可以用层次图、结构图等来表示2010-12-1819主控模块输入流控制模块变换流控制模块输出流控制模块高层高层高层高层中间层中间层中间层中间层底层底层底层底层一级分解例子一级分解例子2010-12-1820步骤步骤6.6.6.6.6.6.6.6.执行二级分解执行二级分解�任务–把DFD中每个转换映射为软件结构中的模块�方法–从变换中心边界开始沿输入、输出通道向外移动,把输入、输出通道中的每个转换映射为软件结构中的一个模块–沿着输入流到输出流的方向移动,将每个转换映射为相应的模块�有必要为每一模块写简要的处理说明,包括:进出模块的信息,模块处理功能的陈述,有关的限制和约束IIIIDDDDAAAACCCCEEEEFFFFGGGGHHHHBBBBJJJJ主控模块输入流控制模块变换流控制模块输出流控制模块输出流输入流变换流BBBBDDDDAAAACCCCEEEEFFFFGGGGHIIIIJJJJ2010-12-1822步骤步骤7.7.7.7.7.7.7.7.精化软件结构改良软件质量精化软件结构改良软件质量�以“模块化”的思想,对软件结构中的模块进行拆并,以追求高内聚、低耦合、易实现、易测试、易维护的软件结构IIIIDDDDAAAACCCCEEEEFFFFGGGGHHHHBBBBJJJJ主控模块输入流控制模块变换流控制模块输出流控制模块输出流输入流变换流BBBBDDDDAAAACCCCEEEEFFFFGGGGHIIIIJJJJIIIIDDDDAAAACCCCEEEEFFFFGGGGHHHHBBBBJJJJ主控模块输入流控制模块变换流控制模块输出流输入流变换流BBBBDDDDAAAACCCCEEEEFFFFGGGGHIIIIJJJJ2010-12-1825本讲内容本讲内容1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-1826事务分析方法事务分析方法�当数据流具有明显的事务特征时,应该采用事务流的分析方法�基本步骤–步骤1.复审基本系统模型–步骤2.复审和精化数据流图–步骤3.确定数据流图的类型:变换流还是事务流2010-12-1827步骤步骤4.4.4.4.4.4.4.4.识别事务流各个组成部分识别事务流各个组成部分�把整个事务型DFD划分为以下三个部分–接受路径部分:接受事务的输入–事务处理中心–动作路径部分�判定在每一条动作路径上数据流的特征:变换流或者事务流2010-12-1828AAAABBBBCCCCDDDDEEEEQQQQRRRRSSSSPPPP事务处理中心接受路径部分动作路径部分事务型事务型DFDDFDDFDDFDDFDDFDDFDDFD划分例子划分例子2010-12-1829AAAABBBBCCCCDDDDEEEEQQQQRRRRPPPP总控模块输入控制模块CCCCCCCC1111CCCCnnnn一条动作路径事务处理中心散转步骤步骤5.5.5.5.5.5.5.5.把事务型把事务型DFDDFDDFDDFDDFDDFDDFDDFD映射为软件结构映射为软件结构2010-12-1830AAAABBBBCCCCDDDDEEEEQQQQRRRRPPPP总控模块BBBBQQQQCCCCCCCC1111PPPPAAAARRRR一条动作路径事务处理中心输入控制步骤步骤6.6.6.6.6.6.6.6.分解精化事务结构以及每个动分解精化事务结构以及每个动作路径作路径2010-12-1831步骤步骤7.7.7.7.7.7.7.7.精化初步软件结构精化初步软件结构AAAABBBBCCCCDDDDEEEEQQQQRRRRPPPP总控模块BBBBQQQQCCCCCCCC1111PPPPAAAARRRR一条动作路径事务处理中心输入控制2010-12-1832AAAABBBBCCCCDDDDEEEEQQQQRRRRPPPP总控模块BBBBQQQQCCCCCCCC1111PPPPAAAARRRR一条动作路径事务处理中心2010-12-1833本讲内容本讲内容1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-1834启发式设计策略启发式设计策略�改造软件结构,降低耦合度,提高内聚度–如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性–合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度2010-12-1835……应避免的结构期望结构减少扇出,追求高扇入减少扇出,追求高扇入�一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去2010-12-1836AAAAAAAABBBBCCCCDDDDEEEEFFFFAAAAAAAACCCCDDDDFFFFEEEEBBBB受EEEE中判定影响使任一模块的作用域在其控制域内使任一模块的作用域在其控制域内�作用域是指受模块内部判定影响的所有模块�控制域是指其所有的下属模块2010-12-1837其他启发式设计策略其他启发式设计策略�降低模块接口复杂度和冗余度,提高协调性–模块接口应尽可能简单并与模块功能相一致如:–Sort(Data;Number)----�Sort(Data)�模块功能可预测,避免对模块施加过多限制–模块的功能可预测是指输入恒定,则输出恒定�追求单入口、单出口的模块�为满足设计和可移植性要求,把某些软件用包封装起来2010-12-1838本讲内容本讲内容1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-1839设计优化原则设计优化原则�在先不考虑时间复杂度的情况下设计并精化软件结构�借用CASE工具模拟分析运行性能,定位低效率的部分�详细设计时对耗时的模块进行仔细的推敲,以减少模块的运行开销�用高级语言编写�对大量占用CPU资源的模块必要时用低级语言重新进行编码,以提高效率2010-12-1840本讲小结本讲小结1.基本概念和软件设计过程2.变换分析方法3.事务分析方法4.启发式设计策略5.设计优化原则2010-12-1841思考题思考题�你觉得在进行软件设计时,除了上述启发式设计策略和优化原则之外,还应考虑那些问题?2010-12-1842Q&AQ&AQ&AQ&AQ&AQ&AQ&AQ&AAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringAnIntroductiontoSoftwareEngineeringPractice,Practice,andPracticePractice,Practice,andPracticePractice,Practice,andPracticePractice,Practice,andPractice