2023年全国计算机等级考试二级VF_第1页
2023年全国计算机等级考试二级VF_第2页
2023年全国计算机等级考试二级VF_第3页
2023年全国计算机等级考试二级VF_第4页
2023年全国计算机等级考试二级VF_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第1章基本数据结构与算法1.算法的基本概念算法的指解题方案的准确而完整的描述。作为一个算法,一般应具有的特性为:可行性,针对实际问题设计的算法,考虑其可行性,应当可以得到满意的结果;拟定性,算法中的每一个环节都必须是明拟定义的,不允许有模掕两可的解释,也不允许有多义性;有穷性,算法必须能在执行有限个环节之后终止;有零个或多个输入;有一个或多个输入;综上所述,算法是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的.明确的;这个运算顺序将在有限的次数下终止。2.算法复杂度算法的复杂度重要涉及时间复杂度和空间复杂度。(1)算法的时间复杂度是指执行算法所需要的计算工作量。算法的工作量用算法在所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数,即算法的工作量=f(n)其中N是问题的规模。例如,两个N阶矩阵相乘需要的基本算法次数为n3,即计算工作量为n3,也就是时间复杂度为n3,即F(n)=O(n3)(2)算法的空间复杂度算法的空间复杂度是指执行这个算法所需要的内存空间。【例1.1】算法的时间复杂度是指()A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数答案:C提醒:2023年9月真题填空题第2题。2023年9月真题选择题第7题。2023年4月真题选择题第1题属该题的类似题目2023年4月真题选择题第11题考察算法的特性。1.2数据结构的基本概念1.数据结构的定义数据结构是指反映数据元素之间关系的数据元素集合的表达。通俗地说,数据结构是指带有结构的数据元素的集合。(1)数据的逻辑结构数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。一个数据结构应包含以下两方面的信息:1)表达数据元素的信息;2)表达各数据元素之间的前后件关系。(2)数据的存储结构数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。一般来说,一种数据的逻辑结构根据需要可以表达成多种存储结构,常用的存储结构有顺序。链接。索引等。而采用不同的存储结构,其数据解决的效率是不同的,因此,在进行数据解决时,选择合适的存储结构是很重要的。【例1.2】与所使用的计算机系统无关的数据结构是()A)存储B)物理C)逻辑D)线性表答案:C解析:线性表是一种具体逻辑结构,存储结构也称物理结构,只是逻辑结构是不依赖于计算机系统的。所以选项C为对的答案。【例1.3】数据的存储结构是指()A)存储在外存中的数据B)数据所占的存储空间量C)数据在计算机中的顺序存储方式D)数据的逻辑结构在计算机中的表达答案:D解析:数据的存储结构,也称为数据的物理结构,它指的是数据的逻辑结构在计算机存储空间的中的存放形式。只有选项D符合其定义,为本题的答案。提醒:2023年4月真题选择题第1题与该题相关。2023年9月真题选择题第5题考察程序的执行效率也数据结构的关系。2.数据结构的图形表达【例1.4】下列叙述中,对的的是()A)一个逻辑数据结构只能有一种存储结构B)数据的逻辑结构属于线性结构,存储结构属于非线性结构C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据解决的效率D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据解决的效答案:D解析:数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。一般来说,一种数据的逻辑结构根据需要可以表达成多种存储结构,而采用不同的存储结构,其数据解决的效率是不同的。提醒:2023年9月真题选择题第6题属该题的类似题目。数据结构除了可用二元关系表达外,还可以用直观的图形表达。在数据结构的图形表达中,对于数据集合中的每一个数据元素用中间标有元素指的方框表达,一般称之为数据结点(简称为结点)。为了进一步表达各数据元素之间的前后件关系,对于关系中的每一个元组,用一条有向线段从前件结点指向后件结点。3.线性结构与非线性结构根据数据结构中个数据元素之间前后件关系的复杂限度,一般将数据结构提成两大类:线性结构和非线性结构。假如一个非空的数据结构满足下列两个条件:1)有且只有一个根结点2)每一个结点最多有一个前件,也最多有有一个后件。则称该数据结构为线性结构。线性结构又称为线性表。假如一个数据结构不是线性结构。就称为非线性结构。1.3线性表及其顺序存储结构1.线性表的基本概念ﻩ线性表是有n(n≥0)个数据元素a1,a2,...,an组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件,即线性表或是一个空表。或者可以表达为:(a1,a2,...ai,..an)其中ai(i=1,2,...n)是数据元素,通常也称其为线性表中的一个结点。2.线性表的顺序存储结构线性表的顺序存储结构具有以下两个基本特点:1)线性表中所有元素所占的存储空间是连续的;2)线性表中个数据元素在存储空间中是逻辑顺序依次存放的。由此可以看出,在线性表的存储结构中,其前后件两个元素在存储空间中的紧邻的,且前后元素一定存储在后件元素的前面。3.线性表的插入、删除运算下面讨论线性表在顺序存储结构下的插入与删除的问题。(1)线性表的插入运算设长度为n的线性表为(a1,a2,…,ai,…,an)现要在线性表的第j个元素之前插入一个新元素b,插入后得到长度为n+1的线性表为(a′1,a′2,…,a′j,a′j+1,…,a′n,a′n+1)则插入前后两个线性表中的元素满足如下关系:aj1≤j≤i-1a′j=bj=iaj-1i+1≤j≤n+1一般情况下,要在第i(1≤i≤n)个元素之前插入一个新元素时,一方面要从最后一个(即第n)元素开始,知道第i个元素之间共n-i+1个元素依次向后移动一个位置,移动结束后,第i个就被空出,然后将新元素插入到第i个位置,插入结束后,线性表的长度增长了1.(2)线性表的删除运算设长度为n的线性表为(a1,a2,…,ai,…,an)现要删除第j个元素,删除后得到长度为n-1的线性表(a′1,a′2,…,a′j,…,a′n-1)则删除前后两个线性表中的元素满足如下关系:aj1≤j≤i-1a′j=aj+1i+1≤j≤n+1一般情况下,要删除第i(1≤i≤n)个元素时,从第i+1个元素开始,直到第n个元素之间共n-1个元素依次向前移动一个位置,删除结束后,线性表的长度减少了1。1.4栈和队列栈及其基本运算队列及其基本运算1.及其基本运算栈(stack)是限定在一端进行插入和删除运算的线性表。在栈中,允许插入与删除的一端称为栈顶(top),另一端称为栈低(bottom)。栈顶元素总是最后被插入的元素;栈底元素总是最先被插入的元素,栈顶元素总是最先被删除的元素;栈底元素总是最后被删除的元素。即栈是按照“先进后出”(FirstInLast“Out,FILO”)的原则组织数据的,因此,栈也被称为“先进后出”表。栈的基本运算有三种:入栈、出栈、和读栈顶元素。【例1.5】下列关于栈的描述中错误的是()A)栈的先进后出的线性表B)栈只能顺序存储C)栈具有记忆作用D)对栈的插入于删除中,不需要改变栈底指针。答案:B.解析:栈是限定在一端进行插入和删除的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底;栈是按照“先进后出”或“后进先出”的原则就、组织数据的;栈既可以顺序存储又可以链式存储;栈具有记忆功能。提醒:2023年4月真题选择题第7题属该题的类似题目。 (1)队列的基本概念队列是指允许在一端进行插入,而在另一端进行删除的线性表。允许插入的一段称为队尾,通常用一个称为队尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为排头(也称为队头),通常也用一个排头指针(front)指向排头元素的前一个位置。因此,队列又称为“先进先出”(FirstInFirstOutFIFO)的线性表。退队←a1退队←a1a2a3an←入队图1-1队列的基本结构向队列的队尾插入一个元素称为入队运算,从队列的排头删除一个元素称为退队运算。(2)循环队列及其运算在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向最后一个位置直到队尾指针rear指向的位置之间,所有的元素均为队列中的元素。循环队列的初始状态唯恐,即rear=frontﻫ【例1-6】下列关于队列的叙述对的的是()。A)队列是非线性结构B)队列是一种树状结构ﻩC)队列具有“先进先出”的特性D)队列具有“后进后出”的特性答案:C。提醒:2023年4月真题选择题第5题属该题的类似题目。【例1-7】下列说法中,对的的是()。A)栈是在两端操作、“先进先出”的线性表 B)栈是在一端操作、“先进先出”的线性表ﻩC)队列是在一端操作、“先进先出”的线D)队列是在两端操作、“先进先出”的线性表ﻩﻩ答案:D。解析:栈是只允许在一端进行插入和删除操作的线性表,又称“先进后出”或“后进先出”表;队列是在一段进行插入,而在另一端进行删除的线性表,又称“先进先出”或“后进后出”表。所以只有选项D对的。提醒:2023年9月真题填空题第3题考察循环队列的存储结构。1.5线性链表1.线性链表的基本概念线性表的链式存储结构称为线性链表,线性链表分为单链表,双向链表和循环链表三种类型。为了适应线性表的链式存储结构,计算机存储空间被划为一个一个小块,每一小块占若干字节,通常称这些小块为存储节点。为了存储线性表中的每一个元素,一方面要存出数据元素的值,另一方面要存储各数据元素之间的前后件关系。为此目的,将存储空间中的每一个存储节点分为两部分:一部分用于存储数据元素的值,称之为数据域;另一部分用于存放下一个数据元素的存储序号(即存储节点的地址),即指向后件节点,称为指针域。2.线性链表的基本运算线性链表的运算重要有以下几个:在线性链表中包含指定元素的结点之前插入一个新元素。在线性链表中删除包含指定元素的结点。将两个线性链表按规定合并成一个线性链表。将一个线性链表按规定进行分解。逆转线性链表。复制线性链表。线性链表的排序。线性链表的查找。3.循环链表及其基本运算循环链表与线性链表相比,具有以下两个特点:在循环链表中增长了一个表头结点,其数据域为任意或者根据需要来设立,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。循环链表中最后一个结点的指针域不为空,而是指向表头结点。即循环链表中,所有结点的指针构成了一个环状链。a1a2图1-2是一个非空循环链表,图1-3是一个空循环链表。a1a2ananHEAD…图1-2非空循环链表HEAD表头结点图1-3空循环链表循环链表的插入和删除运算的方法与线性单链表基本相同。但由循环链表的特点可以看出,在对循环链表进行插入和删除过程中,实现了空表和非空表的运算统一。【例1-8】下列对于线性链表的描述中对的的是()。A)存储空间不一定是连续,且各元素的存储顺序是任意的 ﻩB)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 ﻩC)存储空间必须有连续,且前件元素一定存储在后件元素前面D)存储空间必须有连续,且各元素的存储顺序是任意的ﻩ答案:A。解析:采用链式存储结构的线性表称为线性链表。其存储的结构的存储空间可以不连续,换句话说,逻辑上相邻的数据元素,其储存位置(又称物理位置)不一定相邻,数据元素之间的逻辑关系是由指针域拟定的。1.6树和二叉树树的基本概念树是一种简朴的非线性结构。在树这种数据结构中,所有元素之间的关系具有明显的层次特性,图1-4表达一棵一般的树。KJIHGFEDCBAKJIHGFEDCBA图1-4一般的树2.二叉树及其基本性质(1)什么是二叉树二叉树是一种很有用的非线性结构,它具有以下两个特点:非空二叉树只有一个根结点;每一个结点最多有两棵子树,且分别称为该节点的左子树和右子树。(2)二叉树的基本性质二叉树具有以下几个性质:性质1在二叉树的第k层上,最多有2k-1(k≥1)个结点。性质2深度为m的二叉树最多有2m-1个结点。性质3在任意一棵二叉树中,度为0的结点(即叶结点)总是比度为2的结点多一个。性质4具有n个节点的二叉树,其深度至少为[log2n]+1,其中[log2n]表达取log2n的整数部分。(3)满二叉树与完全二叉树满二叉树:除最后一层外,每一层上的所有结点都有两个子结点,换句话说,每一层上的节点数都达成最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树中有2m-1个结点。完全二叉树:除最后一层外,每一层上的节点数都达成最大值;在最后一层上只缺少右边的若干结点。满二叉树与完全二叉树的关系:满二叉树也是完全二叉树,但完全二叉树不一定是满二叉树。完全二叉树还具有如下两个特性:性质5具有n个结点的完全二叉树的深度为[log2n]+1。性质6设完全二叉树共有n个结点。假如从根节点开始,按层序(每一层从左到右)用自然数1,2,…,n给结点编号,则对于编号为k(k=1,2,…,n)的结点有以下结论:1、若k=1,则该结点为根节点,他没有父节点,若k>1,则该结点的父节点编号为[k/2]。2、若2k≤n,则编号为k的左节点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点)。3、若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。【例1-9】设一棵完全二叉树共有700个结点,则在该二叉树中有个叶结点。答案:350个。解析:根据完全二叉树的定义可以得出:度为1的结点的个数为0或1;又由性质3可知,度为0的结点的个数比度为2的结点的个数多1个;设度为0的结点个数为k,则度为2的结点个数为k-1,设度为1的结点个数为n,则有k+k-1+n=700,由于k和n都是自然数,n的值为0或1,所以只有当n=1是,k有整数解,此时k=350.提醒:2023年9月真题选择题第8题属该题的类似题目。【例1-10】深度为5的满二叉树中,结点的个数为。答案:31。解析:满二叉树是相同深度的二叉树中结点最多的一棵,所以由性质2可知,深度为5的二叉树最多有25-1=31个结点。即深度为5的满二叉树的结点为31个。提醒:2023年4月真题选择题第7题、填空题第1题、2023年4月真题填空题第2题属该题的类似题目。3.二叉树的存储结构在计算机中,二叉树通常采用链式存储结构。与线性链表类似,用于存储二叉树中各元素的存储结点也由两部分组成;数据域和指针域。但在二叉树中,由于每一个元素可以有两个后件(即两个子结点),一次,用于存储二叉树的存储节点的指针域有两个,一个用于指向该结点的左子结点的存储地址,称为左指针域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。4.二叉树的遍历二叉树的遍历是指不反复地访问二叉树中的所有结点。二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。各个遍历过程描述如下:前序遍历(DLR)若二叉树为空,则结束返回,否则:访问根节点;前序遍历左子树;前序遍历右子树。中序遍历(LDR)若二叉树为空,则结束返回,否则:中序遍历左子树;访问根节点;中序遍历右子树。后序遍历(LRD)若二叉树为空,则结束返回,否则:后序遍历左子树;访问根节点后序遍历右子树。【例1-11】已知二叉树(见图1-5),其后序遍历序列是()。FECBAA)ABCDEFﻩ B)DBAECF C)BCDEFAﻩﻩD)DBEFCA FECBAD答案:D。D解析:采用后序遍历方式遍历二叉树的具体过程为:1)先后序遍历左子树(以B为根节点的左子树,涉及两个结点B和D),在左子树中仍按后序遍历,所以先访问左节点D,其右子树为空,所以第二个访问的结点是该子树的根节点B。图1-5二叉树2)接着按后序遍历右子树(以C为根节点,涉及C、E、F三个结点),右子树中也按后序遍历访问左子树E,再访问右子树F,最后访问根节点C,右子树访问完毕。3)最后访问的是二叉树的根节点A。故访问顺序为:D→B→E→F→C→A。查找技术所谓查找是指在一个给定的数据结构中查找某个指定的元素。通常,对不同的数据结构应采用不同的查找方法。1.顺序查找顺序查找是指在现行表中查找指定的元素,基本方法为:从线性表的第一个元素开始,依次将线性表中的元素与被查元素进行比较,若相等则表达找到(即查找成功);若现行表中所有的元素都与被查元素进行了比较但都不相等,则表达线性表中没有要找的元素(即查找失败)。对长度为n的线性表进行顺序查找,在最坏的情况下所需要的比较次数是()。A)n+1B)nC)(n+1)/2D)n/2答案:B。解析:在进行顺序查找过程中,假如现行表中的第一个元素就是被查找元素,则只需做一次比较就查找成功,查找效率最高;但假如被查的元素是线性表中的最后一个元素,或者被查找元素主线不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺行查找的最坏情况。在平均情况下,运用顺序查找法在线性表中一半的元素进行比较。题目中的线性表的长度为n,则在最坏情况下,需要比较n次。2.二分查找二分查找只合用于顺序存储的有序表。设有序线性表的长度为n,被查元素为x,则二分查找的方法如下:将x与线性表的中间项进行比较。若中间项的值等于x,则说明查到,查找结束;若x小于中间项的值,则在线性表的前半部分(即中间项以前的部分)以相同的方法进行查找;若x大于中间项的值,则在线性表的后半部分(即中间项以后的部分)以相同的方法进行查找。这个过程一直进行到查找成功或子表长度为0(说明现行表中没有这个元素)为止。显然,当有序线性表为顺序存储时才干采用二分查找,并且二分查找的效率要比顺序查找高得多。对于长度为n的有序线性表,在最坏的情况下,二分查找只需要比较log2n次,而顺序查找需要比较n次。排序技术所谓排序,就是要整理文献中的记录,使之按关键字递增(或递减)的顺序排列起来。重要知识点互换类排序法互换类排序法冒泡排序法冒泡排序法是一种最简朴的互换类排序方法,它是通过相邻数据元素的互换逐步将线性表变成有序。冒泡排序法的基本过程如下:一方面,从表头开始往后扫描线性表,在扫描过程中主次比较两个相邻元素的大小。若两个相邻元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序。然后从后往前扫描剩下的线性表,同样,在扫描过程中主次比较两个相邻元素的大小。若两个相邻元素中,后面的元素小于前面的元素,则将他们互换,这样就又消去了一个逆序。一次排序结束后,表中最大元素为与线性表末尾。对剩下的线性表反复上述过程,直到剩下的线性表变空位置,此时的线性表已经变为有序。快速排序法快速排序法也会死一种互换类排序方法,但由于它的排序速度比较快,因此称为快速排序法。快速排序法的基本思想如下:从线性表中选取一个元素,设为T,将线性表后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表提成了两部分(称为两个子表),T插入到其分界线的位置处,这个过程称为线性表的分割。通过对线性表的一次分割,就以T为分界线,将线性表提成了前后连个子表,且前面子表中的所有元素均不大于T,二后面子表中的所有元素均不小于T。假如对分割后的各子表再按上述原则进行分割,并且这种分割过程一直做下去,知道所有子表为空为止,则此时的线性表就变成了有序表。【1-13】在最坏情况下,冒泡排序法需要的比较次数为。答案:n(n-1)/2.解析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要通过n/2遍从前往后的扫描和n/2遍的从后往前的扫描,同时需要进行n-1躺排序所以比较次数为n(n-1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。插入类排序法简朴插入排序法所谓插入排序,是指将无序序列中的各元素依次插入到已有序的线性列表中。希尔排序法希尔排序法属于插入类排序,其基本思想为:将整个无序序列分割成若干小的子序列分别进行插入排序。子序列分割方法如下:将相隔某个增量h的元素构成一个子序列,在排序过程中,逐次减少这个铮亮,最后当h减到1时,进行一次插入排序,排序即完毕选择类排序法简朴选择排序法选择排序法的基本思想如下:扫描整个线性表,从中选出最小的元素,将它互换到表的最前面;然后对剩下的子表采用同样的方法,直到子表空为止。建堆排序法堆排序的方法如下:1、一方面将一个无序序列建成堆;2、然后将堆顶元素与堆中最后一个元素互换。不考虑已经互换到最后的那个元素,只考虑前n-1个元素构成的子序列,显然,该子序列已不是堆,但左、右子树仍为堆,可以将该子树调整为堆。反复做第二部,知道剩下的子序列为空为止。1.10仿真练习与参考答案一.选择题1.下面的叙述对的的是()。A)算法的执行效率与数据的存储结构无关B)算法的空间复杂度是指算法程序中指令(或语句)的条数C)算法的有穷性是指算法必须能在执行有限个环节之后终止。D)以上三种描述都不对。2.以下数据结构中不属于现行数据结构的是()。A)队列B)线性表C)二叉树D)栈3.一个栈的入栈序列是A,B,C,D,E,则不也许的输出序列是()。A)EDCBAB)DECBAC)DCEABD)ABCDE4.快速排序法属于()排序法。A)互换类B)插入类C)选择类D)建堆5.下列关于队列的叙述对的的是()。A)在队列中只能插入数据B)在队列中只能删除数据C)队列是“先进先出”的线性表D)队列是“先进后出”的线性表6.在深度为5的满二叉树中,叶结点的个数为()。A)32B)31C)16D)157.算法的空间复杂度是指()。A)算法程序的长度B)算法程序中的指令条数C)执行算法过程中所需要的存储空间D)算法程序所占的存储空间8.对一个长度为10的排好序的表用二分法查找,若查找不成功,至少需要比较的次数为()A)3B)4C)5D)69.假定根节点的层次是0,具有15个结点的二叉树的最小树深是()。A)3B)4C)5D)610.深度为h的二叉树上只有度为0和度为2的结点,则此二叉树中所包含的结点数至少为()。A)2h-1B)2hC)2h+1D)h+111.对于长度为n的线性表,在最坏情况下,下列各排序法所相应的比较次数中对的的是()。A)冒泡排序为n/2B)冒泡排序为nC)快速排序为nD)快速排序为n(n-1)/2二.填空题1.数据结构涉及数据的结构和数据的存储结构及各种数据结构间的运算。2.只允许在一端进行插入和删除的线性表称为。3.在长度为n的有序线性表中进行二分查找,其时间复杂度为。4.设一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为5.线性表中称为线性表的长度。参考答案一、选择题1.C2.C3.C4.A5.C6.C7.C8.A9.A10.A11.D二、填空题1.逻辑2.栈3.O(log2n)4.DEBFCA5.数据元素的个数程序设计基础程序设计方法与风格除了好的程序设计方法外,程序设计风格也很中亚,由于程序设计风格回影响软件的质量和可维护性,良好的程序设计风格可以是程序结构清楚合理,是程序代码便于维护。程序设计风格是指编写程序是所表现出的特点、习惯和逻辑思绪。总体而言,程序设计风格应当强调简朴和清楚,程序必须是可以理解的。要形成良好的程序设计风格,重要应注重和考虑下属一些因素:源程序文档化、数据说明方法、语句的结构以及输入和输出。【例2-1】形成良好的程序设计风格,需要考虑的一些因素中不涉及()。A)源程序文档化B)数据说明方法C)可行性研究D)输入和输出答案:C。结构化程序设计重要知识点面向对象方法的基本概念1.结构化程序设计的原则结构化程序设计方法的重要原则为:1)自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目的,后考虑局部目的。2)逐步求精:对复杂问题,应设计一些子目的作为过渡,逐步细化。3)模块化:一个复杂问题肯定是由若干简朴的问题构成。模块化就是把程序要解决的总目的分解为分目的,在进一步分解为具体的小目的,把每个小目的称为一个模块。4)限制使用GOTO语句。2.结构化程序设计的结构与说明结构化程序由顺序、分支、循环三种基本结构组成,可以用下图进行说明。A条件B条件BCACBAA条件B条件BCACBA一端结构化程序,都可以归结为以上三种结构,无论是简朴问题还是复杂问题,都可以设计成以上三种结构的一种或多种来解决。这种是程序结构化有助于提高模块的独立性,提高程序的信息隐蔽能力。【例2-2】下面对于结构化程序设计方法的重要原则描述错误的是()。A)自顶向下B)逐步求精C)模块化D)多使用GOTO语句答案:D。3.关于面向对象方法面向对象方法之所以日益受考察结构化程序设计的结构。到人们的重视和应用,称为流行的软件开发方法,是由于面向对象方法具有以下重要优点:与人类习惯的思维方法一致。稳定性好。可重用性好。易于开发大型软件产品。可维护性好。面向对象方法的基本概念面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表达其静态特性的属性和它可执行的一组操作组成。面向对象方法中的几个重要的概念是理解和使用面向对象的基础和关键。这些概念涉及:对象(Object)对象是面向对象方法中最基本的概念。对象可以用来表达客观世界中的任何实体。客观世界中的实体通常既具有静态的属性又具有动态的行为,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以做的操作表达它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作称为方法或服务。属性即对象所包含的信息,他在设计对象是拟定,一般只能通过执行对象的操作来改变属性。操作描述了对象执行的功能,若通过消息传递,还可以被其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实行后的结果。对象的这一特性称为对象的封装性。类(Class)和实例(Instance)类是具有共同属性、共同方法的对象的集合。类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其相应类的一个实例。类同对象同样,涉及一组数据属性和在数据上的一组合法操作。消息(Message)面向对象世界是通过对象与对象间彼此互相合作来推动的对象间的这种互相合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息,他请求对象执行某一解决或回答某一规定的信息,他统一了数据流和控制流。消息类似于函数调用。一个消息有以下三部分组成:1、接受消息的对象的名称。2、消息标记符(也称为消息名)。3、零个或多个参数。继承(Inheritance)继承是面向对象方法的一个重要特性。继承是使用已有的类定义作为基础,建立新类的定义技术。已有的类可当作基类来引用,新类相应地可当作派生类来引用。广义地说,继承是指可以直接获得已有的性质和特性,而不必反复定义它们。面向对象软件技术的许多强有力的功能和突出优点,都来源于把类组成一个层次结构的系统;一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质就是继承,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。多态性(Polymorphism)对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时,可导致完全不同的行动,该现象称为多态性。在面向对象的软件技术中,多态性是指子类对象可以像父亲对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。【例2-3】在面向对象的程序设计中,类描述的是具有相似性质的一组。答案:对象。解析:由于类是具有共同属性、共同方法的对象的集合。所以类描述的是具有相似性质的一组对象。【例2-4】在面向对象方法中,类之间共享属性和操作的机制称为。答案:继承。解析:继承是使用已有的类定义作为基础,建立新类的定义技术。因此他是类之间共享属性和操作的机制。2.4仿真练习与参考答案一、选择题1.结构化程序设计的三种基本控制结构是()。A)输入、解决、输出B)树形、网形、环形C)顺序、选择、循环D)主程序、子程序、函数2.关于对象概念描述错误的是()。A)任何对象都必须有继承性B)对象是属性和方法的封装体C)对象间的通信靠消息传递D)操作是对象的动态属性3.为了使程序在不同的计算机环境中都能运营,程序应当具有良好的()。A)可合用性B)可重用性C)可移植性D)可创新性4.面向对象的重要特性除了对象的惟一、封装、继承外,尚有()。A)多态性B)完整性C)可移植性D)兼容性5.面向对象的程序设计重要考虑的是提高软件的()。A)可靠性B)可重用性C)可移植性D)可修改性6.信息隐蔽是通过()实现的。A)抽象性B)封装性C)继承性D)传递性二、填空题1.的基本原理是使用现实世界的概念抽象地思考问题,从而自然地解决问题。2.源程序文档化规定程序应加以注释。注释一般分为序言性注释和注释。3.类是一个支持集成的抽象数据类型,而对象是类的。4.面向对象的模型中,最基本的概念是对象和。参考答案一、选择题1.C2.A3.C4.A5.B6.B二、填空题1.面向对象方法2.功能性3.实例4.类第3章软件工程基础3.1软件工程基本概念软件工程基本概念(1)软件定义与软件特点计算机软件(Software)是计算机系统中与硬件互相依存的另一部分,是涉及程序、数据及相关文档的完整集合。软件有以下特点:软件是一种逻辑实体,而不是物理实体,具有抽象性;软件的生产与硬件不同,它没有明显的制作过程;软件在运营、使用期间不存在磨损、老化问题;软件的开发、运营对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;软件复杂性高、成本昂贵;软件开发设计诸多的社会因素。(2)软件危机与软件工程软件工程概念的出现源自软件危机。20世纪60年代末以后,“软件危机”这个词频繁出现,所谓软件危机,是指在计算机软件的开发和维护过程中所碰到的一系列严重问题。具体地说,在软件开发和维护过程中,软件危机重要表现在:软件需求的增长得不到满足。用户对系统不满意的情况经常发生。软件开发成本和进度无法控制。开发成本超过预算,开发周期大大超过规定日期的情况经常发生;软件质量难以保证;软件不可维护或维护限度非常低;软件的成本不断提高;软件开发生产率的提高跟不上硬件的发展和应用需求的增长。总之,可以将软件危机归结为成本、质量、生产率等问题。为了消除软件危机,通过认真研究解决软件危机的方法,结识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。国标(GB)中指出,软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。1993年,IEEE(InstituteofElectrical&ElectronicEngineers,电气和电子工程师学会)对软件工程给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运营和维护的过程,即将工程化应用于软件中。”这些重要思想都是强调在软件开发过程中需要应用工程化的原则。软件工程的三要素为方法、工具和过程。方法是完毕软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制和管理。软件工程的核心思想是把软件产品(就像其他工业产品同样)堪称是一个工程产品。把需求分析、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产中,以期达成工程项目的三个基本要素(进度、经费和质量)的目的。软件生命周期概念软件工程过程ISO9000中关于软件工程过程的定义是:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。该定义支持了软件工程过程的以下两方面内涵:其一,软件工程过程是指为获得软件产品,在软件工具支持下由软件工程师完毕的一系列软件工程活动。其二,从软件开发的观点看,它就是使用适当的资源(涉及人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束是将输入(用户规定)转化为输出(软件产品)。所以,软件工程的过程是将软件工程的方法和工具综合起来,已达成合理、及时地进行计算机软件开发的目的。软件生命周期通常,将软件产品从提出、实现、使用维护到停止使用(退役)的过程称为软件生命周期。一般将软件生命周期分为软件定义、软件开发及软件运营维护三个阶段。其重要活动阶段是:1)可行性研究与计划制定。拟定待开发软件形同的开发目的和总的规定,给出它的功能、性能、可靠性以及接口等方面的也许方案,制定完毕开发任务的实行计划。2)需求分析。队准备开发的软件提出的需求进行分析并给出具体定义,编写软件规格说明书及初步的用户手册,提交评审。3)软件设计。系统设计人员和程序设计人员应当在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分派以及解决流程。在系统比较复杂的情况下,设计阶段可分解成概要设计阶段和具体设计阶段。编写概要设计说明书、具体设计说明书和测试计划初稿,提交评审。4)软件实现。把软件设计转换成计算机可以接受的程序代码。即完毕源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。5)软件测试.在设计测试用例的基础上,检查软件的各个组成部分,编写测试分析报告。6)运营和维护。将已交付的软件投入运营,并在运营使用中不断地维护,根据新提出的需求进行必要并且也许的扩充和删改。(3)软件工程的目的与原则1)软件工程的目的。在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。软件工程需要达成的基本目的应是:付出较低的开发成本;达成规定的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能准时完毕开发,及时交付使用。软件工程的原则。为了达成上述的软件工程目的,在软件开发过程中,必须遵循软件工程的基本原则。这些原则合用于所有软件项目。这些基本原则涉及抽象、信息隐蔽、模块化、局部化、拟定性、一致性、完备性、和可验证性。3.软件开发工具与软件开发环境软件开发工具的完善和发展奖促进软件开发方法的进步和完善,促进软件开发的高速度和高质量。软件开发工具的发展是从单项工具的开发逐步向集成工具发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。软件开发环境或称软件工程环境好似全面支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完毕。计算机辅助软件工程(ComputerAidedSoftwareEngineering,CASE)是当前软件开发环境中富有特色的研究工作和发展方向。【例3-1】以下说法错误的是()。A)软件工程概念的出现源自软件危机。B)软甲开发成本和进度无法控制是软件危机的表现之一。C)软件生命周期是指软件产品从考虑其概念开始到该软件不能使用位置的整个时期。D)软件生命周期一般分为软件定义和软件实现两个阶段。答案:D。解析:分析本题的四个选项如下:选项A,正式由于软件危机的频繁出现和为了消除软件危机,通过认真研究解决软件危机的方法,结识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,故此选项对的。选项B,根据“软件危机的重要表现”可知此选项对的。选项C,对软件生命周期概念的分析可知此选项对的。选项D,软件生命周期不仅仅分为软件定义和软件实现两个阶段,尚有运营维护阶段。故此选项错误。通过以上分析,得出对的答案为选项D。【例3-2】以下关于软件工程的叙述对的的是()。A)软件工程的产生只是为了解决软件开发过程中所出现的管理问题。B)软件工程重要解决软件产品的实际效用即生产率问题。C)软件工程重要是解决软件开发过程中的技术问题。D)软件工程的重要思想好似强调在软件开发过程中需要应用工程化原则。答案:D。解析:根据1993年IEEE对软件工程的定义可知本题答案为选项D。【例3-3】软件是程序、数据和相关文档的集合,但是它只是实体。答案:逻辑。解析:根据软件的特性可知软件是一种逻辑实体。【例3-4】下列叙述中对的的是()。A)软件交付使用后还需要进行维护。B)软件一旦交付使用就不用再维护。C)软件交付使用后其生命周期就结束。D)软件维护是指修复程序中被破坏的指令。答案:A。解析:软件维护是指软件系统交付使用后,为了改正错误或满足新的需要而修改软件的过程。它是软件生命周期的最后一个阶段,也是连续时间最长,代价最大的一个阶段。软件工程学的重要目的就是提高软件的可维护性,减少维护的代价。软件维护已知连续到软件生命周期的结束。通过以上分析,得出对的答案为选项A。3.2结构化分析方法重要知识点数据流图数据字典结构化分析方法软件需求是指用户对目的软件系统在功能、行为、性能、设计约束等方面的盼望。需求分析的任务是发现需求、求精、建模和定义需求。需求分析将创建所需的数据模型、功能模型和控制模型。1997年IEEE软件工程标准词汇表对需求分析的定义如下:用户解决问题或达成目的所需要的条件或权能;系统或系统部件要满足协议、标准、规范或其他正式规定文档所需具有的条件或权能。一种反映1)或2)所描述的条件或权能的文档说明。需求分析阶段的工作,可以概括为以下四个方面:需求获取需求获取的坟场是拟定对目的系统的各方面需求。涉及的重要任务是立获取用户需求的方法构架,并支持和监控需求获取的过程。2)需求分析对获取的需求进行分析和综合,最终给出系统的解决方案和目的系统的逻辑模型。3)编写需求规格说明书作为需求分析的阶段成果的需求规格说明书,可认为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目的软件系统的确认,又可以作为控制软件开发进程的依据。4)需求评审在需求分析的最后一步,对需求分析阶段的工作进行复审,验证需求文档的一致性、可行性、完整性、和有效性。结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。他是20世纪70年代中期提倡的基于功能分解的分析方法,其目的是弄清用户对软件的需求。结构化分析方法的是指是着眼于数据流,自顶而下、逐层分解,建立系统的解决流程,以数据流图和数据字典为重要工具,建立系统的逻辑模型。结构化分析的环节如下:通过对用户的调查,以软件的需求为线索,获得当前系统的具体模型;去掉具体模型中非本质因素,抽象出当前系统的逻辑模型;根基计算机的特点分析当前系统与目的系统的差别,建立目的系统的逻辑模型;完善目的系统并补充细节,写出目的系统的软件需求规格说明书;评审直到确认完全符合用户对软件的需求。2.数据流图数据流图(DataFlowDiagram,DFD)是描述数据解决过程的工具,是需求理解的逻辑模型的图形表达,她直接支持系统的功能建模。数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的重要符号元素与说明如表3-1所示。表3-1符号说明加工(转换);输入数据经加工变换产生输出数据流;沿箭头方向传送数据的通道,一般在旁边标注数据流名存储文献:表达解决过程中存放各种数据的文献数据的源点/终点,也称为源,潭:表达系统和环境的接口,属系统之外的实体一般老说,了解和分析实际系统后,使用数据流图为系统建立逻辑模型。建立数据流图的环节如下:由外向里,先画系统的输入输出,再画系统的输入输出,再画系统的内部;自顶向下,顺序完毕顶层、中间层、底层数据流图;逐层分解。数据字典数据字典是结构划分新方法的核心。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。概括地说,数据字典的作用是对DFD中出现的而被命名的图形元素的确切解释。通常数据字典包含的信息有:名称、别名、何处使用/如何使用、内容描述及补充信息等。软件需求规格说明书软件需求规格说明书(SoftwareRequirementSpecification,SRS)是需求分析阶段的最后成果,是软件开发中的重要文档之一。【例3-5】在软件生命周期中,能准确地拟定软件系统必须做什么和必须具有哪些功能的阶段是。答案:需求分析。解析:有需求分析的相关概念和方法可知,需求分析的任务是发现需求、求精、建模和定义需求,因此,需求分析就是为了拟定软件系统的功能。3.3结构化设计方法重要知识点结构化设计/软件设计的基本概念及方法总体设计与具体设计1.结构化设计/软件设计的基本概念及方法(1)软件设计的基础软件设计是软件工程的重要阶段,十一哥把软件需求转换为软件表达的过程。软件设计是一个迭代的过程,其一般过程是:先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。(2)软件设计的基本原理1)抽象。抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。2)模块化。模块化是指把一个待开发的软件分解成若干小的简朴的部分,每个模块可以完毕一个特定的子功能,各个模块可以按一定的方法组装起来成为一个整体,从而实现整个系统的功能。3)信息屏蔽。信息屏蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。4)模块独立性。模块独立性是指在每个模块之完毕系统规定的独立的子功能,并且与其他模块的联系最少且接口简朴。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。·内聚性:是一个模块内部各个元素间彼此结合的紧密限度的度量。按内聚性由弱到强排列,内聚可以分为下列几种:偶尔内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚以及功能内聚。·耦合性:耦合性是模块间互相连接的机密限度的度量。按耦合度由高到低排列,耦合可以分为下列几种:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合以及非直接耦合。遵循的原则——高内聚低耦合。(3)结构化设计方法结构化设计就是采用最佳的也许方法设计系统的各个组成部分以及各成分之间的内部联系的技术。结构化设计方法的基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。2.总体设计与具体设计及相关概念(1)总体设计总体设计的任务涉及:设计软件系统结构。数据结构及数据库设计。编写总体设计文档。总体设计文档评审。常用的软件结构设计工具是结构图(StructureChart,SC),也称程序结构图。经常使用的结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。程序结构图的有关术语列举如下。·深度:表达控制的层数。·上级模块、从属模块:上、下两层模块a和b,假如a调用b,则a是上级模块,b是从属模块。·宽度:整体控制跨度(最大模块数的层)的表达。·扇入:调用一个给定模块的模块个数。·扇出:一个模块直接调用的其他模块数。·原子模块:树中位于叶结点的模块。在总体设计中,采用面向数据流的设计方法。典型的数据流类型有两种:变换型和事务型。面向数据流设计方法的实行要点和设计过程有以下几步:分析、确认数据流图的类型,区分是事务型还是变换型。说明数据流的边界。把数据流图映射为程序结构。对于事务流区分事务中心和数据接受通路,将它映射成事务结构,对于变换流,区分输出和输入分支,并将其应射成变换结构。根据设计准则对产生的结构进行细化和求精。大量软件设计的实践证明,可以运用以下设计准则作为设计指导以及对软件结构图进行优化。提高模块独立性。对软件结构应着眼于改善模块独立性,依据低耦合高内聚的原则,通过取消或合并一些模块来修改程序结构。模块规模适中。经验表白,当模块增大时,模块的可理解性迅速下降。但是当对大的模块分解时,不应减少模块的独立性。由于,当对一个大的模块分解时,有时也许会增长模块间的依赖。深度、宽度、扇出和扇入适当。使模块的作用于在该模块的控制域内、模块的作用域是指模块内一个鉴定的作用范围,凡是受这个鉴定影响的所有模块都属于这个鉴定的作用域。模块的控制欲是指这个模块自身已极所有直接或简介从属于它的模块的几盒。在一个设计得很好的系统中,所有受某个鉴定影响的模块都应当从属于做出鉴定的那个模块,最佳局限于做出鉴定的那个模块自身及其直属下级模块。对于那些不满足这一条件的软件结构,修改的办法是将鉴定点上移,或者将那些在作用范围内但是不再控制范围内的模块移到控制范围以内。应当减少模块的接口和革命的复杂性。模块的接口复杂是软件容易发生错误的一个重要因素。应当增仔细设计模块接口,使得信息传递简朴和模块的功能已知设计成单入口、单出口的模块。设计功能可预测的模块。假如一个模块可以当作一个“黑盒”,也就是不考虑模块的内部结构和解决过程,则这个模块的功能是可预测的。(2)具体设计具体设计的任务,是为软件结构图中的每一个模块拟定实现算法和局部数据结构,用某种选定的表达工具表达算法和数据结构的细节。常见的过程设计工具有以下几种:·图形工具:程序流程图、N-S、PAD及HIPO。·表格工具:鉴定表。·语言工具:PDL(伪码)。【例3-6】内聚是从功能角度来度量模块内的练习。其中内聚性最强的是()。A)偶尔内聚B)逻辑内聚C)过程内聚D)功能内聚答案:D。解析:分析本题的四个选项如下:选项A,偶尔内聚是指一个模块内的各解决元素之间没有任何联系。选项B,逻辑内聚是指模块内执行几个逻辑上相关的功能,通过参数拟定该模块完毕哪一个功能。选项C,过程内聚是指一个模块内的解决元素是相关的,并且必须以特定顺序执行。选项D,功能内聚是指模块内所有元素共同完毕一个功能,缺一不可,模块已不可再分。这是最强的内聚。通过以上分析,得出对的的答案为选项D。【例3-7】为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为()。A)PAD图B)N-S图C)结构图D)数据流图答案:B解析:程序流程图是一种传统的、应用广泛的软件过程设计表达工具,通常也称为程序框图。1973年,Nossi和Shneiderman提出了用方框图来代替传统的程序流程图,通常也把这种图称为N-S图。【例3-8】从技术观点看,软件设计涉及软件的结构、数据接口和过程设计,其中软件的接口设计是指()。A模块间的关联设计B系统结构部件转换成软件的过程描述C描述软件内部、软件和协作系统之间以及软件与人之间如何通信D软件与操作人员之间的通信方式设计答案:C。解析:软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表达的过程。软件设计的基本目的是用比较抽象概括的方式拟定目的系统如何完毕预定的任务,即软件设计是拟定系统的物理模型。从技术观点来看,软件设计涉及软件结构设计、数据设计、接口设计、过程设计。其中,结构设计是定义软件系统各重要部件之间的关系;数据设计是将分析时创建的模型转换为数据结构的定义;接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。【例3-9】结构化程序设计的一种基本方法是。答案:自顶向下、逐步求精法。解析:结构化程序设计(简称SP)方法的基本要点如下:采用自顶向下、逐步求精的设计方法;是有“顺序、选择、循环”三种基本控制结构构造程序;模块单入口、单出口。提醒:2023年4月真题选择题第1题、2023年4月真题选择题第2题属该题的类似题目。【例3-10】一个软件系统的结构如图所示:BDADCGEFBDADCGEF其相应的深度为【1】,宽度为【2】。答案:【1】4;【2】3。解析:本题考察的是对软件结构图中有关术语的理解。深度表达软件结构图控制的层数,而宽度表达整体控制跨度(最大模块数的层)。上图中共有4层,模块数最多的层是第3层,共有3个模块。通过以上分析,得出【1】的答案为4,【2】的答案为3。软件测试的方法重要知识点软件测试的概念及方法白盒测试和黑盒测试1.软件测试的概念及方法(1)软件测试的目的1983年,IEEE将软件测试定义为:“使用人工或自动手段来运营或测试某个系统的过程,其目的在于检查他是否满足规定的需求或是弄清预期结果与实际结果之间的差异。”软件测试的目的是为了发现错误而执行程序的过程;一个好的测试用例是指很也许找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误。(2)软件测试的准则鉴于软件测试的重要性,要做好软件测试,除设计出有效的测试方案和好的测试用例外,软件测试人员还需要充足理解和运用软件的一些基本准则:所有测试都应追溯到需求;严格执行测试计划,排除测试的随意性;充足注意测试中的群集现象。经验表白,程序中存在错误的概率与该程序中已发现的错误数成正比。这一现象说明,为了提高测试效率,测试人员应当集中对付那些错误群集的程序;程序员应避免检查自己的程序。为了达成好的测试效果,应当由独立的第三方来构造测试;穷举测试不也许;妥善保存测试计划、测试用例、犯错记录和最终分析报告,为维护提供方便。2.白盒测试与黑盒测试白盒测试方法也称为结构测试或逻辑驱动测试。他是根据软件产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规格规定。白盒测试的基本原则是:保证所测模块中每一独立途径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件应经实现得到功能是否满足需求进行测试和验证。黑盒测试重要诊断功能不对的或漏掉、接口错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错误。3.测试用例设计(1)白盒测试用例设计白盒测试的重要方法有逻辑覆盖、基本途径测试等。1)逻辑覆盖。逻辑覆盖泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。通常程序中的逻辑表达有判断、分支、条件等几种表达方式。·语句覆盖,选择足够的测试用例,使得程序中每个语句至少都能被执行一次;·途径覆盖,执行足够的测试用例,是程序中所有也许的途径都至少经历一次;·判断覆盖,使设计的测试用例保证程序中每个判断的每个取值分支(T或F)至少经历一次;·条件覆盖,使设计的测试用例保证程序中每个判断的每个条件的也许取值至少执行一次;·判断——条件覆盖,设计足够的测试用例,是判断中每个条件的所有也许取值至少执行一次,同时每个判断的所有也许取值分支至少执行一次。2)基本路经测试。其思想和环节是,根据软件过程描述中的控制流程拟定程序的环路复杂性度量,用此度量定义基本途径集合,并由此导出一组测试用例对一条独立执行途径进行测试(2)黑盒测试用例设计黑盒测试方法重要有等价类划分法、边界值分析法、错误推测法、因果图等,重要用于软件确认测试。1)等价类划分法。这是一种典型的黑盒测试方法,它是将程序的所有也许的输入数据划提成若干部分(即若干等价类),然后从每个等价类中选取数据作为测试用例。2)边界值分析法。它是对各种输入、输出范围的边界情况设计测试用例的方法。经验表白,程序错误最容易出现在输入或输出范围的边界处,而不是在输入范围的内部。3)错误推测法。人们可以靠经验和直觉推测程序中也许存在的各种错误,从而有针对性地编写检查这些错误的用例,这就是错误推测法错误推测法的基本思想是:列举出程序中所有也许的错误和容易发生错误的特殊情况,根据他们选择测试用例。4.软件测试的实行软件测试是保证软件质量的重要手段,软件测试是一个过程,其测试流程是该过程规定的程序,目的是使软件测试工作系统化。软件测试的实行过程一般按4个环节进行:单元测试、集成测试、验收测试(或确认测试)和系统测试。通过这些环节的实行来验证软件是否合格,能否交付用户使用。软件测试的四环节单元测试单元测试是对软件设计的最小单位——模块(程序单元)进行对的性检查的测试。单元测试的目的是发现各模块内不也许存在的各种错误。单元测试的依据是具体设计说明书和源程序。单元测试的技术可以采用静态分心和动态测试。对动态测试通常一白盒动态测试为主,辅之以黑盒测试。(2)集成测试集成测试是测试和组装软件的过程。他是把模块在按照设计规定组装起来的同时进行测试。重要目的是发现与接口有关的错误。集成测试的依据是总体设计说明书。集成测试所设计的内容涉及:软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试等。(3)确认测试确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明书中拟定的各种需求,以及软件配置是否完全、对的。(4)系统测试系统测试是将通过测试确认的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等其他系统元素合在一起,在实际运营(使用)环境下对计算机系统进行一系列的集成测试和确认测试。系统测试的具体实行一般涉及功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试等。【例3-11】成功的软件测试是指发现程序中的。答案:错误。解析:根据软件测试的定义可知,一个成功的测试是发现了至今尚未发现的错误。【例3-12】若有一个计算类型的程序,它的输入量只有一个X,其范围是[-1.0,1.0]现从输入的角度考虑,设计一组测试该策划那个徐的测试用例为-1.001,-1.0,0,1.001,则设计者组成测试用例的方法是。答案:边界值分析法。解析:设计测试用例的方法有逻辑覆盖、等价类划分、边界值分析以及错误推测,其中使用边界值分析设计测试用例时,通常选取刚好等于、略小于和略大于等价边界值的数据作为测试用例。【例3-13】程序测试分为静态测试和动态测试,其中不实际运营软件,重要通过人工进行答案:静态测试。解析:静态测试涉及代码检查、静态结构分析、代码质量度量等,它重要由人工进行。其中代码检查重要检查代码和设计的一致性,涉及代码的逻辑表达的对的性、代码结构的合理性等;静态结构分析是对代码机械、程式化的特性分析,涉及控制流分析、数据流分析、接口分析和表达式分析。3.5程序的调试1.调试的概念及方法(1)调试的基本概念在对程序进行了成功的测试之后将进入程序调试(通常称为Debug,即排错)。程序调试的任务是诊断和改正程序中的错误。(2)调试的方法调试方法重要有以下几种:1)强行排错法作为传统的调试方法,其过程可概括为设立断点、程序暂停、观测程序状态、继续运营程序。这是目前使用较多、效率较低的调试方法。设计的调试技术重要是设立断点和监视表达式。2)回溯法该方法合用于小规模程序的排错。即一旦发现了错误,先分析错误征兆,拟定最先发现“症状”的位置。然后,从发现“症状”的地方开始,沿程序的控制历程你想跟踪源程序代码,直到找到错误根源或拟定错误产生的范围。3)因素排除法因素排除法是通过演绎、归纳以及二分法来实现的。·演绎法是一种从一般原理或前提出发,通过排除和精华的过程来推导出结论的思考方法。其基本思想是测试人员一方面根据已有的测试用例,设想及枚举出所有也许犯错的因素作为假设。然后在用原始测试数据或新的测试,从中逐个排除不也许对的的假设。最后,再用测试数据验证余下的假设拟定犯错的因素。·归纳法是一种从特殊推断出一般的系统化思考方法。其基本思想是从一些线索(错误征兆或与错误发生有关的数据)着手,通过度析寻找到潜在的因素,从而找犯错误。·二分法实现的基本思想是,假如已知每个变量在程序中若干个关键点的对的值,则可以使用定值语句(如赋值语句、输入语句等)在沉痼心中的某点附近给这些变量赋对的值,然后运营程序并检查程序的输出。假如输出结果是对的的,则错误因素在程序的前半部分;反之,错误因素在程序的后半部分。对错误因素所在的部分反复使用这种方法,直到将犯错范围缩小到容易诊断的成都为之。2.静态调试与动态调试调试的关键在于推断程序内部的错误位置及因素。软件调试可以分为静态调试和动态调试。软件测试中讨论的静态分析方法同样合用于静态调试。静态调试重要指通过人的思维来分析源程序代码和排错,是重要的调试手段,而动态调试是辅助静态调试的。【例3-14】软件调试的目的是答案:改正错误。解析:软件测试是为了发现程序中的错误,而软件调试与它不同,它是在软件测试的基础上,对错误进行分析、定位、改正错误。最终目的是将错误排出。3.6应考点拨本章在笔试中一般占8分左右,通常为3道选择题,1道填空题,是公共基础部分比较重要的一章。重要知识点涉及:软件工程与软件生命周期的概念以及对对它们的理解、结构化设计方法中的软件设计原理(特别是模块独立性)/软件测试与软件调试的概念与方法。在近几年的真题中,与软件测试和软件调试相关的题目出现了8次,模块独立性的题目出现了3次,考核对软件工程和软件生命周期理解的题目出现了6次,结构化程序设计的题目出现了2次。从出题的深度来看,本章重要考核对基本概念的识记,有少量对基本原理的理解,没有实际运用,因此考生在复习本章时,重点应放在基本概念的记忆和基本原理的理解上。3.7仿真练习与参考答案一、选择题1.在软件工程中,白盒测试法可用于测试程序的内部结构。此方法将程序当作是()。A)循环的集合B)地址的集合C)途径的集合D)目的的集合2.()发放时一种面向数据结构的开发方法。A)结构化B)JacksonC)维也纳开发D)面向对象开发3.数据字典是各

温馨提示

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

评论

0/150

提交评论