第4章软件技术基础.ppt
第四章 软件技术基础,一.程序的概念,程序就是一系列的操作步骤,计算机程序就是由人事先规定的计算机完成某项工作的操作步骤。每一步骤的具体内容由计算机能够理解的指令来描述,这些指令告诉计算机“做什么”和“怎样做”。,二.程序设计语言的概念,编写计算机程序所使用的语言称为程序设计语言。,第一步把8转成二进制:,三 计算机语言发展过程,机器语言,汇编语言,高级语言,用机器语言完成一个加法运算,8+4,1000,再补满八位00001000,第二步把4转成二进制:,100,再补满八位00000100,第三步用指令10110000把00001000送入累加器AL中,第四步用指令10110000把00000100送入累加器AL中,第五步用指令00000100把00001000与00000100相加,第六步用指令11110100终止操作,最早的计算机语言,它是用二进制代码来编写程序,其编写的程序计算机能直接识别,且速度快。,1.机器语言,10110000 00001000 10110000 00000100 00001000 00000100 00000100 11110100,8+4的机器程序为:,如果要算1+2+3+4+5+6+100?,机器语言书写困难、记忆复杂,一般很难掌握。,程序为:,8+4,MOV AL,8,MOV AL,4,HLT,用命令MOV把4送到累加器AL中,用命令ADD把8与4相加,用命令MOV把8送到累加器AL中,ADD 8,4,语言汇编语言完成一个加法运算,MOV AL,8 MOV AL,4 ADD 8,4 HLT,源程序,目标程序,可执行程序,翻译,连接,计算机不能识别,2.汇编语言,由于机器语言的缺陷,人们开始用助记符编写程序,用一些符号代替机器指令所产生的语言称为汇编语言。,3. 高级语言,为了克服机器语言和汇编语言的缺陷,使普通人都能使用计算机语言来编写程序,人们开始研究一种既接近自然语言又简单易懂的语言。经过长时间的实践,产生了我们今天的高级语言。,汇编语言虽然采用了助记符来编写程序,比机器语言简单,但是仍属于低级语言,它与计算机的体系结构有关,在编写程序前要花费相当多的时间和精力去熟悉机器的结构。因此工作量大、繁琐,而且程序可移植性差。,Basic、VB、 C、C+、VC、VP,用高级语言C语言完成一个加法运算,8+4,int s; s=8+4;,计算机也不能识别高级语言,必须转换成二进制,有两种方式:,解释方式和编译方式,解释方式:是解释一条执行一条,不产生目标程序。,源程序,可执行程序,解释程序,编译方式:是整个程序都转换二进制,连接成可执行文件.,源程序,目标程序,可执行程序,编译程序,连接程序,BASIC,java等为解释型语言,C,FORTRAN,PASCAL 等为编译型语言,这种语言最接近自然语言又简单易懂的语言,语言简洁、紧凑、使用方便、灵活,(2)可移植性好,生成代码质量高,程序运行效率高,(3)有丰富运算符和数据结构。,C语言是一种面向过程的编程语言,具有高级语言的一切功能,又有低级语言的一些功能,因此它既可以用来编写系统软件,也可以用来编写应用软件。 c语言与其它语言相比具有如下特点:,1 C语言,四、高级语言分类,高级语言分3类:,(1)面向过程,(2)面向问题,(3)面向对象,五、常用的高级语言分类,面向对象的C+语言。它是在C语言的基础上增加了面向对象的内容。C+的学习比C语言更为困难。从目前的发展看,C+的应用更为普及。,2 C+语言,PASCAL语言是一种面向过程的良好结构化特性的高级语言,它是在软件危机的70年代所创造的一种完全符合结构化原则,有着严格的语法规则的高级语言。该语言在语言教学中有着良好的声誉,但在实际使用中,利用该语言开发软件并不多。所以许多人认为PASCAL 只是一种教学语言。,3 PASCAL语言,4 FORTRAN 语言,FORTRAN是最早出现的高级语言之一。它是针对科学计算而设计的一种高级语言(早期计算机的主要任务就是进行科学计算),到目前为止,FORTRAN仍主要是用于科学计算。 C语言出现后,有人给FORTRAN语言判了死刑,但事实上,在科学计算上,尤其是在大规模科学计算上,FORTRAN仍是首选的高级语言。FORTRAN 自身也在发展,目前,FORTRAN已发展到90和95版本。 微机上的FORTRAN编译器也有多种,在国内最流行的是VISUAL FORTRAN 5.0及更高的版本。此外还有其它的编译器如NDP FORTRAN等,只是在国内不大流行。,5 VISUAL BASIC,是由微软公司开发的,支持WINDOWS平台下开发的BASIC语言。它支持面向对象的开发,是目前WINDOWS平台下流行的开发工具之一。,7 其它语言,一般来说,每一种高级语言或开发工具都有它的使用范围,到目前为止,还没有一种语言能包打天下。,6 java语言,是由sum公司开发的,面向对象的网络编程语言,是目前跨平台下最流行的网络开发工具之一。,5 VISUAL foxpro,支持WINDOWS平台下开发的数据库存语言。它支持面向对象的开发,是目前WINDOWS平台下流行的开发数据库工具之一。,8 程序设计的基本过程,确定解决方案,分析问题,设计算法,编写程序,调试程序,整理文档,修改程序,4.1 算法语言简介,算法是指解决某一特定问题的具体步骤的描述,是指令的有限序列。,解决刻问题的算法为:,例1. 已知圆的半径为R(R是一个可变的量),求圆的面积和周长?,第一步:输入半经给r,第二步:计算面积存入s中,即s=3.14*r2,第三步:计算周长存入l中,即l=2*3.14*r,第四步:输出计算结果s与l的值,求园面积、周长的步骤就是一个算法,例2 求1+2+3+4+5n表达式的值(假设n=100),算法为:,分析:设和为s,则其通项为s=s+n,第五步:若n的值小于100,重复三、四步,第六步:输出结果,求数字累加的步骤就是一个算法,(4)输出:要求算法有一个或多个输出,1. 算法的基本牲,(5)可行性:算法描述的操作都是可以通过已经实现的基本运算,通过执行有限次来实现的。,(1)确定性:是指算法中的每一步都必须是有明确的定义,不允许有模棱两可的解释和多义性。,(2)有穷性:是指必须能在执行有限步骤之后终止。,(3)输入:要求算法有零个或多个输入,例 下列对算法特性描述正错误的是(2005年9月),A.算法中的每一步都必须是有明确的定义,不允许有多义性,B.算法有一定要有输出,C.算法一定要有输入,D.算法描述的操作都是可以通过执行有限次来实现的,(4)效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间,即:要有较优时间效与空间效率。,2. 评价一个好的算法有以下几个标准:,(1)正确性:算法应满足具体问题的需求。,(2)可读性:算法应该以有利于阅读者对程序的理解。,(3)健状性:算法应具有容错处理。当输入非法数据时,算法应对其作出反应,而不是产年莫名其妙的输出结果。,3. 算法效率的度量,(1)时间复杂度:是指算法基本运算的次数(不是执行时间),用来衡量算法执行的时间效率。,(2)空间复杂度:执行这个算法所需要的内存空间。包括程序所占的空间、输入的初始数据所占的空间、运算时所需的空间。,例1. 算法的时间复杂度是指(2005年4月考题) A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数 D)算法程序中的指令条数,例2.算法的空间复杂度是指(2005年9月考题) A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)算法执行过程中所需要的存储空间,例1 将两个变量x=3,y=5的值交换,其算法为:(首先引入中间变量z),第一步:输入3给x,输入5给y,第二步:将x的值存入中间变量z中:x z,第三步:将y的值存入x中:y x,第四步:把中间变量z的值存入y中:z y,4 算法的表示,(1) 自然语言表示:,用人们通使用的语言来表示。,(2)用流程图形来表示算法,流程图:是一种表示算法的图形工具,用来助人们设计程序。,流程图的类型,1.ANSI流程图 2.N-S流程图 3.PAD图 4.HIPO图,起止框,处理框,判断框,输入输出框,连结点,流向线,ANSI流程图简介,例2 用流程图将两个变量x=3,y=5的值交换。,算法的控制结构可分为顺序、选择、循环三种基本结构。,4.结构化程序算法的控制结构,用流程图表示为:,当型循环,直到型循环,注:任何一个结构化程序都可以由这3种基本结构来完成。已经证明:这3种基本结构所构成的程序可以处理任何复杂的问题。,例 结构化程序设计的3种基本结构是(2005年4月考题) A)顺序、选择、重复 B)递归、嵌套、调用 C)过程、子过程、主程序 D)顺序、转移、调用,例3 输入两个数x,y;输出最大的数,算法为:,第二步:对x,y进行比较,第三步:输出最大的数,no,yes,P136页 例4 输入三个数x,y,z;输出最大的数,例5 求1x2x3x4x5n表达式的值(假设n=100),算法为:,分析:设和为s,则其通项为s=sxn,第五步:若n的值小于100,重复三、四步,第六步:输出结果,no,yes,计算机解题的过程实际上是实施某种算法,称计算机算法。 (1)列举法 列举法是指根据提出的问题,列举所有可能的情况进行处理。 (2)归纳法 通过列举少量的特殊情况,经过分析,找出一般关系 (3)递推 从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果 (4)递归 将一个复杂的问题归结为若干个较简单的问题,直到最简单问题解决 (5)减半递推技术 就是对问题分而治之。,5. 算法设计的基本方法,数据结构是一门研究非数值计算的程序设计问 题中计算机的操作对象以及它们之间的关系和 操作等等的学科。,4.4.1 数据结构定义,4.4 数据结构简介,4.4.2 基本概念和术语,数据所有能输入到计算机中去的描述客观事物的符号。 数据项有独立含义的数据最小单位,也称域。 数据元素数据的基本单位,也称节点或记录,可以包括一个或几个数据项。,学生信息表,举例,以上是用线性表的形式来表示数据,数据结构是反映数据元素间关系的集合的表示,以上是通过树形结构来表示数据,如何来让计算机表示其关系?(设计算法),如何来让计算机存储这些关系的数据?(编程实现算法),如何来让计算机对其进行运算?,(1)集合数据元素间除“同属于一个集合”外,无其它关系,(1)数据的逻辑结构(数据元素之间的逻辑关系) (2)数据的存储结构(逻辑结构在计算机内部的实现) (3)对各种数据结构进行的运算(增加、删除、修改等),数据结构主要研究三个方面的问题:,根据数据元素间关系的基本特性,数据的逻辑结构有四种基本结构,4.4.3 数据结构主要研究问题,如:坐在同一个电影 院里素不相识的观众,如:装在同一袋子里有大米,(2)线性结构该结构的数据元素之间存在着一个对一的关系,如线性表。,线性结构特点:在数据元素的非空有限集中 *存在唯一的一个被称作“第一个”的数据元素 *存在唯一的一个被称作“最后一个”的数据元素 *除第一个外,集合中的每个元素均只有一个前驱 *除最后一个外,集合中的每个元素均只有一个后继,例 英文字母表(A,B,C,Z)是一线性结构,叫线性表,几种常用特殊的线性表,栈:栈是限定在一端进行插入与删除的线性表。,栈顶指针top,指向实际栈顶 后的空位置,初值为0,进栈,A,出栈,栈满,B,C,D,E,F,设数组维数为M top=0,栈空,此时出栈,则下溢(underflow) top=M,栈满,此时入栈,则上溢(overflow),栈空,栈的特点:先进后出,后进选出。,A)在栈中只能插入元素而不能删除元素 B)在栈中只能删除元素而不能插入元素 C)栈是特殊的线性表,只能在一端插入或删除元素 D)栈是特殊的线性表,只能在一端插入元素,而在另一端 删除元素,例1 下列关于栈的描述正确的是(2005年9月),例2: 栈底至栈顶依次存放元素A、B、C、D、E,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是_。 ABCED B. DBCEA C. CDABE D. DCBEA,对列:是指允许在一端进行插入、而在另一端进行删除的线性表。,front,rear,队空,把a1,a2,a3,a4,a5,a6,a7,a8,a9放入队列,a1,a2,a3,a4,a5,a6,a7,a8,a9,入队,出队,队列的特点:“先进先出,后进后出”的原则,队列在两端进行操作,一端插入,一端删除,例1 栈和队列的共同点是( ) A)都是先进先出 B)都是后进先出 C)只允许在端点处插入和删除元素 D)没有共同点,例2 一个队列的入队序列是1,2,3,4,则队列的输出序列是 A)4,3,2,1 B)1,2,3,4 C)1,4,3,2 D)3,2,4,1,(3)树形结构(层次结构)一个对多个,数据元素间存在着一对多或多对一的关系,每个元素若有直接前驱元素,只能有一个,但可以有多个直接后继元素。,特点: 树中至少有一个结点根 树中各子树是互不相交的集合,根,子树,一、树基本术语,结点表示树中的元素,包括数据项及若干指向其子树的分支 结点的度结点拥有的子树数 叶子度为0的结点 孩子结点子树的根称为该结点的孩子 双亲孩子结点的上层结点叫该结点的双亲 兄弟同一双亲的孩子 树的度-一棵树中最大的结点度数 结点的层次从根结点算起,根为第一层,它的孩子为第二层 树的高度树中结点的最大层次数 森林m(m0)棵互不相交的树的集合,结点A的度:3 结点B的度:2 结点M的度:0,叶子:K,L,F,G,M,I,J,结点A的孩子:B,C,D 结点B的孩子:E,F,结点I的双亲:D 结点L的双亲:E,结点B,C,D为兄弟 结点K,L为兄弟,树的度:3,结点A的层次:1 结点M的层次:4,树的深度:4,结点F,G为堂兄弟 结点A是结点F,G的祖先,结点B的孩子:,结点F的双亲:,树的高度,结点K的层次,树的度,叶子:,结点A的度:,互为兄弟的结点:,2,E,I,J,K,H,D,E,C,B,C,D,E,F,H,I,J,2,4,4,下列关于树的概念错误的是( )(2004年) A一棵树中只有一个无前驱的结点 B一棵树的度为树中各个结点的度数之和 C一棵树中,每个结点的度数之和等于结点总数减1 D一棵树中每个结点的度数之和与边的条数相等,一、树基本术语,结点表示树中的元素,包括数据项及若干指向其子树的分支 结点的度结点拥有的子树数 叶子度为0的结点 孩子结点子树的根称为该结点的孩子 双亲孩子结点的上层结点叫该结点的双亲 兄弟同一双亲的孩子 树的度-一棵树中最大的结点度数 结点的层次从根结点算起,根为第一层,它的孩子为第二层 树的高度树中结点的最大层次数 森林m(m0)棵互不相交的树的集合,二、 二叉树,特点:每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒 基本形态,定义:二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成,二叉树,二叉树不是树的特特殊情况,主要区别是区分左子树和右子树,即使是在只有一棵树的情况下,也要指明是左子树或右子树。,树,二叉树的基本性质: (1)第k层上最多有2k-1个结点 (2)深度为m二叉树的最多有2m-1个结点 (3)在任意一个二叉树中,度为0的结点(即叶子结点)总比度为2的点多一个。 (4)具有n个结点的二叉树,其深度至少为log2n+1,例:在深度为5的二叉树中,结点的个数最多为 A)32 B)31 C)16 D)15,三、满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。,四、完全二叉树:是除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。,五、二叉树的遍历 遍历是指不重复地访问二叉树中所有结点。,遍历分三种方式:前序、中序和后序遍历。,1.前序遍历法 首先访问根结点,再访问左子树,最后访问右子树,并且在访问左子树和右子树时,仍然是先访问根,再左子树,最后右子树。,例:用前序法访问:,FCADBEGHP,ACBDFEHGP,2. 中序遍历法 首先访问历左子树,再访问根结点,最后中序右子树。 并且在访问左子树和右子树时,仍然是先访问左子树,再访问根,最后是右子树。,例:用中序法访问:,3. 后中序遍历 首先后序遍历左子树,再右子树,最后访问根结点,并且在访问左子树和右子树时,仍然是先访问左子树,再访问右子树,最后是根。,ABDCHPGEF,例:用后序法访问:,(4)图状结构多个对多个,如图,多个对个关系图,4.3.2 数据的存储结构,数据的逻辑结构可归纳为:线性结构和非线性结构,而存储结构是数据的逻辑结构通过计算机语言编程来实现的,分两大类:线性存储结构和非线存储性结构。,一、线性存储结构:,2.有四种存储方式:顺序、链接、索引和散列,1.特点:存在唯一的第一个数据元素,存在唯一的最后一个的数据元素除第一个外,集合中的每个元素均只有一个前驱除最后一个外,集合中的每个元素均只有一个后继。,二、非线性存储结构:,特点:一个元素可以存在多个直接前驱和多个直接后继,各数据元素之间的前后关系比线性结构复杂。,对于不同的存储结构,其数据处理的效率是不同的。,(1)顺序存储方法,该方法实现逻辑上相邻的结点存储在物理位置也相邻的存储单元中物理地址相邻,实现随机存取 。,Loc(元素i)=Lo+(i-1)*m,存储的是一片连续的地址,求其第i个元素地址公式为:,顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充,线性表的插入是指在第i(1i n+1)个元素之前插入一个新的数据元素x,使长度为n的线性表变成长度为n+1的线性表,需将第i至第n,共(n-i+1)个元素后移,插入元素:,x,h,g,f,e,x,在顺序表中插入一个元素时,平均移动表的一半元素,当n很大时,效率很低。,删除元素,线性表的删除是指将第i(1i n)个元素删除,使长度为n的线性表,变成长度为n-1的线性表需将第i+1至第n共(n-i)个元素前移,删除f,g,h,i,需将第i+1至第n共(n-i)个元素前移,在顺序表中删除一个元素时,平均移动表的一半元素,当n很大时,效率很低。,(2)链式存储方法,链式存储结构不要求逻辑上相邻的数据物理上也相邻,结点间的关系由附加的地址(指针)为实现.,其存储思想是如下图:,在链式存储方式中,要求每个结点由两部组成:一部分用于存放数据元素值称为数据区;另一部分用于存放指针称为指针域。,顺序存储,(1)在逻辑上相邻的元素在物理可以不相邻 (2)存储时不用事先准备,用时申请,这样会节约存储空间 (3)对增加,删除接点操作简单,不必移动结点,只要改结点中指针值,优点:,除存储本身信息外,还有表示其直接后继信息的指针域,因此其存储 密度小,存储空间利用率。,缺点:,m,插入元素:,210,110,删除元素:,110,3.索引存储方法,该方法是在存储结点信息的同时,再建一个附加的索引表,然后利用索引表中索引的值来确定结点的实际存储单元地址。,4.散列存储方法,该方法的基本思想是:把结点的关键字作为自变量,通过散列函数计算规则,确定出结点的存储单元地址。,上面四种存储方法可以单独使用,可以组合起来使用,同一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。,A)一个逻辑数据结构只能有一种存储结构 B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率 D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率,例2 下列叙述中正确的是(2005年9月),A)存储空间不一定是连续,且各元素的存储顺序是任意的 B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C)存储空间必须连续,且前件元素一定存储在后件元素的前面 D)存储空间必须连续,且各元素的存储顺序是任意的,例3 下列对于线性链表的描述中正确的是,例1 在数据结构中,从逻辑上可以把数据结构分成() A 动态结构和静态结构 B 紧凑结构和非紧凑结构 C 线性结构和非线性结构 D 内部结构和外部结构,1、顺序查找,4.3:查找技术,最坏情况下所需要的比较次数为n,平均比较次数为(n+1)/2,以下2种情况只能采用顺序查找: (1) 无序表 (2) 有序线性表,如果采用链式存储结构。,4.3:查找技术,只适用于顺序存储的有序表。,2、二分法查找,对长度为n的有序线性表,在最坏情况下,二分查找只需比较log2n次,而顺序查找要比较n次。,假设有5个数:,要排序。,9 8 6 4 3,8 9 6 4 3,8 6 9 4 3,8 6 4 9 3,8 6 4 3 9,第一轮(趟)把9沉底共比4次,排序分为:交换类排序法、插入类排序法、选择类排序法和归并排序。,4.4:排序技术,(1)冒泡排序法。,1.交换类排序法:借助元素之间的互相交换进行排序的方法。,8 6 4 3 9,6 8 4 3 9,6 4 8 3 9,6 4 3 8 9,第二轮(趟)把8沉底共比3次,第三轮(趟)把沉底共比次,第四轮(趟)把沉底共比次,设线性表的长度为n,则最坏情况下,冒泡排序要经过n/2遍从前向后的扫描和n/2遍从后向前的扫描。需要比较的次数是n(n-1)/2次。,(2)快速排序方法,其思路是:线性中任意取一个数,比如取5,把其放在T变量中,T=5。,由于它比冒泡排序速度快,所以称快速排序。,然后把小于T的元素移到T的前面,大于T的元素移到T的后面。,设线性表的长度为n,则最坏情况下,快速排序要比较的次数是nlog2n次。,2、插入类排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。,第一趟(前2个数比),第二趟(前3个数比),第三趟(前4个数比),第四趟(前5个数比),第五趟(前6个数比),第六趟(前7个数比),长度为n,最坏情况下,需要比较的次数是n(n-1)/2次,3、选择类排序法,其思路是:先在线性表中找到最小数并记下其位置,然后与第一个数交换,再找第二小的并记下其位置,然后与第二个数交换.。,第一趟,第二趟,长度为n,最坏情况下,需要比较的次数是n(n-1)/2次,一、软件的定义与特点,计算机软件(software)是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。,软件的特点: 1、软件是一种逻辑实体,而不是物理实体,具有抽象性。 2、软件的生产与硬件不同,它没有明显的制作过程。 3、软件在运行、使用期间不存在磨损、老化的问题。 4、软件的开发、运行受计算机系统的限制。 5、软件复杂度高,成本昂贵。 6、软件开发设计诸多的社会因素。,4.4 软件工程的基本概念,软件是程序、数据和_的集合。,20世纪60年代末,软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 1、软件的需求的增长得不到满足、开发成本和进度无法控制 3、软件质量难以保证、不可维护或维护程度非常低 5、软件的成本不断提高。 6、软件开发生产率的提高赶不上硬件的发展和应用需求的增长。 可以将软件危机归结为成本、质量、生产率等问题。,“软件危机”是指( ) A. 计算机病毒的出现 B. 利用计算机进行经济犯罪活动 C. 软件开发和维护中出现的一系列问题 D. 人们过分迷恋计算机系统,二、软件危机与软件工程,软件工程的概念的出现源自软件危机。,1968年在北大西洋公约组织会议上,软件工程作为一个概念首次被提出。,下面不属于软件工程的3个要素的是_ A. 工具 B. 过程 C. 方法 D. 环境,软件工程:是开发、维护和修复软件的系统方法,软件工程包括3个要素:方法、工具和过程,1、通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。,定义阶段,开发阶段,维护阶段,软件生命周期划分成_ A. 定义、开发、运行维护 B. 设计阶段、编程阶段、测试阶段 C. 总体设计、详细设计、编程调试 D. 需求分析、功能定义、系统设计,2、软件开发的结构化方法将软件生命周期划分成三个阶段,三、软件生命周期,四、软件工程的目标,软件工程研究的内容主要包括:_技术和软件工程管理。,2、软件工程研究的内容包括:软件开发技术和软件工程管理。,1、软件工程需要达到的基本目标应是:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易与移植;需要较低的维护费用;能按时完成开发,及时交付使用.,软件工程鼓励研制和采用各种先进的软件开发方法、工具和环境。从而提高软件的开发效率、维护效率和软件的质量。,CASE工具的表示集成是指CASE工具提供相同的( ) A. 编程环境 B. 用户界面 C. 过程模型 D. 硬件/操作系统,软件开发环境是全面支持软件开发全过程的_集合,六、软件开发工具与软件开发环境,软件开发环境或软件工程环境是全面支持软件开发全过程的软件工具集合。,计算机辅助软件工程(CASE,Computer Aided Software Engineering)是当前软件开发环境中富有特色的研究工作和发展方向。CASE将各种软件工具、开发机器和一个存放开发过程信息的中心数据库组合起来,形成软件工程环境。,4.5 结构化分析方法(Structured Analisys,SA),1.软件开发方法:是软件开发过程所遵循的方法和步骤,其目的在于有效地得到一些工作产品,即程序和文档,并且满足质量要求。,3.结构化方法包括:结构化分析方法、结构化设计方法和结构化编程方法。,2.软件开发方法包括:分析方法、设计方法和程序设计方法,一、结构化分析方法:,Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向_的设计方法。,1、面向数据流的结构化分析方法(SA),二、面向对象的分析方法(OOA),2、面向数据结构的Jackson方法(JSD),3、面向数据结构的结构化数据系统开发方法(DSSD),4.6 软件需求分析方法,4.7 软件需求规格说明书,软件需求规格说明(SRS,Software Requirement Specification)是需求分析阶段最后成果,是软件开发中的重要文档之一。,作用:便于用户、开发人员进行理解和交流,反映出用户问题的结构,可以作为软件开发工作的基础和依据,作为确认测试和验收的依据,下列叙述中,不属于软件需求规格说明书的作用的是 A.便于用户、开发人员进行理解和交流 B.反映出用户问题的结构,可以作为软件开发工作的基础和依据 C.作为确认测试和验收的依据 D.便于开发人员进行需求分析,()抽象: ()模块化:如高级语言中的过程、函数、子程序 ()信息隐蔽:在一个模块内包含的信息(过程或数据)对于不需要这些信息的其他模块来说是不能访问的 ()模块独立性:模块的独立程度是评价设计好坏的度量标准。衡量软件的模块独立性用耦合性和内聚性来度量。,下面不属于软件设计原则的是 A)抽象 B)模块化 C)自底向上 D)住息隐蔽,4.8 软件设计的原理,软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理。,.9 软件测试,一、软件测试的目的 1983年IEEE将软件测试定义为:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。,软件测试是为了发现错误而执行程序的过程: 一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例 一个成功的测试是发现了至今尚未发现的错误的测试,二、软件测试技术与方法综述,1.从是否需要执行被测软件角度分:静态测试和动态测试方法,1.静态测试:不运行程序,包括代码检查、静态结构分析、代码质量度量。主要由人工进行,能有效发现30%70%的逻辑设计和编码错误,2.动态测试:动态测试是基于计算机的测试,是为了发现错误而执行程序的过程,2.按照功能划分可以分为:白盒测试(结构测试)和黑盒测试(功能测试 ),4.黑盒测试是:只依据程序的需求和功能规格说明,检查程序是否符合它的功能说明,完成功能验证。,黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。,软件测试过程一般按个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试。,三、软件测试的实施,3. 白盒测试: 验证所有内部数据结构的有效性,白盒测试的主要方法有逻辑覆盖、基本路径测试等,4.10 程序的调试,在对程序进行了成功的测试之后将进入程序调试(通常称Debug,即排错)程序调试的任务是诊断和改正程序中的错误。,下列不属于软件调试技术的是_。 A. 强行排错法 B. 集成测试法 C. 回溯法 D. 原因排除法,程序调试与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出错误的具体位置。,软件测试贯穿整个软件生命期,调试主要在开发阶段。,软件调试方法:强行排错法、回溯法、原因排除法,(1)符号名的命名应具有一定的实际含义。 (2)程序要有注释。分为序言性注释和功能性注释。 序言性注释:通常位于每个程序的开头部分,它给出程序的整体说明。 功能性注释:的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。 (3)视觉组织要好,可以利用空格、空行和缩进等技术。,4.11 结构化程和面向对象程序设计,一、要形成良好的程序设计风格,应考虑如下因素:,1、源程序文档化,程序应该简单易懂,语句构造应简单直接,不应该为提高效率而把语句复杂化。 (清晰第一,效率第二),输入输出方式和格式应尽可能方便用户的使用。,对建立良好的程序设计风格,下面描述正确的是() A)程序应力求简单、清晰、可读性好 B)符号的命名只要合语法 C)充分考虑程序的执行效率 D)程序的注释可有可无,2. 语句的结构,3.输入输出,1.结构化程序设计强调的是程序的易读性,其设计原则概括为:自顶向下、逐步求精、模块化和限制使用goto语句。,1.自顶向下:程序设计时,应先考虑总体,后考虑细节。 2.逐步求精:对复杂问题,应设计一些子目标作过滤,逐步细化。 3.模块化:程序总目标分解成分目标,每个小目标称为一个模块。,2. 采用结构化程序设计方法编写的程序结构良好、易读、易理解、易维护。 结构化程序有三种基本结构,即顺序、选择和重复结构。,一、 结构化程序设计,面向对象的程序设计,面向对象方法的的程序设计是一种新兴的程序设计方法,如VB、VF、VC等语言就是对象的设计语言。面向处理对象,告诉计算机“做什么”而不必指出“怎么做”,省略许多步骤,计算机就能完成所要求的任务。,二 面向对象的程序设计,面向对象的程序设计优点:1.与人类习惯的思维方法一致 2.稳定性好 3.可重用性好 4.易于开发大型软件产品 5.可维护性好,2.3.2 面向对象方法的几个基本概念 1. 对象(object) 对象是系统中用来描述客观事物的一个实体,在现实生活中的一本书,一个人,一辆车等都是对象。 计算机中 一个文本框、一个菜单项都是对象。,一辆汽车:是一个对象,它包括属性(颜色、型号、载重量)和操作(启动、加速、刹车),一个窗口:对象,它包括属性(颜色、大小、位置)和操作(打开、放大、关闭)也称方法,把描述对象属性数据和对这些数据进行的所有操作集中在一起叫封装,构成对象统一体。,信息的隐蔽性是通过封装来实现的。,2.封装,3、消息,在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送消息实现的。,消息是一个对象请求另一对象为其服务时之间传递的信息,它请求对象执行某一处理或回答某一要求。,4、方法,在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送消息实现的,当对象接到消息后,是通过方法即操作来完成的。,方法是对象对“消息”的响应,实质是实现对象的各种操作。,类是将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。 如“桥车,卡车,公交车“等实例构成“汽车类” 如“排球,足球,蓝球”等实例构成“球类”,在用已有的类定义作为基础建立新类的时候,新的类能够直接获得已有类的性质和特征,而不必重复定义它们,这就叫继承。,可以部分继承、也可以全部继承。,5、类和实例,6、继承,类是一个支持集成的抽象数据类型,对象是类的实例,它们抽象与具体的关系。,对象根据接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。,7、多态性,面向对象的软件技术中,多态性是指子类对象可以像父类那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。,3.面向对象的 程序设计主要考虑的是提高软件的( ) A)可靠性 B)可重用性 C)可移植性 D)可修改性,4.对象是显示世界中一个实际存在的事物,它可以是有形的也可以是无形的,下面所列举的不是对象的是() A)桌子 B)飞机 D)狗 D)苹果的颜色,对象是构成客观世界的一个独立单位,它具有自己的静态特征(属性)和动态特征(行为或功能),1.在面向对象的方法出现以前都是采用面向()的程序设计方法。 A)用户 B)结构 C)过程 D)以上都不对,2.面向对象的开发方法中,类与对象的关系是( ) A)具体与抽象 B)抽象与具体 C)整体与部分 D)部分与整体,