版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学技术专业技能基础介绍,目录,第一章 软件工程 第二章 数据结构 第三章 操作系统 第四章 数据库技术 第五章 面向对象程序设计 第六章 计算机网络 第七章 网页设计,第一章 软件工程,计算机软件技术基础,关于软件工程教学的几点设想,软件工程内容庞杂,教学中要把所有内容介绍一遍也是很困难的。缺乏一定的实践经验基础,要较好理解也会有较大的困难。只能多介绍实用、对中小型软件开发有指导意义的概念、方法。 建议同学们通过书中的习题,理解、消化本章的重点。,1.1 概述,本章简单介绍软件工程的形成和发展,重点介绍软件开发的不同方法和软件测试策略与方法,最后就软件开发环境和软件重用技术作一简要介绍
2、。 软件工程的提出源于20世记60年代末期出现的“软件危机”,并在较短的时间内发展成一个完整的学科方向,30多年来,在理论研究和工程实践两个方面作了大量的工作。,软件是什么?,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料,软件的特点,软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题 受硬件制约,软件规
3、模,1.1.1 软件工程的形成与发展,软件发展的三个阶段,软件开发方法从机器语言编程到软件工程方法,经历了三个阶段 程序设计时期(1946年到60年代中期) 生产方式是手工生产、个体劳动。只有程序,无软件的概念。 软件时期(60年代中期至70年代中期) 程序不再是硬件的附属,有软件的概念。 作坊式的生产方式已难满足软件生产的质量和数量上的要求。出现了“软件危机”。 软件工程时期(70年代至今) 1968年、1969年北大西洋公约组织成员国的软件工件者召开了两个研讨会,提出了“软件工程”这一述语, 根本目的在于克服“软件危机”中所遇到的困难问题,从此进入软件工程时代。,什么是软件危机,软件危机是
4、指在计算机软件的开发和维护过程中所遇到的一系列严重问题。主要是两个问题。 1. 如何开发软件,怎样满足对软件的日益增长的需求。 2. 如何维护数量不断膨胀的已有软件,1.1.1.2.软件危机的主要表现,软件开发成本和进度的估计常常很不准确。 用户往往对已完成的软件不满意。 软件的质量常被怀疑。 软件极难维护。 缺乏良好的软件文档。 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。,软件危机的产生原因,一般以为,软件危机的发生与软件产品的特征和软件产品开发与维护的方法不正确有关。 其一:软件是逻辑的系统部件而不是物理的系统部件,以程序和文档形式存在,具有无形性。 其二:软件规模越
5、来越大,功能越来越强,导致软件结构非常复杂。,解决软件危机的途径和方法,要充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,并应用于软件开发的实践中,将软件开发变成一种组织良好、管理严密、各类人员协同完成的工程项目 技术措施 使用更好的软件开发方法和开发工具 组织管理措施 软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。,1.1.1.3软件工程,1983年IEEE定义为: 软件工程是开发、运行、维护和修复软件的系统方法。 Boehm(勃姆): 运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维
6、护这些程序所必需的相关文件资料 Fritz Bauer(鲍尔): 建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法,软件工程项目的基本目标,付出较低的开发成本 达到要求的软件功能 取得较好的软件性能 开发的软件易于移植 需要较低的维护费用 能按时完成开发工作,及时交付使用,软件工程学,软件工程学:自软件工程出现以后人们围绕实现软件优质高产的目标进行了大量的理论研究和实践,逐步形成的一门新兴学科。它包括的主要内容有: 1软件工程方法学 方法学是研究软件构造技术的学问。一个软件从定义、开发到维护,都需要有适当的方法。 结构程序设计的兴起,是程序设计从“无法
7、可依”变为“有章可循” 传统结构分析得出的软件“解空间模型”,在结构上不同于直接由客观世界的实体及实体间的联系抽象出来的“问题空间模型” 面向对象程序设计,一个有希望的突破口。,软件工程学续,2软件工程环境 即软件开发环境,是软件开发人员开发活动的舞台。 软件工具是环境中最活跃的成分。所谓工具,在这里泛指一切帮助开发软件的软件。集成化工具。 3软件工程管理 软件工程管理的目的,是为了按照软件的预算和进度完成项目计划,实现预期的经济和社会效益。,1.1.2 软件工程范型,软件工程范型(SE Paradigm),又称,软件开发模型等。 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为
8、计算机软件的生存周期 软件工程采用的生存周期方法学,对软件开发和维护的复杂问题进行分解,将软件的生存周期划分为若干个阶段,如:制定计划、需求定义、软件设计、编程、测试、运行维护等,每个阶段任务相对独立,便于分工协作,使软件开发过程按有秩序、能管理的方式组织起来,从而降低软件开发的难度。,软件工程的主要环节,软件工程的主要环节有:人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等,如图,人员管理,项目管理,可行性与需求分析,系统设计,程序设计,测试,维护,1.1.2.1传统的软件工程范型瀑布模型,对软件生存周期的不同划分,形成了不同的软件生存周期模型,常用的模型有:传统的瀑布
9、模型、快速原型模型、4GT等。 瀑布模型(Waterfall Model),是1976年由BWBoehm提出的,它奠定了80年代初软件工程学的基础。 瀑布模型是基于软件生存周期的一种范型。它将软件生存周期分为定义、开发、维护三个阶段,每个阶段又分为若干个子阶段,各子阶段的工作顺序展开,如自上而下的瀑布。,瀑布模型图,瀑布模型的特征,从上一项活动中接受该项活动的工作对象,作为输入。 利用这一输入实施该项活动应完成的内容 给出该项活动的工作成果,作为输出传给下一项活动 对该项活动实施的工作进行评审。若其工作得到确认,则继续下一项活动。,瀑布模型的缺点,从认识论角度看,人的认识是一个多次反复循环的过
10、程,不可能一次完成。但瀑布模型中划分的几个阶段,没有反映出这种认识过程的反复性 软件开发是一个知识密集型的开发活动,需要相互合作完成,但瀑布模型没有体现这一点。,演化模型图,演化模型,由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次 第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求 第二次则在此基础上获得较为满意的软件产品,制定计划,问题定义:确定要开发软件系统的总目标,给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究,估计可利用的资源(硬件,软件,人力等)、成本、效益、开发进度 联想
11、集团领导人柳传志曾说:“没钱赚的事我们不干;有钱赚但投不起钱的事不干;有钱赚也投得起钱但没有可靠的人选,这样的事也不干。”柳传志为决策立了上述准则,同时也为可以行性分析指明了重点。 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查,需求分析和定义,软件需求分析是软件生存周期中的一个重要而又困难的阶段。需求分析是用户和软件人员双方讨论协作的阶段,软件开发人员要做好收集、理解、分析用户对软件系统的功能和性能要求。 软件需求分析的主要任务是确定用户对软件系统的全部要求,并以“需求说明书”的形式准确无误地表达出来。 对用户提出的要求进行分析并给出详细的定义 编写软件需求说明书或系统功
12、能说明书及初步的系统用户手册 提交管理机构评审,软件设计,目的:明确软件系统“如何做”。 概要设计:把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计:对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编写设计说明书,提交评审。,程序编写,把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的,软件测试,检查并排除软件中的错误,提高软件的可靠性。 单元测试:查找各模块在功能和结构上存在的问题并加以纠正 组装测试:将已测试过的模块按一定顺
13、序组装起来 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,运行维护,改正性维护:运行中发现了软件中的错误需要修正 适应性维护:为了适应变化了的软件工作环境,需做适当变更 完善性维护:为了增强软件的功能需做变更,定义阶段流程图,开发阶段流程图,检验、交付与维护阶段流程图,1.1.2.2快速原型模型,在开发初期,要想得到一个完整准确的规格说明不是一件容易的事。特别是对一些大型的软件项目。 用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的全面要求。 软件开发者对于所要解决的应用问题认识更是模糊不清 随着开发工作向前推进,用户可能会产生新的要求,或因环境
14、变化,要求系统也能随之变化;开发者又可能在设计与实现的过程中遇到些没有预料到的实际困难,需要以改变需求来解脱困境。 因此规格说明难以完善、需求的变更、以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。 为解决这些问题,逐渐形成了软件系统的快速原型的概念。,快速原型模型图,快速原型分析和构造的好处,增进软件者和用户对系统服务需求的理解,使比较含糊的具有不确定性的软件需求(主要是功能)明确化。 软件原型化方法提供了一种有力的学习手段。 使用原型化方法,可以容易地确定系统的性能,确认各项主要系统服务的可应用性,确认系统设计的可行性,确认系统作为产品的结果。 软件原型的最终版本,废弃策略,追加策
15、略。,1.1.2.3 4GT范型,以第四代语言(4GL (Fourth-Generation-Techniques)为核心的开发技术。见p7,自行阅读。,1.2 软件开发方法,定义开发维护 开发的方法: 面向数据流的结构化分析方法(SA) 面向数据结构的Jackson方法(JSD) 面向数据结构的结构化数据系统开发方法(DSSD) 面向对象的分析方法(OOA)等 本课程介绍:结构化开发方法和面向对象的开发方法。,1.2.1 结构化开发方法,结构化开发方法分为如下几个步骤: 结构化分析(软件分析) 结构化设计(总体设计、概要设计) 详细设计 面向过程的编码,1.2.1.1 结构化分析,结构化分析
16、方法,亦称SA(Structured Analysis)方法。它是70年代后期有E.Yourdon等提出。是一种基于功能分解的需求分析方法。 结构化分析方法是一种建模技术 模型的核心是数据词典,它描述了所有的在目标系统中使用的和生成的数据对象。并用数据流图表达需求。,1)SA方法的特点,核心思想:自顶向下和逐步求精。 基本手段:分解和抽象。 分解:把大问题分割成若干小问题,然后分别解决。 抽象:略去细节,先考虑问题最本质的属性。 使用了描述需求说明书的几个规范工具。即数据流图、数据词典、小说明(加工逻辑的描述)等,使文档规范化。,自顶向下,逐步求精方法的优点,符合人们解决复杂问题的普遍规律。可
17、提高软件开发的成功率和生产率 用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,程序容易阅读和理解 程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、测试和集成 每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查 有利于设计的分工和组织工作。,2)数据流图,数据流图(Data Flow Diagram,简称DFD图),SA方法采用“分解”的方法来描述一个复杂的系统,数据流图是描述系统中数据流程的图形工具,它标识了一个系统的逻辑输入和逻辑输出以及把逻辑输入转换为逻辑输出所需要的加工处理。 数据流图的基本符号
18、: 数据流:具有名字且具有流向的数据 加工:表示对数据进行的加工或变换 数据存储:文件储存 数据源点或终点:数据来源和数据去向,银行取款过程数据流图,分层分解,一个实际的问题解空间是由很多小的问题解组成的,因而,一个软件会有很多的解的过程,即加工过程。 为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达成容易理解的整个系统。,数据流图的层次结构,顶层流图:在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据 中间层流图:表示对其上层父图的细化
19、。它的每一加工可能继续细化,形成子图。 底层流图:是指其加工不需再做分解的数据流图。 基本加工:不能再进行分解的加工 画各层数据流图应注意的问题: (1)父图和子图平衡 (2)子图的编号 (3)数据守恒,分层的数据流图,5、进行“第一级分解”,第一级分解的方法,第一级分解的结果,6、进行“第二级分解”,第二级分解的方法,第二级分解的结果:,未经精化的输入结构 未经精化的变换结构,未经精化的输出结构,7、使用设计度量和设计准则对第一次分割得到的软件结构进一步精化,对于从前面的设计步骤得到的软件结构,还可以进行许多修改: (1)输入结构中的模块“转换成rpm”和“收集sps”可以合并; (2)模块
20、“确定加速减速”可以放在模块“计算mph”下面,以减少耦合; (3)模块“加速减速显示”可以相应地放在模块“显示mph”的下面。,精化的数字仪表板系统的软件结构,3)数据词典,数据流图命名理解一致性,对软件项目的的重要性的显而易见的。 数据词典(Data Dictionary,简称DD) 对数据流图中包含的所有元素的定义的集合构成了数据字典。 数据词典中有四种类型的条目: 数据流条目:数据流条目给出某个数据流的定义,它通常是列出该数据流的各组成数据项。 文件条目:文件条目给出某个文件的定义。 数据项条目:数据项条目给出某个数据单项的定义。 加工条目:又称基本加工说明或小说明。小说明中应精确地描
21、述用户要求某个加工做什么。 数据词典与数据流图配合,能清楚地表达数据处理的要求,基本加工说明工具,结构化英语 是一种介于自然语言和形式化语言之间的语言。语言的正文用基本控制结构进行分割,加工中的操作用自然语言短语来表示。 判定表 如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适 判定树 判定树也是用来表达加工逻辑的一种工具。有时侯它比判定表更直观。,结构化英语,其基本控制结构有三种: 简单陈述句结构:避免复合语句; 重复结构:while_do或 repeat_until 结构。 判定结构:if_else 或 case_of 结构;,结构英语“检查发货单”,if 发货单金
22、额超过$500 if 欠款超过了60天 在偿还欠款前不予批准 else (欠款未超期) 发批准书,发货单 else (发货单金额未超过$500) if 欠款超过60天 发批准书,发货单及赊欠报告 else (欠款未超期) 发批准书,发货单,判定表“检查发货单”,判定树,1.2.1.2 结构化设计,结构化设计方法,亦称SD(Structured Design)方法。是一种面向数据流的设计方法,目的在于确定软件的结构。 SD方法的基本思想是:根据SA方法中的数据流图建立一个良好的模块结构图(例如SC图或软件层次方框图);运用模块化的设计原理控制系统的复杂性,即设计出模块相对独立的,模块结构图深度、
23、宽度都适当的,单入口单出口的,单一功能的模块结构的软件结构图或软件层次方框图。 此方法提供了描述软件系统的工具,提出了评价模块结构图质量的标准,即模块之间的联系越松散越好,而模块内各成分之间的联系越紧凑越好。,模块化,模块化:就是把系统划分为若干个模块,从而获得满足问题需要的一个解的过程。 模块:是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。 把问题子问题的分解与软件开发中的系统子系统或系统模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。,模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而
24、和软件系统中其它的模块的接口是简单的 例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性 一般采用两个准则度量模块独立性。即模块间耦合和模块内聚,模块独立性度量准则,耦合:是模块之间的互相连接的紧密程度的度量。 内聚:是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。 模块独立性比较强的模块应是高内聚低耦合的模块。,2)模块的偶合,两个模块完全独立(没有任何联系); 数据耦合:即两个模块只通过数据进行交换; 状态耦合:即两个模块之间通过控制状态进行传递; 环境耦合:即两个模块之间通过公共环境进行数据存取; 公共块耦合:即多个模块引用一个全程数据区
25、; 内容耦合:即一个模块使用保存在另一模块内部的数据或控制信息,或转移进入另一个模块中间时,或一个模块有多个入口时。 模块间耦合性越小越好。,模块耦合强度关系,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 非直接耦合的模块独立性最强。,数据耦合 (Data Coupling),一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。,控制耦合(Control Coupling),如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的
26、功能,就是控制耦合。,外部耦合(External Coupling),一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。,公共耦合(Common Coupling),若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,内容耦合 (Content Coupling),如果发生下列情形,两个模块之间就发生了内容耦合: 一个模块直接访问另一个模块的内部数据 一个模块不通过正常入口转到另一模块内部 两个模块有一部分程序代码重迭(只可能出现在汇编语言中) 一
27、个模块有多个入口。,模块的内聚,内聚有六种,从小到大如下: 偶然内聚,即一个模块由多任务组成,这些任务之间关系松散或根本没联系; 逻辑内聚:即一个模块完成的任务在逻辑上相同或相似; 时间内聚:即一个模块所包含的任务必须在同一时间内执行; 通信内聚:即一个模块内所有处理元素集中于相同的数据结构; 顺序内聚:即一个模块中所有处理元素都是为完成同一功能而且必须顺序执行; 功能内聚:一个模块所有处理都完成一个而且仅完成一个功能。 内聚性给出模块的内在联系,因此内聚性越大越好。,模块内聚性高低关系,功能内聚(Functional Cohesion),一个模块中各个部分都是完成某一具体功能必不可少的组成部
28、分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。,信息内聚(Informational Cohesion),这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。,通信内聚(Communication Cohesion),如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,过程内聚(Pr
29、ocedural Cohesion),使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,时间内聚(Classical Cohesion),时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。,逻辑内聚(Logical Cohesion),这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,巧合内聚(Coincidental
30、Cohesion),当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。,3)模块的设计准则,通过模块的分解和合并,提高模块的独立性; 模块调用个数(扇出)最好不要超过五个; 降低模块接口的复杂性; 一个模块的所有下属模块应该包括该模块受某一判定影响的所有模块的集合; 模块应设计成单入口和单出口; 模块的大小要适中,一般在50句左右。,(3)数据流图的类型,从数据流图转换分析为模块结构图,需要区分数据流图的类型。不同类型的流图,转换分析方法是有差异的。 数据流图通常分为两大类型: 转换处理型 事务处理型,转换处理型,转换处理过程大致
31、分为输入数据,变换数据和输出数据三步;它包含的数据流有输入流、转换流、输出流三个部分。在输入流中,信息由外部形式转换为内部形式的结果;在输出流中,信息由内部形式的结果转换为外部形式数据流出系统。 由于大多数数据流图都可看成是对输入数据进行转换而得到输出数据的处理,因此可把这类处理抽象为转换处理型。,事务处理型,另一类数据流图可看成是对一个数据流经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。这种类型的处理可以抽象为事务处理型。 在事务处理中,输入数据流称为事务流,加工称为事务中心,若干平行数据流称为事务路径。 当事务流中的事务送到事务中心后,事务中心分析每一事务,根据事务处理的特
32、点和性质选择一个事务路径继续进行处理。,4)SD方法的设计过程,使用SD方法的基础是数据流图。 用SD方法进行总体设计的过程大致如下: 研究、分析和审查数据流图,从软件的需求说明书弄清楚数据流加工的过程; 根据数据流图确定数据流图的类型; 从数据流图导出系统的初始软件结构图; 改进初始软件结构图,直到符合要求为止; 复查。,5)软件结构的描述方式,在SD方法中,软件结构用一种结构图来描述,它是设计说明书的一部分。 结构图描述了软件模块结构,并反映了模块和模块间联系等特性。,6)转换分析,转换分析是系统结构设计的一种策略,转换分析技术可把转换型处理数据流图转换为初始的标准结构。 转换分析步骤:
33、确定数据流图的类型 确定输入流、转换流、输出流的流界 进行一级分解(分析),设计上层模块。在中心加工位置设计一个主模块(顶层模块),命名为M,其功能是控制整个软件结构,完成系统所要做的各项工作。 进行二级分解(分析),设计中下层模块 进一步细化和调整 复查。,转换分析图例,7)事物分析,当数据流图明显呈现出事务型特征时,从相应的数据的数据流图导出标准结构图。 步骤同转换型,但在主模块设置上有所不同,将事务中心直接设计为“事务控制”模块。,1.2.1.3 详细设计和编码,详细设计的任务 为软件结构图中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述。 详细设计的描述工
34、具 程序流程图 方框图(N-S图) 问题分析图(PDA) 伪码(PDL语言),程序流程图,也称为程序框图,独立于任何一种程序设计语言,比较直观、清晰、易于掌握。 任何复杂的程序流程图都可以由以下不同类型的基本结构组合或嵌套而成: 顺序结构 选择结构(IF-THEN-ELSE) 多分支选择结构(CASE) 先判定循环结构(WHILE) 后判定循环结构(UNTIL),方框图(N-S图),图形描述工具。限制了随意的控制转移。,6.2.1 程序流程图,程序流程图中常用的符号,程序流程图虽然比较直观,灵活,并且比较容易掌握,但是它的随意性和灵活性却使它不可避免地存在着一些缺点:,(1)由于程序流程图的特
35、点,它本身并不是逐步求精的好工具。因为它使程序员容易过早地考虑程序的具体控制流程,而忽略了程序的全局结构;,(2)程序流程图中用箭头代表控制流,这样使得程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;,(3)程序流程图在表示数据结构方面存在不足。,6.2.2 盒图(N-S图),N-S图的基本符号,N-S图有以下一些特点:,(1)功能域(即某一个特定控制结构的作用域)有明确的规定,并且可以很直观地从N-S图上看出来;,(2)它的控制转移不能任意规定,必须遵守结构化程序设计的要求;,(3)很容易确定局部数据和全局数据的作用域;,(4)很容易表现嵌套关系,也可以表示模块的层次结构。
36、,6.2.3 PAD图,PAD图的基本符号,PAD图提供的定义功能,(3)结构化编码方法,对源程序的编码要求:最基本要求是源程序的正确性,同时还要考虑其可读性、可理解性、可测试性和可维护性。 写程序的风格:一个好的源程序意味着源程序代码逻辑简明清晰,易读易懂。,编码原则,程序内部文档应选取含义鲜明的名字,注解正确,程序清单层次清晰,布局合理。 数据说明和次序应该标准化,个别复杂的数据结构应加注释。 每个语句应该简单直接,不能为提高效率而使程序变得过份复杂。 对输入数据应进行合法性检查;对输出数据要加输出数据的标志。 在程序编码阶段以不影响程序的清晰度和可读性为前提,尽可能提高效率。,1.2.2
37、 面向对象开发方法,面向对象技术是一种非常实用而强有力的软件开发方法。面向对象软件开发方法又称OOSD(Object-Oriented Software Development)。OOSD包括面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)三个方面。 软件分析与对象抽取对象详细设计面向对象的编码测试,基本出发点,面向对象方法和技术是自80年代以来逐渐形成的一种分析问题和解决问题的新方法 基本出发点:就是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。 客观世界是由许多具体的事物或事件、抽象的概念和规则等组成的,因此,我们将要加以研究的事、物、概念都称为对象。
38、面向对象的方法正是以对象作为最基本的元素,以对象作为分析问题,解决问题的核心。,面向过程开发模式,面向过程开发模式产生过程的抽象。 这些抽象的基础是把软件视为处理流,并定义成由一系列步骤构成的算法。 每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。,面向过程开发模式的特点,过程性开发模式侧重建立构成问题解决的处理流。 数据抽象、数据结构根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。 系统的状态是一组变量,这组变量保存状态的值,把它们从一个过程传送到另一个过程。,面向对象开发模
39、式,在面向过程开发模式中优先考虑的是过程抽象,在面向对象开发模式中优先考虑的是实体(问题领域的对象)。 在面向对象开发模式中,把标识和模型化问题领域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。,面向对象开发模式的特点,面向对象系统中的对象是数据抽象与过程抽象的综合。 系统的状态保存在各个数据抽象(对象属性)的所定义的数据存储中。 控制流包含在各个数据抽象中的操作内(对象的方法)。 在面向对象体系结构中。消息从一个对象传送到另一个对象。算法被分布到各种实体中。,什么是面向对象,Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。 如果一个
40、软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。 一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,面向对象的特点,抽象性:对象的数据抽象和行为抽象; 封装性:信息隐蔽; 共享性: 同一类中所有实例共享数据结构和行为特征; 同一应用中所有实例通过继承共享数据结构和行为特征; 不同应用中所有实例通过复用共享数据结构和行为特征,对象(object),对象是面向对象开发模式的基本成份。 每个对象可用它本身的一组属性和它可以执行的一组操作来定义。 属性一般只能通过执行对象的操作来改变。 操作又称为方法或服务,它描述了对象执行的功能,若通过
41、消息传递,还可以为其它对象使用。,1、面向对象分析(OOA),把对象作为现实世界的抽象表示,然后定义对象的属性和专门操纵那些属性的服务,属性和服务被看成对象的特征。 具有相同的属性和服务抽象的一系列对象组成类。因此在面向对象模型中,它可以包含若干类,并且它对应于模型的不同层次,因此这些类有一定的层次关系和属性继承关系。 面向对象分析由五个主要步骤构成: 标识对象 标识对象属性 定义对象的服务 识别对象所属的类 定义主题,标识对象,个人的一点体会: 挑选一个合适的例子很难。 世界是复杂的,更是丰富多彩的。每个人对世界的观察方式不尽相同,自然认识也不相同,所以对象的划分和对象之间的结构关系的认知也
42、就不同。 对象的方法还在发展,出现了很多新的开发方案体系、平台,如JAVA、COM、C#等。,2、面向对象的设计(OOD),OOA是一个分类活动,而OOD模型由主体部件、用户界面部件、任务管理部件和数据管理部件四部分构成。每个部件又由主题词、对象及类、结构、属性和外部服务五层组成,它们分别对应OOA中的五个活动:定义主题词、标识对象、标识类、标识对象的属性和标识对象的服务。其中主体部件是整个设计的主体,它包括完成目标软件系统主要功能的所有对象,用户界面部件给出人机交互需要的对象,任务管理部件提供协调和管理目标软件各个任务的对象,数据管理部件定义专用对象。要将目标软件系统中依赖于开发平台的数据存
43、取操作与其他功能分开,以提高对象独立性。 概括地说,OOD方法是以OOA模型为基础,不断填入和扩展有关软件设计的信息。,3、面向对象编程,完成OOD以后,将开始进入编程阶段。目前主要选取面向对象语言(如C+)、基于对象的语言(如Ada)、过程式语言(如C语言)。 例子是用C写的。,1.3 软件测试与质量保证,1.3.1.1 基本概念 软件测试定义:软件测试是为了发现错误而执行程序的过程。 软件测试分为:单元测试和综合测试。 软件测试在软件生存周期中横跨了两个阶段: 通常在编写出第一个模块之后就对它做必要的测试(称作单元测试)。编码与单元测试属于软件生存周期中的同一阶段。 在结束这个阶段之后,对
44、软件系统还要进行各种综合测试,这是软件生存周期的另一个独立的阶段,即测试阶段。,总存在着错误,编程大师说:“任何一个程序,无论它多么小,总存在着错误。” 初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?” “这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。” 但初学者不满足,他问:“如果操作系统不失效,那么会怎样?” “没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。” 初学者仍不满足,再问:“如果硬件不失效,那么会怎样?” 大师长叹一声道:“没有不失效的硬件。但如果这样
45、的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。” 没有错误的程序世间难求。James 1999,1.3.1.2软件测试的目标和原则,测试是为了发现软件中的错误而去运行软件的过程。 好的测试方案是尽可能地发现至今尚未发现的错误的测试方案。 成功的测试则是发现出至今未发现的错误的测试。,测试的目的,想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。 测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。 实施测试收集到的测试结果数据为可靠性分析提供了依据。 测试不能表明软件中不存在错误。,软件测试的原
46、则,应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。 测试用例应由测试输入数据和对应的预期输出结果这两部分组成。 程序员应避免检查自己的程序。 在设计测试用例时,应包括合理的输入条件和不合理的输入条件。 充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。 严格执行测试计划,排除测试的随意性。 应当对每一个测试结果做全面检查。 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,1.3.2 软件测试策略与技术,1、软件测试策略 测试过程是按单元测试、组装测试、确认测试和系统测试四个步骤进行的。,1单元测试(模块测试Uni
47、t Testing),单元测试又称模块测试,是针对软件设计的最小单位 程序模块,进行正确性检验的测试工作。 目的:是发现模块的子程序或过程的实际功能与该模块的功能和接口描述是否相符,以及是否有编码错误存在。 主要内容:模块接口测试;局部数据结构测试;重要路径测试;出错处理能力测试;边界条件测试。,2.组装测试(Integrated Testing),组装测试(集成测试或联合测试) 目的:为了发现程序结构的错误。 组装测试过程中的模块组织方式有: 非渐增式 渐增式。,组装测试考虑的问题,在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失; 一个模块的功能是否会对另一个模块的功能产生不利的影
48、响; 各个子功能组合起来,能否达到预期要求的父功能; 全局数据结构是否有问题; 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。 在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。,非渐增式组装测试,又称一次性组装方式或整体拼装。 测试方式是先对每个模块分别进行测试。然后再把所以模块组装在一起整体测试。 其优点是对各模块的测试可以并行进行,有利于充分利用人力,加快测试速度。 其缺点是由于程序中不可避免的地存在涉及模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性不大,结果是发现有错误,但却找不到错误的产生原因。,渐增式组装测
49、试,这种方式是对一个个模块进行模块调试,然后将这些模块逐步组装成较大的系统。 在组装过程中,每连接一个模块便进行一次测试,直到把所有模块集成为一个整体并进行测试,则软件的组装测试完成。 模块结合起来的策略有:自底向上测试和自顶向下测试。 自底向上测试:从程序模块结构的最低层模块进行组装和测试。因为模块是自底向上进行组装的,对给定层次的模块的下层模块处理功能总可以得到,这种测试策略要设计驱动模块。 自顶向下测试:将模块按系统程序结构,沿控制层次自顶向下进行组装。由主控模块开始,按照程序的层次结构向下移动。逐渐把各个模块组装起来。,3确认测试(Validation Testing),确认测试(有效
50、性测试)又称有效性测试。组装测试结束后,得到的是一个完整的软件系统。这时需要进行最后的测试,即有效性测试。 有效性测试阶段主要进行的测试有: 有效性测试(黑盒测试) 软件配置复查 测试 测试 验收测试。,测试,在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是无法预测的。 测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。,测试续,测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重产品的界面和特色。 测试可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产
51、品达到一定的稳定和可靠程度之后再开始。,测试,测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。 测试时,开发者通常不在测试现场。因而,测试是在开发者无法控制的环境下进行的软件现场应用。 在测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期向开发者报告。,测试续,测试主要衡量产品的FLURPS。着重于产品的支持性,包括文档、客户培训和支持产品生产能力。 只有当测试达到一定的可靠程度时,才能开始测试。它处在整个测试的最后阶段。同时,产品的所有手册文本也应该在此阶段完全定稿。,4系统测试(System Testing),系统测试,是将通过确认测试的软
52、件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。 系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。 测试内容主要有:功能测试、吞吐量测试、可用性测试、保密性测试、安装测试、可恢复性测试、资料测试和程序测试。,1.3.2.2、常用的测试方法,常用的测试方法有黑盒测试和白盒测试两种。 (1)白盒测试 白盒测试又称结构测试或逻辑驱动测试。 所谓“白盒”是指将对象看作一个打开的盒子,测试人员可利用程序内部的逻辑结构及有关的信息来设计或选择测
53、试用例。 白盒测试主要考虑的是测试用例对程序内部逻辑的覆盖程度,而不考虑程序的功能。 对程序模块的所有独立的执行路径至少测试一次; 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性,等。,白盒测试也不能实现穷尽测试,左图所示的一个小程序的控制流程,其中每个圆圈代表一段源程序(或语句块),图中的曲线代表执行次数不超过20的循环,循环体中共有5条通路。这样,可能执行的路径有520条,近似为1014条可能的路径。如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。显然,这也是不能接受的。,白盒测试,测试用例对
54、程序的覆盖程序从低到高分别为: 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖。 需要说明的是,上述各种覆盖准则的侧重点不同,覆盖程度也不同。但它们共同的是:任何一种覆盖都不能做到完全测试。,黑盒测试不可能实现穷尽测试,假设有一个很简单的小程序,输入量只有两个:A和B,输出量只有一个:C。如果计算机的字长为32位,A和B的数据类型都只是整数类型。利用黑盒法进行测试时,将A和B的可能取值进行排列组合,输入数据的可能性有:232232264种。假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。显然,这是不能容忍的,而且,设计测试用例时,不仅要有合法的输入,而且
55、还应该有非法的输入,在这个例子中,输入还应该包括实数、字符串等,这样,输入数据的可能性就更多了。所以说,穷尽测试是不可能实现的。,黑盒测试,黑盒测试又称功能测试或数据驱动测试。 在这种测试方法中,程序对测试者是完全透明的。测试者不考虑程序的内部结构和特性,就好像把程序看作一个不能打开的盒子,只根据程序的需求规格说明中的程序功能或程序的外部特性来设计测试用例。 黑盒测试的方法包括:等价分类法、边缘值分析法、因果图法和错误推测法。 一般来讲,通常用黑盒法设计基本的测试方案,再利用白盒法做必要的补充。,黑盒测试方法的效能,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗
56、漏了的功能? 在接口上,输入能否正确地接受?能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误?,等价类的划分,有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。 无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。 在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。 例:如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。,边界值分析,边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。 人们从长期的测试工作经验得知
57、,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。 这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。,因果图,如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。,因果图测试基本步骤,分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。 分析
58、软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系?根据这些关系,画出因果图。 把因果图转换成判定表。 把判定表的每一列拿出来作为依据,设计测试用例。,错误推测法,人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。 错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。,1.3.3 软件质量保证,1、评审与测试 评审和测试都是质量保证的重要活动。 验证:我们制造产品的步骤正确吗? 确认:我们制造的是正确的产品吗?,2、程序正确性证明,程序正确性证明就是要通过数学的方
59、法,证明程序具有某些需要的性质。通过多年的研究,现已提出了一些有用的方法和技术,其中包括输入输出断言法、最弱前置条件法、结构归纳法纪等几种常用的方法。 如果说程序测试是为了证明程序有错,则程序正确性的证明正好相反,是为了证明程序能够完成某些预定的功能。现有的证明程序正确性的技术与工具包括已研制出来的程序正确性自动证明器,仅适用于很小的程序。要解决大程序的正确性证明,还需要进行大量的工作。,1.4 软件重用,重用(Reuse)是软件过程的一部分。为了快速做出复杂的应用,重用是一条捷径。此外,重用也是当今软件系统的重要特征。重用指在一个软件项目中直接使用以前项目中的产物,而非重用某些工具,也就是把以前做过的东西纳入到新项目中。,1.4.1重用过程,面向对象的语言本身就提供了重用机制,如封装、继承、模板等。技术上可以制成可重用构件(不仅封装数据还封装行为,成为独立的可重用对象),这样可以大幅度提高开发效率。 重用的真正价值在于方案、决策的重用。利用集成技术将构件按可重用模式装入可重用框架(相当于建筑中的梁、柱组成的房梁)构成一组装式软件过程。 从代码重用到构件重用到设计重用到过程重用(域工程)、从初创到成长到成就到实用。现代的软件平台,或多或少都提供了重用机制。,1.4.2支持重用的环境,从过程重用的观点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮业油烟机维护保养合同2026
- 环境监测数据质量管理规定
- 作业许可审批管理制度
- 吸烟危害评估干预健康方案
- 术后营养康复膳食方案
- 工作人员交接班管理制度细则
- 常见农药残留快速降解处理方案
- 沼渣沼液田间施用操作规范
- 古法刮痧排毒方案
- 减肥瘦身代餐制作服务流程
- 《中国药物性肝损伤诊治指南(2023年版)》解读
- 2024新高考I卷全国统一考试高考物理试题(真题+答案)
- 《火力发电厂监控系统信息安全技术监督导则》
- (正式版)JBT 6315-2024 汽轮机焊接工艺评定
- 【北师大版】小学六年级下册英语全册教案
- 肿瘤病人化疗所致脱发护理
- 西方经济学(第四版)全套教学课件
- 五年级道德与法治下册 (推翻帝制 民族觉醒)课件
- 桥梁工程钢箱梁拖拉施工专项方案 配图丰富
- 住宅烟道系统技术标准
- GB 16897-2022制动软管的结构、性能要求及试验方法
评论
0/150
提交评论