1、程序模块程序模块测试编码系统设计信息域需求信息域需求功能与性功能与性能需求能需求数据设计数据设计过程设计过程设计结构设计结构设计组装好的有效的软件组装好的有效的软件CAD SOFTWARE TASKS user interaction task;2-D drawing creation task;graphics display task;drawing file management task;end.PROCEDURE:2-D drawing creation REPEAT UNTIL(drawing creation task terminates)DO WHILE(digitizer
2、interaction occurs)digitizer interface task;DETERMINE drawing request CASE;line:line drawing task;rectangle:rectangle drawing task;circle:circle drawing task;blue-print IS INSTANCE OF drawing;schematic IS INSTANCE OF drawing;c 软件体系结构软件体系结构n软件体系结构的三要素是程序构件(模块)的层次结构、构件之间交互的方式,以及数据的结构。构构 件件 特特 点点 和和 示示
3、 例例纯计算纯计算构件构件具有简单的输入具有简单的输入输出关系,没有运行状态的变化输出关系,没有运行状态的变化。例如,数值计算、过滤器(。例如,数值计算、过滤器(Filters)、转换器)、转换器(Transformers)等。)等。存储构存储构件件存放共享的、永久性的、结构化的数据。例如,存放共享的、永久性的、结构化的数据。例如,数据库、文件、符号表、超文本等。数据库、文件、符号表、超文本等。管理构管理构件件执行的操作与运行状态紧密耦合。例如,抽象数执行的操作与运行状态紧密耦合。例如,抽象数据类型(据类型(ADT)、面向对象系统中的对象、许多)、面向对象系统中的对象、许多服务器(服务器(Se
4、rvers)等。)等。控制构控制构件件管理其它构件运行的时间、时机及次序。例如,管理其它构件运行的时间、时机及次序。例如,调度器、同步器等。调度器、同步器等。链接构链接构件件在实体之间传递信息。例如,通信机制、用户界在实体之间传递信息。例如,通信机制、用户界面等。面等。构件构件连连 接接 特特 点点 与与 示示 例例过程调过程调用用在某一个执行路径中传递执行指针。例如,普通过在某一个执行路径中传递执行指针。例如,普通过程调用(同一个命名空间)、远程过程调用(不同程调用(同一个命名空间)、远程过程调用(不同的命名空间)。的命名空间)。数据流数据流相互独立的处理通过数据流进行交互,在得到数据相互独
5、立的处理通过数据流进行交互,在得到数据的同时被赋予控制权限。例如,的同时被赋予控制权限。例如,UNIXUNIX系统中的管道系统中的管道(pipespipes)。)。间接激间接激活活处理是因事件的发生而激活的,在处理之间没有直处理是因事件的发生而激活的,在处理之间没有直接的交互。例如,事件驱动系统、自动垃圾回收等接的交互。例如,事件驱动系统、自动垃圾回收等。消息传消息传递递相互独立的处理之间有明确的交互,通过显式的离相互独立的处理之间有明确的交互,通过显式的离散方式的数据传递。这种传递可以是同步的,也可散方式的数据传递。这种传递可以是同步的,也可以是异步的。例如,以是异步的。例如,TCPIPTC
6、PIP。共享数共享数据据构件们通过同一个数据空间进行并发的操作。例如构件们通过同一个数据空间进行并发的操作。例如,多用户数据库、数据黑板系统。,多用户数据库、数据黑板系统。软件系统常出现下列体系结构软件系统常出现下列体系结构 n数据流系统:这种结构中的每一个组成成份这种结构中的每一个组成成份都有一套输入和输出数据,都依都有一套输入和输出数据,都依输入数据输入数据处理处理输出结果输出结果的方式工作。进行数据变换的方式工作。进行数据变换的构件叫做过滤器,把数据从一个过滤器的的构件叫做过滤器,把数据从一个过滤器的输出导入到另一个过滤器的输入,就叫做管输出导入到另一个过滤器的输入,就叫做管道。各个过滤
7、器相互独立,每一个过滤器对道。各个过滤器相互独立,每一个过滤器对它的上游或下游的过滤器的情况是不知道的。它的上游或下游的过滤器的情况是不知道的。这种结构的优点是:数据流程设计明确,直这种结构的优点是:数据流程设计明确,直接支持复用,系统容易维护和升级,可以进接支持复用,系统容易维护和升级,可以进行某些性能分析(如流量、死锁等),容易行某些性能分析(如流量、死锁等),容易支持并行计算。支持并行计算。n调用返回系统:在层次结构中,每在层次结构中,每一层都只与上下相邻的两层通信。每一层都只与上下相邻的两层通信。每一层在利用下层基础服务的条件下,一层在利用下层基础服务的条件下,为上层提供服务。最典型的
8、例子就是为上层提供服务。最典型的例子就是OSI7OSI7层网络协议。这种结构的优点是:层网络协议。这种结构的优点是:提供逐步抽象的编程支持,支持复用提供逐步抽象的编程支持,支持复用及系统升级。缺点是:不是所有的系及系统升级。缺点是:不是所有的系统都适合于建成层次结构,不能提供统都适合于建成层次结构,不能提供最佳性能。最佳性能。n独立构件系统:这种结构的特点是事这种结构的特点是事件的发出者不必知道对该事件的具体件的发出者不必知道对该事件的具体处理过程。它的优点是:提供了强大处理过程。它的优点是:提供了强大的可复用性支持。如事件驱动系统。的可复用性支持。如事件驱动系统。n数据为中心的系统:数据库5
9、.4 描绘软件结构的图形工具描绘软件结构的图形工具n层次图:描述软件的层次结层次图:描述软件的层次结构和模块调用关系。构和模块调用关系。n层次图和层次方框图的区别层次图和层次方框图的区别nHIPOHIPO图图结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上发展起来的。利用映射把数据流图变换成软件结构。而前面学过的系统流程图,重点在描述物理系统的构成,状态转换图是表示状态转换的,ER图是描述数据对象关系的。该方法实施的要点是:建立数据流的类型:变换流?事务流?指明流的边界。即输入、处理、输出的界限。将数据流图映射到程序结构。n模块功能的完善化模块功能的完善化 n消除重
10、复功能消除重复功能 n模块的作用范围应在控制范围之内模块的作用范围应在控制范围之内 n尽可能减少高扇出结构尽可能减少高扇出结构 n避免或减少使用病态联接避免或减少使用病态联接 n模块的大小要适中模块的大小要适中 n设计功能可预测的模块设计功能可预测的模块 n软件包应满足设计约束和可移植性软件包应满足设计约束和可移植性 n使用黑箱技术使用黑箱技术n停止模块功能分解的原则停止模块功能分解的原则 盒图特点盒图特点n功能域明确,即一个特定控制结构的作用域明确。n盒图没有箭头,因此不允许随意转移控制。n容易确定局部和全局数据的作用域。n容易表现嵌套关系,也可以表示模块的层次结构。PAD的特点的特点n使用
11、表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序n它描述的程序结构清楚,图中最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数。n它是树型结构的图形,程序从图中最左竖线上端的节点开始执行,自上向下,从左到右n既可表示逻辑结构,也可描述数据结构n支持逐步求精的方法。判断树判断树n当判断表中的数据元素增加时,判断表的简洁程度下降n判断树比判断表更直观,但不如判断树简洁n分支持续对最终画出的判断树有影响。n也是二分支结构PROCEDURE spellcheck IS BEGIN
12、split document into single words lood up words in dictionary display words which are not in dictionary create a new dictionary END spellcheckPROCEDURE spellcheckBEGIN-*split document into single wordsLOOP get next word add word to word list in sortorder EXIT WHEN all words processedEND LOOP -*look u
13、p words in dictionaryLOOP get word from word listIF word not in dictionary THEN -*display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processedEND LOOP-*creat
14、e a new words dictionary dictionary:merge dictionary and good word listEND spellcheckHIPO图图nHIPO最初只用做文档编写的格式要求,随后发展成比较有名的软件设计手段。nHIPO图采用功能框图和PDL来描述程序逻辑,它由两部分组成:可视目录表和IPO图。可视目录表给出程序的层次关系,IPO图则为程序各部分提供具体的工作细节。n 可视目录表可视目录表:由体系框图、图例、描述说:由体系框图、图例、描述说明三部分组成。明三部分组成。n体系框图。又称层次图(体系框图。又称层次图(H图),是可视目录图),是可视目录表
15、的主体,用它表明各个功能的隶属关系。表的主体,用它表明各个功能的隶属关系。它是自顶向下逐层分解得到的,是一个树形它是自顶向下逐层分解得到的,是一个树形结构。它的顶层是整个系统的名称和系统的结构。它的顶层是整个系统的名称和系统的概括功能说明;第二层把系统的功能展开,概括功能说明;第二层把系统的功能展开,分成了几个框;第二层功能进一步分解,就分成了几个框;第二层功能进一步分解,就得到了第三层、第四层,得到了第三层、第四层,直到最后一层。,直到最后一层。每个框内都应有一个名字,用以标识它的功每个框内都应有一个名字,用以标识它的功能。还应有一个编号,以记录它所在的层次能。还应有一个编号,以记录它所在的
16、层次及在该层次的位置。及在该层次的位置。n图例。每一套图例。每一套HIPO图都应当有一个图图都应当有一个图例,即图形符号说明。附上图例,不管例,即图形符号说明。附上图例,不管人们在什么时侯阅读它都能对其符号的人们在什么时侯阅读它都能对其符号的意义一目了然。意义一目了然。n描述说明。它是对层次图中每一框的补描述说明。它是对层次图中每一框的补充说明,在必须说明时才用,所以它是充说明,在必须说明时才用,所以它是可选的。描述说明可以使用自然语言。可选的。描述说明可以使用自然语言。盘存销售系统工作流程图 n IPO图图 :IPO图为层次图中每一功能框图为层次图中每一功能框详细地指明输入、处理及输出。通常
17、,详细地指明输入、处理及输出。通常,IPO图有固定的格式,图中处理操作部分总是列图有固定的格式,图中处理操作部分总是列在中间,输入和输出部分分别在其左边和右在中间,输入和输出部分分别在其左边和右边。由于某些细节很难在一张边。由于某些细节很难在一张IPO图中表达图中表达清楚,常常把清楚,常常把IPO图又分为两部分,简单概图又分为两部分,简单概括的称为概要括的称为概要IPO图,细致具体一些的称为图,细致具体一些的称为详细详细IPO图。图。n概要概要IPOIPO图用于表达对一个系统,或对其中图用于表达对一个系统,或对其中某一个子系统功能的概略表达,指明在完成某一个子系统功能的概略表达,指明在完成某一
18、功能框规定的功能时需要哪些输入,哪某一功能框规定的功能时需要哪些输入,哪些操作和哪些输出。些操作和哪些输出。对应对应H图上图上1.1.0框的概要框的概要IPO图图 n在概要在概要IPO图中,没有指明输入图中,没有指明输入处理处理输出三者之间的关系,输出三者之间的关系,用它来进行下一用它来进行下一步的设计是不可能的。步的设计是不可能的。n故需要使用详细故需要使用详细IPO 图以指明输入图以指明输入处处理理输出三者之间的关系,其图形与概输出三者之间的关系,其图形与概要要IPO图一样,但输入、输出最好用具体图一样,但输入、输出最好用具体的介质和设备类型的图形表示。下图是的介质和设备类型的图形表示。下
19、图是销售盘存系统中对应于销售盘存系统中对应于1.1.2框的一张框的一张详细详细IPO图。图。利用利用HIPO进行迭代式细化设计进行迭代式细化设计 在软件设计时,解决设计问题通常需要经历在软件设计时,解决设计问题通常需要经历一个认识逐步发展的过程,并且对一些问题一个认识逐步发展的过程,并且对一些问题还要经过反复的考虑才可能达到比较满意的还要经过反复的考虑才可能达到比较满意的设计效果。我们称此为迭代式细化设计。设计效果。我们称此为迭代式细化设计。HIPO能很好地适应这一要求。下图是利用能很好地适应这一要求。下图是利用HIPO进行迭代式细化设计的示意图。从图进行迭代式细化设计的示意图。从图中可看到,
20、把可视目录表和中可看到,把可视目录表和IPO图结合起来,图结合起来,反复交替地使用它们,可使得设计工作逐步反复交替地使用它们,可使得设计工作逐步深化,最终取得完满的设计结果。其实这正深化,最终取得完满的设计结果。其实这正是自顶向下,逐步求精的结构化程序设计思是自顶向下,逐步求精的结构化程序设计思想。想。利用HIPO进行迭代式细化设计 nHIPO有自己的特点。首先,这一图形表有自己的特点。首先,这一图形表达方法容易看懂。其次,达方法容易看懂。其次,HIPO的适用范的适用范围很广。围很广。n事实上,画可视目录表就是与概要设计事实上,画可视目录表就是与概要设计密切相关的工作。密切相关的工作。n如果利
21、用它仅仅表达软件要达到的功能,如果利用它仅仅表达软件要达到的功能,则是需求分析中描述需求的很好的工具。则是需求分析中描述需求的很好的工具。n因为因为HIPO是在开发过程中的表达工具,是在开发过程中的表达工具,所以它又是开发文档的编制工具。开发所以它又是开发文档的编制工具。开发完成后,完成后,HIPO图就是很好的文档,而不图就是很好的文档,而不必在设计完成以后,专门补写文档。必在设计完成以后,专门补写文档。6.4 面向数据结构的设计面向数据结构的设计方法方法 Jackson方法方法 Jackson方法是一种典型的面向数据方法是一种典型的面向数据结构的分析与设计方法。早期的结构的分析与设计方法。早
22、期的Jackson方法用于小系统的设计,方法用于小系统的设计,称之为称之为Jackson结构程序设计方法,结构程序设计方法,简称简称JSP方法。它是按输入、输出方法。它是按输入、输出和内部信息的数据结构进行软件设和内部信息的数据结构进行软件设计的,即把数据结构的描述映射成计的,即把数据结构的描述映射成程序结构描述。程序结构描述。若数据结构有重复性,则对应程序一若数据结构有重复性,则对应程序一定有循环控制结构;定有循环控制结构;若数据结构具有选择性,则对应程序若数据结构具有选择性,则对应程序一定需要有判定控制结构,以此揭一定需要有判定控制结构,以此揭示数据结构和程序结构之间的内在示数据结构和程序
23、结构之间的内在关系,设计出反映数据结构的程序关系,设计出反映数据结构的程序结构。结构。JSP方法的的三步曲是信息方法的的三步曲是信息 数据数据结构结构 程序结构,这三步曲减少了设程序结构,这三步曲减少了设计决策上的盲目性。计决策上的盲目性。但是,当把但是,当把JSP方法用于大系统设方法用于大系统设计时,就会出现大量复杂的难以对付计时,就会出现大量复杂的难以对付的结构冲突。的结构冲突。因此,促使因此,促使M.J.Jackson提出了提出了JSD方法,即方法,即Jackson系统开发方法。系统开发方法。(1)JSD方法的步骤方法的步骤nJackson系统开发方法把分析的重点放在系统开发方法把分析的
24、重点放在构造与系统相关联的现实世界,并建立现构造与系统相关联的现实世界,并建立现实世界的信息域的模型上。它实际上是支实世界的信息域的模型上。它实际上是支持软件分析与设计的一组连续的技术步骤。持软件分析与设计的一组连续的技术步骤。而且,而且,JSD方法的最终目标是生成软件的方法的最终目标是生成软件的过程性描述,没有特别考虑程序模块化结过程性描述,没有特别考虑程序模块化结构,模块只是作为过程的副产品而出现,构,模块只是作为过程的副产品而出现,没有特别强调模块独立性。使用没有特别强调模块独立性。使用JSD方法方法的步骤如下的步骤如下:n 实体动作分析:从问题的简单描述中,选出软实体动作分析:从问题的
25、简单描述中,选出软件系统要产生和运用的实体件系统要产生和运用的实体(人、物或组织人、物或组织),以,以及现实世界作用于实体上的动作及现实世界作用于实体上的动作(事件事件)。实体从。实体从名词中选出,动作从动词中选出。当然,只有与名词中选出,动作从动词中选出。当然,只有与问题求解直接有关的实体和动作才能被选出做进问题求解直接有关的实体和动作才能被选出做进一步的分析。一步的分析。n 实体结构分析:把作用于实体的动作或由实体实体结构分析:把作用于实体的动作或由实体执行的动作,按时间发生的先后次序排序,并用执行的动作,按时间发生的先后次序排序,并用一个层状的一个层状的Jackson结构图表示。结构图表
26、示。n 定义初始模型:把实体和动作表示成一个过程定义初始模型:把实体和动作表示成一个过程性的模型,定义模型与现实世界的联系。模型系性的模型,定义模型与现实世界的联系。模型系统的规格说明可用系统规格说明图来表示。统的规格说明可用系统规格说明图来表示。功能描述:详细说明与已定义的动作功能描述:详细说明与已定义的动作相对应的功能。相对应的功能。决定系统时间特性:对进程调度特性决定系统时间特性:对进程调度特性进行评价和说明。进行评价和说明。实现:设计组成系统的硬件和软件。实现:设计组成系统的硬件和软件。JSD方法的前三步属于需求分析阶段,方法的前三步属于需求分析阶段,后三步属于软件设计阶段。后三步属于
27、软件设计阶段。(2)Jackson程序设计方法程序设计方法JSP nJSP的本质就是:的本质就是:“问题应当被分解问题应当被分解为可以用三种结构形式表示的构件的为可以用三种结构形式表示的构件的层次结构。层次结构。”n Jackson所说的所说的“结构形式结构形式”就是指就是指顺序、选择和重复,实际上,它们就顺序、选择和重复,实际上,它们就是过程性构造,并成为结构化程序设是过程性构造,并成为结构化程序设计方法基础。计方法基础。数据结构表示法数据结构表示法Jackson提出的数据结构表示有提出的数据结构表示有三种基本的构造类型三种基本的构造类型 数据结构组合表示数据结构组合表示 nJackson图
28、实质是对层次方框图的图实质是对层次方框图的一种细化。它和描绘软件结构的层一种细化。它和描绘软件结构的层次图有区别。次图有区别。nJackson图中的方框不代表模块,图中的方框不代表模块,Jackson图表现的是组成关系,即图表现的是组成关系,即一个方框中包含的操作仅仅由它下一个方框中包含的操作仅仅由它下层框中的那些操作组成,不表示调层框中的那些操作组成,不表示调用方法。用方法。n这也是这也是Jackson图和程序流程图,图和程序流程图,盒图,盒图,PAD图的区别。图的区别。下面用一个信用卡记账的例子具下面用一个信用卡记账的例子具体说明。体说明。信用卡记账系统的输入数据结构信用卡记账系统的输入数
29、据结构是两个实际的账册,它们对应的是两个实际的账册,它们对应的两个输入文件如图所示。两个输入文件如图所示。对应输入文件的输入数据结构在左侧。对应输入文件的输入数据结构在左侧。对应输入文件的输入数据结构在左侧。对应输入文件的输入数据结构在左侧。两个实际输入账册都按顾两个实际输入账册都按顾客号码进行登录,所以客号码进行登录,所以输入文件也是以顾客号输入文件也是以顾客号码组织记录的。码组织记录的。信用卡记账系统的输出记账报告信用卡记账系统的输出记账报告 根据输入和输出数据结构的根据输入和输出数据结构的对应关系建立的输出文件对应关系建立的输出文件 从层次性的输入和从层次性的输入和(或或)输输出数据结构
30、可以直接推导出程出数据结构可以直接推导出程序或进程的过程性表示。例如序或进程的过程性表示。例如从上图所示的输出文件的从上图所示的输出文件的Jackson数据结构图所导出的程数据结构图所导出的程序结构如下图所示。序结构如下图所示。n最后,利用最后,利用Jackson给出的三种图解来表示给出的三种图解来表示程序或进程的执行逻辑。这种图解类似于程程序或进程的执行逻辑。这种图解类似于程序设计语言,实际上它是一种伪码表示。三序设计语言,实际上它是一种伪码表示。三种基本控制结构的图解如下所示。种基本控制结构的图解如下所示。在给出程序的过程性描述时,还需要添加在给出程序的过程性描述时,还需要添加一些必要的可
31、执行操作。对于上例中一些必要的可执行操作。对于上例中“处处理顾客数据理顾客数据”部分,给出过程性描述如下:部分,给出过程性描述如下:PROCESS_CUST_DATA seq open PAY_FILE;open CUST_M_FILE;分别打开支付文件和顾客主文件分别打开支付文件和顾客主文件 PROCESS_CNO_GROUP iter until eof:PAY_FILE;处理顾客号码组处理顾客号码组 read PAY_FILE;读支付文件一个记录读支付文件一个记录 PROCESS_CNO;读顾客主文件一个记录,找老结余读顾客主文件一个记录,找老结余 PROCESS_PAY_RECORD
32、iter until end:CNO_GROUP;处理顾客号码组中每个支付记录处理顾客号码组中每个支付记录 write report line;写出报告行写出报告行 compute total payments;计算总支付额计算总支付额 read PAY_FILE;读支付文件下一个记录读支付文件下一个记录 PROCESS_PAY_RECORD end;一位顾客数据处理完一位顾客数据处理完 (3)结构冲突结构冲突 Jackson把结构冲突定义为三种类把结构冲突定义为三种类型。型。顺序冲突顺序冲突 顺序冲突是指在输入数据结构和顺序冲突是指在输入数据结构和输出数据结构中,输入数据与输出数据结构中,输
33、入数据与输出数据的顺序冲突。输出数据的顺序冲突。n例如,仓库存放多种零件例如,仓库存放多种零件P1,P2,每,每个零件的每次变动个零件的每次变动(收或发收或发)都有一张卡片做都有一张卡片做记录。库存管理系统的输入数据结构是一叠记录。库存管理系统的输入数据结构是一叠卡片组成的文件。文件包括许多零件组,每卡片组成的文件。文件包括许多零件组,每个零件组又包括许多卡片个零件组又包括许多卡片(变动记录变动记录),每张,每张卡片又分别可以是卡片又分别可以是“收收”或或“发发”,图,图4.22(b)。输出数据结构是月报表,见图。输出数据结构是月报表,见图4.22(a)。表中列出每种零件的净变化,一。表中列出
34、每种零件的净变化,一种零件的净变化占一行,见图种零件的净变化占一行,见图4.22(c)。月。月报表来自输入文件,所以它们之间有很好的报表来自输入文件,所以它们之间有很好的对应性。对应性。n月报表每一行的内容来自输入文件的每月报表每一行的内容来自输入文件的每一个零件组,行数与零件组个数相同,一个零件组,行数与零件组个数相同,排列顺序一致排列顺序一致(均按零件号递增次序排均按零件号递增次序排列列)。这样输入数据与输出数据在内容、。这样输入数据与输出数据在内容、数量、顺序上的对应性找到了,也就等数量、顺序上的对应性找到了,也就等于理解了用户所需加工要求,因而很容于理解了用户所需加工要求,因而很容易导
35、出对应的程序结构。易导出对应的程序结构。n如果卡片不是按零件组分组,而是按如果卡片不是按零件组分组,而是按“发发”或或“收收”的日期排列,这样输入的日期排列,这样输入数据结构与输出数据结构就找不到上述数据结构与输出数据结构就找不到上述的对应关系。这种情形就是的对应关系。这种情形就是“顺序冲顺序冲突突”。边界冲突边界冲突 在输入与输出数据结构中,虽然在输入与输出数据结构中,虽然输入数据与输出数据的顺序相同,输入数据与输出数据的顺序相同,但分解不一样。但分解不一样。多重穿插冲突多重穿插冲突在输入与输出数据结构中,输入数据在输入与输出数据结构中,输入数据与输出数据的顺序相同,而且处于与输出数据的顺序
36、相同,而且处于同一程序段中,就象绳索穿绕一样。同一程序段中,就象绳索穿绕一样。这些数据并行运行,同时在输入文这些数据并行运行,同时在输入文件中重叠在一起。件中重叠在一起。为了解决上述的结构冲突,为了解决上述的结构冲突,Jackson提出了定义中间数据结构来解决冲突的提出了定义中间数据结构来解决冲突的方法。它可归纳成以下方法。它可归纳成以下4点:点:利用数据结构图来定义输入数据结构的利用数据结构图来定义输入数据结构的特性;特性;将输入数据结构的元素分解,构造成中将输入数据结构的元素分解,构造成中间数据结构;间数据结构;描述输出数据结构的特性;描述输出数据结构的特性;根据中间数据结构,构造输出数据
37、结根据中间数据结构,构造输出数据结构构.这就需要两套程序结构,一个是把这就需要两套程序结构,一个是把输入数据结构转换成中间数据结构;另输入数据结构转换成中间数据结构;另一个是把中间数据结构转换成输出数据一个是把中间数据结构转换成输出数据结构。结构。Myers提出了一种叫做提出了一种叫做“程序变程序变换换”或或“多道穿插多道穿插”的方法,用以解决的方法,用以解决冲突。冲突。即设计两个子程序,它们既能单即设计两个子程序,它们既能单独执行,又能并发执行独执行,又能并发执行。这样,中间数这样,中间数据结构也可以不要,而使用一个单记录据结构也可以不要,而使用一个单记录缓冲区来代替它。缓冲区来代替它。例如
38、,用卡片按行输入一个矩阵文例如,用卡片按行输入一个矩阵文件,要求按列打印该矩阵,图件,要求按列打印该矩阵,图4.23(a)表表明这个例子的输入、输出数据结构。从明这个例子的输入、输出数据结构。从图中可见,卡片文件和打印文件之间存图中可见,卡片文件和打印文件之间存在着对应关系,但行和列的内容不符,在着对应关系,但行和列的内容不符,行选择和列选择的次序不同。因此,没行选择和列选择的次序不同。因此,没有办法从这个结构图上构造出相应的程有办法从这个结构图上构造出相应的程序结构。这就是所谓的结构冲突。序结构。这就是所谓的结构冲突。设计规格说明与设计评审设计规格说明与设计评审 软件设计规格说明的大纲如下表
39、软件设计规格说明的大纲如下表所示。每一个编号的段落描述了设所示。每一个编号的段落描述了设计模型的不同侧面。在设计人员细计模型的不同侧面。在设计人员细化他们的软件设计时,就可以逐步化他们的软件设计时,就可以逐步完成各章节内容的编写。完成各章节内容的编写。.工作范围工作范围 A.系统目标系统目标 B.运行环运行环境境 C.主要软件需求主要软件需求 D.设计约束设计约束限制限制.体系结构设计体系结构设计 A.数据流与控制流复数据流与控制流复审审 B.导出的程序结构导出的程序结构 C.功能与程序功能与程序交叉索引交叉索引.数据设计数据设计 A.数据对象与形成的数据数据对象与形成的数据结构结构 B.文件
40、和数据库结构文件和数据库结构 文件的逻文件的逻辑结构辑结构 文件逻辑记录描述文件逻辑记录描述 访问访问方式方式 C.全局数据全局数据 D.文件文件数据与程序数据与程序交叉索引交叉索引.接口设计接口设计 A.人机界面规格说明人机界面规格说明 B.人人机界面设计规则机界面设计规则 C.外部接口设计外部接口设计 外部数据接口外部数据接口 外部系统或设备外部系统或设备接口接口 D.内部接口设计规则内部接口设计规则.(每个模块的)过程设计(每个模块的)过程设计 A.处理与算处理与算法描述法描述 B.接口描述接口描述 C.设计语言设计语言(或其它或其它)描述描述 D.使用的模块使用的模块 E.内部程序逻辑
41、描内部程序逻辑描述述 F.注释注释约束约束限制限制.运行设计运行设计 A.运行模块组合运行模块组合 B.运行运行控制规则控制规则 C.运行时间安排运行时间安排.出错处理设计出错处理设计 A.出错处理信息出错处理信息 B.出错处理对策出错处理对策 设置后备设置后备 性能降级性能降级 恢复和再启动恢复和再启动.安全保密设计安全保密设计.需求需求设计交叉索引设计交叉索引.测试部分测试部分 A.测试方针测试方针 B.集成策略集成策略 C.特殊考虑特殊考虑 设计评审的内容设计评审的内容 n可追溯性:即分析该软件的系统结构、子系可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否复盖了所有已统
42、结构,确认该软件设计是否复盖了所有已确定的软件需求,软件每一成分是否可追溯确定的软件需求,软件每一成分是否可追溯到某一项需求。到某一项需求。n接口:即分析软件各部分之间的联系,确认接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内。模块作用范围是否在其控制范围之内。n风险:即确认该软件设计在现有技术条风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。件下和预算范围内是否能按时实现。n实用性:即确认该软件设
43、计对于需求的实用性:即确认该软件设计对于需求的解决方案是否实用。解决方案是否实用。n技术清晰度:即确认该软件设计是否以技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。一种易于翻译成代码的形式表达。n可维护性:从软件维护的角度出发,确可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维认该软件设计是否考虑了方便未来的维护。护。质量:即确认该软件设计是否表现出良质量:即确认该软件设计是否表现出良好的质量特征。好的质量特征。各种选择方案:看是否考虑过其它方案,各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。比较各种选择方案的标准是什么。限制:评估对该
44、软件的限制是否现实,限制:评估对该软件的限制是否现实,是否与需求一致。是否与需求一致。其它具体问题:对于文档、可测试性、其它具体问题:对于文档、可测试性、设计过程,设计过程,等等进行评估,等等进行评估 6.5 程序复杂程度的定量度量程序复杂程度的定量度量 详细设计阶段设计出的模块质量如何,详细设计阶段设计出的模块质量如何,可以由上节讲的设计评审来定性评价可以由上节讲的设计评审来定性评价,我们我们希望进一步定量度量软件的性质,目前很多希望进一步定量度量软件的性质,目前很多定量度量的方法还在研究之中。定量度量程定量度量的方法还在研究之中。定量度量程序复杂程度的方法很有价值:把程序的复杂序复杂程度的
45、方法很有价值:把程序的复杂程度乘以恰当常数即可估计出软件中错误的程度乘以恰当常数即可估计出软件中错误的数量以及软件开发需要用的工作量,定量度数量以及软件开发需要用的工作量,定量度量的结果可以比较量的结果可以比较2个不同设计的优劣。个不同设计的优劣。McCabe方法:根据程方法:根据程序控制流的复杂程度定量序控制流的复杂程度定量度量程序的复杂程度,这度量程序的复杂程度,这样度量出的结果称为程序样度量出的结果称为程序的环形复杂度。的环形复杂度。n为了突出表示控制流,人们通常使用流图为了突出表示控制流,人们通常使用流图(也称为程序图),流图是退化的程序流(也称为程序图),流图是退化的程序流程图,它仅
46、仅描述程序的控制流程,完全程图,它仅仅描述程序的控制流程,完全不表现对数据的具体操作以及分支和循环不表现对数据的具体操作以及分支和循环的具体条件。的具体条件。n流图中用圆表示结点,一个圆表示一条或流图中用圆表示结点,一个圆表示一条或者多条语句。程序流程图中的一个顺序的者多条语句。程序流程图中的一个顺序的处理框或者菱形判断框,可以映射成一个处理框或者菱形判断框,可以映射成一个结点。流图中的箭头线称为边,它和程序结点。流图中的箭头线称为边,它和程序流程图中的箭头陷都表示控制流。一条边流程图中的箭头陷都表示控制流。一条边必须终止于一个结点,即使是空语句。由必须终止于一个结点,即使是空语句。由边和结点
47、围成的面积叫区域。边和结点围成的面积叫区域。n当过程设计中包含复合条件时,生成当过程设计中包含复合条件时,生成流图要复杂一些。复合条件就是在条流图要复杂一些。复合条件就是在条件中包含一个或多个布尔运算符(逻件中包含一个或多个布尔运算符(逻辑辑OR,AND,NOR);在这种情况);在这种情况下,应该把复合条件分解为若干个简下,应该把复合条件分解为若干个简单条件,每个简单条件对应流图中的单条件,每个简单条件对应流图中的一个结点。包含条件的结点为判断结一个结点。包含条件的结点为判断结点。点。计算环形复杂度的方法:计算环形复杂度的方法:n1.流图中的区域数等于环形复杂度流图中的区域数等于环形复杂度n2.流图流图G的环形复杂度的环形复杂度V(G)EN2,E是流图中边的条数,是流图中边的条数,N是结点数。是结点数。n3.流图流图G的环形复杂度的环形复杂度V(G)P1,其中,其中,P是流图中判断结点的数目。是流图中判断结点的数目。n模块规模模块规模V(G)10比较好。比较好。