计算机应用基础 潍坊学院 计算机工程学院 主讲人:丁素英
上讲内容回顾 1.模型的分类; 2.评价算法的基本标准; 3.算法设计的注意问题; 4.算法表达的方法; 5.三种控制结构; 6.程序设计风格。
本讲内容概要 第4章 计算机程序设计与语言 4.4 程序的测试、调试和维护 4.5 程序设计语言应用 要求:掌握程序的测试方法,了解程序的维护和文档的编写,了解VB的应用。 重点:程序测试和维护。 难点:程序的测试和调试 。
4.4 程序的测试、调试与维护 4.4.1 程序测试 4.3.2 程序调试 4.3.3 程序维护
4.4.1 程序测试 程序测试(program testing) 程序测试是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。 目前,软件的正确性尚未得到根本的解决,软件测试仍是发现软件错误和缺陷的主要手段。 为了发现系统中的错误,应竭力设计能暴露错误的测试用例。测试用例是有测试数据和预期结果构成的。一个好的测试用例是极有可能发现至今为止尚未发现的错误的测试用例。 高效的测试是指用少量的测试用例,发现被测软件尽可能多的错误。软件测试所追求的是以尽可能少的时间和人力发现软件产品尽可能多的错误。
4.4.1 程序测试 对程序进行调试可用两种方法: 1.黑盒测试 黑盒测试根据关键需求说明书所规定的功能来设计测试用例,它不考虑软件的内部结构和处理算法。常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等。 从测试流程的角度看,软件测试可分为单元测试、集成测试和确认测试。 (1)单元测试 单元测试(unit testing),也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的错误,单元测试计划应该在详细设计阶段制定。
4.4.1 程序测试 (2)集成测试 集成测试(integration testing),也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。集成测试主要发现设计阶段产生的错误,集承测试计划应该在概要设计阶段制定。集成的方式可分为非渐增式和渐增式。 (3)确认测试 确认测试(validation testing),主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。确认测试计划应该在需求分析阶段制定。
4.4.1 程序测试 2.白盒测试 白盒测试,又称结构测试。他的前提是可以把程序看成在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否能按照预定要求正确工作。 白盒测试根据软件的内部逻辑设计设施用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序是对程序逻辑的覆盖程度。主要的覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。
4.4.1 程序测试 我们以解二元一次方程组的程序为例,说明黑盒调试法与白盒调试法是怎样选择测试数据的。 1.黑盒调试法 为了调试程序的各个功能,我们把输入的二元一次方程组的系数分为以下四类,每一类设计一个调试用例。 合理的系数: (1)方程组有唯一解:a1=1,b1=1,c1=1,a2=0,b2=1,c2=2。 (2)方程组无解:a1=1,b1=1,c1=1,a2=1,b2=1,c2=2。 (3)方程组有无穷解:a1=1,b1=1,c1=1,a2=2,b2=2,c2=2。 选择合理的输入数据是验证程序的功能、性能是否符合设计的要求。 不合理的系数: (4)输入的不全是数值:a1=“a”,b1=5,c1=0,a2=6,b2=8,c2=7。 选择不合理的输入数据是对程序可靠性的考验。
4.4.1 程序测试 2.白盒调试法 为了让程序中的每个语句至少执行一次,使每个判断条件取一次真或取一次假,我们选择如下调试用例: d=0,s=“Y”: a1=1,b1=1,c1=1,a2=2,b2=2,c2=2。 d≠0,s=“N”: a1=1,b1=0,c1=1,a2=0,b2=1,c2=2。 这两个例子调试后,使得程序中的每个语句至少执行了一次,每个判断条件分别取了一次“真”和一次“假”。
4.4.1 程序测试 3.测试的步骤 测试工作要制定出测试规划,包括测试的步骤、范围、进度和所用的资源(硬件、软件)等。 测试工作先对每个模块进行测试,一般采用白盒测试法保证每个程序模块内部的正确性,然后再把测试后的模块组装在一起进行整体测试,主要测试各模块是否能正常配合工作,方法多采用黑盒测试法。 对模块的接口进行测试,适当辅以白盒测试法,以便对主要执行路径进行测试。
4.4.2 程序调试 程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。 程序调试的步骤 (1)把编制的源程序按照一定的书写格式送到计算机中,编辑程序会根据使用人员的意图对源程序进行增加、删除或修改 (2)把送入的源程序翻译成机器语言,即用编译程序对源程序进行语法检查并将符合语法规则的源程序语句翻译成计算机能识别的“语言”。如果经编译程序检查,发现有语法错误,那就必须用编辑程序来修改源程序中的语法错误,然后再编译,直至没有语法错误为止。
4.4.2 程序调试 (3)使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植成一个计算机能真正运行的程序。在连接过程中,一般不会出现连接错误,如果出现了连接错误,说明源程序中存在子程序的调用混乱或参数传递错误等问题。这时又要用编辑程序对源程序进行修改,再进行编译和连接,如此反复进行,直至没有连接错误为止。 (4)将修改后的程序进行试算,这时可以假设几个模拟数据去试运行,并把输出结果与手工处理的正确结果相比较。如有差异,就表明计算机的程序存在有逻辑错误。如果程序不大,可以用人工方法去模拟计算机对源程序的这几个数据进行修改处理;如果程序比较大,人工模拟显然行不通,这时只能将计算机设置成单步执行的方式,一步步跟踪程序的运行。一旦找到问题所在,仍然要用编辑程序来修改源程序,接着仍要编译、连接和执行,直至无逻辑错误为止。
4.4.3 程序维护 1.程序维护即修改程序,在软件生命周期中大约75%的费用都用在程序维护阶段。 (1)改正性维护 在程序调试时,有的错误没被发现,交付使用后,程序运行过程中某些错误暴露出来了,此时就要对程序进行改正性维护。 (2)适应性维护 随着计算机技术的飞速发展,程序运行的外在环境(硬件配置、软件配置等)发生了变化,为了使程序适应这种环境变化而修改程序的过程叫适应性维护。 (3)完善性维护 在程序使用的过程中,用户往往会对程序提出增加新功能或改善性能的要求,这就需要修改程序,使我们的程序更加完善,这个过程叫完善性维护。
4.4.3 程序维护 2.程序文档的编写 程序文档解释了程序的工作过程及使用方法。创建的文档为修改程序或使用程序提供帮助。程序文档有两种形式: 1)注释 插入到计算机程序代码行中的解释性注解,它能为改写程序的人阅读程序、理解程序提供帮助。 2)专门制作的文档 它不属于程序,它包含的是一些对程序员和用户都有用的关于程序的信息。 程序手册:对程序员有用的文档。其中包含问题描述、数学模型、算法及算法表达、程序代码、测试程序的过程和记录等,它是程序开发和维护的重要资料。 用户参考手册:对用户有用的文档。其中包含对程序的功能说明,操作程序的方法、步骤、故障分析与排除等,它是帮助用户学会使用软件的重要资料。用户参考手册还有电子版和在线帮助等形式。
4.5 程序设计语言应用 4.5.1 程序设计语言的分类与选择 4.5.2 软件开发工具 4.5.3 VB计算机语言
4.5.1 程序设计语言的分类与选择 语言 定义 特点 适应 第一代 机器语言 二进制形式,计算机能直接识别、执行的语言,由机器指令组成。 难理解、难掌握,不易查错纠错,面向机器。 第二代 汇编语言 每条符号指令与相应的机器指令有对应关系,并增加了一些宏、符号地址等功能。 直接操纵处理器、寄存器和内存地址等硬件资源。面向机器 编写设备驱动程序、编译程序、操作系统等系统软件 第三代 高级语言 指令更像人类语言 编程直观、方便。但不能直接执行,需要编译程序或解释程序来做翻译工作 可以在不同类型的计算机上运行,只要给出相应的编译程序或解释程序。 第四代 更抽象,尽管还用不同的语法表示程序结构和数据结构,但已不再涉及太多的算法细节。 包括:数据库查询语言SQL,程序生成器,决策支持语言、原型语言、形式化规格说明语言
高级程序设计语言——第三代语言分类 (1)过程性语言 过程性的编程语言适合于那些顺序执行的算法。用过程性语言编写的程序有一个起点和一个终点,程序从起点到终点执行的流程是直线型的。
(1)过程性语言 BASIC:1964年问世,包括GW-BASIC,QBASIC,Turbo BASIC等,在PC机应用,简单易学。 特点 代表 过程性语言 适合于顺序执行的算法。 用过程性语言编写的程序有一个起点和一个终点,程序从起点到终点执行的流程是直线型的。 BASIC:1964年问世,包括GW-BASIC,QBASIC,Turbo BASIC等,在PC机应用,简单易学。 COBOL:适合于开发大型商业集团的复杂的事务处理程序;编译执行。 FORTRAN:出现最早,至今应用于科学和工程计算领域。 Pascal:用于结构化程序设计的教学、科学、工程计算领域和系统程序设计。Turbo Pascal在微机上使用,开发能力强。 C语言:为设计Unix操作系统而研制的语言。功能强大、高效、简洁、可移植性强,类似汇编语言。Turbo C在微机上运行,其集成环境包括编辑、编译、链接、运行、调试程序等所需的一切工具。
高级程序设计语言——第三代语言分类 (2)面向对象语言 面向对象的程序设计语言是建立在用对象编程方法的基础上的。 程序被看成是正在进行通信的若干对象的集合。 程序设计就是定义对象、建立对象间的通信关系。 对象属于某一个类。 窗口类是比较常见的类,所有的窗口对象,包括应用程序窗口,都属于窗口类。
(2)面向对象语言 VB:综合性的且功能强大,具有图形设计工具、结构化的事件驱动编程模式,可开发Windows应用程序。 特点 代表 面向对象语言 是建立在用对象编程方法的基础上的。 程序是对象的集合,对象间可以通信。 程序设计:就是定义对象、建立对象间的通信关系。程序的运行是将对象集的初始状态变为终结状态。 VB:综合性的且功能强大,具有图形设计工具、结构化的事件驱动编程模式,可开发Windows应用程序。 C++:既融合了面向对象的能力,又与C语言兼容,简化了应用软件的开发与维护,开发大型软件。Borland C++版和Visual C++版。 Java:90年代推出,与C++相似,完全面向对象,更适用于网络应用。独立于平台,“一次编写,多次使用”。近几年广泛而成功的应用,它将推动Internet和网络的发展。
高级程序设计语言——第三代语言分类 (3)专用语言 专用语言是为特殊应用而设计的语言。通常有特殊的语法形式,面对特定的问题,输入结构及词汇表与该问题的相应范围密切相关。 语言 特点 代表 专用 为特殊应用而设计,应用面窄,翻译过程简单、高效,可移植性、维护性差。 LISP和Prolog:适用于人工智能领域,特别是关于知识表示和专家系统构造; APL:适合数组和向量运算; Forth:用来开发微处理机软件,支持用户自定义函数、面向堆栈方式执行,可以提高速度和节省内存。
4.5.1 程序设计语言的分类与选择 程序设计语言的发展趋势 程序设计语言是软件的重要方面。它的发展趋势是模块化、简明性和形式化。 ①模块化。程序由模块组成,语言本身的结构也是模块化的。 ②简明性。涉及的基本概念不多,成分简单,结构清晰,易学易用。 ③形式化。发展合适的形式体系,以描述语言的语法、语义、语用。
4.5.1 程序设计语言的分类与选择 程序设计语言的选择 当为一项工程选择程序设计语言时,主要考虑以下因素: 1)应用领域;首要考虑的因素。若干主要的应用领域长期以来已固定地选用了某些标准语言,积累了大量的开发经验和成功先例。 2)算法和计算复杂性; 3)数据结构复杂性; 4)软件运行环境; 5)性能方面的需要与实现的条件; 6)软件开发组成员是否都精通这门语言。
4.5.2 软件开发工具 1. 软件开发工具的分类 1)软件建模工具。用于描述系统的需求。 2)软件实施工具。用于程序设计、编码和编译,包括程序语言开发环境和集成开发环境。 3)模拟运行平台。用于模拟系统的实际运行环境。 4)软件测试工具。用于对系统、子系统、模块或单元进行测试。 5)软件开发支撑工具。主要是软件配置管理工具。包括进度管理、资源管理、费用管理和版本管理、文档的编制或生成等。
4.5.2 软件开发工具 2.软件开发工具的性能 1)表达能力或描述能力。表达能力或描述能力决定了软件开发工具对软件项目中各种不同情况的适应程度。 2)保持信息一致性的能力。对某些大规模软件系统,保持信息一致性(包括各部分之间的一致性、代码与文档的一致性、功能与结构的一致性)要求工具提供有效的支持。 3)使用的方便程度。人机界面良好、通俗易懂是衡量软件开发工具性能的另一指标。
4.5.2 软件开发工具 3. 集成开发环境(IDE) 软件开发环境的主要组成部分是软件开发工具。 软件开发环境中各种开发工具并不是各自封闭和分离的,而是以综合、一致和整体连贯的形态来支持软件的开发的,所以一般将软件开发环境称为集成开发环境(IDE,Integrated Development Environment),它是一种辅助程序开发人员开发软件的应用软件。 (2)IDE组成部分 编程语言编辑器、编译器/解释器、自动建立工具,通常还包括调试器。有时还会包含版本控制系统和一些可以设计图形用户界面的工具。
4.5.3 VB计算机语言 1. VB程序设计语言简介 Visual Basic 提供了从设计新型的用户界面到利用其他应用程序的对象,从处理文字、图像到使用数据库,开发Internet应用的所有工具。 使用VB可以开发大型企业应用程序、大型分布式应用程序及Internet应用程序。 在 Office软件系列中使用的 VBA( Visual Basic Application)语言、网页设计中使用的脚本语言 VBScript,都是 VB语言的子集。 Visual的中文含义是 “可视化”,指的是开发图形用户界面(GUI)的方法,不需编写大量程序代码去描述界面元素的外观和位置,只要把预先建立的对象放到屏幕上的预定位置,即可实现界面的设计工作。
4.5.3 VB计算机语言 2. VB的主要功能特点 (1)具有面向对象(OOP)的可视化(Visual)设计工具 数据、程序封装成对象,对象可视;图形用户界面,画出对象;设置对象属性,编写事件代码。 (2)事件驱动的编程机制 传统的编程方式是面向过程,按事先程序设计的流程进行,但在VB中用户的动作(即事件)控制着程序的运行流向。 (3)提供了易学易用的应用程序集成开发环境 在集成开发环境中,用户可设计界面、编写代码、调试程序,把应用程序编译成可执行VB文件,直至把应用程序制作成安装文件,以便能在脱离VB系统的Windows环境中运行。 (4)结构化的程序设计语言 VB具有丰富的数据类型,众多的内部函数、结构清晰的程序模块,简单易学。
4.5.3 VB计算机语言 (5) 强大的数据库功能 VB中利用数据控件可以访问多种数据库系统,如Access、 FoxPro,Excel、Lotus1-2-3等 (6) ActiveX技术 ActiveX技术是指将可重复使用的代码片段以控件的形式保存起来,在程序中通过添加控件进行调用。Active X控件以前被称为OLE 控件,是一个标准的用户接口元素。 (7)网络功能 提供了DHTML(Dynamic HTML)设计工具,可以使Web页面设计者动态地创建和编辑页面,使用户在VB中开发多功能的网络应用软件。 (8) 完备的Help联机帮助功能 在VB中利用帮助菜单和F1功能键,得到帮助信息,显示有关的示例代码,为学习和使用提供捷径。
4.5.3 VB计算机语言 3. VB的使用 开始——程序——Microsoft Visual Basic 6.0——Microsoft Visual Basic 6.0 退出 文件——退出
4.5.3 VB计算机语言 文件——新建工程——标准EXE 工具箱 属性窗口 窗体窗口 窗体布局窗口
举例:命令按钮的使用 (1)添加命令按钮 如:Command1 (2)编辑程序代码 对Command1添加代码: 双击命令按钮,添加:Private Sub Command1_Click() MsgBox "欢迎学习VB程序设计语言" End Sub
举例:命令按钮的使用 (3)运行程序 运行——全编译执行(Ctrl+F5)
基本内容 1.方法 “方法”是一个对象可以进行的操作,一个“方法”实际上就是实际上就是一段预选编写好的程序,能够完成特定的功能。如可以改变对象本身的属性,也可以把信息传递给其他对象。 2.事件 “事件”是指在某一时间地点发生的某事。例如,“单击命令按钮”、“拖动鼠标”、“按键盘键”等。一个事件的发生往往需要“对象”完成操作来应答。 如Command1按钮,事件响应过程Command1_Click() 这种执行程序的方式成为“事件驱动”。事件过程的一般格式为:Private Sub 控件名称_ 事件名称(参数) 事件过程的语句块 End Sub
基本内容 3.常量、变量、表达式 (1)常量 程序中固定不变的量。 (2)变量与数据类型 变量:可以在程序中改变的量。 数据类型:数值型、逻辑型、字符型、日期时间型等。 (3)函数 系统提供一部分,用户创建一部分。
基本内容 4.命令按钮控件 用于接收用户的命令。 常用属性: Caption:命令按钮显示的内容。 Enabled:控件是否可用。 Visible:控件是否可见。 Top、Left、Width、Height:控件中位置和大小。
基本内容 5.标签(Label)控件 用于在窗体中显示信息。 常用属性: Caption:显示标签的内容。 Font:控件的字体。 ForeColor:控件的当前颜色。
基本内容 6.文本框(TextBox)控件 用于接收用户输入的字符串数据。Text 常用属性: 名称:定义该文本框的名称。 Font:文字字体。 Left:左边缘的位置。 Width:宽度。
基本内容 7.对象属性的设置 如添加一个标签Label1,双击进入代码窗口后输入程序。 Private Sub Form1_Load() Form1.Caption=“我建的自己的窗口” Form1.Height=2000 Form1.Width=8000 With Label1 .Caption=“欢迎开始学习VB程序设计” .Left=1000:.Top=400 . Width=6000:. Height=1100 .Font.Name=“黑体”:.=Font.Size=23 End With End Sub 装入窗体Form1时执行该事件的过程。 显示:我建的自己的窗口 窗体的高度 窗体的宽度 标签Label1的属性 标签中显示内容 标签在窗体中左上角坐标 标签的宽度和高度 文字的字体和大小 对标签Label的定义结束
课后练习:编写求圆的周长和面积的程序 要求: 1. 5个标签:输入半径、圆周长为、面积为、Label4和Label5。 2. 1个文本框。 3. 2个命令按钮,“计算”和“取消”。
如:If a>b Then Print “a>b” 基本内容 8.分支结构程序设计 (1)顺序结构 (2)分支机构 If…Then形式 If…Then…End If形式 If…Then…Else…End If形式 If…Then…Else If…Else…End If形式 Select Case控制结构 Select Case表达式 Case条件值1 语句块1 Case条件值n 语句块n End Select 如:If a>b Then Print “a>b” 如:If a>b Then Print “a>b” Else Print “a<=b” End If …
课后练习 输入百分制成绩,要求输出对应的五级成绩。 优 x≥90 良 80≤x<90 中 70≤x<80 y=
基本内容 8.分支结构程序设计 (3)循环机构 For循环 For 循环变量=初值 To 终值[step步长值] 语句块 Next [循环变量] 如:计算1+2+22…+2i的程序。 s=1 For j=1 To i t=1 For k=1 To j t=t*2 Next k s=s+t Next j
VB程序设计语言编写的求解二元一次方程组的程序 命令按钮除了属性外,还要为其安排执行的动作,我们为“求解”和“退出”两个命令按钮分别编写的程序如下: Private Sub Command1_Click() ' 选择求解命令按钮 Dim a1, b1, c1, a2, b2, c2, d, x, y As Integer ' 从文本框取得方程组的系数 a1 = Val(text1.Text) b1 = Val(text2.Text) c1 = Val(text3.Text) a2 = Val(text4.Text) b2 = Val(text5.Text) c2 = Val(text6.Text) d = a1 * b2 - a2 * b1
VB程序设计语言编写的求解二元一次方程组的程序 If d = 0 Then Label5.Caption ="方程组无解或有无穷组解" ' 在窗口的结果处显示出错信息 Else ' 求方程组的惟一解并输出 x = (c1 * b2 - c2 * b1) / d y = (a1 * c2 - a2 * c1) / d Label5.Caption = "x=" + Str(x) + " y=" + Str(y) ' 在窗口的结果处显示方程组的解 End If End Sub Private Sub Command2_Click() ' 选择退出命令按钮 End ' 结束程序的执行
4.5.3 VB计算机语言 3.程序设计应用实例 我们还是通过鸡兔同笼问题,回忆一下程序设计的全过程。 1)建立模型:将所要解决问题建立物理模型和数学模型,该例子的数学模型:求解二元一次方程组。 2)算法设计:解二元一次方程组我们选用加减消元法。 3)算法表达:给出的流程图和伪码两种表示方法。 4)编写程序:用Visual FoxPro、 VB语言编写的程序。 5)程序测试:黑盒测试法与白盒测试法。 6)程序文档编写与程序维护:以书面的形式记录下前面程序设计的五个步骤,整理成开发文档。还要为程序写一份操作说明。这些开发文档和用户手册可以为开发者和用户以后修改程序和使用程序提供帮助。
本讲小结 1.程序测试的方法:黑盒测试法和白盒测试法。 2.程序维护的方法:改正性维护、适应性维护和完善性维护。 3.计算机语言的特点。 4.VB程序设计语言的特点。 5.VB程序设计语言的应用举例。
作业 P 112一、二、三、四、五(1、2、3、4)
扩展资源 1.计算机语言 http://www.delorie.com/digpp提供免费的C和C++编译器。 http://www.iavasoft.com免费下载Java。 2.软件测试 清华大学出版社出版《计算机软件测试技术》。 贺平,电子工业出版社出版《软件测试教程 》