资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,数据库与软件工程-软件,工程概述,2020/3/15,目录,软件工程综述,软件生存周期,软件质量与质量保证,软件工程管理,软件开发环境,2,软件工程综述,软件发展的三个阶段,软件工程相关概念,软件工程目标,软件工程三要素,3,什么是计算机软件?,计算机软件指计算机系统中的,程序及其文档,程序是计算任务的处理对象和处理规则的描述,计算任务:任何以计算机为处理工具的任务,处理对象:数据(如数据、文字、图形、图像、声音等,它们只,是表示,而无含义)或信息(数据及有关的含义),处理规则一般指处理的动作和步骤。程序必须装入计算机内才能,工作,文档是为了便于了解程序所需的,阐明性,资料,文档一般是,给人看的,不一定装入计算机,4,软件的特点:,抽象性不是实物。,严密性是逻辑产品。,智力性思维过程。,持久性无时间损坏。,一次性创造性的产物。,难以度量难定量测量。,易出错信息转移造成。,必须维护纠错和变更。,5,软件发展的三个阶段,程序设计时代(50-60年代),软件指程序,软件开发关注程序编写,用汇编及机器语言,程序系统时代(60-70年代),软件指程序及说明书,软件开发包括程序设计和测试,用,高级语言,软件工程时代(70年代以后),软件开发包括软件生命期,用软件语言(包括需求定义语,言、软件功能语言、软件设计语言、程序设计语言等),6,软件工程相关概念,软件危机:,在软件开发过程中遇到的问题找不到解决的办法,致使问题积累起,来形成了日益尖锐的矛盾。,危机实例(1):,1963年美国飞往火星的火箭探测器爆炸,造成1000,万美元(数亿美元)的损失。原因是用于控制火星探测器的计算机软件,FORTRAN程序:,DO5I=1,,,3,误写,为:DO5I=1.3,危机实例(2):,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软,件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。,宇航员:弗拉迪米尔科马洛夫,7,软件工程相关概念,软件危机:,人员伤亡:由于计算机软件被广泛应用于包括医院等与生命息,危机实例(3):,息相关的行业。这也使得软件的错误导致人员伤亡成为了可能。,Therac-25,的意外:(在软件工程界被大量引用的案例),在,1985年,六月到,1987年,一月之间,六个已知的医疗事故来自于,Therac-25错误地超过剂量,导致患者死亡或严重辐射灼伤,8,软件工程相关概念,软件危机:,危机实例(4):,工作量,最多时有1000人投入开发工作,写出100万行源程序,但发行,的每一新版本都是上一版1000个错误的修正。,IBM公司1963-1966年开发IBM360操作系统,项目花了5000人-年的,事后负责人F.D.Brooks总结教训时说:“,正象一只逃亡的野兽落,到泥潭中做垂死的挣扎,越是挣扎,陷的越深。最后无法逃脱灭顶的灾,难。程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命,挣扎,谁也没料到问题竟会陷入这样的困境,”,9,软件危机的表现,对软件开发成本和进度的估计常常很不正确,用户对“已完成的”软件系统不满意的现象经常,发生,软件产品的质量往往靠不住,软件常常是不可维护的,软件通常没有适当的文档资料,软件成本在计算机系统总成本中所占的比例逐年,上升,软件开发生产率提高的速度远远跟不上计算机应,用迅速普及深入的趋势,10,软件危机的原因,软件是逻辑产品,开发进度、成本难以估计,缺乏或不完整、不一致的文档给维护带来困难,用户对软件需求的描述往往不够精确,有遗漏,有二,义,软件开发人员对需求的理解与用户的本来愿望有差异,大型软件项目需多人协同完成,缺乏管理经验,开发人员不能有效地、独立自主地处理大型软件的全,部关系,缺乏有力的方法学和工具的支持,软件项目的特殊性和人类智力的局限性,11,克服软件危机的途径,消除,错误的概念和做法,推广,使用成功的开发技术和方法,使用,软件工具和软件工程支持环境,摆脱软件危机的出路:,软件开发的,工程化,和,标准,加强软件,管理,化,12,软件工程相关概念,软件工程:,软件工程是用科学知识和技术原理来定义、开发、维,护软件的一门综合性的交叉学科,软件工程是开发与维护,软件的规范化系统方法。,它综合应用计算机科学、数学及管理科学等原理开发,软件的工程。,计算机科学、数学用于构造模型与算法;,工程科学用于制定规范、设计范型、评估成本及确定,权衡;,管理科学用于用于计划、资源、质量、成本等管理。,13,软件工程的,目标,能按时完成开发任务,及时交付使用;,付出较低的开发成本,达到要求的软件,功能;,取得较好的软件性能;,开发的软件易于移植;,需要较低的维护费用;,开发的软件可靠性高。,14,软件工程三要素,软件工程方法,实施需求分析、如何测试等。为软件开发提供“如何做”的技术。如怎样定项目计划、怎样,软件工具,为软件工程方法提供自动或半自动软件支撑环境。如软件开发,工具、测试工具等。软件开发的不同阶段可使用不同的工具。,软件工程过程,将软件工程划分为若干阶段,分配方法和工具,定义每个阶,段的先后顺序和完成标志。,15,软件生存周期,生存周期概念,生存周期各阶段,生存周期模型,16,软件生存周期,软件生存周期概念,是指从形成开发软件概念起,所开发的软件使用以后,直到,失去使用价值消亡为止的整个过程。,一般来说,整个生存周期包括,计划、开发、运行,三个,时期,,每一个时期又划分为若干阶段,。每个阶段有明确的任,务,这样使规模大、结构复杂和管理复杂的软件开发变得容,易控制和管理。,软件生存周期(softwarelifecycle)又称为软件生命期。,17,软件生命周期,软件生命期各阶段,软件生命期一般包括以下各阶段:,1.,软件计划与可行性研究,2.,软件系统需求分析,3.,软件设计,4.,软件编码,5.,软件测试与调试,6.,软件运行与维护,18,软件-建筑,计划与可行性研,究,系统需求分析,软件设计,软件编码,软件测试与调试,软件运行与维护,19,一、软件计划与可行性研究,目的,确定软件项目是否能够开发?是否值得去开发?,输出:可行性研究报告,成本效益分析,项目开发计划,20,一、软件计划与可行性研究,过程,辑模型。,的解决办法。,初步确定项目的规模和目标,确定项目的约束和限制。,分析员进行简要的需求分析,抽象出逻辑结构,建立逻,从逻辑模型出发,经过压缩的设计,找出几种可供选择,21,一、软件计划与可行性研究,内容,对每种解决方法,可从以下三个方面分析研究每种解决,方法的可行性。,1,技术可行性,经济可行性,社会可行性,2,3,22,软件可行性研究,三个方面的可行性,在现有的资源条件下,技术风险有多大,项目是否能实现。,技术可行性分析通常包括风险分析、资源分析和技术分,析,1,对要开发项目的功能、性能、限制条件进行分析,确定,技术可行性,资源:已有的或可以获得的硬件、软件资源,现有技术人员的技术水平,已有的工作基础。,23,:分析在给定的约束条件下,风险分析,设计和实现系统的风险。,采用不成熟的技术可能造成技术风险,人员流动可能给项目带来风险,成本和人员估算不合理造成的预算风险,风险分析的目的是找出风险,评价,风险的大小,并有效地控制和缓解风,险。,24,:论证是否具备系统开发所,资源分析,需的各类人员、软件、硬件等资源和,相应的工作环境。,例如,有一支开发过类似项目的开,发和管理的团队,或者开发人员比较,熟悉系统所处的领域,并有足够的人,员保证,所需的硬件和支撑软件能通,过合法的手段获取,那么从技术角度,看,可以认为具备设计和实现系统的,条件。,25,:分析当前的科学技术是否支,技术分析,持系统开发的各项活动。,在技术分析过程中,分析员,收集系统,的性能、可靠性、可维护性和生产率,方面的信息,,分析实现系统功能、性,能所需的技术、方法、算法或过程,,,从技术角度分析可能存在的风险,以及,这些技术问题对成本的影响。,技术可行性分析时通常需进行系统建,模,必要时可建造原型和进行系统模拟,26,软件可行性研究,三个方面的可行性,开发的项目是否值得投资开发?,2,进行开发成本的估算以及了解取得效益的评估,确定要,经济可行性,经济可行性:成本效益分析,公司经营长期策略,开发所需的成本和资源,潜在的市场前景,27,基于计算机的系统的,成本,主要包括:,购置硬件、软件(如数据库管理系统、第三方,开发的构件等)和设备(如传感器等)的费用,系统的开发费用,系统安装、运行和维护费用,人员培训费用,28,效益,经济效益,使用基于计算机的系统后可增加的收入和可,节省的运行费用(如操作人员数、工作时间,、消耗的物资等)。,社会效益,使用基于计算机的系统后对社会产生的影响,(如提高了办事效益,使用户满意等),通,常社会效益只能定性地估计。,在进行成本效益分析时通常只统计五年内的经,济效益。,经济效益通常可用货币的时间价值、投资回收,期和纯收入来度量。,29,货币的时间价值(以利率计算的机会成本),设:当前金额为P,年利率为i,n年后的金额为F,,则,计算时,累计经济效益应折合成当前金额,例如,一个基于计算机的系统使用后,每年产生的,经济效益为10万,如果年利率为5%,那么,五年,内该系统的累计经济效益是43,50万。,2948万,而不是,30,:累计的经济效益正好等于投资数(,投资回收期,成本)所需的时间,纯收入,:累计经济效益,投资数,当纯收入大于零时,该工程值得投资开发,当纯收入小于零时,该工程不值得投资(除非它,有明显的社会效益),当纯收入等于零时,通常也不值得投资,显然,纯收入越大越好,31,软件可行性研究,三个方面的可行性,3,要开发的项目是否存在任何侵犯、妨碍等责任问题?,要开发项目的运行方式在用户组织内是否行得通?,现有管理制度、人员素质、操作方式是否可行?,社会可行性,32,中华人民共和国著作权法,计算机软件保护条例,保密法,等,33,可行性分析的结论,可以立即开始进行,需要推迟到某些条件(例如资金、人力、设备等),落实之后才能开始进行,需要对开发目标进行某些修改之后才能开始进行,因为某种原因(如,技术不成熟、经济上不合算等,)不能进行,34,软件可行性研究,可行性研究的具体步骤,1,2,3,型,4,5,6,复查项目规模和目标,研究正在使用的系统,得到新系统的概括的逻辑模,导出和评价各种方案,推荐可行的方案,编写可行性研究报告,35,软件可行性研究,可行性研究报告内容,1,2,3,4,5,6,7,8,引言。,可行性研究前提。,对现有系统的分析。,所建议系统的技术可行性分析。,所建议系统的经济可行性分析。,社会因素的可行性分析。,其他可供选择方案。,结论意见。,36,二、软件系统需求分析,1.,需求分析概念,需求分析的基本任务,结构化分析方法,2.,3.,BD,37,数据库建设的基本规律,三分,技术,,七分,据,管理,管理,,十二分,基础数,数据库建设项目管理,企业(即应用部门)的业务管理,基础数据,收集、入库,更新新的数据,38,二、软件系统需求分析,1.,需求分析概念,需求分析的基本任务,结构化分析方法,2.,3.,39,需求的定义,IEEEStandardGlossaryofSoftware,主观需求,EngineeringTerminology,用户解决一个问题或达到一个目标所需要的一种,状况或能力,系统为了满足一种约定、标准、规格说明或其它,正式文件而必须满足或拥有的一种状况或能力,以上两种状态或能力的文档化表示,客观需求,需求文档,40,功能性需求和非功能性需求,功能性需求,系统需要提供的服务或功能:如图书检索,系统对特定输入的处理方式:如对非法输入的提示,系统在特定环境下的行为:如长时间无操作时的屏保,非功能性需求,对系统功能或服务附加的质量约束,例如响应时间、,容错性、安全性等,客户所关心的(外部质量),从系统开发和维护角度出发的质量属性,例如可理解,性、可扩展性、可配置性等,软件开发或维护者所,关心的(内部质量、软件所特有),41,二、软件系统需求分析,1.需求分析概念,是指开发人员要准确理解用户的要求,进行细,致的调查分析,将用户非形式的需求陈述转化为完,整的需求定义,再由需求定义转换到相应的形式功,能规约(需求规格说明)的过程。,结构化分析方法,和,面向对象分析方法,42,2.需求分析的基本任务,是要准确地定义新系统的目标,满足用户需要。回答系,统必须“做什么”的问题。本阶段要进行以下几方面的工作:,(1)分析人员和用户对问题识别,双方商定对问题的综合需,求。,包括:功能需求、性能需求、环境需求和用户界面需求。,另外还有可靠性、安全性、保密性、可移植性、可,维护性等方面的需求.,这些需求一般通过双方交流、调查研究来获取,并达到,共同的理解。,43,2.需求分析的基本任务,(2)分析与综合,导出软件的逻辑模型。,分析人员对获取的需求,进行一致性的分析检查,在分析、综合中,逐步细化软件功能,划分成各个子功能。,包括:对数据域进行分解,并分配到各个子功能上,以确定系统的,构成及主要成分,并用图文结合的形式,建立起新系统的逻辑模型。,(3)编写文档。,文档:需求规格说明书,初步用户使用手册,确认测试计划,44,3.结构化分析方法,数据流进行需求分析的方法。SA是一种建模活动,该方法使,用简单易读符号,根据,软件内部数据传递、变换的关系,,自,顶向下逐层分解,描绘出满足功能需求的软件模型。,结构化分析(StructuredAnalysis,简称SA),是面向,SA方法,利用图形等半形式化的描述方式表达需,求,用它们形成需求说明书中的主要部分。,描述工具是:,(1)数据流图(DFD),(2)描述加工逻辑的工具:,结构化语言、判定表,、判定树,(3)数据字典,45,3.结构化分析方法,(1)数据流图(DFD),系统逻辑模型的一种工具,它以图形的方式描绘数据在系统,中流动和处理的过程,由于它只反映系统必须完成的逻辑功,能,所以它是一种功能模型。,数据流图(DataFlowDiam),是SA方法中用于表示,数据流图的作用:,需求分析时,作为自顶向下的工具,描述系统组成部分,为技术员、用户间交流提供有力方法,46,3.结构化分析方法,(1)数据流图(DFD),、数据存储(又称为文件)、数据源点或终点四种,基本成分组成。,数据流图由数据流、加工(又称为数据处理),数据流:加工:,数据存储:数据源点、终点:,数据流图实例:银行取款过程,47,描述银行取款过程的数据流图,48,基本加工逻辑说明,对数据流图的每一个基本加工,必须有一个基,本加工逻辑说明,描述基本加工如何把输入数据流变换为输出数,据流的加工规则,描述实现加工的策略而不是实现加工的细节,包含的信息应是充足的,完备的,有用的,无,冗余的,49,3.结构化分析方法,(2)用于写加工逻辑说明的工具,结构化英语,判定表,判定树,50,1)结构化英语,结构化英语的词汇表由,英语命令动词,数据词典中定义的名字,有限的自定义词,逻辑关系词,IF_THEN_ELSE,、,CASE_OF,、,WHILE_DO,、,REPEAT_UNTIL,等组成,。,51,是一种介于自然语言和形式化语言之间的,语言,语言的,正文用基本控制结构进行分割,,加,工中的,操作用自然语言短语来表示,其基本控制结构有三种:,简单陈述句结构,:,避免复合语句;,重复结构,:,while_do,或,repeat_until,结构。,判定结构,:,if_then_else,或,case_of,结构;,52,商店业务处理系统中“检查发货单”,if,发货单金额超过$500,then,if,欠款超过了60天,then,在偿还欠款前不予批准,else,(欠款未超期),发批准书,发货单,else,(发货单金额未超过$500),if,欠款超过60天,then,发批准书,发货单及赊欠报告,else,(欠款未超期),发批准书,发货单,53,2)判定表,如果数据流图的加工需要依赖于,多个,逻辑条件的取值,,使用判定表来描述,比较合适,条件定义,条件取值的组合,动作定义,在各种取值的组合下应执行的动,作,54,以“检查发货单”为例,55,3)判定树,判定树也是用来表达加工逻辑的一种工,具。有时侯它比判定表更直观。,欠款60天,不发出批准书,检金额$500,欠款60天,发出批准书、,查,发货单,发,货,单金额$500,欠款60天,发出批准书、,发货单及赊欠报,欠款60,告,天,发出批准书、,发货单,56,3.结构化分析方法,(3)数据字典,数据词典(DataDictionary,简称DD)就是用来,定义数据流图中的各个成分的具体含义的。对数,据流图中出现的每一个数据流、文件、加工给出,详细定义。,数据字典主要有四类条目:,数据流、数据项、数据存储、基本加工。,数据项是组成数据流和数据存储的最小元素。,57,3.结构化分析方法,(3)数据字典,数据字典词条内容表,数据项/数据流/数据文件,名称:,别名:,取消及定义:,组成:,组织:,备注:,58,3.结构化分析方法,(3)数据字典,实例:计算机售书系统模型,59,3.结构化分析方法,(3)数据字典,售书系统数据流词条实例:,发票,数据流名:,发票,别名:,购书发票,组成:,学号+姓名+书号+单价+数量+总价+书费合计,备注:,60,3.结构化分析方法,(3)数据字典,数据文件词条实例:,各班学生用书表,文件名:,各班学生用书表,别名:,组成:,系编号+专业和班级编号+年级+书号,组织:,按系、专业和班编号从小到大排列,备注:,61,三、软件设计,1.软件概要设计,主要完成软件系统结构设计和确定,各组成部分之间的相互关系。,2.软件详细设计,主要确定每个模块的具体执行过程,,也称为过程设计。,62,1.软件概要设计,概要设计基本任务,概要设计基本原理,63,(1)概要设计基本任务,1),进行软件系统总体结构设计,2),进行软件中所使用的数据结构及数据,库的设计,3),编写概要设计文档,4),进行概要设计的评审,64,(1)概要设计基本任务,1)软件系统总体结构设计,a.采用某种设计方法,将一个复杂的系统按,功能划分成模块。,b.确定每个模块的功能。,c.确定模块之间的调用关系。,d.确定模块之间的接口,即模块之间传递的,信息。,e.评价模块结构的质量。,65,(1)概要设计基本任务,2)数据结构及数据库的设计。,a.对数据结构的设计,采用逐步细化的方法,,对需求分析阶段获得的数据字典中的数,据的结构特性等加以细化。,b.对数据库的设计是指数据存储文件的设计,,主要进行概念设计、逻辑设计、物理设,计三方面设计。,66,(1)概要设计基本任务,3)概要设计文档主要包括:,a.概要设计说明书。,b.数据库设计说明书。,c.进一步补充需求分析阶段编写的用户手册。,d.修订测试计划,对测试策略、方法、步骤提,出明确要求。,67,(1)概要设计基本任务,4)进行概要设计的评审:,对设计部分是否完整地实现了需求中规定的功,能、性能等要求,设计方案的可行性,内外部接口定义的正确性、有效性,各部分之间的一致性,68,(2)概要设计的基本原理,l)模块化,2)抽象,3)信息隐藏,4)模块独立性,69,(2)概要设计的基本原理,l)模块化,单元。,辑。,反映它的内部特性。,系统划分成若干模块的过程。每个模块完成一个特定的子,功能,所有的模块按某种方法组装起来,成为一个整体,,完成整个系统所要求的功能。,在软件的体系结构中,模块是可组合、分解和更换的,模块具有以下几种基本属性:,接口、功能、状态、逻,其中:功能、状态与接口反映模块的外部特性,逻辑,模块化,是指解决一个复杂问题时自顶向下逐层把软件,70,(2)概要设计的基本原理,2)抽象,细节,不考虑其他因素。,法的抽象层次的一次细化。,抽象,是指获取事物本质的共同的特性而暂不考虑它的,抽象,是认识复杂现象过程中使用的思维工具,软件工程过程中的每一步部可以看作是对软件解决方,71,(2)概要设计的基本原理,3)抽象信息隐藏,含的信息(过程或数据),对于不需要这些信息的其他模,块来说,是不能访问的。,现系统,这些独立的,模块彼此之间仅仅交换那些为了完成,系统功能所必需的信息,,,而将那些自身的实现细节与数据“,隐藏”起来。,结构的存取限制。,信息隐藏,指在设计和确定模块时,使得一个模块内包,“隐藏”:模块化是通过定义一组相互独立的模块来实,通过抽象,可以确定组成软件的过程实体。,通过信息隐藏,可以定义模块的过程细节和局部数据,72,(2)概要设计的基本原理,4)模块独立性,功能,并且与其他模块的联系最少且接口简单。,度量标准耦合性和内聚性。,高模块的独立性,,为设计高质量的软件结构奠定基础。,模块独立性是指每个模块只完成系统要求的独立的子,如何衡量软件的独立性呢?,根据模块的外部特征和内部特征,提出了两个定性的,将软件系统划分模块时,尽量,做到高内聚低耦合,提,73,(2)概要设计的基本原理,4)模块独立性_,耦合性,互联系紧密程度的一种度量。,性则越差。模块间耦合高低取决于模块间接口的复杂性、,调用的方式及传递的信息。,合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦,合,,,它们的耦合程度由低到高。,耦合性也称块间联系。指软件系统结构中各模块间相,模块之间联系越紧密,其耦合性就越强,模块的独立,模块的耦合性有以下七种类型:,非直接耦合、数据耦,74,(2)概要设计的基本原理,4)模块独立性_,内聚性,块内部各个元素彼此结合的紧密程度的度量。,的越紧密,则它的内聚性就很高。,内聚、过程内聚、通信内聚、顺序内聚、功能内聚,,它们,的内聚程度由低到高。,又称块内联系。指模块的功能强度的度量,即一个模,若一个模块内各元素(语句之间、程序段之间)联系,内聚性有以下七类类型:,偶然内聚、逻辑内聚、时间,75,2.概要设计,软件结构:表示程序的总体结构,指程序的控制层,次体系(多少模块,多少层次,调用关系),76,一个问题可以有多种结构来表示,77,软件结构的术语,深度:控制的层次数,宽度:控制的总跨度,即最多模块一层的模块数,扇出:一个模块直接控制的模块数,扇入:一个模块被几个模块直接控制,78,(X1)or(A=2),注释决不是可有可无的。,而开发的,在软件工程范围内也就是为实现软件生存,计算机软件指计算机系统中的程序及其文档,组织:按系、专业和班编号从小到大排列,if发货单金额超过$500then,人员流动可能给项目带来风险,大型软件项目需多人协同完成,缺乏管理经验,人员流动可能给项目带来风险,穿于软件定义与开发的整个期间。,记A1,B0作,条件组合覆盖就是设计足够的测,组织:按系、专业和班编号从小到大排列,员保证,所需的硬件和支撑软件能通,支持软件开发过程本身的技术,如支持规约、,软件结构的术语,从属:A模块控制B模块,则B从属A,统率:A模块控制B模块,则A统率B,79,C1和C2中,C1和C,C2和C,可能是偶然性块内联系,,把它们从各自的模块分离出来,C1,C2和C的块内联系,增大,模块独立性增强,块间联系看起来增大一些,又通,过模块的合并,得到图(c)(d)块内联系大,块间联系,相应小些(模块个数少)。,80,模块调用个数最好不要超过五个,一个模块具有过多的调用模块或被调用模块,那么它往,往包含过多的功能,这就是这个模块太复杂,除特殊情况外(case,开关),应避免这种结构,用增加,层次以减少调用个数。,五个是经验得来的,81,结构化设计技术(),是公司提出的,是长期程序设计的经验总结,。,下面将介绍如何建立系统的模块结构。,数据流图的类型,是以数据流为基础来设计软件的模块结构,那么我,们首先要找出数据流图的一些规律,从而导出软件的初始,结构。,82,1、变换类型数据流图,定义:具体较明显的输入,变换(或称主加工)和输出界,面的数据流图。,83,2、事务型数据流图,定义:图中某个加工将它的输入数据流分离成一串发散的,数据流,形成许多活动的路径(分支),并根据输入的值,选择其中的一个路径,具有这样特征的数据流图。,事务中心:把输入数据流分离成一串发散数据流的加工。,84,3、,设计步骤:总述模型实,例,第一步:复查基本系统模型,这一步将看到软件的原型,传统方法往往是从这一,步开始的。,在做这一步时,要对以前建立的基本数据模型,再,作最后的审查,是否有遗漏的输入或输出。,第二步:复查并精化数据流图,对数据流图的最后复审求精要慎重,一定要保证数,据流图的正确性。不同的选择导出的软件初始模块图的,合理性有些差异。,85,3、,设计步骤:总述模型实例,第三步:确定数据流图的类型:,变换型与事务型。,变换设计:,从变换型数据流图导出软件模块结构的过程。,如何划分输入、主加工、输出三个部分?,从两头向中间,先找出逻辑输入和逻辑输出,找到它们即,可划分出三个部分。,86,87,第四步:设计上层模块结构,:自顶向下的设计方法。,顶层:主模块,对应于主加工。,一层:标准的一层,对应于变换数据流图的三个部,分,三个模块,88,第五步:设计软件的中下层模块结构,(基于数据流图)。,89,第六步:对初始模块求精,得到合理的软,件结构。,90,2.软件详细设计,(1)详细设计基本任务,(2)结构化程序设计方法,91,(1)详细设计基本任务,1),为每个模块进行,详细的算法,设计。,2),为模块内的,数据结构,进行设计。,3),对数据库进行物理设计,即确定,数据库的物理结构,。,4),其他设计。根据软件系统的类型,还可能要进行以下设计,:,代码设计、输入输出格式设计、人机对话设计,。,5),编写,详细设计说明书,。,6),为每一个模块设计一组,测试用例,。,7),评审。对处理过程的算法和数据库的物理结构都要评审。,92,(2)结构化程序设计方法,结构化程序设计是E.W.Dijikstra在1965年提出的。,它的主要观点是采用自顶向下、逐步求精的程序设计方,法;使用三种基本控制结构构造程序,任何程序都可由顺序,、选择、重复三种基本控制结构构造。,详细描述处理过程常用三种工具:,图形、表格和语言。,图形:,程序流程图、,N-S图,、,PAD图,表格:,判定表,语言:,过程设计语言(PDL),93,四、软件编码,软件编码是将详细设计得到的处理过程的描述,转换为基于某种计算机语言的程序,即源程序代码,。,需注意根据项目的应用领域选择适当的编程语,言、编程的软硬件环境以及编码的程序设计风格等,事项,94,四、软件编码,FourthGenerationLanguages,n,1stgenerationlanguages,n,4,th,generationlanguages,(4GLS),u,machinelanguages,u,eachstatementindendedtobe,30-50assemblerstmts,easier/fastertoprogram,(binary),u,n,2ndgenerationlanguages,F,reducescosts,F,declarativesaywhatyouwant,u,assemblers,n,3rdgenerationlanguages,nothowtodoit(e.g.,SQL,StructuredQueryLanguage,),u,high-levellanguages,u,successhasbeenmixed,F,FORTRAN,COBOL,C,F,positives,F,negatives,workwellforDBapps,C+,fastresponsefromDPdept.,u,eachstatement,indendedtobe5-10,assemblerstmts,slow&inefficient,95,程序风格,程序实际上也是一种供人阅读的文章,有,一个文章的风格问题。应该使程序具有良,好的风格。,源程序文档化,数据说明,语句结构,输入输出方法,96,源程序文档化,标识符的命名,安排注释,程序的视觉组织,97,标识符的命名,符号名即标识符,包括模块名、变量名、常量名、标,号名、子程序名、数据区名以及缓冲区名等。,名字应能反映它所代表的对象,应有一定实际意义。,名字不是越长越好,应当选择精炼的意义明确的名字,。必要时可使用缩写名字,但这时要注意缩写规则要,一致,并且要给每一个名字加注释。,在一个程序中,一个变量只应用于一种用途。,98,程序的注释,夹在程序中的注释是程序员与日后的程序,读者之间通信的重要手段。,注释决不是可有可无的。,一些正规的程序文本中,注释行的数量占,到整个源程序的13到12,甚至更多。,注释分为,序言性注释,和,功能性注释,。,99,序言性注释,通常置于每个程序模块的开头部分,它应当给出程序的,整体说明,对于理解程序本身具有引导作用。有些软件,开发部门对序言性注释做了明确而严格的规定,要求程,序编制者逐项列出。,有关项目包括:,程序标题;,有关本模块功能和目的的说明;,主要算法;,接口说明:包括调用形式,参数描述,子程序清单;,100,序言性注释,有关数据描述:重要的变量及其用途,约束或限,制条件,以及其它有关信息;,模块位置:在哪一个源文件中,或隶属于哪一个,软件包;,开发简历:模块设计者,复审者,复审日期,修,改日期及有关说明等。,101,功能性注释,功能性注释嵌在源程序体中,用以描述其后的语,句或程序段是在做什么工作,或是执行了下面的,语句会怎么样。而不要解释下面怎么做。,要点:,描述一段程序,而不是每一个语句;,用缩进和空行,使程序与注释容易区别;,注释要正确。,102,程序的视觉组织,恰当地利用,空格,,可以突出运算的优先性,避免发,生运算的错误。,自然的程序段之间可用空行隔开;,移行也叫做向右缩格。,n,它是指程序中的各行不必都在左端对齐,都从第一格起,排列。这样做使程序完全分不清层次关系。,对于选择语句和循环语句,把其中的程序段语句向,右做,阶梯式移行,。使程序的逻辑结构更加清晰。,103,数据说明,在设计阶段已经确定了数据结构的组织及其复杂性,。在编写程序时,则需要注意数据说明的风格。,为了使程序中数据说明更易于理解和维护,必须注,意以下几点。,1.数据说明的次序应当规范化,2.说明语句中变量安排有序化,3.使用注释说明复杂数据结构,104,数据说明,1.数据说明的次序应当规范化,数据说明次序规范化,使数据属性容易查找,也,有利于测试,排错和维护。,原则上,数据说明的次序与语法无关,其次序是,任意的。但出于阅读、理解和维护的需要,最好,使其规范化,使说明的先后次序固定。,2.说明语句中变量安排有序化,当多个变量名在一个说明语句中说明时,应当对,这些变量按字母的顺序排列。带标号的全程数据,也应当按字母的顺序排列。,105,数据说明,3.使用注释说明复杂数据结构,如果设计了一个复杂的数据结构,应当使用注释,来说明在程序实现时这个数据结构的固有特点。,106,语句结构,在设计阶段确定了软件的逻辑流结构,但构造单,个语句则是编码阶段的任务。,语句构造力求简单,,直接,,不能为了片面追求效率而使语句复杂化,。,1、在一行内只写一条语句,2、程序编写首先应当考虑清晰性,程序编写首先应当考虑清晰性,不要刻意,追求技巧性,使程序编写得过于紧凑。,3、程序要能直截了当地说明程序员的用意,。,107,语句结构,4.除非对效率有特殊的要求,程序编写要做到,清晰第一,效率第二,。不要为了追求效率,而丧失了,清晰性,。事实上,程序效率的提,高主要应通过选择高效的算法来实现。,5.首先要保证程序正确,然后才要求提高速度,。反过来说,在使程序高速运行时,首先,要保证它是正确的。,6.避免使用临时变量而使可读性下降。,7.让编译程序做简单的优化。,8.尽可能使用库函数,9.避免不必要的转移。,108,语句结构,10.尽量只采用三种基本的控制结构来编写程序。,11.避免使用空的ELSE语句和IFTHENIF的语句,。,12.避免采用过于复杂的条件测试。,13.尽量减少使用“否定”条件的条件语句,14.尽可能用通俗易懂的伪码来描述程序的流程,然后,再翻译成必须使用的语言。,15.数据结构要有利于程序的简化。,16.要模块化,使模块功能尽可能单一化,模块间的耦,合能够清晰可见。,109,语句结构,17.利用信息隐蔽,确保每一个模块的独立性。,18.从数据出发去构造程序。,19.不要修补不好的程序,要重新编写。也不要一味地,追求代码的复用,要重新组织。,20.对太大的程序,要分块编写、测试,然后再集成。,21.对递归定义的数据结构尽量使用递归过程。,110,输入/输出,在设计和编码时都应考虑下列原则:,1.对所有的输入数据都要进行检验,识别,错误的输入,以保证每个数据的有效性;,2.检查输入项的各种重要组合的合理性,,必要时报告输入状态信息;,3.使得输入的步骤和操作尽可能简单,并,保持简单的输入格式;,111,输入/输出,4.输入数据时,应允许使用自由格式输入;,5.应允许缺省值;,6.输入一批数据时,最好使用输入结束标志,而,不要由用户指定输入数据数目;,7.在交互式输入输入时,要在屏幕上使用提示符,明确提示交互输入的请求,指明可使用选择项,的种类和取值范围。同时,在数据输入的过程,中和输入结束时,也要在屏幕上给出状态信息,;,8.当程序设计语言对输入输出格式有严格要求,时,应保持输入格式与输入语句的要求的一致,性;,9.给所有的输出加注解,并设计输出报表格式。,112,五、软件测试与调试,一软件测试,1.软件测试概念及目的,2.软件测试的原则,3.软件测试方法,4.软件测试对象,5.测试与软件开发各阶段的关系,6.软件测试过程,7.测试用例设计,113,软件测试,1.软件测试概念及目的,软件测试是为了发现错误而执行程序的过程。,在IEEE提出的软件工程标准术语中,软件测试是指使用,人工或自动手段,运行或测试某个系统的过程,其,目的是检,验软件是否满足规定的需求,或是清楚预期结果与实际结果,之间的差异。,测试阶段的基本任务:,精心设计一组“高效”的测试用例,利用这些实例执行程序,,是根据软件开发各阶段的文档资料和程序的内部结构,,找出软件中潜在的各种错误和缺陷。,114,软件测试,2.测试的原则,在软件测试中,应注意以下指导原则:,1)测试用例应由,输入数据,和,预期的输出数据,两部分组成。,2)测试用例不仅选用,合理的,输入数据,还要选择,不合理的,输,入数据。,3)除了检查程序是否做了,它应该做的事,,还应该检查程序是,否做了,它不应该做的事,。,4)应制定,测试计划,并严格执行,排除随意性。,5)长期保留测试用例。,6)对发现错误较多的程序段,应进行更深入的测试。,7)程序员避免测试自己的程序。,115,软件测试,3.测试方法,一般分为两大类:动态测试方法与静态测试方法。,(1)静态测试,静态测试指被测试程序不在机器上运行,而是采用人,工检测和计算机辅助静态分析的手段对程序进行检测。,(2)动态测试,动态测试指通过运行程序发现错误。,对软件产品进行动态测试时,,根据测试用例的设计方法,不同,一般有两种方法,分别称为,黑盒测试法,和,白盒测试法。,116,4.,软件测试的对象,软件测试并不等于程序测试。,软件测试应贯,穿于软件定义与开发的整个期间,。,需求分析,、,概要设计,、,详细设计以及程序编,码,等各阶段所得到的,文档,,包括需求规格说,明、概要设计规格说明、详细设计规格说明,以及源程序,,都应成为软件测试的对象,。,117,118,测试信息流,119,测试信息流,软件配置,:软件需求规格说明、软件设计规,格说明、源代码等;,测试配置,:测试计划、测试用例、测试程序,等;,测试工具,:测试数据自动生成程序、静态分,析程序、动态分析程序
展开阅读全文