计算机软件技术基础-课件 第12章 需求分析和软件设计_第1页
计算机软件技术基础-课件 第12章 需求分析和软件设计_第2页
计算机软件技术基础-课件 第12章 需求分析和软件设计_第3页
计算机软件技术基础-课件 第12章 需求分析和软件设计_第4页
计算机软件技术基础-课件 第12章 需求分析和软件设计_第5页
已阅读5页,还剩165页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

需求分析问题定义可性行研究计划时期概要设计详细设计编码测试开发时期运行与维护运行时期当前位置:软件的生命周期第12章需求分析和软件设计12.1

需求分析12.2软件设计12.1

需求分析要求

1.熟悉软件需求分析的目的、任务、基本过程(步骤)。

2.掌握需求分析的方法:数据流图、数据字典和简明算法的描述。

3.掌握基于数据流图的结构化分析的方法。

4.了解需求规格说明书和需求评审的主要内容学习要点: 数据流图、数据字典、结构化需求分析的方法学习内容12.1.1

需求分析概述12.1.2数据流图12.1.3数据字典12.1.1

需求分析概述1.

需求分析的任务2.需求分析的步骤3.结构化分析方法什么是软件需求(用户)对软件产品的期望:待开发软件系统的功能、性能、设计约束和其它要求1.

需求分析的任务1.

需求分析的任务☆基本任务—确定系统必须“做什么?”的问题

仍然回答“What”,而不是“How”, 但更细致、精确(合同的拟定)软件开发人员要进行细致的调查分析,准确地理解用户的要求。(理解和表达)

在理解用户的需求后,借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统“做什么”的问题。

写出软件的需求规格说明书(SRS:SoftwareRequirementSpecification),准确、具体地表达用户的要求。1.

需求分析的任务需求分析的重要性

构建软件系统最艰难的一个部分是准确地决定要构建什么,没有其它的概念性工作像建立详细的技术需求这样困难,包括所有对人的界面、对机器的接口以及对其它软件系统的接口。没有其它部分像它这样,如果做错了,会对最终系统造成如此大的损害。没有其它部分在后期比它更难以调整。(Brooks《人月神话》)1.

需求分析的任务需求分析的重要性软件开发的基础和前提(计划时期和开发时期之间的桥梁)。需求规格说明书为用户和开发人员提供协商讨论的基础,作为软件设计、实现、测试和维护的依据。避免或者尽早剔除早期的错误。软件生命周期中,一个错误发现得越晚,修复错误的费用越高1.

需求分析的任务需求分析的复杂性和面临的困难需求易变性(用户不清楚他们需要系统做什么/不知道真正的需求/过分夸大需求)问题的复杂性(涉及因素较多:运行环境、系统功能;应用领域)交流障碍(分析人员、用户、专家)需求被误解。软件工程师听到客户的要求,但他们所听到的不是客户所应当说的。不完备性和不一致性(当时提供的需求与后来的需求发生冲突)因此必须使用系统的方法、借助于一系列行之有效的技术和工具进行软件需求分析2.需求分析的步骤需求分析过程示意图(1)需求获取(2)需求提炼(3)需求描述需求获取方法分析建模软件需求规格说明书(4)需求验证复审、验证2.需求分析的步骤(1)需求获取1)确定对系统的综合需求

①系统功能需求--划分出系统所有功能②系统性能需求--达到各项技术指标③系统运行需求--系统运行时所处的环境的需求

环境:系统软件数据库外存储器数据通讯接口④将来可能提出的需求

2)分析系统的数据需求①由信息流归纳抽象出数据元素组成、数据的逻辑关系、数据字典的格式、数据模型②结构化方式表示:输入—处理—输出用户需求例子-图书馆管理系统功能需求:办理读者借书证,…性能需求:查询操作延迟时间不超过1秒钟,…设计约束:前台运行在WindowsOS下,…其它要求:开发时间6个月,…2.需求分析的步骤(2)需求提炼:分析建模

在明确目标系统要“做什么”基础上,导出用数据流图和数据字典等描述目标系统的逻辑模型。软件开发项目是要实现目标系统的物理模型。确定待开发软件系统的系统元素,并将功能和数据结构分配到这些系统元素中。目标系统的物理模型是由它的逻辑模型经实例化,即具体到某个业务领域而得到的。逻辑模型忽视机制和细节,只描述系统要完成的功能和要处理的数据建立系统模型的工作流程2.需求分析的步骤(3)需求描述:编写“软件需求规格说明书”需求规格说明书作用:·软件设计基础

·测试和验收的依据1)特征:

①唯一性(无二义性)②完整性③一致性④可修改性

“软件需求规格说明书”(*)2)内容:

①引言——目的、背景… ②概述——目标、用户特点…

③数据描述:·数据流图·数据字典·接口说明

④需求说明:

·功能描述——软件具体的功能要求

·性能描述——包括软件的处理速度响应时间、精度等

⑤运行需求:·用户界面·硬件·软件·故障处理

其它——如安全保密、可维护性、可移植性2.需求分析的步骤(4)需求验证:复审、验证软件需求分析的正确性多方人员(专家、分析人员、开发人员、用户)一起对需求分析结果进行复核和评审,对功能的正确性、完整性和清晰性,以及其他需求给予评价。正确性:每项要求都必须准确地反映用户要完成的任务。完整性:

不遗漏任何必要的需求;

清楚、完整地描述每一项需求。一致性、必要性、无歧义性、可验证性…2.需求分析的步骤*需求获取的常用方法(1)建立联合分析小组

:建立一个由用户、系统分析员和领域专家参加的联合分析小组。加强联系促进交流增进合作*需求获取的常用方法(2)客户访谈:深入现场和用户方的各层业务人员进行多次交流。(3)问题分析与确认:一般需要2~5个来回。*快速原型法在需求分析中的应用传统软件开发存在的问题需求分析员与用户之间没有一种直观交流媒介用户需求不断变化

如何适应这样一种变化如何更为直观地评价用户需求快速原型方法利用软件开发模型中快速原型的思想通过构建用户需求的原型来分析和描述用户需求*快速原型法在需求分析中的应用*采用快速原型法定义需求的步骤:生成一个简化的需求规格说明;确定原型的软件结构、用户界面和数据结构等;快速生成可运行的软件原型并进行测试、改进;交给用户评估并征求用户的修改意见;重复上述过程,直到原型得到用户的认可。结构化软件开发方法

(StructedSoftwareDevelopment)结构化分析(SA,StructedAnalysis):最经典的面向数据流的需求分析方法,适用于分析大型数据处理系统结构化设计(SD,StructedDesign):结构化编程(SP,StructedProgramming):3.结构分析方法(SA)基本思想——“分解”和“抽象”分解:对于一个复杂的系统,为了将复杂性降低到可以掌握的程度,可以把大问题分解成若干小问题,然后分别解决。抽象:分解可以分层进行,即先考虑问题最本质的属性,暂把细节略去,以后再逐层添加细节,直至涉及到最详细的内容,这种用最本质的属性表示一个系统的方法就是“抽象”。特点:以数据流分析作为需求分析的出发点,任何信息处理过程均看成是将输入数据变换成所要求的输出信息的装置。用数据流图来帮助人们理解问题、分析问题。用数据字典精确定义数据流图中每个元素(数据流)的成分。用结构化语言、判定表和判定树对数据流图中的每个加工进行描述。12.1.2数据流图

(DFD-DataFlowDiagram)1.数据流图的定义和作用2.数据流图的符号3.数据流图的基本成分4.数据流图的画法5.数据流图与其它流程图的差别1.数据流图的定义和作用数据流图(DFD,DataFlowDiagram)是描述系统逻辑模型的一种图形工具。它以图形的方式表达系统中的信息变换和传递的过程。

作用:

是需求分析的主要工具。

作为软件开发和维护各阶段信息交流的工具。

以图中不同加工逻辑指导物理系统设计。软件模型图说明:a、数据流图是结构化系统分析的主要工具。b、它表示了系统内部信息的流向,并表示了系统的逻辑处理功能,是一种功能模型。2.数据流图的符号四种基本符号:圆框—代表数据的变换/加工

方框—表示数据流的源点和终点

箭头—代表数据流,表示数据路径和流向

双杠(或单杠)—表示数据文件、数据库、数据存储注意:每一个图形符号都必须标上名字。名字:加工名数据流名文件名源点/终点名

数据流图例子:机票销售系统3.数据流图的基本成分

⑴数据流:是沿箭头方向传递数据的通道,它具有名字和流向;(流动的数据)方向规定:

·加工→加工·加工←→文件

·源点→加工·加工→终点

说明:在同一张数据流图上不能出现重名的数据流。数据流名⑵加工处理--是对数据流执行某种操作或变换。说明:

通常用一祈使短语表示

就是要完成什么功能

每个加工有一个加工名3.数据流图的基本成分加工名⑶文件--按照某种规则组织起来,长度不限的数据(静止的)。3.数据流图的基本成分文件名说明:-文件:静止的数据指向文件的数据流:写入文件或查询文件流出文件的数据流:读取文件或得到查询结果注:由于文件的内容顾名思义,因而对文件的存取数据流不一定要用名字标记。

⑷源点和终点(统称为“外部实体”)——都对应于外部实体。表示要处理数据的输入来源或处理结果要送往何处。不需要用软件的形式设计和实现具体表现为人员、外设、传感器等3.数据流图的基本成分源点/终点名4.数据流图的画法基本原则:“自外向内,自顶向下,逐层细化,完善求精”

(1)

单层数据流图

步骤:

1)提取四种成分

①找出源点和终点②找出主要加工③找出数据流

④找出文件

2)画系统的输入、输出数据流

单层数据流图的画法3)画数据流图的内部,将系统的输入、输出用一连串加工连接起来

①画加工——表达用户期望的全部工作

②找出数据流——了解每一数据流的组成和加工,设法与系统的输入/输出数据流联系起来。③画文件——同一文件可以在多处画出4)为数据流命名5)为加工命名说明:①绘数据流图时,只考虑数据流的静态关系,而不考虑其动态关系;②只考虑常规状态,而不考虑其异常状态;③动态关系和异常状态一般在设计阶段解决。(2)分层数据流图--数据流图的画法数据流图的分层思想

为了表达复杂系统的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统。分层的基本思想是“自顶向下、逐步求精”

做法:

从系统的基本模型(把整个系统看成一个加工)开始,逐层对系统进行分解,直到所有的加工都足够简单,不必再分解为止。通常把这种不需要再分解的加工称为“基本加工”

X1321.11.21.41.32.12.21.1.11.1.22.1.32.1.22.1.12.2.22.2.32.2.1顶层中间层底层先全局后局部,先整体后细节,先抽象后具体.0图1图2图1.1图2.1图2.2图分层的数据流图分层的数据流图在多层数据流图中,顶层数据流图仅包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据。底层数据流图是指其加工不需再做分解的数据流图,它处在最底层。中间层数据流图则表示对其上层父图的细化。它的每一加工可能继续细化,形成子图。分层数据流图举例举例:某单位工资管理系统第一步:画顶层图; 任何系统的顶层数据流图都只有一个,用于反映目标系统所要实现的功能及与外部环境的接口。 顶层数据流图中只有一个大的加工(代表整个系统),数据的源点和终点对应系统的外部实体,表明了系统输入数据的来源和输出数据的去向。顶层(0层)DFD图--工资管理系统人事部门后勤部门出勤表业绩表水电扣款表职工银行工资条1计算工资实发工资表3工资转存2打印工资清单工资存款清单工资清单F3分层数据流图举例第二步:画第一层数据流图;把工资计算系统可划分为计算工资、打印工资清单和工资转存三个加工。第一层DFD图--工资管理系统计算工资完成单位职工工资计算,生成工资清单的功能打印工资清单完成工资条的打印功能工资转存完成生成职工工资存款清单并将其发送到银行的功能人事部门出勤表业绩表1.1计算奖金和缺勤扣款奖金发放表1.2计算应发工资

应发工资表1.3计算所得税1.4计算实发工资实发工资表水电扣款表后勤部门所得税扣款缺勤扣款表工资清单F3(a)(b)工资计算实发工资表3.1查找职工银行工资账号实发工资账号3.2生成工资存款清单工资存款清单银行职工个人工资账号清单F4(a)“计算工资”子数据流图;(b)“工资转存”子数据流图分层数据流图举例第三步:继续分解,得到第二层数据流图;

第二层DFD--工资管理系统

对分解得到的加工进行编号,以反映出它与上层数据流图之间的关系。如对第一层数据流图中的计算工资分解得到的数据流图中的加工的编号分别为1.1~1.4。“计算奖金和缺勤扣款”子数据流图;“计算应发工资”子数据流图分层数据流图举例第三层DFD--工资管理系统分层数据流图举例

从分层数据流图看出:·顶层——描绘了系统的外貌。·底层——提供了细节。·中间层——给出了从抽象到具体的逐步过渡。⑵分层数据流图(DFD)的优点

·便于实现:避免一次引入过多细节,有利于控制问题的复杂度·便于使用:使用户中的不同业务人员可各自选择与本身有关的图形

⑶画分层DFD的指导原则①注意父图和子图的平衡

在分层图中,上层图是下层图的父图,下层图是上层图的子图。任何一个子图与其父图上的一个加工对应。

平衡——指父图和子图的输入数据流和输出数据流应分别保持一致,即信息的连续性必须保持。平衡!父图与子图的平衡不平衡!分层DFD的指导原则②区分局部文件和局部外部项

在下层DFD中可能出现父图中没有的文件和外部项,称为局部文件和局部外部项。一般: 底层DFD—画出全部文件;中间层DFD—画出处于加工之间的接口文件。③掌握分解的速度

每一加工每次可分为2-4个加工,最多不要超出7个。(避免饼形或细长形软件结构)分层DFD的指导原则④遵守加工编号规则加工编号规则:·顶层加工不编号;·第一层的加工编为1,2,3,……,n号;·第二层加工编为1.1,1.2,…,1.n号;

各层DFD的编号规则:·顶层DFD图无图号·第一层编为"图0"·第二层编为"图1","图2",……"图n";·第三层编为"图1.1","图1.2",……,"图1.n"…

概括:·子图的编号即为父图相应加工的编号

·子图中加工的编号由子图号、小数点、局部号构成

分层DFD的指导原则⑤适当的命名—使数据流图便于理解,其他:数据守恒:—每一个加工既有输入数据流又有输出数据流。5.数据流图与其它流程图

的差别系统流程图--表达信息在系统各部件之间的流动情况(数据流、物流、资金流等)。程序流程图--对信息进行加工处理的控制过程(存在先后、时序等限制)。软件结构图—模块间的控制关系、调用关系等。数据流图--描绘信息在系统中变换和传递的情况,不包含任何具体的物理元素。

描述物理模型--系统流程图描述逻辑模型--数据流图注:设计时只考虑系统必须完成的基本逻辑功能。

结构分析方法(SA)基本思想——“分解”和“抽象”分解:对于一个复杂的系统,为了将复杂性降低到可以掌握的程度,可以把大问题分解成若干小问题,然后分别解决。抽象:分解可以分层进行,即先考虑问题最本质的属性,暂把细节略去,以后再逐层添加细节,直至涉及到最详细的内容,这种用最本质的属性表示一个系统的方法就是“抽象”。特点:以数据流分析作为需求分析的出发点,任何信息处理过程均看成是将输入数据变换成所要求的输出信息的装置。用数据流图来帮助人们理解问题、分析问题。用数据字典精确定义数据流图中每个元素(数据流)的成分。用结构化语言、判定表和判定树对数据流图中的每个加工进行描述。Review父图与子图的平衡平衡!12.1.3数据字典

(DDDataDictionary)1.数据字典的定义和用途2.数据字典的内容3.加工逻辑描述工具1.数据字典的定义和用途数据字典--是关于数据信息的集合,也是对数据流图中出现的的各个元素(数据流、加工、文件)进行完整的定义和说明的集合。用途:

·提供关于数据的描述信息;

·保持数据在系统中的一致性;

·对数据流图(DFD)起注解作用;

·可避免因理解不同而造成混乱。逻辑模型:

·数据流图(DFD)

·数据字典(DD)

共同构成系统的规格说明背景:分层数据流图只是表达了系统的“分解”,为了完整地描述这个系统,还需借助“数据字典”对图中的元素作出解释。2.数据字典的内容

·

数据流·

数据项

·

数据存储文件·

基本加工

⑴数据流条目

--严格定义组成数据流的数据项。数据流名:说明:简要介绍作用,即它产生的原因和结果数据流来源:来自何方数据流去向:去向何处数据流组成:数据结构处理特点(使用频率、数据量等)四种基本条目:示例1:发票数据流名称:发票别

名:购书发票来

源:加工1.2

处:加工1.3、1.4

成:学号+姓名+{书号+单价+数量+总价}

+书费合计

发票(数据流名)=学号(数据项)+姓名(数据项)

+{书号+单价+数量+总价}+书费合计常用符号的描述符号 含义 举例=被定义为+

x=a+b“...”基本数据元素

x=“a”[...,...]或[...|...]或

x=[a,b],x=[a|b]{...}或m{...}n

重复

x={a},x=3{a}8(...)可选

x=(a)+b.. 连结符

x=1..9⑵数据项条目

--给出某个数据单项的定义。

说明:通常指数据项(是不可再分解的数据单位)的。

定义内容:数据项名:值类型:数字(离散值,连续值),文字(编码类型)长度:取值范围:相关的数据元素及数据结构:2.数据字典的内容示例1:年级数据元素名:年级别

名:无取值及含义:F――freshman,一年级M――sophomore,二年级J――junior,三年级S――senior,四年级备

注:F/M/J/S可分别用1、2、3、4代替⑶数据存储文件条目

--说明文件的组成数据及组织方式。

数据存储名称:流入、流出数据流:数据存储的组成:数据结构简述:存放的是什么数据数据存储的组织:2.数据字典的内容示例1:各班学生用书表文件名:各班学生用书表描

述:记载一个班在一学年中需用的教材组

成:{系编号+专业和班编号+年级+{书号}}

组织方式:按系、专业和班编号从小到大排列

系编号={数字}2例:01,03,12

专业和班编号={数字}4例:9981

年级=[1/2/3/4]

书号={字母}+{数字}例:ENG1,ENG2,MATH11⑷基本加工条目

--对基本加工进行精确描述,即进行加工说明。

基本加工:是指数据流图中不再分解的加工。加工名:加工编号:反映该加工的层次简要描述:加工逻辑及功能简述输入数据流:输出数据流:加工逻辑:策略,简述加工程序,加工顺序2.数据字典的内容示例1

加工名:开发票

编号:1.2

输入数据流:有效购书单

输出数据流:发票加工逻辑:(使用专用工具表达)⑷基本加工条目

加工逻辑说明的描述方式有三种工具:

·结构化语言(StructuredEnglish)

·判定表(DecisionTable)

·判定树(DecisionTree)2.数据字典的内容3.加工逻辑描述工具常用的有结构化语言、判定表、判定树等。(1)结构化语言结构化语言--自然语言+结构化形式结构化程序设计语言中的三种控制结构(顺序、选择、重复),作为加工说明的外部框架。结构化语言—示例例1:商店业务处理系统中“检查发货单”IF

发货单金额超过$500THEN

IF

欠款超过了60天THEN

在偿还欠款前不予批准

ELSE(欠款未超期)发批准书,发货单

ENDIFELSE

(发货单金额未超过$500)

IF欠款超过60天THEN

发批准书,发货单及赊欠报告

ELSE

(欠款未超期)发批准书,发货单

ENDIFENDIF例2加工名:核实订票处理(MHGP3200MD)编号:3.2激活条件:收到取订票信息加工逻辑:1读订票旅客信息文件

2搜索文件中是否有与输入信息姓名及身份证相符的项

IF

有THEN

判断余项是否与文件中信息相符

IF

是THEN

输出已订票信息

ELSE输出未订票信息

ELSE输出未订票信息执行频率:实时(2)判定表

判定表--采用表格化的形式,描述在各种条件下的处理,适于表达含有复杂判断(组合条件的判断)的加工逻辑。

例如:对商店每天的营业额所收税率营业额X(¥)1000≤X<50005000≤X<10000X≥10000税率5%8%10%判定表的优缺点优点: 判定表能够把不同条件下系统应完成哪些操作,表达得清楚、准确,一目了然。缺点: 用判定表描述循环比较困难。说明:

判定表可和结构化语言结合起来使用。(3)判定树判定树--以由左向右水平放置的树形式描述加工逻辑。说明:适用场合同判定表图“升留级”判定树加工逻辑的三种表达工具比较不太复杂的判断逻辑——判定树

复杂的判断逻辑——判定表既包含一般的顺序执行动作,又包含了判断或循环逻辑的时候——结构化语言

*结构化分析(SA)方法☆

(StructuredAnalysis)1.结构化分析方法的思想2.结构化分析方法的实现步骤——一种面向数据流进行需求分析的方法*1结构化分析方法的基本思想一、SA基本思想:SA--是用抽象模型的概念,按照软件内部数据传递、变换关系,自顶向下逐层分解,直到找到满足功能需要的所有可实现的软件元素为止。

二、SA使用的描述工具:

·数据流图

表示了软件中的信息流向和信息的加工

·数据字典

对这些信息和加工进行更详细的描述;

特点:

①自顶向下、逐层分解;②采用简明易懂、直观的描述方式

*SA方法三、处理问题的基本手段:

·先抓住问题共同的和本质的方面加以抽象概括,考虑问题的主要矛盾,形成高层次的概念—抽象☆·然后把整体问题分割成具有相对独立性的若干小问题—分解☆分解可以逐层进行,即逐层添加细节进行逐层分解四、描述方式

用SA方法进行系统分析后,可以得到:

①一套分层的数据流图

②一本数据字典

——共同构成了系统的逻辑模型*结构化分析方法的实现步骤基本实现的分析步骤:①理解当前系统,获得当前系统的物理模型;②建立当前系统的逻辑模型;③建立目标系统的逻辑模型;④对目标系统的逻辑模型进行完善和补充。

*确定目标系统的人—机界面,即系统与外界环境的*补充尚未考虑的细节,如系统的响应时间、出错处理等*SA方法流程图需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统“做什么”

的问题。*需求规格说明与复审*1.需求规格说明的特性*2.需求规格说明的内容*3.需求分析复审小结需求分析这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。结构化分析方法(SA),采用“自顶向下、逐步分解”的指导思想。SA通常用数据流图、数据字典(包括简要的算法描述)表示系统的逻辑模型。它是以后设计和实现目标系统的基础。作业习题1212.2,12.4,12.6,12.8(可选)需求分析问题定义可性行研究计划时期概要设计详细设计编码测试开发时期运行与维护运行时期当前位置:软件的生存周期第12章需求分析和软件设计12.2软件设计12.2.1

概要设计12.2.2软件设计概念与原则12.2.3结构化设计方法12.2.4详细设计概述12.2.1软件概要设计学习目标:

1.掌握:软件设计的概念与原则,概要设计的任务、步骤和方法。

2.了解:概要设计文档与评审。

学习要点:

软件设计的概念与原则、概要设计的任务、步骤和方法、面向数据流的设计方法

概述软件设计的总体目标:将需求分析阶段得到的目标系统的逻辑模型,变换为目标系统的物理模型。(根据需求分析的“做什么”,确定系统应该“怎么做”)软件设计的任务:把分析阶段产生的软件需求规格说明转换为用适当手段表示的软件设计(包括能实现软件功能、性能要求集合的最合理的软件系统结构、设计实现的算法和数据结构),并形成软件设计文档。概述从工程管理的角度来看,软件设计阶段的工作分成两步:

概要(总体/初步)设计:

将软件需求转化为数据结构和软件的系统结构(结构设计、接口设计),形成概要设计文档。

详细(过程/构件)设计:通过对结构表示进行细化,得到软件详细的数据结构和算法,产生描述各软件构件的详细设计文档。12.2.1软件概要设计基本过程:

软件体系结构设计系统架构设计:定义组成系统的子系统以及对子系统的控制、子系统之间的通信和数据环境等;(仓库模型、分布式结构(多处理器、客户-服务器等))软件结构设计:定义构造子系统的功能模块、模块接口、模块之间的调用与返回关系;数据结构(数据库)设计:12.2.1软件概要设计基本过程:

软件体系结构设计:系统架构设计、软件结构设计数据结构(数据库)设计:

设计构造子系统的数据结构、数据库等。数据结构设计:根据需求分析阶段对系统数据的组成、操作约束、和数据之间的关系(E-R图)的描述,确定数据结构的特性。数据库设计:一般的软件系统往往会借助数据库技术进行数据的存储和管理。数据库设计指数据存储文件/数据库系统的设计,包括概念设计、逻辑设计、物理设计。12.2.1软件概要设计说明:概要设计获得软件系统的基本结构,它从从全局来把握系统的实施方案和策略。软件内部的实现细节,在详细设计阶段解决。*概要设计的内容(了解)内容:1.制定规范2.系统架构设计3.软件结构设计4.公共数据结构设计5.安全性设计6.故障处理设计7.可维护性设计8.文档设计9.概要设计复审12.2.2软件设计概念与原则

软件设计原则在20世纪60年代后陆续被提出,指导软件设计决策以开发高质量的软件系统。1.模块与模块化2.抽象与逐步求精3.信息隐蔽和局部化4.模块独立性5.软件程序结构的设计原则1.模块化背景:软件的体系结构一旦确立以后,需要做的工作就是进行系统的模块分解。模块—是相对独立的,由数据说明、可执行语句等程序对象构成的集合。“模块“可单独被命名的而且可通过名字来访问。

如:过程、函数、子程序、宏等等都可作为模块。模块化—把软件系统划分成若干个模块,每个模块完成一个子功能,把这些模块组合起来,满足问题的需求。(说明:模块化是好的软件设计的一个基本准则。)模块化的目的:将系统“分而治之”,以降低问题的复杂性,使软件结构清晰,易于阅读、易于理解、易于测试和调试,因而有助于提高软件的可靠性。复杂问题较小问题分解1.模块化是不是模块划分得越多越好呢?影响软件的总的工作量的因素有两个:模块复杂性成本,模块接口成本。模块化与软件成本如右图:模块化的目的—是减少程序复杂性。2.抽象与逐步求精什么是抽象?抽象是在认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,忽略那些与当前研究目标不相关因素。软件开发实际上就是一个从高层次抽象到低层次抽象逐步过渡的过程在抽象的最高层次,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,采用更过程化的方法,描述问题时,面向问题的术语和面向实现的术语相结合。抽象的最底层,可以用直接实现的方式来说明。2.抽象与逐步求精

什么是逐步求精思想(细化)?逐步求精是一种自顶向下的设计策略,是先总体后局部的原则。对一个问题的解决,自顶向下、逐步细化。软件开发过程中的层次结构上层是下一层的抽象,下层是上一层的求精(具体)软件结构的顶层:全局;软件结构的底层:具体处理;3.信息隐蔽和局部化

信息隐蔽原理:每一个模块的实现细节对于其他模块来说是隐蔽的。独立的模块仅交换为了完成系统功能而必须交换的信息。一个模块中所包含的信息(数据和过程等)不允许其他不需要这些信息的模块使用。局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。好处:有助于信息屏蔽。说明:信息隐蔽的目的:主要是为了提高模块的独立性,减少将一个模块中的错误扩散到其他模块的机会。模块之间的信息传递只能通过合法的调用接口来实现。

一般模块具有的属性接口:模块的输入输出;功能:指模块实现什么功能,做什么事情(包括模块本身的功能加上它所调用的所有子模块的功能);逻辑:描述模块内部如何实现需求及所需数据;状态:该模块使用时的环境和条件(模块间调用与被调用关系)。把软件划分成模块后,怎样评价模块结构的好坏?模块独立性4.模块独立性

模块独立性--模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的(具有单一功能且与其它模块没有过多相互作用的特性)。模块独立性的重要性*有效模块化的(具有独立模块的)软件比较容易开发。*独立的模块比较容易测试和维护。4.模块独立性

模块的独立程度可以由两个定性标准度量:

·耦合性--块间联系

·内聚性--块内联系

理想的情况是:高内聚、低耦合:块间联系尽可能少,块内联系尽可能大。(1)

耦合

耦合是对一个软件结构内各个模块之间相互连接紧密程度的度量。具体区分模块间耦合程度的强弱的标准如右图:

耦合强弱取决于:数量:模块间接口的复杂程度;方式:调用模块的方式;作用:通过接口的信息类型。(1)

耦合①非直接耦合

--两个模块之间没有直接关系,它们直接的联系完全是通过主程序的控制和调用来实现的。图非直接耦合(1)

耦合②数据耦合--例:如图所示如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入/输出信息的,则称这种耦合为数据耦合。图数据耦合(1)

耦合③标记耦合

--通过模块接口传递的是整个数据结构而不是简单的参量。例:如图

标记耦合“房租水电”是一个数据结构房租水电=房租+用水量+用电量(1)

耦合

④控制耦合

--如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。控制耦合示例:控制耦合示例:去除模块间控制耦合的方法:将被调用模块内的判定上移到调用模块中进行被调用模块分解成若干单一功能模块⑤外部耦合

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。

⑥公共耦合一组模块都访问同一个公共数据环境。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等Acommon公共数据区BAcommon公共数据区B松散的公共耦合紧密的公共耦合⑦内容耦合一个模块直接访问另一模块的内部信息。出现下列情况之一,即出现了内容耦合:一个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一个模块;两个模块有一部分程序代码重叠(汇编程序中);一个模块有多个入口。最不好的耦合形式!!!(1)

耦合耦合是影响软件复杂程度的一个重要因素。应该采取的原则:

尽量使用数据耦合;少用控制耦合;限制公共耦合;完全不用内容耦合。模块间的耦合与独立性程度(2)内聚性

--内聚性(cohesion),对一个模块内部各个成分(各种数据和各种处理)之间相互关联程度的度量。(2)内聚性①偶然内聚(coincidentalcohesion)--模块内各部分之间没有意义上的联系(完全不相关)。图偶然内聚缺点:可维护性差、不可重用(2)内聚性②逻辑内聚(logicalcohesion)

--一个模块由若干个逻辑功能相似的成分/操作组成(由调用模块选择)。

缺点:1、接口难以理解;2、增大了模块之间的耦合;完成多个操作的代码纠缠在一起,导致维护问题。(2)内聚性③时间内聚(temporalcohesion)

--模块执行一系列与及时性有关的操作(一个模块内所包含的多个任务必须在同一“时间”内执行)。因时间因素而相关联。例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块。特点:1)模块内的操作之间关联很弱,但与其他模块的操作却有很强的关联,增加了模块的耦合性;2)不可重用。(2)内聚性④过程内聚(proceduralcohesion)--模块执行一系列与产品需要遵循的步骤顺序有关的操作(一个模块内的一组任务是相关的,且必须按某一特定的次序执行。)图过程内聚特点:操作之间是弱联系;不可重用。(2)内聚性⑤通信内聚(communicationalcohesion)--一个模块内各功能部分/操作在相同的数据上进行(都使用了同一个输入数据或产生了同一个输出数据)。它们靠公共数据而联系在一起。产生职工工资报表并计算平均工资模块特点:各操作紧密相连,优于过程内聚;不可重用。(2)内聚性⑥顺序内聚(sequentialcohesion)--一个模块的各个成分都与同一个功能密切相关,各成分需要顺序执行(一个成分的输出是下一个成分的输入)。(2)内聚性⑦功能内聚(functionalcohesion)--一个模块只完成一个单一功能(所有部分属于一个整体)。说明:模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。

模块内聚与独立性程度提高模块独立性的准则:高内聚、低耦合5.软件模块结构的设计原则优化软件程序结构设计的指导规则:

1)提高模块独立性

2)模块规模应该适中

3)适当的扇出和扇入

4)模块的作用域应该在控制域之内

5)力争降低模块接口的复杂程度

6)设计单入口单出口的模块

7)模块功能应该可以预测几个有关的术语:①下属和上属关系--在软件结构的层次中,上层模块调用下层模块,同一层模块之间不发生关系;②深度--表示控制层数,即软件结构中从顶层模块到最低层模块的层数;③宽度--表示控制的总分布,即结构图中同一层模块的最大模块数;④扇出数--指一个模块直接控制的下属模块个数;⑤扇入数--指一个模块的直接上属模块个数;软件结构图深度宽度扇出扇入顶层1层2层3层5.软件模块结构的设计原则准则1:改进软件结构提高模块独立性。

一个模块保持一个独立的功能。设计目标:高内聚、低耦合通过分解和合并如果若干模块之间耦合强度过高,每个模块功能不复杂,可将它们合并,以减少信息的传递和公共区的引用分解合并对相关模块进行分解,消除重复功能5.软件模块结构的设计原则

准则2:深度、宽度、扇入和扇出都应适当。平均扇出数:3或4

上限:5-7多扇出及其改造多扇入及其改造5.软件模块结构的设计原则准则3:模块的作用域应保持在该模块的控制域内。

模块的作用域——受该模块内一个判定影响所有的模块集合。模块的控制域——这个模块本身及所有直接或间接从属于它的模块集合。

软件结构准则3图例改进结构的方法:

①把判定上移到足够高的位置。②将受判定影响的模块下移到控制范围内。准则3:模块的作用域应保持在该模块的控制域内。模块的作用域和控制域5.软件模块结构的设计原则准则4:模块的规模应适中。规模:

一个模块的语句数量:30-50行左右,一页纸。准则5:力争降低模块接口的复杂度。

如果在几个模块中发现共有的子功能,一般应该将该子功能分解出来作为一个模块,以提高模块的内聚度和独立性。

合并那些具有较多的控制信息传递的模块,以降低模块之间的耦合度5.软件模块结构的设计原则准则6:追求单入口单出口的模块。准则7:设计功能可预测的模块。

12.2.3结构化设计方法(SD)回顾:结构化分析方法--是一种面向数据流进行需求分析(SA)的方法。

SA方法的基本思想

SA--是用抽象模型的概念,按照软件内部数据传递、变换关系,自顶向下逐层分解,直到找到满足功能需要的所有可实现的软件元素为止。

采用的基本手段:

·分解·抽象SA使用的描述工具:

·数据流图:表示了软件中的信息流向和信息的加工

·数据字典:对这些信息和加工进行更详细的描述;

特点:①自顶向下逐层分解;②采用简明易懂、直观的描述方式12.2.3结构化设计方法(SD)结构化设计方法(StructedDesign):是在模块化、自顶向下逐层求精、结构化程序设计等基础上发展起来的。属于面向数据流的软件设计方法,与需求分析阶段的SA方法相衔接。SD方法以数据流图DFD为基础,它定义了把DFD变换成软件结构图的不同映射方法。SD方法的基本思想--模块化、自顶向下,逐步求精1.软件结构图(SC图)(1)结构图(SC图)SC图是SD方法在概要设计中使用的主要描述工具。

用来描述软件的模块结构,反映了软件的模块组成及其调用关系。1)SC图的组成符号矩形框表示模块,反映模块功能矩形框之间的箭头表示模块之间的调用关系调用线旁的注释箭头表示调用中来回传递信息的方向模块符号从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑传入数据流。从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑传出数据流。模块符号它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。对所有下属模块进行协调和管理的模块。模块符号源模块是不调用其它模块的传入模块,只用于传入部分的始端。漏模块是不调用其它模块的传出模块,仅用于传出部分的末端。2)SC图中的模块调用①

简单调用模块符号②选择调用菱形——选择③循环调用

用叠加在调用线始端的环形箭头表示

2.数据流图的类型与SD方法的步骤面向数据流图的设计过程概要设计的过程:

(1)复查并精化数据流图

(2)确定数据流图的类型(转换/事务型)

(3)从数据流图导出系统的初始软件结构图

(4)改进初始软件结构图,得到更合理的软件结构

(5)复查(1)数据流图的类型

通常把数据流图分为两大类型:

·转换处理型(变换型)

·事务处理型

1)变换型结构组成:传入路径变换中心传出路径数据流——传入流——变换流——传出流图变换型结构的系统变换型数据流图在传入流中:外部数据(物理输入)→内部形式(逻辑输入)在变换流中:逻辑输入→逻辑输出在传出流中:逻辑输出→物理输出传入流变换流传出流变换型数据流图特点: 数据流图基本上呈线性形状的结构,可以比较明显地分为输入、中心加工和输出三个部分。例:2)事务处理型

组成:

·至少一条接收路径——事务流

·一个事务中心

·若干个动作路径——事务路径特点:呈辐射状,即一个加工将它的输入分离成许多平行的数据流,然后选择执行后面的某一个加工。

图事务型结构的系统基本模型关于数据流分类的讨论实际上所有的数据流都是变换流,事务流是变换流的一种特殊形式为什么要将事务型的数据流独立出来考虑?对于事务型的数据流,有更适当的结构设计大多数系统的数据流图中,事务流和变换流往往交织在一起。如右图:图同时存在两类结构的系统软件结构的描述方式软件:一个软件有层次性和过程性两个特点:“层次性”——反映整体性质,用软件结构图描述“过程性”——反映局部性质,用程序流程图描述软件结构图--描述软件的模块结构,反映了软件的组成及其调用关系。对于两种不同类型的数据流图,其映射方法不同:

3.变换映射(分析)

变换映射步骤:

(1)确定数据流图的类型:变换处理型。(2)在DFD图上标明流界

--确定输入流和输出流的边界,孤立出中心加工,即要找出逻辑输入、逻辑输出和中心加工①首先要找出输入流的终点,即逻辑输入;②找出输出流的起点,即逻辑输出;③找出中心加工。说明:中心加工的任务,就是通过计算或者处理,把系统的逻辑输入变换成系统的逻辑输出。转换型DFD转换映射初始的软件结构图根据各种准则修改完善最终的软件结构图变换映射(3)进行一级分解,设计上层模块

主要是画出顶层和第一层,任何系统的顶层都只有一个用于控制的主模块。它的下一层一般包括输入、输出和中心变换三个模块。

①在中心加工位置设计一个主模块M(顶层模块)

主模块M:其功能是控制整个软件结构,完成系统所要做的各项工作。②为输入流设计一个输入控制模块CI

输入控制模块CI:功能是为主模块提供逻辑输入信息

主模块MCI输入C变换映射③为输出流设计一个输出控制模块CO

输出控制模块CO:功能是为主模块提供数据输出

④为中心加工设计一个转换控制模块CT

转换控制模块CT:功能是控制所有内部数据的操作,将逻辑输入转换成逻辑输出

主模块MCI输入CO输出CDCCT处理D变换映射(4)进行二级分解,设计中下层模块对上一步的结果继续进行自顶向下的分解,直到画出每个分支所需要的全部模块。

①输入模块的从属模块设计两个从属模块:·输入模块 ·变换模块

②输出模块的从属模块设计 两个从属模块:·变换模块·输出模块

③变换模块的从属模块设计主模块MCI输入CO输出CDCCT处理D(5)进一步细化变换映射AABBBCCCDD4.事务映射(分析)事务型数据流图由至少一条接收路径、一个事务中心与若干条动作路径组成。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统的结构图。(1)确定数据流图类型:事务处理型。(2)在DFD图上确定流界

--找出事务流、事务中心和事务路径

①事务中心本身有显著特点:即一股数据流输入,有若干数据流流出②事务中心前是接收事务流(含接收路径)③事务中心后是事务路径(含全部动作路径)

步骤:

4.事务映射(3)进行一级分解,设计上层模块

①对事务中心设计"事务控制"模块,即主模块②对接收事务流设计“接收"模块,即输入模块③对事务路径设计“发送”模块(“调度”模块)事务控制接收发送4.事务映射(4)进行二级分解,设计中下层模块

①对输入模块设计中下层模块(同转换分析)②对每条事务路径设计一个事务处理模块

③对事务处理模块设计操作模块和细节模块对应模块图两种设计映射的比较结构图SD事务映射变换映射数据流图DFD类型变换中心传入路径传出路径事务中心接收路径动作路径事务控制接收模块发送模块顶层一层传入模块变换模块传出模块主控模块顶层接收模块变换模块转换模块传出模块与传入模块类似分解与传出模块类似分解一层★综合设计:混合结构(自学P222)(1)从总体上确定数据流图的类型(2)根据总体类型,设计出上层模块结构(3)根据局部数据流图的类型,进行从属模块的设计5.设计优化(自学)转换型DFD转换映射初始的软件结构图根据各种准则修改完善最终的软件结构图小结总体设计这个阶段必须回答的关键问题是:“应该如何解决这个问题?”

首先,应该考虑几种可能的解决方案,确定最优方案。目标系统总体架构:功能分解,确定系统实施方案。软件结构设计:为每个子系统(目标系统)定义功能模块、模块接口、模块间的关系。设计数据结构、数据库编写文档:概要设计说明书…结构化设计方法SD:数据流图——映射变换(变换映射、事务映射)——软件结构图作业习题1212.9,12.11,12.12,12.13,12.16,12.19(*可选)需求分析问题定义可性行研究计划时期概要设计详细设计编码测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论