




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件工程概述数据库与软件工程第二部分12软件工程综述软件生存周期软件质量与质量保证软件工程管理软件开发环境目 录3软件发展的三个阶段软件工程相关概念软件工程目标软件工程三要素软件工程综述什么是计算机软件?计算机软件指计算机系统中的程序及其文档程序是计算任务的处理对象和处理规则的描述计算任务:任何以计算机为处理工具的任务 处理对象:数据(如数据、文字、图形、图像、声音等,它们只是表示,而无含义)或信息(数据及有关的含义)处理规则一般指处理的动作和步骤。程序必须装入计算机内才能工作文档是为了便于了解程序所需的阐明性资料,文档一般是给人看的,不一定装入计算机45软件的特点:抽象性不是实物。严密性是逻
2、辑产品。智力性思维过程。持久性无时间损坏。一次性创造性的产物。难以度量难定量测量。易出错信息转移造成。必须维护纠错和变更。6软件发展的三个阶段程序设计时代(50-60年代) 软件指程序,软件开发关注程序编写,用汇编及机器语言程序系统时代(60-70年代) 软件指程序及说明书,软件开发包括程序设计和测试,用高级语言软件工程时代(70年代以后) 软件开发包括软件生命期,用软件语言(包括需求定义语言、软件功能语言、软件设计语言、程序设计语言等)7软件工程相关概念软件危机:在软件开发过程中遇到的问题找不到解决的办法,致使问题积累起来形成了日益尖锐的矛盾。危机实例(1):1963年美国飞往火星的火箭探测
3、器爆炸,造成1000万美元(数亿美元)的损失。原因是用于控制火星探测器的计算机软件 FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1.3危机实例(2):1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。 宇航员:弗拉迪米尔科马洛夫8软件工程相关概念软件危机:危机实例(3): 人员伤亡:由于计算机软件被广泛应用于包括医院等与生命息息相关的行业。这也使得软件的错误导致人员伤亡成为了可能。 Therac-25的意外:(在软件工程界被大量引用的案例) 在1985年六月到1987年一月之间, 六个已知的医疗事故来自于Thera
4、c-25错误地超过剂量, 导致患者死亡或严重辐射灼伤9软件工程相关概念软件危机:危机实例(4):IBM公司1963-1966年开发IBM360操作系统,项目花了5000人-年的工作量,最多时有1000人投入开发工作,写出100万行源程序,但发行的每一新版本都是上一版1000个错误的修正。事后负责人F.D.Brooks总结教训时说:“正象一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷的越深。最后无法逃脱灭顶的灾难。程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没料到问题竟会陷入这样的困境”10软件危机的表现对软件开发成本和进度的估计常常很不正确用户对“已完成的”软件系统
5、不满意的现象经常发生软件产品的质量往往靠不住软件常常是不可维护的软件通常没有适当的文档资料软件成本在计算机系统总成本中所占的比例逐年上升软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势11软件危机的原因软件是逻辑产品,开发进度、成本难以估计缺乏或不完整、不一致的文档给维护带来困难用户对软件需求的描述往往不够精确,有遗漏,有二义软件开发人员对需求的理解与用户的本来愿望有差异大型软件项目需多人协同完成,缺乏管理经验开发人员不能有效地、独立自主地处理大型软件的全部关系缺乏有力的方法学和工具的支持软件项目的特殊性和人类智力的局限性12克服软件危机的途径消除 错误的概念和做法推广使用成功的
6、开发技术和方法使用软件工具和软件工程支持环境加强软件管理摆脱软件危机的出路:软件开发的工程化和标准化13软件工程相关概念软件工程:软件工程是用科学知识和技术原理来定义、开发、维护软件的一门综合性的交叉学科,软件工程是开发与维护软件的规范化系统方法。它综合应用计算机科学、数学及管理科学等原理开发软件的工程。计算机科学、数学用于构造模型与算法;工程科学用于制定规范、设计范型、评估成本及确定权衡;管理科学用于用于计划、资源、质量、成本等管理。 14软件工程的目标能按时完成开发任务,及时交付使用;付出较低的开发成本,达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;开发的
7、软件可靠性高。15软件工程三要素软件工程方法软件工具软件工程过程 为软件开发提供“如何做”的技术。如怎样定项目计划、怎样实施需求分析、如何测试等。为软件工程方法提供自动或半自动软件支撑环境。如软件开发工具、测试工具等。软件开发的不同阶段可使用不同的工具。将软件工程划分为若干阶段,分配方法和工具,定义每个阶段的先后顺序和完成标志。16软件生存周期生存周期概念生存周期各阶段生存周期模型17软件生存周期软件生存周期(software life cycle)又称为软件生命期。是指从形成开发软件概念起,所开发的软件使用以后,直到失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括计划、开发、运行三
8、个时期,每一个时期又划分为若干阶段。每个阶段有明确的任务,这样使规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。软件生存周期概念18软件生命周期软件生命期各阶段软件计划与可行性研究软件系统需求分析软件设计软件编码软件测试与调试软件运行与维护软件生命期一般包括以下各阶段: 19软件-建筑计划与可行性研究系统需求分析软件设计软件编码软件测试与调试软件运行与维护20一、 软件计划与可行性研究目的确定软件项目是否能够开发?是否值得去开发?输出:可行性研究报告 成本效益分析 项目开发计划 21一、软件计划与可行性研究初步确定项目的规模和目标,确定项目的约束和限制。分析员进行简要的需求分析,抽象出
9、逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,找出几种可供选择的解决办法。过程22一、软件计划与可行性研究对每种解决方法,可从以下三个方面分析研究每种解决方法的可行性。 1技术可行性2经济可行性3社会可行性内容23软件可行性研究1技术可行性对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。资源:已有的或可以获得的硬件、软件资源 现有技术人员的技术水平 已有的工作基础。技术可行性分析通常包括风险分析、资源分析和技术分析三个方面的可行性24风险分析:分析在给定的约束条件下设计和实现系统的风险。采用不成熟的技术可能造成技术风险人员流动可能给
10、项目带来风险成本和人员估算不合理造成的预算风险 风险分析的目的是找出风险,评价风险的大小,并有效地控制和缓解风险。25资源分析:论证是否具备系统开发所需的各类人员、软件、硬件等资源和相应的工作环境。 例如,有一支开发过类似项目的开发和管理的团队,或者开发人员比较熟悉系统所处的领域,并有足够的人员保证,所需的硬件和支撑软件能通过合法的手段获取,那么从技术角度看,可以认为具备设计和实现系统的条件。26技术分析:分析当前的科学技术是否支持系统开发的各项活动。 在技术分析过程中,分析员收集系统的性能、可靠性、可维护性和生产率方面的信息,分析实现系统功能、性能所需的技术、方法、算法或过程,从技术角度分析
11、可能存在的风险,以及这些技术问题对成本的影响。 技术可行性分析时通常需进行系统建模,必要时可建造原型和进行系统模拟27软件可行性研究2经济可行性进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发?经济可行性:成本效益分析 公司经营长期策略 开发所需的成本和资源 潜在的市场前景三个方面的可行性28基于计算机的系统的成本主要包括:购置硬件、软件(如数据库管理系统、第三方开发的构件等)和设备(如传感器等)的费用系统的开发费用系统安装、运行和维护费用人员培训费用29效益经济效益使用基于计算机的系统后可增加的收入和可节省的运行费用(如操作人员数、工作时间、消耗的物资等)。社会效益
12、使用基于计算机的系统后对社会产生的影响(如提高了办事效益,使用户满意等),通常社会效益只能定性地估计。在进行成本效益分析时通常只统计五年内的经济效益。 经济效益通常可用货币的时间价值、投资回收期和纯收入来度量。30货币的时间价值(以利率计算的机会成本)设:当前金额为P,年利率为i,n年后的金额为F,则计算时,累计经济效益应折合成当前金额例如,一个基于计算机的系统使用后,每年产生的经济效益为10万,如果年利率为5%,那么,五年内该系统的累计经济效益是432948万,而不是50万。31投资回收期:累计的经济效益正好等于投资数(成本)所需的时间纯收入:累计经济效益 投资数当纯收入大于零时,该工程值得
13、投资开发当纯收入小于零时,该工程不值得投资(除非它有明显的社会效益)当纯收入等于零时,通常也不值得投资 显然,纯收入越大越好32软件可行性研究3社会可行性要开发的项目是否存在任何侵犯、妨碍等责任问题?要开发项目的运行方式在用户组织内是否行得通?现有管理制度、人员素质、操作方式是否可行?三个方面的可行性33中华人民共和国著作权法计算机软件保护条例保密法等34可行性分析的结论可以立即开始进行需要推迟到某些条件(例如资金、人力、设备等)落实之后才能开始进行需要对开发目标进行某些修改之后才能开始进行因为某种原因(如,技术不成熟、经济上不合算等)不能进行35软件可行性研究1复查项目规模和目标2研究正在使
14、用的系统3得到新系统的概括的逻辑模型4导出和评价各种方案5推荐可行的方案6编写可行性研究报告可行性研究的具体步骤36软件可行性研究可行性研究报告内容 1引言。 2可行性研究前提。 3对现有系统的分析。 4所建议系统的技术可行性分析。 5所建议系统的经济可行性分析。 6社会因素的可行性分析。 7其他可供选择方案。 8结论意见。37二、 软件系统需求分析需求分析概念需求分析的基本任务结构化分析方法BDS38数据库建设的基本规律三分技术,七分管理,十二分基础数据 管理 数据库建设项目管理 企业(即应用部门)的业务管理 基础数据 收集、入库 更新新的数据39二、 软件系统需求分析需求分析概念需求分析的
15、基本任务结构化分析方法40需求的定义IEEE Standard Glossary of Software Engineering Terminology用户解决一个问题或达到一个目标所需要的一种状况或能力系统为了满足一种约定、标准、规格说明或其它正式文件而必须满足或拥有的一种状况或能力以上两种状态或能力的文档化表示主观需求客观需求需求文档41功能性需求和非功能性需求功能性需求系统需要提供的服务或功能:如图书检索系统对特定输入的处理方式:如对非法输入的提示系统在特定环境下的行为:如长时间无操作时的屏保非功能性需求对系统功能或服务附加的质量约束,例如响应时间、容错性、安全性等客户所关心的(外部质量
16、)从系统开发和维护角度出发的质量属性,例如可理解性、可扩展性、可配置性等软件开发或维护者所关心的(内部质量、软件所特有)42二、 软件系统需求分析是指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程。结构化分析方法和面向对象分析方法 1. 需求分析概念43是要准确地定义新系统的目标,满足用户需要。回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:(1)分析人员和用户对问题识别,双方商定对问题的综合需求。 包括:功能需求、性能需求、环境需求和用户界面需求。 另外还有可靠性、安全性、保
17、密性、可移植性、可维护性等方面的需求. 这些需求一般通过双方交流、调查研究来获取,并达到共同的理解。2. 需求分析的基本任务44(2)分析与综合,导出软件的逻辑模型。 分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。 包括:对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成分,并用图文结合的形式,建立起新系统的逻辑模型。(3)编写文档。 文档:需求规格说明书 初步用户使用手册 确认测试计划2. 需求分析的基本任务453. 结构化分析方法 SA方法利用图形等半形式化的描述方式表达需求,用它们形成需求说明书中的主要部分。 描述工具是:(1
18、)数据流图(DFD) (2)描述加工逻辑的工具:结构化语言、判定表、判定树(3)数据字典 结构化分析(Structured Analysis,简称 SA),是面向数据流进行需求分析的方法。SA是一种建模活动,该方法使用简单易读符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘出满足功能需求的软件模型。463. 结构化分析方法 (1)数据流图(DFD) 数据流图(Data Flow Diam),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图的作用:需求分析时,作为自顶向下的
19、工具描述系统组成部分为技术员、用户间交流提供有力方法473. 结构化分析方法 (1)数据流图(DFD) 数据流图由数据流、加工(又称为数据处理)、数据存储(又称为文件)、数据源点或终点四种基本成分组成。数据流图实例:银行取款过程数据流: 加工: 数据存储: 数据源点、终点:48描述银行取款过程的数据流图49基本加工逻辑说明 对数据流图的每一个基本加工,必须有一个基本加工逻辑说明描述基本加工如何把输入数据流变换为输出数据流的加工规则描述实现加工的策略而不是实现加工的细节包含的信息应是充足的,完备的,有用的,无冗余的50(2) 用于写加工逻辑说明的工具 结构化英语 判定表 判定树3. 结构化分析方
20、法 511)结构化英语结构化英语的词汇表由 英语命令动词 数据词典中定义的名字 有限的自定义词 逻辑关系词 IF_THEN_ELSE、 CASE_OF 、 WHILE_DO、 REPEAT_UNTIL等组成。52是一种介于自然语言和形式化语言之间的语言语言的正文用基本控制结构进行分割,加工中的操作用自然语言短语来表示其基本控制结构有三种:简单陈述句结构:避免复合语句;重复结构:while_do 或 repeat_until 结构。判定结构:if_then_else 或 case_of 结构;53商店业务处理系统中“检查发货单”if 发货单金额超过$500 then if 欠款超过了60天 th
21、en 在偿还欠款前不予批准 else (欠款未超期) 发批准书,发货单 else (发货单金额未超过$500) if 欠款超过60天 then 发批准书,发货单及赊欠报告 else (欠款未超期) 发批准书,发货单 542)判定表如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适条件定义条件取值的组合动作定义在各种取值的组合下应执行的动作55以“检查发货单”为例563)判定树判定树也是用来表达加工逻辑的一种工具。有时侯它比判定表更直观。检查发货单金额$500金额$500 欠款60天不发出批准书 欠款60天发货单发出批准书、 欠款60天发出批准书、发货单及赊欠报告 欠款60
22、天发出批准书、发货单57(3) 数据字典数据词典(Data Dictionary,简称DD)就是用来定义数据流图中的各个成分的具体含义的。对数据流图中出现的每一个数据流、文件、加工给出详细定义。3. 结构化分析方法 数据字典主要有四类条目:数据流、数据项、数据存储、基本加工。数据项是组成数据流和数据存储的最小元素。58(3) 数据字典数据字典词条内容表3. 结构化分析方法 数据项/ 数据流 /数据文件名称:别名:取消及定义:组成:组织:备注:59实例:计算机售书系统模型 (3) 数据字典3. 结构化分析方法 60售书系统数据流词条实例:发票 数据流名:发票别名:购书发票组成:学号+姓名+书号+
23、单价+数量+总价+书费合计备 注:(3) 数据字典3. 结构化分析方法 61数据文件词条实例:各班学生用书表文件名:各班学生用书表别 名:组 成:系编号+专业和班级编号+年级+书号组 织:按系、专业和班编号从小到大排列备 注:(3) 数据字典3. 结构化分析方法 62三、软件设计软件概要设计2. 软件详细设计主要完成软件系统结构设计和确定各组成部分之间的相互关系。 主要确定每个模块的具体执行过程,也称为过程设计。631. 软件概要设计概要设计基本任务概要设计基本原理64(1)概要设计基本任务进行软件系统总体结构设计进行软件中所使用的数据结构及数据库的设计 编写概要设计文档 进行概要设计的评审
24、65(1)概要设计基本任务1) 软件系统总体结构设计采用某种设计方法,将一个复杂的系统按功能划分成模块。确定每个模块的功能。确定模块之间的调用关系。确定模块之间的接口,即模块之间传递的信息。评价模块结构的质量。 66(1)概要设计基本任务2) 数据结构及数据库的设计。 对数据结构的设计,采用逐步细化的方法,对需求分析阶段获得的数据字典中的数据的结构特性等加以细化。对数据库的设计是指数据存储文件的设计,主要进行概念设计、逻辑设计、物理设计三方面设计。 67(1)概要设计基本任务3) 概要设计文档主要包括: 概要设计说明书。数据库设计说明书。进一步补充需求分析阶段编写的用户手册。修订测试计划,对测
25、试策略、方法、步骤提出明确要求。 68(1)概要设计基本任务4) 进行概要设计的评审 : 对设计部分是否完整地实现了需求中规定的功能、性能等要求设计方案的可行性内外部接口定义的正确性、有效性各部分之间的一致性69(2)概要设计的基本原理l) 模块化2) 抽象3) 信息隐藏4) 模块独立性70(2)概要设计的基本原理 l) 模块化在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下几种基本属性:接口、功能、状态、逻辑。其中:功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所
26、有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。 71(2)概要设计的基本原理 2) 抽象抽象是指获取事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。抽象是认识复杂现象过程中使用的思维工具软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。72(2)概要设计的基本原理 3) 抽象信息隐藏信息隐藏指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。“隐藏”:模块化是通过定义一组相互独立的模块来实现系统,这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必需的信息,而将那些自身的实现细节与数据
27、“隐藏”起来。通过抽象,可以确定组成软件的过程实体。通过信息隐藏,可以定义模块的过程细节和局部数据结构的存取限制。73(2)概要设计的基本原理 4)模块独立性模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。如何衡量软件的独立性呢?根据模块的外部特征和内部特征,提出了两个定性的度量标准耦合性和内聚性。将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。 74(2)概要设计的基本原理 4)模块独立性_耦合性耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块
28、的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。模块的耦合性有以下七种类型:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合,它们的耦合程度由低到高。 75(2)概要设计的基本原理 4)模块独立性_内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就很高。内聚性有以下七类类型:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚,它们的内聚程度由低到高。 762. 概要设计软件结构:表示程序的总体结构,指程序的控制层
29、次体系(多少模块,多少层次,调用关系)77一个问题可以有多种结构来表示78软件结构的术语深度:控制的层次数宽度:控制的总跨度,即最多模块一层的模块数扇出:一个模块直接控制的模块数扇入:一个模块被几个模块直接控制79软件结构的术语从属:A模块控制B模块,则B从属A统率:A模块控制B模块,则A统率B80C1和C2中,C1和C,C2和C,可能是偶然性块内联系,把它们从各自的模块分离出来,C1,C2和C的块内联系增大,模块独立性增强,块间联系看起来增大一些,又通过模块的合并,得到图(c)(d)块内联系大,块间联系相应小些(模块个数少)。81模块调用个数最好不要超过五个一个模块具有过多的调用模块或被调用
30、模块,那么它往往包含过多的功能,这就是这个模块太复杂除特殊情况外(case,开关),应避免这种结构,用增加层次以减少调用个数。五个是经验得来的82结构化设计技术()是公司提出的,是长期程序设计的经验总结。下面将介绍如何建立系统的模块结构。数据流图的类型是以数据流为基础来设计软件的模块结构,那么我们首先要找出数据流图的一些规律,从而导出软件的初始结构。831、变换类型数据流图定义:具体较明显的输入,变换(或称主加工)和输出界面的数据流图。842、事务型数据流图定义:图中某个加工将它的输入数据流分离成一串发散的数据流,形成许多活动的路径(分支),并根据输入的值选择其中的一个路径,具有这样特征的数据
31、流图。事务中心:把输入数据流分离成一串发散数据流的加工。853、设计步骤:总述模型实例第一步:复查基本系统模型 这一步将看到软件的原型,传统方法往往是从这一步开始的。 在做这一步时,要对以前建立的基本数据模型,再作最后的审查,是否有遗漏的输入或输出。第二步:复查并精化数据流图 对数据流图的最后复审求精要慎重,一定要保证数据流图的正确性。不同的选择导出的软件初始模块图的合理性有些差异。863、设计步骤:总述模型实例第三步:确定数据流图的类型:变换型与事务型。变换设计:从变换型数据流图导出软件模块结构的过程。如何划分输入、主加工、输出三个部分?从两头向中间,先找出逻辑输入和逻辑输出,找到它们即可划
32、分出三个部分。8788第四步:设计上层模块结构:自顶向下的设计方法。顶层:主模块,对应于主加工。一层:标准的一层,对应于变换数据流图的三个部分,三个模块89第五步:设计软件的中下层模块结构(基于数据流图)。90第六步:对初始模块求精,得到合理的软件结构。912. 软件详细设计(1)详细设计基本任务(2)结构化程序设计方法92(1)详细设计基本任务为每个模块进行详细的算法设计。为模块内的数据结构进行设计。对数据库进行物理设计,即确定数据库的物理结构。其他设计。根据软件系统的类型,还可能要进行以下设计:代码设计、输入输出格式设计、人机对话设计。编写详细设计说明书。为每一个模块设计一组测试用例。 评
33、审。对处理过程的算法和数据库的物理结构都要评审。93(2)结构化程序设计方法 结构化程序设计是E.W.Dijikstra在1965年提出的。 它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、重复三种基本控制结构构造 。详细描述处理过程常用三种工具:图形、表格和语言。 图形:程序流程图、N-S图、PAD图表格:判定表语言:过程设计语言(PDL) 94四、 软件编码软件编码是将详细设计得到的处理过程的描述转换为基于某种计算机语言的程序,即源程序代码。需注意根据项目的应用领域选择适当的编程语言、编程的软硬件环境以及编码的程序设计风格等事项
34、95四、 软件编码Fourth Generation Languages1st generation languagesmachine languages (binary)2nd generation languagesassemblers3rd generation languageshigh-level languagesFORTRAN, COBOL, C, C+each statement indended to be 5-10 assembler stmts4th generation languages (4GLS)each statement indended to be 30-5
35、0 assembler stmtseasier/faster to programreduces costsdeclarative say what you want, not how to do it (e.g., SQL Structured Query Language )success has been mixedpositivesfast response from DP dept.work well for DB appsnegativesslow & inefficient96程序风格程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格。 源程序文档化
36、 数据说明 语句结构 输入输出方法97源程序文档化 标识符的命名 安排注释 程序的视觉组织98标识符的命名符号名即标识符,包括模块名、变量名、常量名、标号名、子程序名、 数据区名以及缓冲区名等。名字应能反映它所代表的对象,应有一定实际意义。名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。在一个程序中,一个变量只应用于一种用途。99程序的注释夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。注释分为序言性注释和功能性注
37、释。100序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关项目包括: 程序标题;有关本模块功能和目的的说明; 主要算法; 接口说明:包括调用形式,参数描述,子程序清单;101序言性注释有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。102功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎
38、么样。而不要解释下面怎么做。要点: 描述一段程序,而不是每一个语句; 用缩进和空行,使程序与注释容易区别; 注释要正确。103程序的视觉组织恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。自然的程序段之间可用空行隔开;移行也叫做向右缩格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。104数据说明在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点。 1.数据说明的次序应当
39、规范化 2.说明语句中变量安排有序化 3.使用注释说明复杂数据结构105数据说明1.数据说明的次序应当规范化数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。2.说明语句中变量安排有序化当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据也应当按字母的顺序排列。106数据说明3.使用注释说明复杂数据结构如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。107语句结构在设计阶段确定了软件的逻辑流结构
40、,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。1、在一行内只写一条语句2、程序编写首先应当考虑清晰性 程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。3、程序要能直截了当地说明程序员的用意。108语句结构4. 除非对效率有特殊的要求, 程序编写要做到清晰第一,效率第二。不要为了追求效率而丧失了清晰性。事实上,程序效率的提高主要应通过选择高效的算法来实现。5.首先要保证程序正确, 然后才要求提高速度。反过来说,在使程序高速运行时,首先要保证它是正确的。6.避免使用临时变量而使可读性下降。7. 让编译程序做简单的优化。8. 尽
41、可能使用库函数9. 避免不必要的转移。109语句结构10.尽量只采用三种基本的控制结构来编写程序。11. 避免使用空的ELSE语句和IF THEN IF的语句。12.避免采用过于复杂的条件测试。13.尽量减少使用“否定”条件的条件语句14. 尽可能用通俗易懂的伪码来描述程序的流程,然后再翻译成必须使用的语言。15. 数据结构要有利于程序的简化。16. 要模块化,使模块功能尽可能单一化,模块间的耦合能够清晰可见。110语句结构17. 利用信息隐蔽,确保每一个模块的独立性。18. 从数据出发去构造程序。19. 不要修补不好的程序,要重新编写。也不要一味地追求代码的复用,要重新组织。20. 对太大的
42、程序,要分块编写、测试,然后再集成。21. 对递归定义的数据结构尽量使用递归过程。111输入/输出在设计和编码时都应考虑下列原则: 1. 对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;2. 检查输入项的各种重要组合的合理性,必要时报告输入状态信息;3. 使得输入的步骤和操作尽可能简单,并保持简单的输入格式; 112输入/输出 4. 输入数据时,应允许使用自由格式输入; 5. 应允许缺省值; 6. 输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目; 7. 在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同
43、时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息; 8. 当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性; 9. 给所有的输出加注解,并设计输出报表格式。113五、软件测试与调试一软件测试软件测试概念及目的软件测试的原则软件测试方法软件测试对象测试与软件开发各阶段的关系软件测试过程测试用例设计114 软件测试1.软件测试概念及目的测试阶段的基本任务:是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组“高效”的测试用例,利用这些实例执行程序,找出软件中潜在的各种错误和缺陷。软件测试是为了发现错误而执行程序的过程。在IEEE提出的软件工程标准
44、术语中,软件测试是指使用人工或自动手段,运行或测试某个系统的过程,其目的是检验软件是否满足规定的需求,或是清楚预期结果与实际结果之间的差异。 115 软件测试2.测试的原则在软件测试中,应注意以下指导原则:测试用例应由输入数据和预期的输出数据两部分组成。测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事。应制定测试计划并严格执行,排除随意性。长期保留测试用例。对发现错误较多的程序段,应进行更深入的测试。程序员避免测试自己的程序。 116 软件测试3.测试方法一般分为两大类:动态测试方法与静态测试方法。(1)静态测试
45、静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。(2)动态测试 动态测试指通过运行程序发现错误。 对软件产品进行动态测试时,根据测试用例的设计方法不同一般有两种方法,分别称为黑盒测试法和白盒测试法。1174.软件测试的对象软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。118119测试信息流120测试信息流软件配置:软件需求规格说明、软件设计规格说明、源代码等;测试配置:测试计划、
46、测试用例、测试程序等;测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。121测试结果分析:比较实测结果与预期结果,评价错误是否发生。排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档再测试:直到通过测试为止。122通过收集和分析测试结果数据,对软件建立可靠性模型利用可靠性分析,评价软件质量: 软件的质量和可靠性达到可以接受的程度; 所做的测试不足以发现严重的错误;如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。1235. 测试与软件开发各阶段的关
47、系软件开发过程是一个自顶向下,逐步细化的过程软件计划阶段定义软件作用域软件需求分析建立软件信息域、功能和性能需求、约束等软件设计编码是把设计用某种程序设计语言转换成程序代码测试过程是依相反顺序安排的自底向上,逐步集成的过程。124测试过程是依相反顺序安排的自底向上,逐步集成的过程。125 软件测试6.软件测试过程 软件测试一般要经过以下四步测试:(1)单元测试主要针对模块的五个基本特征进行测试:模块接口,局部数据结构,重要的执行路径,错误处理,边界条件。(2)集成测试也称组装测试,是在单元测试的基础上将所有模块按照设计要求组装成一个完整的系统进行的测试。(3) 确认测试又称有效性测试,是检查软
48、件的功能与性能是否与需求规格说明书中确定的指标相符合。(4)系统测试是将确认通过的软件作为计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起,在实际的使用环境下,对计算机系统进行一系列的组装测试和确认测试。1261277.测试用例设计两种常用的测试方法 黑盒测试 白盒测试128黑盒测试把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。129黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗漏了的功能? 在接
49、口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误?130用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。131假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的 测试数据组: 232232 264 如果测试一组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。132等价类划分等价类划分是一种典型的黑盒测试方法,使用这一方法时,
50、完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。133等价类划分使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。134等价类划分等价类的划分有两种不同的情况: 有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。 无效等价类:是指对于程序的规格说明来说,是不合理的,
51、无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。135划分等价类原则(1) 如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。(2) 如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。(3) 如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。(4) 如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为 每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。(5) 如果规定了输入数据必须遵守的
52、规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。136白盒测试把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。137软件人员使用白盒测试方法,主要想对程序模块进行如下的检查: 对程序模块的所有独立的执行路径至少测试一次; 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性,等。138139对一个具有多重
53、选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3170年。140逻辑覆盖 语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖。逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。141例(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdce142L1 ( a c e )= (A1) and (B=0) and (A=2) or (X1)= (A1
54、) and (B=0) and (A=2) or (A1) and (B=0) and (X1)= (A=2) and (B=0) or (A1) and (B=0) and (X1) (A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdce143L2 ( a b d )= not(A1) and (B=0) and not(A=2) or (X1)= not (A1) or not (B=0) and not (A=2) and not (X1) = not (A1) and not (A=2) and not (X1) or not (B=0) and
55、not (A=2) and not (X1)(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdce144L3 ( a b e)= not (A1) and (B=0) and (A=2) or (X1)= not (A1) or not (B=0) and (A=2) or (X1)= not (A1) and (A=2) or not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1)(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdce145L4 (
56、 a c d )= (A1) and (B=0) and not (A=2) or (X1)= (A1) and (B=0) and not (A=2) and not (X1)(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdce146语句覆盖语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句。(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b
57、 d )L3 ( a b e)L4 ( a c d )147测试用例的设计格式如下【输入的(A, B, X)输出的(A, B, X)】为图例设计满足语句覆盖的测试用例是:【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】(A=2) and (B=0) or (A1) and (B=0) and (X1) (A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b d )L3 ( a b e)L4 ( a c d )148 判定覆盖判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假
58、分支至少经历一次。判定覆盖又称为分支覆盖。对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b d )L3 ( a b e)L4 ( a c d )149【(2, 0, 4),(2, 0, 3)】覆盖ace【L1】【(1, 1, 1),(1, 1, 1)】覆盖abd【L2】(A=2) and (B=0) or (A1) and (B=0) and (X1) not (A1) and not (A=2) and not (X1) or not (B=0) a
59、nd not (A=2) and not (X1)(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b d )L3 ( a b e)L4 ( a c d )150如果选择路径L3和L4,还可得另一组可用的测试用例:【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】【(3, 0, 3),(3, 0, 1)】覆盖 acd【L4】not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1)(A1) and (B=0) and not (A=2)
60、and not (X1)(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b d )L3 ( a b e)L4 ( a c d )151条件覆盖条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。例如,对于第一个判断: 条件 A1 取真为 ,取假为 条件 B0 取真为 ,取假为(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1TTFFabdceL1 ( a c e )L2 ( a b d )L3 (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商场运营主管述职报告
- 案件委托补充协议
- 小学古诗背诵早读
- 抢救护理交接书写规范
- 攀岩创新创业计划书
- 房产评估抵押合同
- 幼儿园获奖公开课:大班健康《健康日》课件
- 房地产开发项目预算咨询合同
- 排队代购居间合同范本
- 陇南地区成县2025年小升初常考易错数学检测卷含解析
- 湖北省部分名校2024-2025学年高二下学期3月联考物理试卷(A)(原卷版+解析版)
- 第5课+光色交汇+课件-2024-2025学年浙人美版(2024)初中美术七年级下册
- (2025)政工职称考试题库(附参考答案)
- 临沂考科目一试题及答案
- 2025年初级等保测评试题及答案
- 2025年全国中小学生安全知识竞赛参考试题库500题(含答案)
- DB11∕T493.1-2024道路交通管理设施设置规范 第1部分:道路交通标志
- 教师如何使用AI开展教学DeepSeek使用指南人工智能 课件
- 2025新人教版七年级下语文-4.16《有为有不为》教案教学设计
- (二调)武汉市2025届高中毕业生二月调研考试 生物试卷(含标准答案)
- 2025年宁夏建设职业技术学院单招职业倾向性测试题库一套
评论
0/150
提交评论