教师:郭小林 2014年9月1日星期一

95
计计计计计 计计计计计计计计计计 1 计计 计计计 计计 计计计 2021计12计23计 2021计12计23计 计计计计计 计5计 计计计计计计计

description

计算机概论. 第 5 章 算法及程序设计. 教师:郭小林 2014年9月1日星期一. 第 5 章 算法及程序设计. 要点 算法+数据结构=程序设计 算术逻辑运算 非数值计算 面向过程和面向对象的程序设计 。. 5.1 算法的描述与实现. 利用计算机解题的步骤是,实际的问题→抽象为数学问题→找到解决数学问题的方法→转化为计算机算法→用计算机程序设计语言编程→调试程序→运算得到结果。. 5.1.1 计算机算法. 1. 计算机算法的特点 (1) 对于任何一组确定的输入,都在有限的处理步骤后得到一组明确的输出。 (2) 计算机输出的结果是明确的。 - PowerPoint PPT Presentation

Transcript of 教师:郭小林 2014年9月1日星期一

Page 1: 教师:郭小林 2014年9月1日星期一

计算机概论 电子科技大学成都学院 1

教师:郭小林教师:郭小林

2023年4月21日2023年4月21日

计算机概论计算机概论

第 5 章 算法及程序设计第 5 章 算法及程序设计

Page 2: 教师:郭小林 2014年9月1日星期一

第 5 章 算法及程序设计

要点 算法+数据结构=程序设计 算术逻辑运算 非数值计算 面向过程和面向对象的程序设计。

Page 3: 教师:郭小林 2014年9月1日星期一

5.1 算法的描述与实现

利用计算机解题的步骤是,实际的问题→抽象为数学问题→找到解决数学问题的方法→转化为计算机算法→用计算机程序设计语言编程→调试程序→运算得到结果。

Page 4: 教师:郭小林 2014年9月1日星期一

5.1.1 计算机算法

1. 计算机算法的特点 (1) 对于任何一组确定的输入,都在有限的处

理步骤后得到一组明确的输出。 (2) 计算机输出的结果是明确的。 (3) 计算机只能做有限步骤运算(处理)。 可以手工用 π = 4(1-1/3+1/5-1/7+1/9- …) 的

公式,无限精确地计算圆周率,但没有一种计算机算法能实现无限精确地计算圆周率。

Page 5: 教师:郭小林 2014年9月1日星期一

1. 算法表示方法 (1) 流程图表示法 利用基本流程图符

号的组合,可以表示较复杂的设计思想。它主要由下面一些符号及流程指向线组成。

主要包括:开始、结束、输入、输出、过程、判断、循环等。

Page 6: 教师:郭小林 2014年9月1日星期一

例如,输入一个数,如果它为 0, 输出“=0”, 否则输出“ <>0”

Page 7: 教师:郭小林 2014年9月1日星期一

(2) 问题分析图表 PAD 法

PAD(Problem Analysis Diagram ) 是一种二维树形结构的软件设计表现方法。它强调“自顶向下,逐步求精”的设计思想。

Page 8: 教师:郭小林 2014年9月1日星期一

基本符号

Page 9: 教师:郭小林 2014年9月1日星期一

例:设计菜单程序

Page 10: 教师:郭小林 2014年9月1日星期一

(3) 表达式

在高级程序设计语言中,表达式类似数学中的计算公式,但与数学公式有较大区别。

表达式是由变量名及运算符组成的式子。 1) 特殊运算符号 程序设计语言中,只能以 ASCII

符号组成表达式,因此运算符号与数学中使用的符号有一些不相同。例如算数运算符号在 C 语言中:“ *”表示乘法,“ /” 表示除法。 C 语言中还包括许多数学中没有的运算符号,例如“ & 变量名”表示取变量的地址运算,“ * 变量名”表示间接访问变量运算。

Page 11: 教师:郭小林 2014年9月1日星期一

2) 变量名是符号化的内存地址 , 不是代数中的“未知数”的概念。

在使用变量运算之前,它一定已被赋值。 C 语言表达式举例: Z=12*(A+3.7)/B CP=&C

Page 12: 教师:郭小林 2014年9月1日星期一

5.1.2 数学计算

1 利用表达式作计算 (1) 算术表达式 例:输入圆半径,计算圆面积 #include “stdio.h” /* 标准 io 头文件 */ main() /* 主函数 */ {float r,s; /* 定义变量类型 */ scanf (“%f”,&r); /* 输入半径值 */ s=3.14*r*r; /* 计算面积 */ printf(“s=%f”,s);} /* 输出 */

Page 13: 教师:郭小林 2014年9月1日星期一

(2) 关系表达式

关系表达式的值是逻辑值“真 / 伪”,“ 1 / 0” 。 例如 x>y,a+b>9.8 都是合法表达式。 当 x=10,y=9 时, c=x>y 表示 c 被赋值为 1 ( c

语言中真用 1 表示)。

Page 14: 教师:郭小林 2014年9月1日星期一

(3) 逻辑表达式

用逻辑运算符将关系表达式或逻辑量联系起来的式子为逻辑表达式。

例如: && 为逻辑与运算符号。 e=(a<=b)&&(c<=d) ,如果 a=1,b=2,c=3,d=3

则 e 被赋值为 1 。

Page 15: 教师:郭小林 2014年9月1日星期一

2. 算法设计

(1) 尽量节约内存、减少计算次数 设计算法时,要综合考虑:计算机的内存

储器大小是有限的,因而数字的范围、精度是有限的;计算机的计算速度是有限的,因而等待程序执行的时间是有限的。因此在设计算法时要尽量节约内存、减少指令执行次数。

9*9 比 9^2 运算快

Page 16: 教师:郭小林 2014年9月1日星期一

(2) 尽量使用编译,不使用解释语言。 编译后回形成可执行文件 (*.exe) ,可

以脱离编译器运行。例如: C 语言 解释语言只能在解释器中执行 , 解释器

本身还要占用内存。例如: BASIC 语言

Page 17: 教师:郭小林 2014年9月1日星期一

(3) 使用内存覆盖技术。 当内存不够的时候,把内存中最久未使

用的数据调出到硬盘,借用硬盘空间存储内存数据。称为虚拟内存技术。

操作系统一般提供虚拟内存技术。

Page 18: 教师:郭小林 2014年9月1日星期一

3. 算法误差

(1) 二进制小数转换误差 十进制转换为二进制方法:用 2 乘,小数部分

积为 0 时,正向取进位值。 十进制 0.1 转换为二进制为 0.0011001100110

01100110011… … 计算浮点数可能产生积累误差。

Page 19: 教师:郭小林 2014年9月1日星期一

3. 算法误差

(2) 截断误差 计算 由于误差 r>3/(n + 1) ,当误差 r = 0. 005 时,

取 n=5 。

Page 20: 教师:郭小林 2014年9月1日星期一

( 3 )有效数字误差

有效数字的最后一位与真值在此位相差正负 1 。 数学上规定,有效数字的最后一位与真值在此位相差正负 1 。

例如: 3位有效数字 1.23 的真值在 1.220 与1.229999999… 之间。在第 4位作四舍五入。

Page 21: 教师:郭小林 2014年9月1日星期一

( 4 )精度转换误差 实际上高精度与低精度数运算结果应以低精度

为准,但在计算机程序设计语言中,多数是把低精度自动转换为高精度。

Page 22: 教师:郭小林 2014年9月1日星期一

5.1.3 常用算法

1. 枚举法 判断集合中,所有元素为真,则命题为真。 例如,若公鸡每只 3元,母鸡每只 5元,小鸡每只 1元,

求 100元买 100 只鸡有多少种方案。 x+y+z=100 3*x+5*y+3*z=100 两个方程式不可能解出 3 个未知数,但可以用 x 、 y 、

z 的各种组合来试验。 当试验次数超过 1010 次方时,实用性不大。

Page 23: 教师:郭小林 2014年9月1日星期一

2. 递归算法

定义算法的过程中使用了被定义的算法本身。 (1) 直接递归 重复一组或一个操作,例如累加,累减,累乘,累除等。

a=a+1 ,把 a加 1 后的值赋给 a 。

Page 24: 教师:郭小林 2014年9月1日星期一

(2) 间接递归

程序用到它自身的前一步或前几步。 例 1 计算阶乘。 2!=1*2 3!=1*2*3=2!*3 (N+1)!=N!*(N+1) 例 2 有若干球,若每次拿走 1 个再拿走剩下

的一半,当第 10 次要拿球时,仅剩下 1 个球,问原来有多少球?

Page 25: 教师:郭小林 2014年9月1日星期一

3 迭代算法 每一次计算都在前一次计算的基础上进行,解决已知有解,

但难用表达式表示的问题。( 1 )对分法(二分之一法) 1)假设区间中点是 F(x)=0 的根 x*;

2) 如果不是根 F(x*)≠0 ,判断在左边区间还是右边区间; 3) 在取新区间的中点 x*;

4) 如果区间长度大于指定的精度,返回步骤 2);

5) 如果区间长度小于指定的精度, x*就是解,结束。

Page 26: 教师:郭小林 2014年9月1日星期一

3 迭代算法 每一次计算都在前一次计算的基础上进行,解决已

知有解,但难用表达式表示的问题。( 1 )对分法(二分之一法) 1)假设区间中点是 F(x)=0 的根 x*;

2) 如果不是根 F(x*)≠0 ,判断在左边区间还是右边区间;

3) 在取新区间的中点 x*;

4) 如果区间长度大于指定的精度,返回步骤 2);

5) 如果区间长度小于指定的精度, x*就是解,结束。

Page 27: 教师:郭小林 2014年9月1日星期一

3 迭代算法( 2 )逐次逼近法 1) 将 f(x)=0改写成 x=g(x); 2) 取 x* ; 3) 计算 g(x*); 4) 当 | x*- g(x*)|>ε,x*=g(x*),返回步骤 3 ) ; 当 | x*- g(x*)|<ε,x*就是解,结束 ;

Page 28: 教师:郭小林 2014年9月1日星期一

4 回朔法

枚举和试探的结合。将要解决的问题过程分为若干结点,每个结点有若干可供选择的后续结点。若不满足条件,返回到上一层结点,恢复刚才的参数,再试探其他分支。

Page 29: 教师:郭小林 2014年9月1日星期一

5 排序

将杂乱无章的数据按升序或降序排列。 常用冒泡法、插入排序、希尔排序、快速排序

Page 30: 教师:郭小林 2014年9月1日星期一

6 插值

一些函数表无法用 f(x) 表示,在表中插入一些中间值,构成新的表,用 p(x) ,近似代替 f(x) 。要求 p(xi)=f(xi) , xi 为已知点。

Page 31: 教师:郭小林 2014年9月1日星期一
Page 32: 教师:郭小林 2014年9月1日星期一
Page 33: 教师:郭小林 2014年9月1日星期一

7 数据压缩与解压缩

科学家在研究中发现,大多数信息的表达都存在着一定的冗余度,通过采用一定的模型和编码方法,可以降低这种冗余度。

计算机中用二进制表示的数据文件(包括数字或符号)中有许多是同一个或同一组数据的多次重复。重复的数据使得文件的总长度变长,不利于存储和传输。

设计算法,尽量去除文件中的重复数据,形成等效的新文件是数据压缩要解决的问题。

Page 34: 教师:郭小林 2014年9月1日星期一

反之,把已经压缩了的文件恢复成原来未压缩的文件是解压缩要解决的问题。

为了提高压缩比例,压缩可分无损压缩和有损压缩两大类。无损压缩比例较小,一般在一倍以下,有损压缩比例可达几倍,十几倍,甚至几十倍!

前者用于对文档、程序、重要数据的压缩,后者多用于对声音、图像、影像等文件的压缩。

Page 35: 教师:郭小林 2014年9月1日星期一

压缩技术大致可以按照以下的方法分类

Page 36: 教师:郭小林 2014年9月1日星期一

常用压缩 / 解压缩软件

在 Windows 操作系统支持下的压缩 / 解压缩软件很多,以 WinRAR 和 WinZIP最常用,压缩比例较高,可支持的压缩文件类型较多。

Page 37: 教师:郭小林 2014年9月1日星期一

5.2 程序设计方法

程序设计方法已有很大发展: 个人集体协作 利用程序设计语言软件开发平台 面向过程面向对象 手工生产软件工程

Page 38: 教师:郭小林 2014年9月1日星期一

5.2.1 面向过程的程序设计

这种程序设计方法是先把计算机要处理的事务分解成若干个独立的过程( procedures ),自顶向下不断的把复杂的处理分解为子处理,一层一层地分解下去,直到仅剩下若干个容易处理的子处理为止。再用面向过程的开发语言(汇编、C 语言等)编制源程序,然后经过编译形成计算机可执行程序,通过反复修改最后完成设计工作。

这种方法的理论基础是数据结构和算法,流程图能较好反映整个设计和执行过程。

Page 39: 教师:郭小林 2014年9月1日星期一

1 结构化程序设计方法

主要特点是:把过程分为顺序、条件转移(循环)、分支、子过程等标准程序功能模块,每块都只能有唯一的入口和出口,模块之间通过入口、出口连接。由于块内的程序结构是封闭的,因此便于设计和检验程序的正确性。适合开发小型应用软件。

Page 40: 教师:郭小林 2014年9月1日星期一
Page 41: 教师:郭小林 2014年9月1日星期一

2 支持面向过程设计的高级程序设计语言

常用的有: ( 1 ) C 语言(包括 Microsoft C 、 Turbo C 等多

种版本) 它是于 20世纪 60年代在 ALGOL 语言基础上研制的。 其显著特点是代码及数据分隔 ,即程序的各个部分除了必要的信息交流外彼此独立。 C 语言提供给用户各种函数,这些函数可方便的调用,并具有多种循环、条件语句用来控制程序流向,从而使程序完全结构化。 C 语言还提供许多汇编一级的指令,可直接指挥硬件工作,因此也有人称它为中间级语言。

Page 42: 教师:郭小林 2014年9月1日星期一

( 2 ) Pascal 语言 它是于 20世纪 70年代在 ALGOL 语言基础上研制的。 PASCAL 语言最初是为系统地教授程序设计而设计的,它具有丰富的数据类型,其控制结构体现了结构化程序设计原则。适合教学,科学计算与系统软件的研制。

( 3 ) Basic 语言

  

Page 43: 教师:郭小林 2014年9月1日星期一

3 软件测试 ( 1 )白箱法:设计多组输入数据,使得

程序中的每一个分支都得到测试,要求测试中使用合理的输入数据能得到合理的输出结果;程序能对不合理的输入作出适当的反应。由于这种测试涉及程序的具体结构,有时实际操作有困难。

( 2 )黑箱法:设计多组输入数据,要求程序能在输入合理的数据后得到合理的输出结果;对不合理的输入作出适当的反应。

Page 44: 教师:郭小林 2014年9月1日星期一

5.2.2 面向对象的程序设计

1. 基本概念 (1) 对象 对象是包括自己的数据和一组对这些

数据的操作的独立实体。对象 = 数据+ 作用于这些数据上的操作。在面向对象的程序设计方法中,对象是基本单位。

Page 45: 教师:郭小林 2014年9月1日星期一

(2) 类

具有相同属性和操作对象的集合称为类。 编译系统为程序员预先设置了上万个类供选用。每个类可以派生(继承)出子类、孙类。实际上类是用来定义对象的抽象数据类型,它把整数、实数、符号等具体的数据类型和过程操作都已经隐藏起来了。

Page 46: 教师:郭小林 2014年9月1日星期一

(3) 封装 把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。

(4) 继承 特殊类的对象拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。

Page 47: 教师:郭小林 2014年9月1日星期一

2 面向对象程序设计方法

要在应用程序的统筹规划和设计之后作以下步骤: ( 1) 创建对象或选用合适的对象; ( 2)设置对象的属性; ( 3) 选择并设计适当的对象事件及操作; ( 4)在过程代码中调用对象以实现对象之间的通信;

( 5)将对象的方法程序和属性代码包装在一起。

Page 48: 教师:郭小林 2014年9月1日星期一

面向过程程序设计方法与面向对象程序设计方法的区别:

① 前者在程序设计时将数据和算法完全的分开,后者将数据和算法看作是不可分割的实体,称为对象;

② 前者在程序设计过程中以算法为中心,围绕着实现系统功能的过程来构造系统,后者以数据为中心,所有的操作都围绕着数据而展开;

③ 前者是一句接一句地编写程序,后者主要是适当地创建对象、修改对象属性和编写对象的方法程序。

Page 49: 教师:郭小林 2014年9月1日星期一

3 面向对象设计的高级程序设计语言

( 1 ) VB ( Visual Basic),它是 1991年微软公司推出的第一个可视化的编程软件,从 VB 4.0版开始, VB也引入了面向对象的程序设计思想。 VB功能强大,学习简单。而且, VB还引入了“控件的概念,使得大量已经编好的 VB程序可以被直接使用,现在 VB已经发布 6.0版。

Page 50: 教师:郭小林 2014年9月1日星期一

( 2 ) C++ (包括 Microsoft Visual C++,Borland C++ , Turbo C++ 等)

这些程序设计工具软件的共同点是: 1)在Windows平台上运行; 2)可视化编程,一般用鼠标拖动工作窗口上的元件:表格 (Form)视窗、元件盒 (Component palette)等元件,设置、修改属性参数即可创建一个适合的对象。

Page 51: 教师:郭小林 2014年9月1日星期一

5.3.3 网络程序设计

Web技术的广泛应用,一些适合网络环境的脚本( Script )语言应运而生。

脚本语言不是程序设计语言,它不能被编译后生成执行文件。利用文本编辑软件,根据脚本语言书写脚本文件是 ASCII 文件。

浏览器根据脚本文件所规定的格式显示文字、声音、图形、影像。

Page 52: 教师:郭小林 2014年9月1日星期一

1 常用的脚本语言

( 1 ) HTML 语言 是超文本标记语言( Hyperlink Text Markup Language )的缩写。它是一种描述文档结构的语言,而不能描述实际的表现形式。 HTML 语言使用描述性的标记符(称为标签)来指明文档的不同内容。标签是区分文本各个组成部分的分界符,用来把 HTML 文档划分成不同的逻辑部分(或结构),如段落、标题和表格等。标签描述了文档的结构,它向浏览器提供该文档的格式化信息,以传送文档的外观特征。

  

Page 53: 教师:郭小林 2014年9月1日星期一

用 HTML 语言写的页面是普通的文本文档( ASCII ),不含任何与平台和程序相关的信息,它们可以被任何文本编辑器读取。

HTML 文档包含两种信息:页面本身的文本和表示页面元素、结构、格式、和其它超文本链接的 HTML 标签。

Page 54: 教师:郭小林 2014年9月1日星期一
Page 55: 教师:郭小林 2014年9月1日星期一

VBScript 它是一种 HTML嵌入脚本化语言。微软公司把用于应用程序描述的 Visual Basic 语言压缩成一个更合理的子集,即 VBScript ,它具有易学易用等特点

Page 56: 教师:郭小林 2014年9月1日星期一

( 2 ) JS (JavaScript) 语言 是 Netscape 公司的一种基于对象( Object) 和事件驱动( Event Driven )的脚本语言。

JS 主要用于 HTML页面,脚本嵌入在 HTML源码中; Java 是一种完整的、独立的编程语言,即可以在 Web 中应用,也可以用于与 Web 无关的情况。

JS 编写的脚本不必在运行前编译,它可以直接写入 Web页面中并由调用它的浏览器来解释执行。这样,一些基本交互作用就不用在服务器端完成,提高了客户端的响应时间。

Page 57: 教师:郭小林 2014年9月1日星期一

下面的 JS 脚本程序可显示时间。 <script language="JavaScript"><!--

now = new Date()hour = now.getHours()if (hour < 12) {document.write(" 现在是 : " + now.toLocaleString())} else if (hour < 18){document.write(" 现在是 : " + now.toLocaleString())} else if (hour >= 18) {document.write(" 现在是 : " + now.toLocaleString())

Page 58: 教师:郭小林 2014年9月1日星期一

( 3 ) ASP (Active page server) 语言 是在服务器端使用的脚本语言。服务器上必须安装脚本引擎。 脚本引擎是用于处理脚本的 COM (组件对象模型)对象。 ASP 为脚本引擎提供主机环境并把 .asp 文件中的脚本交给脚本引擎处理。

ASP脚本中也可以插入其他脚本语言,凡是 .asp 文件中使用的每种脚本语言,都要将他们相应的脚本引擎安装在 Web 服务器上。 ASP 中缺省语言是 VBScript , 所以不用担心安装 VBScript 的脚本引擎,当 安装完 Active Server Pages 时,该引擎就已存在了。使用 JScript 也不必有同样的担心。 但 是要使用一些不太常用的脚本语言时需要安装相应的脚本引擎 。

Page 59: 教师:郭小林 2014年9月1日星期一

( 4 ) PHP 语言 是一种服务器端、跨平台、 HTML嵌入式的脚本语言。是一种常用于 Web 编程的语言。 PHP酝酿于 1994年, 1995年发布其第一个公开版本,截止目前已发布的最新版本为 PHP4.05 。

   PHP 是一种免费软件,它能运行在包括 Windows 、 Linux 等在内的绝大多数操作系统环境中,常与免费Web服务软件 Apache 和免费数据库Mysql配合使用于 Linux平台上,具有最高的性能价格比,号称“黄金组合”。

Page 60: 教师:郭小林 2014年9月1日星期一

2 常用的网页设计软件

标记或脚本语言虽然语法规则简单,但由于标记符号抽象,掌握起来仍有一定困难。利用一些网页设计工具软件,可做到可视化设计。

( 1 ) Frontpage 是微软公司 Office 软件的一个组件,可直接所见即所得设计网页。自动生成全部脚本及相关文档。

Page 61: 教师:郭小林 2014年9月1日星期一

( 2 )网页制作三剑客 Macromedia 公司开发的网页制作工具

Dreamweaver 、 Flash 和 Fireworks ,虽然工种不同,却是相辅相成。如若熟练掌握了它们,再加上你自己独特的设计思路,可以说没有做不出来的网页。

1) Dreamweaver 用于生成功能齐全的网站。2) Flash 用于制作动态及交互网站。它集声音、图像和动态效果于一身,生成一种后缀名为 swf 的文件,因压缩率极高故产生的文件很小,并支持边下载边浏览,所以特别适合制作多媒体交互网站。

Page 62: 教师:郭小林 2014年9月1日星期一

3) Fireworks 是一款功能强大的 web 图像创作工具,不需借助任何外挂软件就能制作矢量图形和位图,并独立完成所有设计过程,它的主要特点: 比较专业的矢量图形制作工具,支持矢量图形切换至位图编辑状态,可以在对象模式与图像模式之间相互转换,提供了更大的制作空间。 支持很多 Photoshop 的位图编辑方式,如渐变、阴影、外发光、纹理等等效果,还内建了很多已经做好比较成熟的风格和特效。它同样支持 Photoshop 的各种插件,使它的发挥空间更为广阔。

Fireworks 与 Dreamweaver 属于无缝集成,可以边做网页边修改图形,使得所有工作在一个平台上完成。

Page 63: 教师:郭小林 2014年9月1日星期一

3. 网格计算

网格计算( Grid Computing )可以说是因特网发展的一个产物。它把分布式计算( Distributed Computing )思想发展到因特网上,把分布在因特网上的成千上万台计算机(包括微机)都当成结点,由结点组成网格,各个结点分担一定的计算任务,形成一个虚拟超级计算机。

Page 64: 教师:郭小林 2014年9月1日星期一

5.2.4 网页设计

1. 使用 FrontPage 2000创建网页 (1)创建网站 (2) 利用向导建立个人站点 (3) 不使用向导建立网页

Page 65: 教师:郭小林 2014年9月1日星期一
Page 66: 教师:郭小林 2014年9月1日星期一

2. 发布网页

(1) 使用 PWS 服务器发布网页 (2) 使用 WIN 2000 Server

Page 67: 教师:郭小林 2014年9月1日星期一

5.1.1 软件工程基本观念1. 软件危机的主要表现软件危机是指在计算机软件的开发和维护过程中所遇

到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。

概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足软件日益增长的需求;如何维护数量不断膨胀的已有软件。具体地说,软件危机主要有以下一些典型表现。

3 软件工程及软件开发管理

Page 68: 教师:郭小林 2014年9月1日星期一

(1)对软件开发成本和进度的估计常常很不准确。实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并不罕见。这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。(2)用户对“已完成的”软件系统不满意的现象经常发生。软件开发人员常常在对用户要求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序。软件开发人员和用户之间的信息交流往往很不充分,“闭门造车”必然导致最终的产品不符合用户的实际需要。

Page 69: 教师:郭小林 2014年9月1日星期一

(3) 软件产品的质量往往靠不住。软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术 (审查、复审和测试 ) 还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题。(4) 软件常常是不可维护的。很多程序中的错误是非常难改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。“可重用的软件”还是一个没有完全做到的、正在努力追求的目标,人们仍然在重复开发类似的或基本类似的软件。

Page 70: 教师:郭小林 2014年9月1日星期一

(5) 软件通常没有适当的文档资料。计算机软件不仅仅是程序,还应该有一整套文档资料。这些文档资料应该是在软件开发过程中产生出来的,而且应该是“最新式的” (即和程序代码完全一致的 ) 。软件开发组织的管理人员可以使用这些文档资料作为“里程碑”,来管理和评价软件开发工程的进展状况;软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是必不可少的。缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。

Page 71: 教师:郭小林 2014年9月1日星期一

(6) 软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子学技术的进步和生产自动化程度不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续上升。美国在 1985年软件成本大约已占计算机系统总成本的 90% 。(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

Page 72: 教师:郭小林 2014年9月1日星期一

在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,即客观原因;另一方面也和软件开发与维护的方法不正确有关,即主观原因。

2. 产生软件危机的原因

Page 73: 教师:郭小林 2014年9月1日星期一

软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。由于软件缺乏“可见性”(是其显著特点之一),在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件的质量也较难评价,因此,管理和控制软件开发过程相当困难。此外,软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现了错误 ,很可能是遇到了一个在开发时期引入的在测试阶段没能检测出来的错误。因此,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。

( 1 )客观原因

Page 74: 教师:郭小林 2014年9月1日星期一

软件不同于一般程序,它的另外一个特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,然而,如何保证每个人完成的工作合在一起确实能构成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,诸如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。

Page 75: 教师:郭小林 2014年9月1日星期一

软件本身独有的特点确实给开发和维护带来一些客观困难,但是人们在开发和使用计算机系统的长期实践中,也确实积累和总结出了许多成功的经验。如果坚持不懈地使用经过实践考验证明是正确的方法,许多困难是完全可以克服的,过去也确实有一些成功的范例。但是,目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。

( 2 )主观原因

Page 76: 教师:郭小林 2014年9月1日星期一

3. 软件工程的目标与常用模型

软件工程的目标是提高软件的质量与生产效率,最终实现软件的工业化生产。

(1) 软件工程的主要环节

Page 77: 教师:郭小林 2014年9月1日星期一

(2)常见的软件工程模型

Page 78: 教师:郭小林 2014年9月1日星期一

图 1 传统的瀑布模型

1 )传统的瀑布模型

Page 79: 教师:郭小林 2014年9月1日星期一

图 2 实际的瀑布模型

Page 80: 教师:郭小林 2014年9月1日星期一

图 3 快速原型模型

2 )快速原型模型

Page 81: 教师:郭小林 2014年9月1日星期一

图 4 增量模型

3 )增量模型

Page 82: 教师:郭小林 2014年9月1日星期一

图 5 风险更大的增量模型

Page 83: 教师:郭小林 2014年9月1日星期一

图 6 简化的螺旋模型

4 )螺旋模型

Page 84: 教师:郭小林 2014年9月1日星期一

图 7 完整的螺旋模型

Page 85: 教师:郭小林 2014年9月1日星期一

4. 软件开发的基本策略

( 1 )复用 :就是指“利用现成的东西”,内涵包括了提高质量和生产率。

( 2 )分解化简:把一个复杂的问题分解成若干个简单的问题,然后逐个解决。

( 3 )折衷:软件的优化包括各个部分,要是软件整体优化,必须有一定的取舍。

Page 86: 教师:郭小林 2014年9月1日星期一

5.3.2 软件计划及实施 1. 软件计划包含内容 软件计划包含内容包括:工作范围、资源、成

本计算和进度安排。 (1) 范围 (2) 资源 (3) 成本估算 (4) 进度安排

Page 87: 教师:郭小林 2014年9月1日星期一

2. 软件开发组织机构及成员 3. 软件开发工具和开发环境 4. 建立软件质量保证体系 5. 软件质量度量 6. 软件维护

Page 88: 教师:郭小林 2014年9月1日星期一

5.3.3 软件产权保护

为了保护软件生产者的合法权益,对商品软件应及时进行注册、认证。我国有专门的结构从事这方面服务工作,具体情况可参考“北京市软件企业认定和软件产品登记工作有关事项的通知”,北京软件行业协会网站主页,网址:http://www.bsia-srrd.org 。

Page 89: 教师:郭小林 2014年9月1日星期一

软件开发工具 1. 软件工具的范围 包括操作系统、编译程序、解释程序和汇

编程序等成熟的传统工具,又包括支持需求分析、设计、编码、测试、维护等软件生存周期各阶段的开发工具和管理工具。

2. 软件工具提高了工作效率 3. 软件工具的特点 使用户易于操作,功能强大,覆盖面大,

可靠性高,其本身可修改、可扩充等。

Page 90: 教师:郭小林 2014年9月1日星期一

CASE 技术 计算机辅助软件工程技术可以简单地定义为软件开发的自动化,

通常简称为 CASE ( Computer Aided Software Engineering )技术。

1.CASE 工具 CASE 技术的核心是软件工具发展的必然结果。 CASE 工具主要供专业的软件开发人员、而不是终端用户使

用。 2. 软件自动化 CASE 着眼于软件分析和设计以及程序实现和维护的自动化,

从软件生存期的两端解决了软件生产率的问题。 3.CASE 的作用 ① 一个具有快速响应、专用资源和早期查错功能的交互式开发

环境。 ② 对软件的开发和维护过程中的许多环节实现了自动化。 ③ 通过一个强有力的图形接口,实现了直观的程序设计。

Page 91: 教师:郭小林 2014年9月1日星期一

CASE 工具实例1 ) PowerDesigne PowerDesigner 是 Sybase公司的 CASE 工具集,

使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。

利用 PowerDesigner 可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设计模型进行控制。

它可与许多流行的数据库设计软件,例如: PowerBuilder , Delphi , VB 等相配合使用来缩短开发时间和使系统设计更优化。

Page 92: 教师:郭小林 2014年9月1日星期一

2 ) Rational Rose Rational Rose 是一个完全的,具有能满足所有建模

环境( Web 开发,数据建模, Visual Studio 和 C++ )需求能力和灵活性的一套解决方案,而且可以自动生成和维护 C++ 、 Java 、 VB 和 Oracle 等语言和系统的代码 。

Rational Rose 允许开发人员,项目经理,系统工程师和分析人员在软件开发周期内在将需求和系统的体系架构转换成代码,消除浪费的消耗,对需求和系统的体系架构进行可视化,理解和精练。通过在软件开发周期内使用同一种建模工具可以确保更快更好的创建满足客户需求的可扩展的、灵活的并且可靠的应用系统。

Page 93: 教师:郭小林 2014年9月1日星期一

小结

数据结构 + 算法 = 程序。算法是计算机算法,它与数学算法有一定区别。

计算机算法可用流程图、 PAD 图等方法描述, 具有完整功能程序的集合及其相应文档称为软

件。采用软件工程的办法是目前专业软件生产的主要工作方式。

软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。

Page 94: 教师:郭小林 2014年9月1日星期一

参考文献

[1] 刘萍编 . 数值计算方法 .北京:人民邮电出版社, 2002.2

[2] 谭浩强著 .C 程序设计(第二版) . 北京:清华大学出版社, 1999.12

[3] 刘甲耀 严桂兰编著 .PAD 编程方法与 C 语言程序设计 . 北京:电子工业出版社, 1999.7

[4] 软件工程学习园地 . http://202.109.98.159/se/Title.htm

Page 95: 教师:郭小林 2014年9月1日星期一

结束