![[大学计算机应用基础实用教程][09][第7章软件技术基础].docx_第1页](http://file.renrendoc.com/FileRoot1/2019-4/19/b1185e8f-526a-4b4a-b7bb-3f212ffb71be/b1185e8f-526a-4b4a-b7bb-3f212ffb71be1.gif)
![[大学计算机应用基础实用教程][09][第7章软件技术基础].docx_第2页](http://file.renrendoc.com/FileRoot1/2019-4/19/b1185e8f-526a-4b4a-b7bb-3f212ffb71be/b1185e8f-526a-4b4a-b7bb-3f212ffb71be2.gif)
![[大学计算机应用基础实用教程][09][第7章软件技术基础].docx_第3页](http://file.renrendoc.com/FileRoot1/2019-4/19/b1185e8f-526a-4b4a-b7bb-3f212ffb71be/b1185e8f-526a-4b4a-b7bb-3f212ffb71be3.gif)
![[大学计算机应用基础实用教程][09][第7章软件技术基础].docx_第4页](http://file.renrendoc.com/FileRoot1/2019-4/19/b1185e8f-526a-4b4a-b7bb-3f212ffb71be/b1185e8f-526a-4b4a-b7bb-3f212ffb71be4.gif)
![[大学计算机应用基础实用教程][09][第7章软件技术基础].docx_第5页](http://file.renrendoc.com/FileRoot1/2019-4/19/b1185e8f-526a-4b4a-b7bb-3f212ffb71be/b1185e8f-526a-4b4a-b7bb-3f212ffb71be5.gif)
已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 7 章 软件技术基础本章根据教育部考试中心颁发的全国计算机等级考试二级公共基础知识考试大纲编写,主要内容包括算法与数据结构、软件工程基础和数据库设计基础。7.1算法7.1.1 算法的基本概念 算法是对特定问题求解步骤的具体描述,它是指令的有限序列,其中每一条指令表示一个或多个基本操作。对于一个问题,如果可以通过一个计算机程序在有限的存储空间内运行有限长的时间得到正确地结果,则称这个问题是算法可解的。虽然计算机程序可以作为算法的一种描述形式,但算法不等于程序,这是因为编写程序要受计算机系统运行环境的限制,通常需要考虑许多与方法和分析无关的细节,程序的编制应在算法设计之后。1 算法的基本特征利用计算机算法为计算机解题的过程实际上是在实施某种算法。通常算法具有以下四个重要特征:(1) 有穷性。算法有穷性是指算法总是在执行有穷步之后结束,且每一步都在有限时间内完成。(2) 确定性。算法的确定性是指算法中的每一步都必须有明确的含义,不允许有二义性或多义性。并且在任何条件下对相同的输入只能得到相同的输出。(3) 可行性。一个算法是可行的是指算法的每一步都可以通过已经实现的基本运算执行有限次来实现。(4) 输入和输出 一个算法可以有零个或多个输入,以描述算法对象的初始情况;同时算法必须有一个或多个输出,以反映对输入数据的处理结果。没有输出的算法是毫无意义的算法。2 算法的表示算法的描述应直观、清晰、易读和便于修改维护。描述算法的方法包括自然语言、流程图、程序设计语言、形式化方法等。不同的表示方法有不同的特点和作用。(1) 自然语言自然语言方式就是人们日常使用的语言。例如,在求一元二次方程的根时,就可以使用这种表示方式:一元二次方程的根的计算公式是,在a不等于0的情况下,分子是负b加减b的平方减去4ac的平方根,分母是2a。用自然语言表示算法的优点是简单、方便,适合描述简单的算法或算法的高层思想。但是,该方式的主要问题是冗长、语义容易模糊,很难准确地描述复杂的、技术性强的算法。一般不用自然语言表示算法。(2) 流程图流程图是一种用于表示算法或过程的图形。在流程图中,使用各种符号表示算法或过程的每一个步骤,使用箭头符号将这些步骤按照顺序连接起来。使用流程图表示算法可以避免自然语言的模糊缺陷,且依然独立于任何一种特殊的程序设计语言。流程图的使用人员包括分析人员、设计人员、管理人员、工程师、编程人员等。流程图有多种类型,下面主要介绍一般流程图与NS图的用法。在一般流程图中,主要的图形元素包括开始/结束标志、箭线、处理框、输入/输出框、条件判断框等。开始/结束标志一般使用圆形、椭圆形或圆角矩形表示,开始和结束的符号是对应的,且通常包含开始、结束等字样,开始和结束符号用于明确表示流程图的开始和结束。箭线的符号是带有箭头的线段,表示算法控制语句的流向。一般地,箭线源自流程图中的某个图形,在另一个图形处终止,从而描述算法的执行过程。直角矩形表示算法的处理步骤,称为处理框。平行四边形来表示输入/输出框,也就是表示算法的输入、输出操作。菱形表示条件判断框,用于执行算法中的条件判断,控制算法的执行过程。在条件判断框中,往往有一个输入箭线和两个输出箭线。两个输出箭线分别表示条件成立时和不成立时的执行顺序。输出箭线上常标注Yes和No、或Y和N、或True和False、或T和F、或真和假等字样。如图 所示。NS图是Nassi-Shneiderman图的简称,有时也称为N-S图、盒图等,是1972年Isaac Nassi和Ben Shneiderman提出的结构化表示程序的图形。NS图遵循自顶向下的原则,将问题对象逐步分解为一个个小问题、再继续分解,直到可以使用简单的语句或控制流程图表示为止。在如图所示的NS图基本表示形式中,图4-3(a)表示了顺序结构;图4-3(b)表示了条件选择结构,并示意了简单条件选择结构和多条件选择结构的特点;图4-3 (c)表示了循环结构的特点,前一个图表示先判断循环条件后执行循环体,后一个图表示先执行循环体后判断循环条件的循环结构。(3) 程序设计语言程序设计语言表示方式是指采用程序设计语言、类程序设计语言(也称为类语言、伪代码等)等形式表示算法。用程序设计语言表示的算法实际上就是计算机将要执行的程序。这是计算机领域中算法最完整、最准确、最终的表示方式,也是最复杂的表示方式。程序设计语言表示的算法虽然最精细,但是却难以进行一般的阅读和交流。由于算法在研究和沟通过程中,需要进行不断地修改和完善,并向多个相关人员和组织提交并得到理解。程序设计语言语法的精细特点在算法设计阶段有可能成为影响算法不断完善和优化的障碍。因此,人们更倾向于采用类程序设计语言来描述和表示算法。类程序设计语言是指对程序设计语言的精简的、非正式的描述,目的是便于人们的阅读和理解,而不是用于计算机的执行。许多流行的程序设计语言,例如C+、Visual Basic、Java、Pascal、C#等,都有自己的类语言。类语言往往省略了程序设计语言的许多细节,目的是准确地表示出算法的思想和过程。(4) 形式化方法形式化方法是一种描述计算机软件和硬件系统思想的数学方法。形式化方法主要用于规格说明、设计开发、系统验证等。使用形式化方法的主要好处是可以准确地描述系统或算法的思想,可以满足工程原理验证、执行性能估算、系统可靠性验证等作用。但是,在程序设计领域采用形式化方法的成本比较高,因此该方法仅适用于要求严格的软件项目中。例如,Petri网、ASM(abstract state machine,抽象状态机)等都是典型的形式化方法。3. 算法的基本结构在结构化编程中,程序的控制结构仅由顺序、选择和循环结构或三种结构的复合组成;每个节点都由单个入口与单个出口,从入口到出口都存在一条经过该结点的路径。图 是用流程图表示的程序基本结构。其中“选择”结构具体画了两种:两分支和多分支。“循环”结构也画了两种:DO-WHILE 型和DO-UNTIL 型。4. 算法设计的基本方法通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计算法,又常常采用递归技术,用递归描述算法。(1) 迭代法1) 选一个方程的近似根,赋给变量x0;2) 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;3) 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。具体使用迭代法求根时应注意以下两种可能发生的情况:1) 如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;2) 方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。(2) 穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。按穷举法编写的程序通常不能适应变化的情况。最重要的因素就是确定某种方法来确定所有的候选解。(3) 递推法递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。(4) 递归递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。在编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。(5) 回溯法回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。(6) 贪婪法贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。(7) 分治法任何一个可以用计算机求解的问题所需的计算时间都与其规模N有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算;n=2时,只要作一次比较即可排好序;n=3时只要作3次比较即可,。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。如果原问题可分割成k个子问题(11,则该结点的父结点 编号为 INT(k/2); 若 2kn,则编号为 k 的结点的左子结点编号为 2k;否则该结点无左子 结点(显然也没有右子结点); 若 2k+1n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。1.6.2 二叉树的遍历在遍历二叉树的过程中,一般先遍历左子树,再遍历右子树。在先左后右的 原则下,根据访问根结点的次序,二叉树的遍历分为三类:前序遍历、中序遍历 和后序遍历。(1)前序遍历 先访问根结点,然后遍历左子树,最后遍历右子树;并且在遍历左、右子树时,仍需先访问根结点,然后遍历左子树,最后遍历右子树。例如,对图 1-1 中 的二叉树进行前序遍历的结果(或称为该二叉树的前序序列)为:A,B,D,E, C,F。(2)中序遍历 先遍历左子树、然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。例如,对图 1-1 中的二叉树进行中序遍历的结果(或称为该二叉树的中序序列)为:D,B,E,A,C,F。(3)后序遍历 先遍历左子树、然后遍历右子树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。例如,对图 1-1 中的二叉树进行后序遍历的结果(或称为该二叉树的后序序列)为:D,E,B,F,C,A。7.2.7查找1.顺序查找查找是指在一个给定的数据结构中查找某个指定的元素。从线性表的第一个 元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成 功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则表示查找失败。例如,在一维数组21,46,24,99,57,77,86中,查找数据元素 99,首先从第 1 个元素 21 开始进行比较,比较结果与要查找的数据不相等,接着与第2 个元素 46 进行比较,以此类推,当进行到与第 4 个元素比较时,它们相等, 所以查找成功。如果查找数据元素100,则整个线性表扫描完毕,仍未找到与100相等的元素,表示线性表中没有要查找的元素。在下列两种情况下也只能采用顺序查找: 如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找; 即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。2.二分法查找二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足用顺序存储结构和线性表是有序表两个条件。“有序”是特指元素按非递减排列,即从小到大排列,但允许相邻元素相等。 下一节排序中,有序的含义也是如此。对于长度为 n 的有序线性表,利用二分法查找元素X的过程如下: 步骤 1:将X与线性表的中间项比较;步骤 2:如果X的值与中间项的值相等,则查找成功,结束查找;步骤 3:如果X小于中间项的值,则在线性表的前半部分以二分法继续查找;步骤 4:如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。例如,长度为8的线性表关键码序列为:6,13,27,30,38,46,47,70,被查元素为 38,首先将与线性表的中间项比较,即与第4个数据元素30相比较,38 大于中间项 30 的值,则在线性表38,46,47,70中继续查找;接着与中间 项比较,即与第2个元素46相比较,38小于46,则在线性表38中继续查找,最后一次比较相等,查找成功。顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次, 可将查找范围减少为原来的一半,效率大大提高。对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较 log2n次,而顺序查找需要比较n次。7.2.8排序1. 交换类排序法(1)冒泡排序法 首先,从表头开始往后扫描线性表,逐次比较相邻两个元素的大小,若前面的元素大于后面的元素,则将它们互换,不断地将两个相邻元素中的大者往后移 动,最后最大者到了线性表的最后。然后,从后到前扫描剩下的线性表,逐次比较相邻两个元素的大小,若后面 的元素小于前面的元素,则将它们互换,不断地将两个相邻元素中的小者往前移 动,最后最小者到了线性表的最前面。对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时已经排好序。在最坏的情况下,冒泡排序需要比较次数为 n(n-1)/2。(2)快速排序法 任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一次排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。2. 插入类排序法1) 简单插入排序法,最坏情况需要 n(n-1)/2 次比较;2) 希尔排序法,最坏情况需要 O(n1.5)次比较。3. 选择类排序法1) 简单选择排序法,最坏情况需要 n(n-1)/2 次比较;2) 堆排序法,最坏情况需要 O(nlog2n)次比较。 相比以上几种(除希尔排序法外),堆排序法的时间复杂度最小。7.3 程序设计基础7.3.1程序设计的方法与风格养成良好的程序设计风格,主要考虑下述因素:(1)源程序文档化 符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功 能的理解; 程序注释:在源程序中添加正确的注释可帮助人们理解程序。程序注释 可分为序言性注释和功能性注释。语句结构清晰第一、效率第二; 视觉组织:通过在程序中添加一些空格、空行和缩进等,使人们在视觉 上对程序的结构一目了然。(2)数据说明的方法 为使程序中的数据说明易于理解和维护,可采用下列数据说明的风格,见表 2-1。表 2-1 数据说明风格数据说明风格详细说明次序应规范化使数据说明次序固定,使数据的属性容易查找,也有利于测试、排错和维护变量安排有序化当多个变量出现在同一个说明语句中时,变量名应按字母顺序排序,以便于查找使用注释在定义一个复杂的数据结构时,应通过注解来说明该数据结构的特点(3)语句的结构程序语句的结构程序应该简单易懂,语句构造应该简单直接。(4)输入和输出 输入输出比较简单,这里就不作介绍。第 35 页 共 35 页7.3.2 结构化程序设计1. 结构化程序设计的原则结构化程序设计方法引入了工程思想和结构化思想,使大型软件的开发和编 程得到了极大的改善。结构化程序设计方法的主要原则为:自顶向下、逐步求精、 模块化和限制使用 goto 语句。 自顶向上:先考虑整体,再考虑细节;先考虑全局目标,再考虑局部目标; 逐步求精:对复杂问题应设计一些子目标作为过渡,逐步细化; 模块化:把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。限制使用 goto 语句:在程序开发过程中要限制使用 goto 语句。2. 结构化程序的基本结构结构化程序的基本结构有三种类型:顺序结构、选择结构和循环结构。 顺序结构:是最基本、最普通的结构形式,按照程序中的语句行的先后 顺序逐条执行; 选择结构:又称为分支结构,它包括简单选择和多分支选择结构; 循环结构:根据给定的条件,判断是否要重复执行某一相同的或类似的 程序段。循环结构对应两类循环语句:先判断后执行的循环体称为当型循环结构; 先执行循环体后判断的称为直到型循环结构。2.3面向对象方法面向对象方法涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。1. 对象通常把对象的操作也称为方法或服务。 属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。属性值应该指的是纯粹的数据值,而不能指对象。 操作描述了对象执行的功能,若通过信息的传递,还可以为其他对象使用。对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。2. 类和实例类是具有共同属性、共同方法的对象的集合。它描述了属于该对象类型的所 有对象的性质,而一个对象则是其对应类的一个实例。类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。3. 消息消息是实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。一个消息由三部分组成:接收消息的对象的名称、消息标识符(消息名)和 零个或多个参数。4. 继承 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。 继承分为单继承与多重继承。单继承是指,一个类只允许有一个父类,即类等级为树形结构。多重继承是指,一个类允许有多个父类。5. 多态性对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。7.4软件工程基础7.4.1软件工程基本概念1. 软件定义与软件特点软件指的是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列。数据是使程序能正常操纵信息的数据结构。文档是与程序的开发、维护和使用有关的图文资料。可见,软件由两部分组成:机器可执行的程序和数据;机器不可执行的,与软件开发、运行、维护、使用等有关的文档。 根据应用目标的不同,软件可分应用软件、系统软件和支撑软件(或工具软件),见表 3-1。表 3-1 软件的分类名称描述应用软件为解决特定领域的应用而开发的软件系统软件计算机管理自身资源,提高计算机使用效率并为计算机用户提 供各种服务的软件支撑软件(或工具软件)支撑软件是介于两者之间,协助用户开发软件的工具性软件2. 软件工程为了摆脱软件危机,提出了软件工程的概念。软件工程学是研究软件开发和 维护的普遍原理与技术的一门工程学科。所谓软件工程是指采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开 发与维护的技术、方法、工具和管理等方面。软件工程包括3个要素:方法、工具和过程,见表 3-2。表 3-2 软件工程三要素名称描述方法方法是完成软件工程项目的技术手段工具工具支持软件的开发、管理、文档生成过程过程支持软件开发的各个环节的控制、管理7.4.2软件生命周期1. 软件生命周期概念 软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。软件生命周期分为3个时期共8个阶段,软件定义期:包括问题定义、可行性研究和需求分析3个阶段;软件开发期:包括概要设计、详细设计、实现和测试4个阶段;运行维护期:即运行维护阶段。软件生命周期各个阶段的活动可以有重复,执行时也可以有迭代,如图 3-1所示。图 3-1 软件生命周期2. 软件生命周期各阶段的主要任务在图 3-1 中的软件生命周期各阶段的主要任务,见表 3-3。表 3-3 软件生命周期各阶段的主要任务任务描述问题定义确定要求解决的问题是什么可行性研究与计划制定决定该问题是否存在一个可行的解决办法,指定完成开发任务的实施计划需求分析对待开发软件提出需求进行分析并给出详细定义。编写软件规格说明书及初 步的用户手册,提交评审软件设计通常又分为概要设计和详细设计两个阶段,给出软件的结构、模块的划分、 功能的分配以及处理流程。这阶段提交评审的文档有概要设计说明书、详细 设计说明书和测试计划初稿软件实现在软件设计的基础上编写程序。这阶段完成的文档有用户手册、操作手册等 面向用户的文档,以及为下一步作准备而编写的单元测试计划软件测试在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告运行维护将已交付的软件投入运行,同时不断的维护,进行必要而且可行的扩充和删改7.4.3软件设计1.软件设计基本概念(1)按技术观点分 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。 结构设计定义软件系统各主要部件之间的关系; 数据设计将分析时创建的模型转化为数据结构的定义; 接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何 通信; 过程设计则是把系统结构部件转换为软件的过程性描述。(2)按工程管理角度分 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。 概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据 结构或数据库模式; 详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算 法和数据结构的细节。2.软件设计的基本原理1) 软件设计中应该遵循的基本原理和与软件设计有关的概念(1)抽象 软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。(2)模块化 模块是指把一个待开发的软件分解成若干小的简单的部分。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。(3)信息隐蔽 信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。(4)模块独立性 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。模块的独立程度是评价设计好坏的重要度量标准。衡量 软件的模块独立性使用耦合性和内聚性两个定性的度量标准。内聚性是信息隐蔽 和局部化概念的自然扩展。一个模块的内聚性越强则该模块的模块独立性越强。 一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。2) 衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准内聚性是度量一个模块功能强度的一个相对指标。内聚是从功能角度来衡量 模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚 度由弱到强排列:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序 内聚、功能内聚。耦合性是模块之间互相连接的紧密程度的度量。耦合性取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。耦合可以分为多种形势,它们 之间的耦合度由高到低排列:内容耦合、公共耦合、外部耦合、控制耦合、标记 耦合、数据耦合、非直接耦合。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设 计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚 性,有利于提高模块的独立性。7.4.4结构化分析方法1. 结构化分析方法的定义结构化分析方法就是使用数据流图(DFD)、数据字典(DD)、结构化英语、 判定表和判定树的工具,来建立一种新的、称为结构化规格说明的目标文档。结构化分析方法的实质是着眼于数据流、自顶向下、对系统的功能进行逐层 分解、以数据流图和数据字典为主要工具,建立系统的逻辑模型。2. 结构化分析方法常用工具(1)数据流图(DFD) 数据流图是系统逻辑模型的图形表示,即使不是专业的计算机技术人员也容易理解它,因此它是分析员与用户之间极好的通信工具。(2)数据字典(DD) 数据字典是对数据流图中所有元素的定义的集合,是结构化分析的核心。 数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,若没有数据流图,数据字典也难于发挥作用。数据字典中有 4 种类型的条目:数据流、数据项、数据存储和加工。(3)判定表 有些加工的逻辑用语言形式不容易表达清楚,而用表的形式则一目了然。如果一个加工逻辑有多个条件、多个操作,并且在不同的条件组合下执行不同的操 作,那么可以使用判定表来描述。(4)判定树 判定树和判定表没有本质的区别,可以用判定表表示的加工逻辑都能用判定树表示。3. 软件需求规格说明书软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之 一。它的特点是具有正确性、无歧义性、完整性、可验证性、一致性、可理解性、 可修改性和可追踪性。7.4.5软件测试1.软件测试的目的和准则1) 软件测试的目的Grenford.J.Myers 给出了软件测试的目的:l 测试是为了发现程序中的错误而执行程序的过程;l 好的测试用例(test case)能发现迄今为止尚未发现的错误;一次成功的测试是能发现至今为止尚未发现的错误。 测试的目的是发现软件中的错误,但是,暴露错误并不是软件测试的最终目的,测试的根本目的是尽可能多地发现并排除软件中隐藏的错误。2) 软件测试的准则根据上述软件测试的目的,为了能设计出有效的测试方案,以及好的测试用 例,软件测试人员必须深入理解,并正确运用以下软件测试的基本准则:l 所有测试都应追溯到用户需求;l 在测试之前制定测试计划,并严格执行;l 充分注意测试中的群集现象;l 避免由程序的编写者测试自己的程序;l 不可能进行穷举测试;l 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提 供方便。2.软件测试方法软件测试具有多种方法,依据软件是否需要被执行,可以分为静态测试和动态测试方法。如果依照功能划分,可以分为白盒测试和黑盒测试方法。1)静态测试和动态测试(1) 静态测试包括代码检查、静态结构分析、代码质量度量等。其中代码检 查分为代码审查、代码走查、桌面检查、静态分析等具体形式;(2) 动态测试。静态测试不实际运行软件,主要通过人工进行分析。动态测 试就是通常所说的上机测试,是通过运行软件来检验软件中的动态行为和运行结 果的正确性。动态测试的关键是使用设计高效、合理的测试用例。测试用例就是为测试设 计的数据,由测试输入数据和预期的输出结果两部份组成。测试用例的设计方法 一般分为两类:黑盒测试方法和白盒测试方法。2)黑盒测试和白盒测试(1)白盒测试。白盒测试是把程序看成装在一只透明的白盒子里,测试者完 全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程 序中的逻辑通路是否都按预定的要求正确地工作;(2)黑盒测试。黑盒测试是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查 程序的功能是否符合规格说明的要求。3. 软件测试的实施1) 软件测试软件测试过程分4个步骤,即单元测试、集成测试、确认测试和系统测试。单元测试是对软件设计的最小单位模块(程序单元)进行正确性检验
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外科小肠疾病试题及答案
- 土地储备试题及答案
- 2025年广州市房屋租赁协议策划大纲
- 2025年农村宅基地重建资金垫付协议
- 2025年标准管理经营资产合同协议书范文
- 2025年消防安全审计分包协议
- 2025年采购石油产品协议范例
- 2025年石材铺设与管理协议
- 2025年公共设施策划维护使用协议书
- 2025年达城广场监理工作优化协议
- 全部编版三年级语文下册生字读音、音序、偏旁及组词
- 中国铝业股份有限公司偃师市东沟铝土矿矿山地质环境保护与土地复垦方案
- 市政工程质量通病与防治
- 魔方社团精彩活动记录簿 副本
- 介入手术室专科护士护理理论考试
- 配电项目工程重点、难点及解决措施
- 三一sy215c8零件手册SY215C8液压挖掘机零部件图册
- 中央空调水处理
- 北欧电力市场组织架构以及交易组织流程
- JJG 966-2010手持式激光测距仪
- GB/T 21558-2008建筑绝热用硬质聚氨酯泡沫塑料
评论
0/150
提交评论