信息管理与信息系统专业《信息系统分析与设计》讲义第7章141028Word文档格式.docx
《信息管理与信息系统专业《信息系统分析与设计》讲义第7章141028Word文档格式.docx》由会员分享,可在线阅读,更多相关《信息管理与信息系统专业《信息系统分析与设计》讲义第7章141028Word文档格式.docx(84页珍藏版)》请在冰豆网上搜索。
7.1.3系统设计的内容与原则
(1)系统设计阶段的主要内容包括如下:
①系统总体结构设计
系统总体结构设计是根据系统分析的要求和组织的实际情况对新系统的总体结构形式和可利用的资源进行大致设计,它是一种宏观、总体上的设计和规划。
系统总体结构设计具体包括系统的功能结构设计、系统流程设计、软件系统总体结构设计和数据库总体设计。
②系统的物理配置方案设计
系统的物理配置方案设计包括硬件配置、软件设计、网络与通信结构设计等方面内容,例如,网络管理就需要考虑诸如网络平台配置、服务器组件框架、工作流配置、网络工作模式配置(包括单机模式、客户机/服务器模式、浏览器/服务器模式、网格应用模式、云计算中心服务模式等)。
③系统的详细设计
详细设计包括代码设计、数据存储设计、数据库设计、输出设计、输入设计、人机界面设计(或,应用模块设计)、网络系统设计、处理过程设计、数据管理(存储、备份、迁移、搜索、优化等)、系统与信息安全(安全准则、安全级别、安全选项、防火墙设置、代理服务器配置等)、系统实施(人员配置、系统部署规划、系统测试、系统集成部署、可持续发展规划等)。
④系统设计说明书
系统设计说明书是有关新系统完整设计的文档,其内容除了包含系统总体结构设计、系统详细设计的结果,还应当给出系统实施阶段的进度计划。
(2)在系统设计的过程中,要求如下:
①功能性。
功能性是指设计出的系统是否具有满足用户对系统各项需求的功能,这也是对整个系统开发最基本的要求。
②系统性。
系统是一个有机整体。
因此,要从整个系统的角度进行考虑,系统的代码要统一,设计规范要标准,程序设计语言要一致,对系统的数据采集要做到数出一处、全局共享,系统功能应尽量完整。
③灵活性。
环境的不断变化,促使系统必须即时更新,以保持旺盛的生命力。
因此,系统应该具有较好的开放性、系统维护的预见性和结构的可变性。
在系统设计中,应尽量采用模块化结构,提高模块内的内聚性、模块间的独立性,尽可能减少模块间的耦合,使各子系统间的数据依赖减至符合用户实际需求的最低限度。
这样,既便于模块的修改,又便于增加新的内容,提高系统适应环境变化的能力。
④可靠性。
可靠性是指系统抵御外界干扰的能力及受外界干扰时的恢复能力。
如提高系统的安全保密性、检错及纠错能力、抗病毒能力、系统恢复能力等,就可以增强系统的运行性能。
⑤经济性。
经济性是指在满足系统要求的前提下,尽可能减小系统的开销。
一方面,在硬件投资上不单纯追求高性能而抛弃系统的实际应用及环境需求;
另一方面,模块设计及接口设计简洁化、低耦合,缩短业务处理流程、减少数据处理费用。
⑥管理可行性。
管理上是否可行决定了系统的出路,决定了系统的作用发挥、使用价值和生命力。
因此,系统设计阶段需要考虑用户的业务类型、用户的基础管理工作、用户的人员素质、人机界面的友好程度、掌握系统操作的难易程度、系统的可理解性与可操作性等诸多因素,设计出用户可接受、易使用的系统。
(3)系统设计的原则
为了提高系统开发质量,人们总结出了一些基本原则,系统设计最为直接地体现了这些原则的应用。
①抽象
抽象是人类认识问题和解决问题的基本方法。
在解决复杂问题时,人们往往先忽略其细节和非本质的方面,而集中注意力分析问题的主要方面;
同时,人们在总结认识和实验规律时,也往往突出各类问题的共性,找出各种客观事物、状态和过程间的联系和相似性,并加以概括和提取,即抽象。
抽象是有限思维能力的人类个体同复杂外部世界相互了解的有力工具。
②模块化
人们在解决问题,尤其是解决大规模的复杂问题时,经常使用“分解”的方法,将问题划分成若干个较小的问题,通过对各个较小问题的求解,达到对复杂问题的解决。
模块化就是体现人类在问题求解时的这一方法和思想。
如果不把一个大型的、复杂的系统分解成若干个模块,将很难对其进行开发和管理。
所谓模块化,就是依据一定的原则,将要开发的系统分解为若干部分,即模块。
模块是实现某种功能独立、逻辑完整的程序段落,在程序中模块表现为一组完成指定功能的语句集合,包括输入、输出、逻辑处理功能、内部信息、运行环境等内容,模块与功能对应,但不一定是一对一的关系。
此外,模块也可以是数据说明。
③信息隐藏和信息局部化
信息隐藏和信息局部化是软件设计中另外两项重要的原则。
所谓信息隐藏,是指在设计和确定模块时,应使一个模块内包含的信息(过程和数据)对于不需要这些信息的其他模块来说是不可访问的。
信息隐藏使得模块间尽可能彼此独立,有利于过程和数据的保护,避免了错误的传递,提高了系统的可靠性。
信息隐藏尤其为软件系统的维护提供了良好的基础。
信息局部化是指将一些关系密切的成分,物理地放的彼此靠近。
局部化有利于模块的单独开发和调试,因而简化了整个系统的设计和实现。
同时,局部化也是信息隐藏的手段。
④一致性、完整性和确定性
Ø
一致性。
指软件系统各部分中符号的表达使用、对象及过程的描述和调用形式、操作的控制结构都一致,以免造成混乱。
完整性。
指对一个对象、过程的表达描述及处理应该完备,没有遗漏重要的内容或成分。
确定性。
又称可验证性,是指系统中的对象、过程定义明确,无二义性,容易测试。
7.1.4系统设计的主要技术应用
(1)结构化设计技术
结构化设计技术是系统结构化开发方法在系统设计阶段中所使用的技术,力图将系统中的大程序分解成自顶向下模块层次,并且要求被分解出的每个模块应该实现而且仅实现一个功能,并且模块间的相互依赖应该最小,这使得模块在未来的程序中可被反复使用。
通过分别实现这些模块的设计而最终实现整个系统的设计。
在设计基于大型主机应用软件时,结构化设计是比较常用的技术。
(2)原型设计技术
原型设计技术,要求设计人员与用户之间直接围绕具体问题进行反复的协商、改进。
此过程中,开发人员借助一些软件工具快速开发出针对具体问题的简单的输入/输出界面、人机交互接口、核心处理功能、子系统甚至整个系统的原型。
每个原型系统都由最终用户和管理人员检查,提出需求或修改意见,然后更正、改进或精炼该原型以反映新需求。
原型设计技术的修订和检查工作将一直继续下去直到原型被接受为止。
对于那些用户需求无法确定的项目来说,原型设计技术是一个非常有效的途径。
原型设计鼓励并要求最终用户主动参与,增加了最终用户对项目的信心、理解和支持,并且因为促进了更快速的用户反馈和更灵活的互动,可能会产生更好的方案。
但是由于原型设计不是在对系统全面分析的基础上进行的,缺乏一定的整体思维,所以会有大量的模块间接口、相关子系统设计等问题没有涉及或被忽略掉。
因此,正如前文所述,原型设计技术适于开发小型的信息系统项目。
(3)面向对象设计技术
面向对象设计技术是面向对象系统开发方法在系统设计阶段使用的技术,是面向对象分析的延续,并且使用与面向对象分析阶段相同的方法,开发角度也继续集中于对象建模技术。
面向对象系统开发方法已在前文有过介绍,这里不再赘述。
(4)快速应用开发技术
快速应用开发技术就是一种综合技术,它要求反复地使用结构化技术和原型设计技术来定义用户的需求并设计最终系统。
通过使用结构化技术,开发人员首先构造系统需求的初始数据模型和功能模型;
然后原型帮助分析员和用户验证那些需求,并正式地提炼数据和功能模型。
模型→原型→模型→原型→……这样的循环最终得出一个组合的系统需求和技术设计说明,它们可以用于构造新的系统。
每一种系统设计技术都有自己的优缺点,在实际的信息系统设计过程中可以把多种技术综合起来使用,这样可以发挥某个系统设计技术的优点,避免其缺点。
7.2系统总体设计
7.2.1总体设计的指导原则
在系统总体设计中应遵循的指导原则,如下:
(1)功能界面简单、规范
由于信息系统中体现了整个运输配送业务流程,相关的功能模块比较多,因此在界面设计上使用统一的设计风格,同时将数据库进行有效形成实体操作类、编码操作类,联系操作类,不同的类型使用相似的界面操作方式。
(2)操作上的简便性
数据库中大量的数据都是通过人机交互的键盘操作而获得的,因此保证数据库数据的正确性、完整性是信息系统正常进行的重要保证。
数据库中的基础数据时数据完整性的重要保证措施,在人机交互的键盘操作中,编码数据要采用下拉列表方式进行选择输入,这样减少击键次数,同时也提高了数据输入的正确性。
(3)降低模块之间的耦合性,提高模块的独立性
信息系统开发的一个重要问题是要提高系统的可修改性,可修改性的提高主要是靠降低模块间的耦合性来实现的。
模块间的耦合性越大,其独立性就越小,系统地刻修改性就越差。
在信息系统设计中模块间只通过数据库实现信息交换,避免使用参数及进行交换,让数据库真正成为信息系统各功能模块之间的“粘合剂”。
(4)编码设计的规范性
编码是数据库的基础,也是数据完整性的重要保证。
编码实际上提供的是一套规范的数据标准。
在编码设计中,尽量使用已存在的编码,在没有现成编码的条件下再自行设计编码。
另外,由于编码主要是从新的信息系统的规范使用信息角度来设计的,业务人员对一些代码并不关心,关心的事与该代码相关的名称,因此在模块实现中要将代码和名称同时提交业务人员,以便正确、规范地进行操作。
(5)功能操作的安全性
信息系统中的数据库是被各类人员共享的数据库,因此数据库的安全性是十分重要的,为了保证操作的正确性和安全性,要进行权限设计,不同业务人员使用不同的功能权限,使其在有限的功能范围内正确处理数据库数据。
(6)认真做好贯穿整个过程的测试、修改与评审工作
在信息系统的开发过程中,不同阶段有各自的任务设定,因而就存在着对其完成情况的跟踪、检测、补充、修改、完善以及评估,从而核准各任务的实施效率与效果,这些相关环节内容的展开为后续工作提供良好的开发条件。
7.2.2软件系统总体结构设计
系统结构设计,也称系统总体结构设计,是指根据系统分析阶段确定的新系统的目标和逻辑模型,科学合理地将系统划分成若干个子系统和模块,确立模块间的调用关系和数据传递关系。
在系统规划和分析阶段,通过U/C矩阵和逻辑子系统模型建设,已经进行了初步的子系统划分,本阶段是从计算机实现的角度出发,对各子系统进行校对、审核,使其应用界面更加清楚,系统的逻辑功能更加具体化,数据流关系和存储形式更加明确,借助于标准的设计准则、设计方法和图表工具,通过“自顶向下”宏观分解和“自底向上”微观实现的反复推敲,把系统分解为若干个大小适当、功能明确、具有一定的独立性且容易实现的模块。
从而把复杂综合系统的设计转变为多个相对简单独立模块的设计。
合理地进行模块的分解和定义,是系统结构设计的主要内容。
系统结构设计的好坏将直接影响系统的质量和整体特性,在系统结构设计中要牢记“整体大于部分之和”思想,力求系统的整体性能最佳而不是各个局部性能最佳,用系统的整体效果决定细节实现。
(1)模块
模块是系统结构中的基本组成单位,模块化是进行系统结构设计的重要指导思想。
模块是组成目标系统逻辑模型和物理模型的基本单位,是可以组合、分解和更换的单元。
系统中任何一个处理功能都可以看成是一个模块。
一个模块应具备以下四个要素:
①输入和输出。
模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回调用者。
②处理功能。
指模块把输入转换成输出所做的工作。
③内部数据。
指仅供该模块本身引用的数据。
④程序代码。
指用来实现模块功能的程序。
前两个要素是模块的外部特性,反映了模块的外貌,后两个要素是模块的内部特性。
在结构化设计中,主要考虑的是模块的外部特性,其内部特性只做必要了解,具体的实现将在系统实施阶段完成。
(2)模块化
模块化(modularization)是把系统分割成能完成独立功能的模块,明确规定各模块的输入输出规格,使模块的界面清楚,功能明确,每个模块可独立命名和编址。
在计算机软件领域,几乎所有的软件体系结构都体现了模块化的思想,即把软件划分为多个模块,每个模块完成一个子功能,当把所有模块组装到一起成为一个整体时,便可以完成指定的功能。
采用模块化原理的优点:
减少复杂性。
模块化可以使软件结构清晰,容易设计,容易阅读和理解,容易测试和调试。
提高软件的可靠性和可维护性。
因为变动往往只涉及少数几个模块。
有助于软件开发工程的组织管理。
一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。
(3)模块独立性的度量
模块独立性,是指不同模块之间联系尽量少,尽可能减少公共的变量和数据结构,模块应尽可能再逻辑上独立,有完整单一的功能,它是模块化的具体表现。
在一个信息系统中,系统的各组成部分之间总是存在着各种联系的。
将系统或子系统划分成若干模块,则在一个模块内部存在着块内联系,在模块之间存在着块间联系。
模块的独立性与块内联系及块间联系的紧密程度密切相关,因此,引入模块耦合和内聚的概念,来对模块的独立性进行度量。
①耦合
耦合是对软件程序结构中各个模块之间相互依赖程度的一种度量,藕合的强弱取决于模块间接口的复杂程度。
一般由模块之间的调用方式、耦合类型和耦合内容的数量来决定。
在设计软件时应追求尽可能松散藕合的系统。
因为对这类系统中任一模块的设计、测试和维护相对独立。
耦合可分为以下几种类型:
第一类、独立耦合。
如果两个模块之间彼此完全独立,没有直接联系,唯一的联系仅在于它们同属于一个系统或同有一个上层模块,这样的耦合称为独立耦合。
独立耦合是耦合程度最低的,系统中可以有部分模块属于这种联系方式,但不能所有的模块之间都不存在完全独立的状态。
第二类、数据耦合。
如果模块之间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。
数据耦合是低耦合,系统中必须存在这种有积极意义的耦合,经常有模块的输出数据要作为另一模块的输入数据,由此系统的应用价值才得到体现。
第三类、控制耦合。
如果模块间传递的信息中含有控制信息,不论控制信息是否以数据的形式出现,这种耦合称为控制耦合。
控制耦合是中等程度的耦合,它的存在也增加了系统的复杂度,模块经过适当的分解,可以用数据耦合来替代控制耦合,因此,控制耦合往往是多余的。
第四类、特征耦合。
当把整个数据结构作为参数传递而被调用模块只需要其中一部分数据元素时出现的耦合,称为特征耦合。
第五类、公共耦合。
当两个或多个模块通过一个公共数据区相互作用时,它们之间的耦合称为公共耦合。
公共数据区可以是全程变量、共享的数据区、内存的公共覆盖区、外存上的文件或物理设备等。
如果只有两个模块有公共环境,那么这种耦合有以下两种情况:
一个模块向公共环境读入数据,另一模块从公共环境取出数据,这是数据耦合的一种形式,是比较松散的耦合;
两个模块既往公共环境读入也取出数据,这种耦合程度较为紧密,介于数据耦合和控制耦合之间。
如果两个模块共享的数据很多,都通过参数传递可能不方便,这时可利用公共耦合。
第六类、内容耦合。
内容耦合是耦合程度最高的一种形式,经常发生一个模块直接访问另一个模块的内部代码或数据,即出现下列情况之一,两个模块间就发生了内容耦合:
一个模块访问另一个模块的内部数据;
一个模块不通过正常入口而转到另一个模块的内部;
两个模块有一部分程序代码重叠(只可能出现在汇编程序中);
一个模块有多个入口(即,一个模块有多种功能)。
内容耦合的存在严重破坏了模块的独立性和系统的结构化,代码重叠,运行复杂,程序运行状态不一致。
总之,耦合是影响软件复杂程度的一个重要因素,应采取如下的设计原则:
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共耦合的范围,完全不使用内容耦合。
②内聚
内聚是模块内部各成分(语句或语句段)之间的联系,是信息隐藏与信息局部化原理的功能延展与表现。
模块内部各成分联系越紧密,内聚程度就越大,模块独立性就越强。
具有良好内聚的模块应能较好地满足信息局部化的原则,功能完整单一,因此,模块的高内聚必然导致模块的低耦合。
按内聚程度由弱到强的顺序,模块的内聚分为如下类型:
第一类、偶然内聚(coincidentalcohesion)。
如果模块完成的任务之间彼此关系是松散的,那么称为偶然内聚。
偶然内聚的模块中,各任务之间没有实质性联系,各任务的调用随机性强,模块难于处理,因此,在空间允许的情况下,不适用这类模块,即宁可重复编写程序代码,也尽量不调用模块内的公共内容。
第二类、逻辑内聚(logicalcohesion)。
如果模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚,例如,一个模块的不同输入方式,或产生的各类型输出。
这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。
这种模块是单入口多功能模块。
如错误处理模块,它接收出错信号,对不同类型的错误打印出不同的出错信息。
逻辑内聚模块比偶然内聚模块的内聚程度要高,但是它所执行的不是一种功能,而是执行若干功能中的一种,因此它不易修改。
另外,当调用时需要进行控制参数的传递,这就增加了模块间的控制藕合。
而将未用的部分也调入内存,这就降低了系统的效率。
第三类、时间内聚(temporalcohesion)。
如果模块完成的任务必须在同一段时间内执行,则称为时间内聚,例如,模块内的各种初始化工作。
这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。
例如,初始化模块、退出模块及紧急处理模块。
而且,在一般情形下,时间内聚模块中各部分可以以任意的顺序执行,所以它的内部逻辑更简单,存在的开关(或判定)转移更少。
因此,时间内聚模块比逻辑内聚模块的内聚程度又高一些。
第四类、过程内聚(proceduralcohesion)。
模块内的处理元素是相关的,并且受同一控制流控制,必须以特定顺序执行,则称为过程内聚。
如,统计并打印库存信息。
过程内聚中各步骤连续发生,是一种较弱的内聚,并隐含着时间内聚。
这类模块的内聚程度比时间内聚模块的内聚程度更强一些,但是因为过程内聚模块的功能不唯一,所以,它的内聚程度仍然较低,模块间的藕合程度还比较高。
第五类、通信内聚(communicationalcohesion)。
若模块中所有元素都使用相同的输入数据和/或产生相同的输出数据,则称为通信内聚。
例如,产生工资报表及计算平均工资模块,模块中的两部分功能都使用工资记录。
通讯内聚模块的内聚程度比过程内聚模块的内聚程度要高,因为在通讯内聚模块中包括了许多独立的功能。
但是,这种模块的缺点是它容易产生重复的联结或重复的功能,因而维护起来不方便。
第六、顺序内聚(sequentialcohesion)。
模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,即一个处理的输出作为下一个处理的输入,则称为顺序内聚。
顺序内聚的模块中某一部分的执行依赖于另一部分,所以有高强度的内部紧凑性。
但是,模块中可能包含了几个功能,也可能仅包含某个功能的一部分。
所以,还不是最强的内聚。
第七类、功能内聚(functionalcohesion)。
模块内所有处理元素属于一个整体,完成单一的功能,则称为功能内聚,它是内聚程度最高的。
功能内聚模块中各个部分都是为完成某一具体功能必不可少的组成部分,是紧密联系,不可分割的。
如果把一个功能分成两个模块来解决,就会导致模块之间有很强的耦合,而且它们不易单独理解和实现。
功能内聚模块符合“黑盒”特性,即其他模块不必了解它的内部结构,就可以使用它,其内聚程度最高。
功能内聚模块的优点是容易修改和维护。
在把一个系统分解成模块的过程中,应当尽可能使模块达到功能内聚这一级,便于主程序的调用和控制。
(4)模块设计的启发式规则
为了提高软件质量,优化软件结构,在长期的软件开发过程中,一些优秀的经验可以作为借鉴,但这些内容不是必须遵循的原理。
①改进软件结构提高模块独立性
设计出初步的软件结构后,认真复审、核查该结构,通过不断地模块分解、合并,力求降低模块间的耦合度,提高模块内的内聚度。
②模块规模适中
模块的规模不应该过大,最好能显示在一屏或书写在一页纸内,以便于理解、分析程序及模块功能。
规模过大,往往是由于分解不够充分,则需要进一步分解,但分解后不能降低模块的独立性。
规模过小,则模块开销大于有效操作,而且模块数目过多将使系统接口复杂。
因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在。
但是如果这个模块是功能内聚性模块,或者它为多个模块所共享,或者调用它的上级模块很复杂,在这种情况下,一定不要把它合并到其他模块中去。
③深度、宽度、扇入、扇出要适当
深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
深度和程序长度之间应该有粗略的对应关系,当然这个对应关系是在一定范围内化的。
如果层数过多则应该考虑是否有许多管理模块过分简单了