1、第第6章章 软件项目设计阶段的知识和管理软件项目设计阶段的知识和管理本章要点:系统设计是软件项目成败的关键系统设计是软件项目成败的关键 设计阶段设计阶段的目标和任务的目标和任务 系统设计阶系统设计阶段的团队管理和技能要求段的团队管理和技能要求 系统设计系统设计阶段的管理与控制阶段的管理与控制 系统设计阶段性成果和考核依据系统设计阶段性成果和考核依据 需求分析解决需求分析解决“做什么做什么”,系统设计则,系统设计则确定确定“如何做如何做”。6.1 系统设计是软件项目成败的关键系统设计是软件项目成败的关键 系统设计基于需求分析的成果,对系统系统设计基于需求分析的成果,对系统做深层次的分析,从而得出
2、一系列行之有效做深层次的分析,从而得出一系列行之有效的系统实现方案,使整个项目在逻辑上和物的系统实现方案,使整个项目在逻辑上和物理上能够得以实现。理上能够得以实现。系统设计是获取系统设计是获取高质量、低耗费、易维高质量、低耗费、易维护护的软件系统的最为核心的环节。没有或缺的软件系统的最为核心的环节。没有或缺乏软件设计的工程只能是一个不稳定的、甚乏软件设计的工程只能是一个不稳定的、甚至是失败的软件系统。至是失败的软件系统。6.2 设计阶段的目标和任务设计阶段的目标和任务 系统设计是一个将系统的需求规格转换系统设计是一个将系统的需求规格转换成软件系统的说明过程。成软件系统的说明过程。系统设计的最终
3、目标是要完成对系统设计的最终目标是要完成对“软件项软件项目交付成果如何架构目交付成果如何架构”的准确回答。的准确回答。任务包括构建系统框架,设计系统功能,任务包括构建系统框架,设计系统功能,描述系统流程,建立系统的数据模型、接口描述系统流程,建立系统的数据模型、接口模型及界面模型,形成系统的逻辑结构,告模型及界面模型,形成系统的逻辑结构,告诉程序员软件系统应该诉程序员软件系统应该“怎样做怎样做”。软件设计一般分为概要设计和详细设计软件设计一般分为概要设计和详细设计两大步骤。两大步骤。概要设计是根据需求分析内容确定软件概要设计是根据需求分析内容确定软件系统的总体框架,定义系统的初始模型。系统的总
4、体框架,定义系统的初始模型。详细设计是在概要设计的基础上做进一详细设计是在概要设计的基础上做进一步细化的工作,规划出系统的运行结构、功步细化的工作,规划出系统的运行结构、功能结构、信息模型、过程模型和集成接口结能结构、信息模型、过程模型和集成接口结构,并详细到系统编码阶段的各个类、函数、构,并详细到系统编码阶段的各个类、函数、变量等对象的结构定义、流程定义和实现方变量等对象的结构定义、流程定义和实现方案。案。6.3 系统设计阶段的团队管理和技能系统设计阶段的团队管理和技能要求要求 系统设计团队是软件项目各个阶段中对系统设计团队是软件项目各个阶段中对技术要求最高的组织之一,并在项目经理的技术要求
5、最高的组织之一,并在项目经理的直接领导和协调下开展工作。直接领导和协调下开展工作。主要团队成员包括:体系结构设计师、主要团队成员包括:体系结构设计师、系统设计员、数据库设计员、用户界面设计系统设计员、数据库设计员、用户界面设计员、质量管理员和配置管理员。员、质量管理员和配置管理员。体系结构设计师负责系统的总体规划和体系结构设计师负责系统的总体规划和集成接口设计。集成接口设计。系统设计员负责完成子系统、子模块,系统设计员负责完成子系统、子模块,以及系统构件的规划与设计。以及系统构件的规划与设计。数据库设计员负责整个系统的概念数据数据库设计员负责整个系统的概念数据模型,以及物理数据的设计。模型,以
6、及物理数据的设计。用户界面设计员负责系统与用户交互的用户界面设计员负责系统与用户交互的界面风格、整体布局及美化设计。界面风格、整体布局及美化设计。质量管理员负责组织设计结果的质量评质量管理员负责组织设计结果的质量评审工作。审工作。配置管理人员进行设计阶段的配置管理,配置管理人员进行设计阶段的配置管理,并将设计阶段成果纳入软件配置管理。并将设计阶段成果纳入软件配置管理。他们之间的工作关系如下图所示他们之间的工作关系如下图所示。6.3.1体系结构设计师职责与技术素质要求体系结构设计师职责与技术素质要求 是系统设计团队中的关键人物,其职责是系统设计团队中的关键人物,其职责是领导设计组成员开展系统设计
7、任务,协调是领导设计组成员开展系统设计任务,协调和管理系统设计团队内部的各项工作,并参和管理系统设计团队内部的各项工作,并参与整个项目各个阶段的沟通与协调工作。与整个项目各个阶段的沟通与协调工作。主要工作包括:主要工作包括:(1)初步定义一组在构架方面具有重要意初步定义一组在构架方面具有重要意义的元素,作为系统设计的工作基础。义的元素,作为系统设计的工作基础。(2)初步定义系统的分层与组织结构。初步定义系统的分层与组织结构。(3)提供从分析活动到设计活动的自然转提供从分析活动到设计活动的自然转移移从分析结果中确定适当的设计元素,从分析结果中确定适当的设计元素,从相关分析机制中确定适当的设计机制
8、。从相关分析机制中确定适当的设计机制。(4)维持体系结构的一致性和完整性,确维持体系结构的一致性和完整性,确保当前迭代所确定的新设计元素与先前已有保当前迭代所确定的新设计元素与先前已有的设计元素可以集成;在设计过程中尽可能的设计元素可以集成;在设计过程中尽可能早地充分利用现有的构件和设计元素。早地充分利用现有的构件和设计元素。(5)描述系统运行时的组织以及部署体系描述系统运行时的组织以及部署体系结构时的组织。结构时的组织。(6)设计实施模型,以实现设计与实施间设计实施模型,以实现设计与实施间的平稳转移。的平稳转移。注意:体系结构架构工作一般由技能互注意:体系结构架构工作一般由技能互补人员组成的
9、小型团队来完成。团队应由具补人员组成的小型团队来完成。团队应由具有丰富相关领域设计经验的成员组成;同时,有丰富相关领域设计经验的成员组成;同时,体系结构设计团队不能由大规模的团队组成。体系结构设计团队不能由大规模的团队组成。6.3.2子系统设计员的职责与技能要求子系统设计员的职责与技能要求 子系统设计员是整个设计阶段任务得以顺子系统设计员是整个设计阶段任务得以顺利完成的核心成员,他们常常是一个协作的利完成的核心成员,他们常常是一个协作的团队,而不是一个人。是在体系结构设计师团队,而不是一个人。是在体系结构设计师的声接领导和协调下开展工作。的声接领导和协调下开展工作。主要完成的任务是:主要完成的
10、任务是:(1)将系统结构提供的行为说明转换为可将系统结构提供的行为说明转换为可作为设计基础的一组元素。作为设计基础的一组元素。(2)通过制定设计元素如何实现其行为要通过制定设计元素如何实现其行为要求,改进设计元素的定义。求,改进设计元素的定义。(3)将设计元素作为模块来实施。将设计元素作为模块来实施。(4)测试所实施的模块,以核实构件测试所实施的模块,以核实构件/单元单元级别上的功能和需求满足情况。级别上的功能和需求满足情况。注意:注意:负责设计子系统的个人或团队应当熟负责设计子系统的个人或团队应当熟悉本系统所采用的开发语言,并具备在系统悉本系统所采用的开发语言,并具备在系统所使用的算法或技术
11、方面的专业技能。所使用的算法或技术方面的专业技能。负责子系统的个人或团队更应是多面负责子系统的个人或团队更应是多面手,能够合理划分设计元素间的功能,并能手,能够合理划分设计元素间的功能,并能够理解不同备选设计方案固有的优缺点。够理解不同备选设计方案固有的优缺点。6.3.3数据库设计员的职责与技能要求数据库设计员的职责与技能要求 数据库设计员的主要内容是确定系统数数据库设计员的主要内容是确定系统数据库对象及其之间的关系,建立系统的信息据库对象及其之间的关系,建立系统的信息模型。模型。主要完成的任务是:主要完成的任务是:(1)确定设计中的永久类;确定设计中的永久类;(2)设计适当的数据库结构,以存
12、储永久设计适当的数据库结构,以存储永久类;类;(3)定义存储和检索永久性数据的机制和定义存储和检索永久性数据的机制和策略,以满足系统要求的性能标准。策略,以满足系统要求的性能标准。注意:注意:数据库设计人员需要了解设计模型中数据库设计人员需要了解设计模型中的永久类,并且必须在关系型数据库、面向的永久类,并且必须在关系型数据库、面向对象的程序设计与软件实施方面具备一定的对象的程序设计与软件实施方面具备一定的应用知识。应用知识。数据库设计人员还需要充分具备处理数数据库设计人员还需要充分具备处理数据库并行及分布问题的背景。据库并行及分布问题的背景。数据库设计人员是一种数据库设计人员是一种“浮动浮动”
13、的资源,的资源,为几个团队所共有,充当处理永久性问题的为几个团队所共有,充当处理永久性问题的顾问型成员。顾问型成员。数据库设计人员与子系统设计人员之间数据库设计人员与子系统设计人员之间的紧密协作极为重要的紧密协作极为重要。6.3.4 界面设计人员的职责与技能要求界面设计人员的职责与技能要求 用户界面设计是系统的形象设计,它留用户界面设计是系统的形象设计,它留给用户的印象直接影响着软件的市场和用户给用户的印象直接影响着软件的市场和用户群的占有率,因此必须得到足够的重视。群的占有率,因此必须得到足够的重视。主要完成的任务是:主要完成的任务是:(1)分析对用户界面的需求,包括可用性分析对用户界面的需
14、求,包括可用性需求。需求。(2)构建用户界面原型。构建用户界面原型。(3)邀请用户界面的其他相关人员参与可邀请用户界面的其他相关人员参与可用性复审和使用测试会议。用性复审和使用测试会议。(4)对用户界面的最终实施方案对用户界面的最终实施方案(由设计员由设计员和实施员等其他开发人员创建和实施员等其他开发人员创建)进行复审并提进行复审并提供相应的反馈。供相应的反馈。6.4 系统设计阶段的管理与控制系统设计阶段的管理与控制6.4.1 系统设计阶段的进度管理系统设计阶段的进度管理 做好设计阶段的进度管理与控制工作,做好设计阶段的进度管理与控制工作,需要做好以下几方面的具体工作:需要做好以下几方面的具体
15、工作:(1)考虑设计人员的能力考虑设计人员的能力 系统设计工作的进度与质量是设计人员系统设计工作的进度与质量是设计人员经验和能力的综合体现。经验和能力的综合体现。本阶段工作进度安排一定要考虑设计人本阶段工作进度安排一定要考虑设计人员的能力状况。在实际工作中,应结合项目员的能力状况。在实际工作中,应结合项目的规模、费用状况及进度要求,选择合适的的规模、费用状况及进度要求,选择合适的系统设计人员,即在成本允许的条件下,尽系统设计人员,即在成本允许的条件下,尽可能选用能力较强、经验丰富的设计人员,可能选用能力较强、经验丰富的设计人员,以获得较高的项目进度及质量。以获得较高的项目进度及质量。(2)做好
16、阶段工作计划与任务分工做好阶段工作计划与任务分工 无论何种软件项目,在设计开始时都应制无论何种软件项目,在设计开始时都应制定详细的阶段工作计划,使整个工作都在计定详细的阶段工作计划,使整个工作都在计划的指导下进行。划的指导下进行。对参与团队设计的人员要有明确的工作分对参与团队设计的人员要有明确的工作分工并制定明确的工作职责,防止工作安排中工并制定明确的工作职责,防止工作安排中的遗漏及相互扯皮现象出现,最大限度的发的遗漏及相互扯皮现象出现,最大限度的发挥出每个团队成员的能力和经验优势。挥出每个团队成员的能力和经验优势。(3)采用先进的软件技术与工具采用先进的软件技术与工具 采用先进的软件技术进行
17、设计工作,将会采用先进的软件技术进行设计工作,将会取得较高劳动效率。取得较高劳动效率。设计阶段新技术的采用主要体现在以下方设计阶段新技术的采用主要体现在以下方面:面:1)采用新的系统建模方法及工具采用新的系统建模方法及工具 如支持建立系统功能模型的如支持建立系统功能模型的IDEFO方法,方法,面向对象的建模工具面向对象的建模工具(UML)和方法等。和方法等。2)软件复用软件复用 许多软件模块的设计和实现具有很大的相许多软件模块的设计和实现具有很大的相似性,在进行系统设计时,可将其他项目的似性,在进行系统设计时,可将其他项目的设计结果直接拿过来使用,以获得较高的软设计结果直接拿过来使用,以获得较
18、高的软件开发效率及较高的软件开发质量。件开发效率及较高的软件开发质量。(4)及时沟通及时沟通 沟通可以有效地解决以下问题:沟通可以有效地解决以下问题:1)解决设计中的难题解决设计中的难题 技术进步及用户要求的不断提高,软件技术进步及用户要求的不断提高,软件开发工作的技术要求及难度越来越大。每个开发工作的技术要求及难度越来越大。每个设计人员在设计时总会碰到一定的设计难题。设计人员在设计时总会碰到一定的设计难题。通过团队协作可以充分发挥和调动每位成员通过团队协作可以充分发挥和调动每位成员的聪明才智,准确把握、合理解决设计难题,的聪明才智,准确把握、合理解决设计难题,避免设计中的漏洞及问题,同时也可
19、避免可避免设计中的漏洞及问题,同时也可避免可能带来的进度延误。能带来的进度延误。2)有效解决设计接口问题及采用复用技有效解决设计接口问题及采用复用技术术 设计中,不同人员所承担任务之间的接设计中,不同人员所承担任务之间的接口工作是设计工作的一个关键。每个人不能口工作是设计工作的一个关键。每个人不能 按照自己的想法进行接口的设计,只有通过按照自己的想法进行接口的设计,只有通过与接口方的不断交流和沟通,才能取得满意与接口方的不断交流和沟通,才能取得满意的设计效果。的设计效果。另外在设计工作中,不同模块间的设计另外在设计工作中,不同模块间的设计可能具有很大的相似性,有效的沟通可以使可能具有很大的相似
20、性,有效的沟通可以使设计人员彼此了解别人的工作内容,从而给设计人员彼此了解别人的工作内容,从而给设计上的复用带来了可能,保证或加快设计设计上的复用带来了可能,保证或加快设计工作进度。工作进度。3)提高人员的工作效率提高人员的工作效率 通过沟通,设计人员可以彼此厂解别人通过沟通,设计人员可以彼此厂解别人的工作进度,出于维护个人荣誉,会对进度的工作进度,出于维护个人荣誉,会对进度较慢的人员形成一定的工作压力,从而保证较慢的人员形成一定的工作压力,从而保证设计工作的整体工作进度。设计工作的整体工作进度。(5)加强跟踪与监控,防止设计工作的反加强跟踪与监控,防止设计工作的反复复 加强项目的跟踪和管理,
21、可以减少设计加强项目的跟踪和管理,可以减少设计工作中的随意性、及时纠正设计中的错误。工作中的随意性、及时纠正设计中的错误。从而减少设计中的工作反复,确保设计阶段从而减少设计中的工作反复,确保设计阶段的工作进度。的工作进度。跟踪设计工作进度的方法有两种:一种跟踪设计工作进度的方法有两种:一种是个人询问,另一种是召开例会。是个人询问,另一种是召开例会。6.4.2 系统设计阶段质量管理系统设计阶段质量管理 可通过做好以下工作,把好软件设计质可通过做好以下工作,把好软件设计质量关:量关:(1)对需求的正确理解对需求的正确理解 需求规格说明书是软件设计的重要依据。需求规格说明书是软件设计的重要依据。软件
22、项目能否最终提供符合用户需要的软件软件项目能否最终提供符合用户需要的软件产品,就要看软件设计是否满足了需求规格产品,就要看软件设计是否满足了需求规格说明书的全部要求。因此,设计人员对需求说明书的全部要求。因此,设计人员对需求规格说明书内容的正确理解,是高质量完成规格说明书内容的正确理解,是高质量完成软件设计工作的前提。软件设计工作的前提。(2)监理与评审监理与评审 设计阶段完成后,需要对系统设计进行设计阶段完成后,需要对系统设计进行评审。评审。评审由质量管理人员发起和组织,参与评审由质量管理人员发起和组织,参与的人员有用户、领导、开发方、监理等。的人员有用户、领导、开发方、监理等。通过评审,为
23、系统实施和质量跟踪提供通过评审,为系统实施和质量跟踪提供依据。通过评审以后,设计阶段的工作成果依据。通过评审以后,设计阶段的工作成果将纳入软件配置管理。将纳入软件配置管理。设计阶段工作对项目的后续工作影响巨设计阶段工作对项目的后续工作影响巨大,一旦出现设计更改,需要付出的代价是大,一旦出现设计更改,需要付出的代价是很沉重的。因此,作为设计阶段的质量把关很沉重的。因此,作为设计阶段的质量把关与审核,设计过程的监理与设计评审工作应与审核,设计过程的监理与设计评审工作应该予以高度重视。该予以高度重视。系统设计包含较高的技术和能力因素,系统设计包含较高的技术和能力因素,要求设计评审人员的组成要全面,且
24、评审人要求设计评审人员的组成要全面,且评审人员要具有丰富的系统设计经验,只有这样才员要具有丰富的系统设计经验,只有这样才能够很好地完成评审和把关任务,防止评审能够很好地完成评审和把关任务,防止评审工作流于形式。工作流于形式。进行设计评审时,评审人员要以正确、进行设计评审时,评审人员要以正确、负责的心态对待评审工作:一是要查找设计负责的心态对待评审工作:一是要查找设计中存在的问题,而不是故意找茬,与设计人中存在的问题,而不是故意找茬,与设计人员过不去;二是要认识到评审工作责任的重员过不去;二是要认识到评审工作责任的重大,如果评审工作不负责任将很可能使许多大,如果评审工作不负责任将很可能使许多人的
25、辛勤劳动被葬送,企业将因此付出巨大人的辛勤劳动被葬送,企业将因此付出巨大的代价。的代价。(3)复用技术的采用复用技术的采用 软件设计复用就是在进行系统设计时,软件设计复用就是在进行系统设计时,发现并利用其他项目的设计成果,直接应用发现并利用其他项目的设计成果,直接应用或进行少量修改后应用于新项目的过程。或进行少量修改后应用于新项目的过程。由于复用的设计已经经过其他项目的应用由于复用的设计已经经过其他项目的应用检验,所以复用后的设计会具有较高的设计检验,所以复用后的设计会具有较高的设计质量。质量。在系统设计过程中,设计人员要善于发在系统设计过程中,设计人员要善于发现可复用的设计单元,善于使用复用
26、技术提现可复用的设计单元,善于使用复用技术提高自己的工作效率。高自己的工作效率。(4)版本控制与管理版本控制与管理 对设计阶段的各个阶段性成果也需加强对设计阶段的各个阶段性成果也需加强跟踪和管理,否则,容易使设计人员随意地跟踪和管理,否则,容易使设计人员随意地进行设计结果的修改,造成设计结果的混乱。进行设计结果的修改,造成设计结果的混乱。项目经理应加强设计阶段的阶段性成果项目经理应加强设计阶段的阶段性成果的管理和控制工作,即需要将设计阶段再划的管理和控制工作,即需要将设计阶段再划分为多个子阶段,对每个子阶段完成的工作分为多个子阶段,对每个子阶段完成的工作纳入管理。如果设计人员要进行设计变更,纳
27、入管理。如果设计人员要进行设计变更,应该按照一定的变更处理流程来进行。通过应该按照一定的变更处理流程来进行。通过这种方式,可有效防止设计工作及版本控制这种方式,可有效防止设计工作及版本控制的混乱,提高设计成果的质量。的混乱,提高设计成果的质量。(5)注重软件的结构设计注重软件的结构设计 一个好的体系结构应具备以下特征:一个好的体系结构应具备以下特征:1)具有良好的接口定义规范,便于实现具有良好的接口定义规范,便于实现与其他系统的数据交换及构件的复用。与其他系统的数据交换及构件的复用。2)具有良好的系统适应性,即在需求发具有良好的系统适应性,即在需求发生变化时,软件系统能够以最小的代价适应生变化
28、时,软件系统能够以最小的代价适应变化的需要。变化的需要。3)支持并行的软件开发,即优秀的体系支持并行的软件开发,即优秀的体系结构,可使软件系统的复杂性降低,使整个结构,可使软件系统的复杂性降低,使整个开发工作可管理性增强,便于实现多个开发开发工作可管理性增强,便于实现多个开发单位的并行开发工作。单位的并行开发工作。4)良好的技术适应性,即系统容易适应良好的技术适应性,即系统容易适应技术的发展和变化。技术的发展和变化。6.5 系统设计阶段主要工作内容及采用的工具和系统设计阶段主要工作内容及采用的工具和方法方法 软件设计分为两个主要的工作阶段:概要设计。主要工作是将软件需求转化为数据结构和软件的系
29、统结构;详细设计。通过对软件结构与功能模块的细化工作,得到软件程序的数据结构、算法和实现流程。软件设计的方法主要有结构化设计方法和面向对象的设计方法两大类。本节讨论系统设计阶段的结构设计、功能设计、信息模型设计、过程模型设计以及界面设计,并介绍一些在系统设计阶段常采用的设计工具。6.5.1体系结构设计体系结构设计6.5.1.16.5.1.1体系结构设计概述体系结构设计概述 软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。6.5.1.26.5.1.2体系结构设计
30、原则体系结构设计原则 体系结构设计的原则包括:合适性、结构稳定性、代码可复用性及模块可扩展性。(1)合适性 是指体系结构是否适合于软件的“功能性需求”和“非功能性需求”。(2)结构稳定性 体系结构是系统设计的第一要素,体系结构变动,建筑在其上的用户界面、数据库、模块、数据结构等也要跟着变动,这将导致项目发生混乱。所以体系结构一旦设计完成,应当保持其相对稳定不变。(3)模块可扩展性 对于软件产品来讲,变化是绝对的,不变化是相对的。对于系统设计来说,要求系统设计应该适应这种变化。体系结构的稳定性是根据那些稳定不变的需求而设计的,体系结构的可扩展性则是依据那些可变的需求而设计的。稳定性和可扩展性二者
31、之间存在辨证的关系:系统若不可扩展,那么就没有发展前途;软件系统可扩展”的前提条件是“保持结构稳定”,否则软件难以按计划开发出来。(4)代码可复用性 软件复用技术有利于提高产品的质量、提高生产率和降低成本。通常一个新系统,大部分的内容是成熟的,小部分内容是创新的。可复用性是设计出来的,而不是偶然碰到的。要使体系结构具有良好的可复用性,设计师应当分析应用域的共性问题,然后设计出一种通用的体系结构模式,这样的体系结构才可能被复用。6.5.1.36.5.1.3体系结构设计步骤体系结构设计步骤 系统体系结构设计的主要过程包括设计准备、设计策划、需求再确认、文档编写及设计评审五个关键环节。(1)设计准备
32、 设计准备阶段的工作主要包括:1)制定设计小组在设计时应该共同遵守的标准和规范。2)明确设计工作的范围和任务。3)根据设计目标确定最适合的设计方案、方法和工具。4)编制设计阶段的阶段性开发计划,包括本阶段进度、质量、成本管理办法及人员工作安排等内容。(2)界定约束条件 软件设计过程中通常需要考虑的约束因素有:1)本系统需要遵循的相关标准或规范;2)系统实现所依赖的软硬件环境的约束;3)本系统与其他系统间的接口要求;4)系统采用通讯协议方面的约束;5)用户界面的约束;6)软件质量的约束。(3)确定设计策略 需要确定的系统设计策略包括:1)设计模式,根据产品的功能性需求和非功能性需求,确定体系结构
33、设计模式。设计模式的确定是结构设计中最重要的环节,一个好的模式能为系统的扩充、复用等策略提供良好的支持。通常采用扩展策略、复用策略、折衷策略、兼容策略、灵活策略,以及客户个性化需求策略等方面来考虑设计方案。2)系统设计模板的确定,编写系统设计文档之前也应首先确定系统的内容及其组织编排方式。主要从结构、功能、性能、接口、信息模型以及进度、经费等 方面着重考虑。(4)分解设计任务 分解任务包括:1)按照确定的体系结构设计模式,将一个复杂的系统分解成为若干子系统,确定每个子系统的功能,建立并确定与软件需求间的对应关系,以及各个子系统之间的关系,绘制系统的总体结构图。2)将子系统分解成若干个模块,确定
34、每个模块完成的功能,以及模块之间的调用关系,并确定模块间的调用接口。(5)需求再确认 在编写设计文档之前或者在编写的过程中,对前期描述的需求内容进行再次确认,以确保系统设计的准确性和符合用户的真实要求。(6)编写设计文档 完成体系结构设计报告的编写工作。通常情况下,由体系结构设计、接口设计、信息模型设计、出错处理设计、系统安全性设计、系统可靠性设计等组成系统概要设计阶段的主要内容。(7)设计评审 体系结构设计完成后,由项目组质量保证人员组织同行专家、开发人员对体系结构进行技术评审。评审的内容除了合适性、结构稳定性、可扩展性和可复用性外,一般还应包括:1)可追溯性:确认该软件的设计是否覆盖了所有
35、已确定的软件需求。2)灵活性:确定按设计方案实现的系统是否可以灵活搭建,方便配置。3)个性化适应性:确保用户需求在一定范围内变化时,系统设计方案可以进行不增加工作量的调整。4)兼容性:确保与其他正在运行的系统结构的兼容性。5)集成性:确定与其他系统产生的数据能够集成并实现一定程度的资源共享。6)接口:即通过分析软件各部分之间的联系,确认软件的内部及外部接口是否已明确定义。模块设计是否满足高内聚和低偶合的特性。7)质量:即软件设计是否表现出良好的质量特性,满足各项指标的要求。8)风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。9)限制:评估对该软件的限制是否现实,是否与需求一致
36、。6.5.2功能模块设计功能模块设计6.5.2.16.5.2.1功能模块的概念功能模块的概念6.5.2.26.5.2.2模块设计的原则模块设计的原则 (1)信息隐藏 模块设计应使其所含信息(过程和数据)对于那些不需要这些信息的模块是不可访问的;每个模块只完成一个相对独立的功能;模块之间仅仅交换那些为完成系统功能而必须交换的信息。采用信息隐藏原理不仅支持模块的并行开发,而且还可以减少测试和后期维护的工作量。(2)高内聚度 内聚是一个模块内部各成分之间相关联程度的度量。内聚度按其高低程度可分为七级。这七级内聚又可以分为三类:低级、中级和高级。1)偶然性内聚。偶然性内聚又称为巧合性内聚。当模块内各部
37、分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块。2)逻辑性内聚。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。3)时间性内聚。如果一个模块内的几个功能必须在同一时间内执行,但这些功能只是因为时间因素关联在一起,则称为时间性内聚。4)过程性内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程性内聚。5)通信性内聚。如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。6)信息性内聚。如果一个模块内完成许多功能,每个功能都有各自的入口点,并
38、且代码相对独立,但所有功能都在相同的数据结构上完成,则该模块具有信息性内聚。7)功能性内聚。一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割,则称该模块为功能内聚模块。(3)低耦合性 耦合度是对软件结构中模块之间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少等。内聚和耦合是密切相关的,与其他模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其他模块之间存在弱耦合。模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。耦合度分为七级。
39、1)非直接耦合。如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。2)数据耦合。如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换 输入、输出信息的,则称这种耦合为数据耦合。3)标记耦合。如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。4)控制耦合。如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。5)外部耦合。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息
40、,则称之为外部耦合。6)公共耦合。若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。7)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。一般来说,设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共耦合,杜绝内容耦合。6.5.2.36.5.2.3功能模块设计的步骤功能模块设计的步骤 系统功能模块设计的核心工作包括接口定义、数据结构与程序流程的确定及确定各功能模块之间的部署关系。接口是模块的外部特征,是指模块的模块名、参数表。输入、输出参数及给程序乃至整个系统造成的影响应当是公开的。数据结构与程序流程是模块的内部特征
41、,是指完成其功能的程序代码和仅供该模块内部使用的数据。对调用者来说一个“黑盒子”,只需要按照接口确定的使用方式进行调 用,不必了解它的内部特性。模块之间的组织关系是将各个模块有效地组织起来,以实现一个完整的系统功能架构,是系统功能设计中不可缺少的“整体纽带”。对于软件设计来说,通常是先确定模块的外部特性,再确定它的 内部特性,最后确定系统功能的整体部署方案和组织模式,这些工作需要在概要设计和详细设计阶段共同完成。模块设计的工作流程分为设计准备、模块构建、文档编写和评审四个阶段。(1)设计准备 1)模块设计人员阅读需求文档和体系结构设计文档资料,明确模块设计中的约束条件和设计任务。2)模块设计人
42、员准备相关的设计工具和资料。(2)模块构建 1)定义接口 定义每个模块的接口,确定模块的接口细节,包括对系统外部的接口和用户界面,与系统内部其他模块的接口,以及确定关于模块输入、输出及相关配置信息的全部细节。2)确定数据结构与程序流程 为每个模块确定所采用的程序流程、实现算法和数据结构,选择某种适当的工具表达算法的实现过程,写出模块实现的详细过程性描述。3)确定模块之间的组织关系 确定各模块之间的架构策略和组织关系,以保证整个功能结构的完整性和整体构建方案。(3)文档编写 完成详细设计说明书中功能设计部分的文挡的编写工作。(4)评审 先对每一模块进行单独评审,然后再对整体功能架构进行评审。6.
43、5.3信息模型设计信息模型设计 信息模型设计也称为数据与数据库设计,它把系统所涉及的信息描述转换为实现软件所要求的数据结构及关系。6.5.3.16.5.3.1数据库设计应考虑的问题数据库设计应考虑的问题 数据库设计的主要工作是:1)设计数据库的表;2)设计数据库表间的关系;3)设计对数据库的表进行增、删、改所触发的动作(触发器);4)涉及相关的存储过程。设计原则:(1)命名的规范 不同的数据库产品对对象的命名有不同的要求,为了尽量通用,数据库中各种对象的命名、后台程序代码编写应采用大小写敏感的形式,各种对象命名长度不要超过30个字符。(2)数据的一致性、完整性和整体性能 数据库的一致性和完整性
44、是通过设计表间关联来实现的。表间关联设计的多,数据冗余降低。但表间关联是一种强制性措施,建立后,对关联表的插、删、改操作都要占用系统开销。因此要合理考虑表间关联。(3)数据类型的选择 数据类型的合理选择对于数据库的性能和操作具有很大的影响,这里主要介绍几点经验知识。1)Identify字段不要作为表的主键与其他表关联,这将会影响到该表的数据迁移。2)Text和Image字段属指针型数据,主要用来存放二进制大型对象(BLOB)。这类数据的操作相比其他数据类型较慢,因此要避开使用。3)日期型字段的优点是有众多的日期函数支持,因此,在日期的大小比较、加减操作上非常简单。但是,在把日期作为条件的查询操
45、作中如果用日期函数,相比其他数据类型速度上就会慢很多。因为用函数作为查询条件时,服务器无法用先进的性能策略来优化查询而只能通过表的扫描来遍历每条记录。6.5.3.26.5.3.2数据库设计的步骤数据库设计的步骤 数据库设计也分为4个阶段。(1)设计准备 需要完成三方面的工作:1)阅读需求文档和体系结构设计文档,完成数据库设计的需求收集。包括收集数据、发生时间、频率、发生的规则、约束条件、相互联系、计划控制和决策过程等内容。2)需求的分析整理。包括用数据流图表示数据流程,用数据字典对数据分析结果的描述。3)数据库设计人员确定本软件的数据库设计规则。(2)数据库设计 包括概念设计、逻辑设计、物理设
46、计、其他设计等步骤。1)概念设计 数据库概念设计的任务是产生反映企业组织信息需求的数据库概念结构,即概念模型。2)逻辑设计 逻辑设计的目的是从概念模型导出特定的DBMS。这些模式在功能、性能、完整性和一致性约束及数据库可扩充性等方面均满足用户提出的要求。3)物理设计 数据库的物理设计是给已确定的逻辑数据库结构设计出一个有效的、可实现的物理数据库结构的过程。主要包括存储记录的格式设计、存储方法设计、访问方法设计、完整性和安全性考虑等内容。4)其他设计 包括加强数据库的安全性、完整性控制以及保证一致性、可恢复性等,它们总是以牺牲效率为代价的。设计人员要在尽可能多的功能之间进行合理平衡。(3)编写数
47、据库设计文档 完成数据库设计报告的编写工作。该报告的主要内容包括:1)数据库环境说明 2)数据库的命名规则 3)概念设计 4)逻辑设计 5)物理设计 6)其他设计 7)数据库管理与维护说明 (4)评审 质量管理人员组织同行专家、开发人员,对数据库设计报告进行 技术评审。数据库设计的主要评审要素包括:正确性、完整性、一致性;安全性;性能等方面。6.5.4用户界面设计用户界面设计6.5.4.16.5.4.1用户界面设计概述用户界面设计概述 用户界面的质量直接关系到软件受用户的青睐程度,能否使用户高效率、轻松愉快满意地工作。用户界面设计已经经历了两个界限分明的时代:第一代是以文本为基础的简单交互,如
48、常见的命令行、字符菜单等;第二代是直接操作的图形用户界面。它大量使用图形、语音和其他交互媒介,充分地考虑了人的需求。6.5.4.26.5.4.2用户界面设计原则用户界面设计原则 (1)用户界面适合于软件的功能 用户界面的合适性是指界面与软件功能相融洽的程度。软件的功能需要通过用户界面来展现,毫无疑问,用户界面一定要适合于软件的功能。界面设计的合适性原则要求界面设计者不要片面追求界面外观漂亮而导致华而不实。界面的合适性既提倡外美内秀,又强调恰如其分,不能太花哨。(2)使用的简单性和易理解性 用户界面应能方便地处理各种经常进行的交互过程,如果用户很难理解软件系统界面的意图,那么使用起来一定很费劲。
49、提高用户界面可理解性的方法:1)界面中的所有元素(如菜单、工具条等)醒目无误、直观,不易让人误解。2)所有的界面元素应当提供充分而必要的提示。3)提供上下文敏感的求助系统。4)界面结构能够清晰地反映工作流程,以便用户按部就班地进行操作。5)对于复杂的用户界面,最好提供界面“向导”,及时让用户知道自己在界面结构中所处的位置。(3)一致性原则 界面的一致性主要体现在两个方面:第一、用户界面中,同类的界面元素应当有相似的界面外观、布局,相似的交互方式及相似的信息显示格式;第二,同一类型软件的用户界面应当有一定程度的相似性。需要掌握的原则:1)同一用户界面中,所有的菜单选择、命令输入、数据显示和其他功
50、能应始终保持同一种形式和风格。2)采用统一的标号、约定俗成的缩写和预先定义好的颜色。3)保证信息显示方式与数据输人方式的协调一致。(4)及时反馈信息 用户界面应对用户的所有输入都立即做出反馈。无论系统给予用户的反馈信息多么简单。例如:当系统进行长时间处理时,用户界面应提供用户等待信息及系统运行状态信息。(5)出错处理 软件使用过程中,不可避免地会出现一些错误的操作。设计用户界面时必须考虑出错处理,常见的错误处理方式有:1)提供对输入数据进行校验的功能。当用户输入错误数据时,及时提醒用户改正数据。2)隐藏当前状态下用户不可操作的命令。3)提供撤消功能,以方便用户撤消不期望的操作。4)当用户执行的