Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机导论 主编:丁跃潮.

Similar presentations


Presentation on theme: "计算机导论 主编:丁跃潮."— Presentation transcript:

1 计算机导论 主编:丁跃潮

2 第4章 软件技术基础 学习目标 了解软件技术的发展历程 了解软件的应用分类 了解程序设计语言的分类和划 理解结构化程序设计的概念
第4章 软件技术基础 学习目标 了解软件技术的发展历程 了解软件的应用分类 了解程序设计语言的分类和划 理解结构化程序设计的概念 理解面向对象的程序设计概念 理解软件及软件工程的概念 了解软件工程基本原理和软件开发过程

3 4.1 软件技术的发展 计算机软件技术的发展也经历了程序设计、程序系统和软件工程三个时代。

4 4.1 软件技术的发展 程序设计时代( 年):程序设计时代属于计算机发展的早期阶段,那时多数人认为软件开发是无需预先规划的事情。

5 程序系统时代(1956~1968年):这个时期的计算机硬件的速度、容量以及运行可靠性都有了明显的提高,而价格却大幅度下降,这些因素促进了软件技术的进步。

6 软件工程时代(1968年至今):软件危机促使人们采用工程化的方法生产软件,并实施开发过程的管理,这就是软件工程。
这个时期的计算机硬件向着超高速、大容量、微型化以及网络化方向发展。软件产业在世界经济中起着举足轻重的作用。 人们重视软件开发方法的研究,重视软件开发过程的管理,强调团队开发和合作精神。

7 软件工程时代,软件的可读性和可维护性比软件的运行效率更重要。软件产品使用软件工程的方法开发,并应用诸如数据库、开发工具、开发环境、计算机网络、面向对象等计算机技术共同实现。软件技术进入了一个新的时代,并不断向前发展。

8 尽管如此,在计算机技术的发展过程中,始终存在着的有关软件的一系列问题,还将继续存在并深化。

9 4.2 软件的分类 软件是一种逻辑产品,不存在磨损消耗,是由工程化开发而形成的,不是传统意义上的制造产生的。
随着软件复杂性的增加,各类软件间的差别显得越来越模糊。因此从某种程度说,很难对软件给出一个通用的分类。

10 下面给出一些软件的应用领域,以此将软件分为若干类:
系统软件、实时软件、商业软件、工程和科学计算软件、嵌入式软件、个人计算机软件、人工智能软件

11 4.3 程序设计语言 人们在交谈时使用相互理解的人类语言,如汉语、英语、德语等,它们统称为自然语言。人与计算机“交谈”需要使用计算机语言,即程序设计语言。 程序设计语言规定了书写程序时可以使用的符号集合及其语法规则。人类通过程序指令计算机完成规定的任务。

12 4.3.1 程序设计语言的分类 程序设计语言非常多,总的来说可以按照对机器的依赖程度,将其分为机器语言、汇编语言和高级语言三大类。

13 机器语言 机器语言的程序由机器指令组成,所有的机器指令都由二进制0或1编码组成。
机器语言是计算机唯一可以直接识别并执行的语言,因此它的执行速度是最快的。

14 机器语言 由于机器语言每一条指令的功能都很微弱,所有的指令又均以0、1代码表示,因此用机器语言编写程序非常费力且枯燥、繁琐,程序不具有可读性,调试、修改都很困难。 机器语言程序的开发紧密依赖于具体的机器,程序几乎没有通用性。

15 机器语言程序示例 机 器 语 言 操 作 定 义 10 20 从内存单元20中取数值置于寄存器A 30 21
表4- 机器语言程序示例 机 器 语 言 操 作 定 义 10 20 从内存单元20中取数值置于寄存器A 30 21 寄存器A的数值加内存单元21的数值,和存于寄存器A 20 22 把寄存器A的数值存于内存单元22中 00 00 结束程序运行

16 汇编语言 汇编语言是机器语言的简记形式。它采用容易记忆的符号和标记表示机器语言的指令,使程序具备了一定的可读性,也变得较为容易调试和修改。
汇编语言和机器语言是一一对应的。也就是说,对于汇编语言的指令来说,在机器语言中都存在一条功能相同的机器指令。

17 汇编语言程序示例 汇 编 语 言 操 作 定 义 LOAD X 从内存单元X中取数值置于寄存器A ADD Y
操 作 定 义 LOAD X 从内存单元X中取数值置于寄存器A ADD Y 寄存器A的数值加内存单元Y的数值,和存于寄存器A STORE SUM 把寄存器A的数值存于内存单元SUM中 HALT 结束程序运行

18 高级语言 高级语言使用人们容易理解的符号和单词组成语句,语句间依照规定的语法规则构建程序。由于更接近于自然语言,所以高级语言程序的可读性很好,也容易调试和维护。 高级语言是独立于机器的程序设计语言,用它编写程序不需了解具体计算机的内部逻辑,它的每条语句都具有很强的功能,相当于多条机器语言或汇编语言的功能。

19 高级语言程序也不能被计算机直接识别,必须经过转换才能在机器上执行。
基本转换方法有三种,分别为编译、解释和混合方法。 高级语言程序可采用三种基本转换方法之中的任何一种实现在机器上的执行,由相应的语言实现系统提供编译器或者解释器具体完成转换。

20 程序设计语言的实现方法 混合方法 编译方法 解释方法

21 事实上,可将计算机系统简单地看成是由硬件、操作系统和应用程序组成的分层结构。
通常,计算机硬件实现低层次的机器语言,提供最普遍需要的基本操作。操作系统和语言实现系统分层放置于计算机的机器语言接口上。置于硬件之上的操作系统提供资源管理、输入/输出操作、文件管理、文字/程序编辑器和其他各种普遍需要的功能。置于操作系统之上的语言实现系统提供高层次语言的编程接口。

22 典型计算机系统的分层结构

23 4.3.2 程序设计语言的划代 历史上先后有几百种程序设计语言对软件开发做出过贡献,它们经历了由低到高、由简到繁的发展阶段,大致可划分为4代

24 程序设计语言的划代 4GL 面向对象语言 3GL 通用语言 专用语言 2GL 1GL 1960 1970 1980 1990 2000

25 高级语言族系 迄今为止,广泛使用的高级程序设计语言多达数几十种,且仍在不断地进化、演化、推陈出新。
1957年出现的FORTRAN是第一种为人们广泛接受的编译式高级程序设计语言。 1960年出现的ALGOL 60对后来的程序设计语言有着巨大的影响,是第一种独立于机器的高级语言,也是第一种其语法被形式化描述的语言。

26 高级语言族系 从出现直至之后的20多年时间,ALGOL 60一直是计算机界交流算法的唯一可以接受的形式方法。大部分语言事实上都是直接或间接的ALGOL 60 后代,包括有广泛影响的C语言和当前最主要的面向对象语言Java。它们是高级语言族系中的主流语言,代表着主流技术。

27 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 Ada ALGOL60 ALGOL68 Pascal Modula-2 CPL BCPL B C C++ Java LISP PROLOG COBOL FORTRAN77 FORTRAN PL/1 Simula 67 Smalltalk 80 BASIC ANSI-BASIC QBASIC VB FORTRAN90

28 4.4 结构化程序设计 C是结构化程序设计语言,它精巧灵活、功能齐全,既适合编写系统程序,又适合编写应用程序。历经多年,人们借助C语言所开发的各种软件,广泛应用于图形、通信、工程、网络、数据库、CAD/CAM以及字处理等许多方面。

29 4.4.1 结构化的概念 通常,程序中的语句是按照次序一条接一条地顺序执行,称之为顺序结构。
有时,需要改变顺序执行的流程,有选择地执行程序的不同部分,构造选择结构; 或者重复执行程序的某一部分,构造循环结构。

30 4.4.1 结构化的概念 顺序结构是绝大多数程序设计语言的基本框架。程序设计语言的各种语句在基本框架下组成程序或程序的集合。其中,选择语句用于实现选择结构,循环语句用于实现循环结构。 程序由顺序、选择和循环三种基本结构反复嵌套构成,称为结构化的程序。

31 结构化程序设计方法是软件发展史上最重要的里程碑之一。结构化程序呈“线性状”,可自顶向下地逐步细化开发,从头至尾地顺序阅读。所编写的程序易于测试和维护,易于验证程序正确性。结构化程序设计方法能有效提高程序设计的质量和效率。遵循结构化程序设计方法是良好的编程习惯。尽管C语言包含goto语句,但因其具备结构化控制流程,依然被认为是结构化的程序设计语言。

32 4.4.2 数据与变量 程序描述的是数据和基于数据的操作。
数据与变量 程序描述的是数据和基于数据的操作。 操作处理初始数据使数据发生变化,产生结果数据。因此,数据是程序的基础,是计算机程序输入、输出和加工处理的对象。 数据的变化过程体现了程序的执行过程。

33 数据与变量 以冯·若依曼计算机体系为基础,数据有多方面的表现,是数据在定义、存储、加工、传输等过程中所具有的属性,这些属性在程序设计语言中依靠相关的概念来描述并体现。

34 类型 —— 数据特征的抽象,数据的定义 地址、值 —— 数据的存储 运算符、表达式、函数 —— 数据的加工 生存期、作用域 —— 数据的存在 赋值、输入/输出 —— 数据的传输 在高级语言编程时,数据的逻辑结构和存储结构通过高级语言提供的数据类型来描述和实现。

35 C语言提供的基本数据类型 char 字符型 int 整型 float 单精度实型 double 双精度实型

36 C语言的数据类型

37 数据类型决定着数据的取值范围。例如:对于一名公司雇员的信息,姓名具有文字的特征,常用char型数组形成的字符串表示,年龄一般用int型表示,工资常用float型表示。
数据类型决定着可以对此类数据施行的运算集合。

38 C语言对变量实行先声明、后使用的原则 在声明中指定变量类型和变量名等属性。 如: int lower, upper, step; /* 声明int变量lower, upper, step */ char c, line[10]; /* 声明char变量c,char数组line[10] */

39 C语言允许在说明变量的同时,给变量赋初值
int a,b = 5; /* 定义int变量a、b,并为变量b赋初值5 */ char c = ’a’; /* 定义char变量c, 赋初值为‘a’ */ float f = f; /* 定义float型变量f, 赋初值为 f,特以'f'后缀指定为float常量 */

40 引用变量时可以通过变量的名字,也可以通过变量的地址。
变量的地址是与该变量相关联的存储地址。 变量的值即变量存储单元的内容。

41 简单的C程序例子,用于求两个整数的和 #include <stdio.h> void main() { int a,b,sum;
void main() { int a,b,sum; /*定义int型变a,b,sum*/ scanf(“%d,%d”,&a, &b); /*输入变量a和b的值*/ sum=a+b; /*将a加b的和赋给变量sum*/ printf(“sum is %d\n”,sum); /*按十进制整数格式输出变量sum的值*/ }

42 控制结构 if单向选择结构 if-else双向选择结构

43 for 语句的执行流程 while语句的执行流程

44 函数 函数是C程序的基本模块,为实现模块化的程序设计提供了途径。 模块化是程序设计中最基本和最常用的技术,体现了“分而治之”的思想。

45 函数 模块化的实质是将大而复杂的计算任务自顶向下、逐层分解成若干相对较小而简单的子任务,每个子任务具有相对独立的功能,直至容易编码实现的基本模块。每个基本模块结构化,由顺序、选择和循环结构反复嵌套组成。经过模块化可以使复杂问题简单化,从而得以解决。

46 C程序的层次结构示例

47 函数调用流程

48 4.4.5 指针与数组 指针和数组是C语言最重要的两种自定义数据类型。
指针与数组 指针和数组是C语言最重要的两种自定义数据类型。 指针在 C语言中的应用非常广泛,是C的特色之一。它有助于生成高效、紧凑的程序代码,能有效地表示复杂的数据结构。 数组是程序设计语言最常用、最有用的数据类型,通常是各种程序设计语言的基本组成部分。

49 对指针类型的变量的操作通常包括两种: 即赋值和间接引用
int j, *ptr; /* 声明ptr为指针类型变量,“*”用于定义指针类型 */ j = *ptr; /* 对ptr的间接引用,“*”为运算符 */

50 指针与引用变量

51 一个数组实质上涉及了两种不同的类型:元素类型和下标类型。下标类型通常为整数的子范围。如C语句char c[3];所定义的数组元素为字符型,下标为整型。在C语言中,下标范围的下界隐式绑定为0,

52 数组需要先定义,后使用。在C中定义数组,需指明数组名、数组类型和数组长度。 如
int a[5] = {1, 3, 5, 7, 9 }; /*定义整型数组a,包含5个数组元素,并赋初值*/   char c[10]; /*定义字符数组c,包含10个数组元素*/

53 数组a的示意图 1 3 5 7 9 a[0] a[1] a[2] a[3] a[4]

54 在C语言应用中,指针与数组之间的关系常常很密切。正确使用这些数据类型,可以方便地实现许多复杂的程序设计需求。

55 4.5 面向对象程序设计 面向对象的基本思想是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。
面向对象程序设计中最基本的概念是对象和类。 面向对象程序设计语言的基本特征是支持封装、继承和多态。 Java是面向对象的程序设计语言。也是学习面向对象程序设计的理想媒介。

56 Java Java是当前最成功的面向对象的程序设计语言,满足了编程界的各种要求,是实现交互式、多媒体网页制作的最重要的语言,完全符合在Internet上使用应用程序的方式,受到软件业和学术界的广泛关注。 Java应用的增长速度是空前的,超过了以往任何一种程序设计语言,从某种程度上印证了面向对象思想体系的科学性。

57 对 象 对象具有属性,用于表示对象的特征和状态。在机器世界中,通过数据值来描述。
对 象 对象具有属性,用于表示对象的特征和状态。在机器世界中,通过数据值来描述。 对象具有行为,展示了对象执行的动作。对象的行为使对象的状态发生改变。在机器世界中,通过操作来描述。

58 对 象 对象实现了数据和操作的结合,数据和操作封装于对象的统一体中。
对 象 对象实现了数据和操作的结合,数据和操作封装于对象的统一体中。 对象内的数据具有自己的操作,从而可以灵活地描述对象的独特行为,具有较强的独立性和自治性,不受或者很少受外界的影响,具有很好的模块化的特点,是实现软件复用的基础。

59 类 类是对具有相同属性或相似性质的对象的抽象。 类具有属性,是对象属性的抽象。 类具有操作,是对象操作的抽象。
类是对象的模板,对象是类的实例,通过类模板创建对象实例。

60 计算机实现的对象与现实世界具有一一对应的关系,这使得面向对象的技术更容易为人们理解和接受,也更容易掌握和应用。

61 实物、对象、类

62 客观世界中存在若干类,类之间存在一定的结构关系。
常见两种结构关系,分别是“一般-具体”结构关系和“整体-成员”结构关系。 在Java技术中,分别用继承和组合的概念表示这两种类结构关系。

63 Employee类和Manager类 Manager “is an”Employee, Manager与Employee之间是继承关系

64 Car类和Engine类 Car “has an”Engine Engine与Car之间是组合关系

65 在类的结构中,通常上层的类称为父类或超类,下层的类称为子类。子类可以继承父类的属性,同时还可加入自己的新属性。
上层的类有一般性、整体性,下层的类有具体性和成员性。越是上层的类,抽象程度越高;越是下层的类,细化程度越深。

66 面向对象程序设计的重要基础是抽象数据类型,对象和类都可以看成是抽象数据类型。在面向对象的程序设计中,类是构建程序的基本元素。
对象、类、继承、封装等面向对象概念,是对软件能力的两个重要概念“抽象”和“复用”的体现和实践。

67 类或对象的属性称作变量,类或对象的操作称作方法。
Java类和Java对象 现 实 世 界 机 器 世 界 Java 世 界 属性 数据 变量 行为 操作 方法 在Java世界中,类依然称作类。 类或对象的属性称作变量,类或对象的操作称作方法。

68 Shirt类 类的名称 1 public class Shirt 类代码块的开始边界 2 { 声明变量size并赋值为 'L' 3
char size = 'L'; 声明变量price并赋值79.9 4 float price = ; 声明方法printInfo( ) 5 public void printInfo() 方法代码块的开始边界 6 该方法完成的操作:打印数据 7 System.out.println("Price: " + price + '¥'); 8 System.out.println("Size: " + size); 方法代码块结束边界 9 } 类代码块结束边界 10

69 4.5.3 封装 封装是指所有的软件模块都有明确的内部范围和清楚的外部边界,每个软件模块都有依存外部边界的友好的外部接口。外部对软件模块的访问通过接口进行,软件模块的内部实现与外部可访问性相分离。

70 4.5.3 封装 封装使得内部实现私有、外部接口公有,有可能在不影响外部接口的情况下更改内部实现,防止了因程序代码相互依赖而引起的局部变动对全局的波及影响。

71 在面向对象的程序设计中,类是封装良好的模块,对象是封装的基本单位。
类与其他类交互的方式称为接口,类完成其任务的方式称为实现。 理想的面向对象的程序,以私有实现、公有接口的方式封装,类的大多数或全部变量都为私有的。

72 试图访问私有变量和私有方法失败

73 封装的示例程序

74 4.5.4 继承 虽然有的语言(如C++)允许同时继承多个超类,但Java只允许单继承,即任何类只能有唯一的父类,这更符合纯粹的面向对象的编程思想。

75 一个正确的继承关系 Dog、Cat和Bird继承Animal

76 4.6软件的开发 软件不仅仅是指程序,所谓软件的开发也就不仅仅是编程序了。 软件是程序以及开发、使用和维护程序所需的所有文档。

77 4.6软件的开发 软件的开发需要遵循软件工程的原理和应用软件工程的方法。
软件工程学是关于软件开发技术的学科,它研究的是如何应用科学理论和工程技术指导软件的开发,从而达到用较少的投资获得高质量软件的目标。

78 4.6.1 软件的生命周期 将软件的生存周期划分为若干阶段,可使软件的生产有相应的模式、相应的流程、相应的工序和步骤,有利于控制软件开发的进度,实施软件生产的管理。 软件生存周期是指一个软件从提出开发要求开始到该软件报废为止的整个时期。

79 软件生存周期 通常将软件生存周期划分为5个阶段,它们是要求定义、设计、编码、测试和维护。其中,要求定义阶段包括可行性研究、项目规划和需求分析,设计阶段又包括概要设计和详细设计。

80 软件可行性 软件可行性研究的目的是用最小的代价、在尽可能短的时间内,确定该软件项目是否能够开发,是否值得开发。
通常需要分析项目是否具备技术可行性、经济可行性和社会可行性。

81 需求分析阶段 需求分析阶段的任务是准确理解用户的要求,并书面形式化表达为软件需求说明书。可用一个词“What”来表述需求分析的目的就是解决软件要“做什么”的问题。 随着软件系统的规模和复杂度的提高,需求分析在软件开发中的地位越来越重要,也越来越困难。

82 设计阶段 设计阶段的任务是实现软件需求,并将设计的结果反映在设计说明书中。也可以用一个词“How”来表述设计的目的是解决“怎么做”软件的问题。 设计又分为概要设计和详细设计。

83 编码阶段 编码阶段,即程序开发阶段。它将详细设计的结果转化为基于某种计算机语言的程序。

84 测试阶段 软件测试的目的是为了发现程序的错误,而不是证明程序正确。 一个好的测试用例能够发现至今尚未发现的错误。
发现了至今尚未发现的错误的测试是一个成功的测试。 常用的测试方法是动态测试的黑盒法和白盒法。

85 软件开发进度 对于软件开发的进度安排,Brooks提出的经验法则是 1/3 计划 1/6 编码 1/4 构件测试和早期系统测试
1/3 计划 1/6 编码 1/4 构件测试和早期系统测试 1/4 系统测试,所有的构件已完成。

86 软件的维护阶段 软件开发完成、投入使用后,就进入软件的维护阶段。
维护不止要修改隐含的错误,还包括为适应新环境、增加新功能而对软件进行的变更。 维护是软件生存周期中时间最长的一个阶段,所花的精力和费用也最多,工作最为艰苦和枯燥,很难出成果,还会有副作用。 软件开发过程中,如何提高软件的可维护性,以降低软件维护的工作量和费用,是软件工程的重要任务之一。

87 软件体系结构 自20世纪90年代后期以来,软件体系结构的研究成为一个热点。广大软件工作者认识到软件体系结构的重大意义和它对软件系统设计开发的重要性,为此开展了很多研究和实践工作。

88 软件体系结构 目前,各界对软件体系结构的关注和重视程度正在日渐加深。这是由于现代软件系统的规模越来越大、也越来越复杂,对于大规模的复杂软件系统来说,总体的系统结构设计和规格说明相对于算法和数据结构的选择而言已经变得明显得更加重要。在这种背景下,绝大多数人认为对软件体系结构的系统、深入的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径。

89 软件体系结构 软件体系结构是所开发软件系统最早期的设计决策的体现,而这些早期决策对软件系统的后续开发、部署和维护具有相当重要的影响,也是能够对所开发系统进行分析的最早时间点。 软件体系结构是一种常见的系统级别的抽象。

90 软件体系结构是包括程序员在内的绝大多数的系统利益相关人员相互沟通的基础,籍之彼此理解、协商以达成共识。

91 不仅如此,软件体系结构还是可传递的系统级抽象,是关于系统构造以及系统各个元素工作机制的相对较小、却又能够突出反映问题的模型。
由于软件系统具有的一些共通特性,这种模型可以在多个系统之间传递,特别是可以应用到具有相似质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。

92 软件体系结构贯穿于软件研发的整个生命周期内,但从当前的现状来看,对软件体系结构的研究在很大程度上仍然停留在非形式化的基础上,未来的路还很长。

93 4.6.2 软件工程基本原理 软件设计中最重要的一个问题就是软件的质量问题,想要保证软件质量首要的是遵循软件设计的基本原理。软件设计的基本原理包含了一些很重要的概念,如模块化、抽象、信息隐蔽、软件复用等。

94 模 块 模块的概念最早见于程序设计技术中,可简单理解为包含数据说明、可执行语句等的程序分块。如,高级语言中的过程、函数或子程序等。
模 块 模块的概念最早见于程序设计技术中,可简单理解为包含数据说明、可执行语句等的程序分块。如,高级语言中的过程、函数或子程序等。 在软件的体系结构中,模块是可组合、分解和更换的单元,具有接口、功能、逻辑和状态等基本属性。。

95 模块化 模块化是指为解决一个复杂的问题,自顶向下逐层将软件系统划分为若干模块的过程。每个模块完成一个特定的功能,所有的模块按某种方式集成为一个有机整体,实现系统所要求的完整功能。 应用这种策略组织程序,程序具有良好的层次结构,有益于代码的设计和维护。 模块化是软件解决复杂问题的主要手段,也是软件复用的基础。越是大型的项目,模块化的必要性和优点就越显著。

96 抽 象 抽象是认识复杂现象过程中使用的思维方式,是提升共同特性、忽略细节的过程。抽象的概念广泛应用于计算机软件领域。
抽 象 抽象是认识复杂现象过程中使用的思维方式,是提升共同特性、忽略细节的过程。抽象的概念广泛应用于计算机软件领域。 软件开发过程中采用的自顶向下方法,就是一个由抽象到具体逐步分层构造软件系统的过程。从需求分析到概要设计再到详细设计,抽象的程度逐步降低,细化的程度逐步加深。

97 信息隐蔽 信息隐蔽,是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块而言是不可见的,使得模块具有相对独立性。这些独立的模块彼此间仅交换为实现程序功能所必需的信息,同时尽量隐藏自身的实现过程与数据。

98 信息隐蔽 信息隐蔽使得对于某个模块的数据更新、错误修改、算法改进等操作所带来的影响,只局限于该模块内部,不波及或者很少波及程序的其他模块,这将有益于程序的开发、测试及以后的维护。面向对象中封装的应用,其目的就是为了更好地实现信息隐蔽。在软件开发的过程中,能够实现信息隐蔽的层次要尽量应用信息隐蔽技术。

99 模块化、抽象和信息隐蔽等软件技术概念之间密切相关、相辅相承,共同形成软件设计的重要理念。

100 衡量模块独立性的标准是耦合性和内聚性。 耦合性也称块间联系,是模块之间相互依赖程度的度量。内聚也称块内联系,是一个模块内部各成分之间相互关联程度的度量。 高内聚、低耦合的模块,具有高度的模块独立性,为设计高质量的软件结构奠定了基础。

101 软件复用 软件复用是指利用已有的软件成果开发新的软件产品,是提高软件质量和软件生产率的重要途径。
在着手开发新的软件前,应先考虑已存在的哪些软件可复用。在开发新软件的过程中,应随时考虑所生产软件的可复用性。

102 4.6.3 软件开发工具与环境 在软件工程中,软件开发方法和软件开发工具是一个问题的两个方面。方法是研制工具的先导,工具是方法的实在体现。良好的软件开发工具才能充分发挥软件工程方法在软件开发中的作用。

103 4.6.3 软件开发工具与环境 1985年第八届国际软件工程会议定义,“软件开发环境是相关的一组软件开发工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成。”这些相关工具支持软件生存周期的各个阶段或部分阶段。

104 人们在不同场合习惯使用不同的名称 以下名称具有相同或相似的含义
中 文 缩 写 英 文 软件开发环境 SDE Software Development Environment 软件工程环境 SEE Software Engineering Environment 软件支持环境 SSE Software Support Environment 自动开发环境 ADE Automated Development Environment 项目支持环境 PSE Project Support Environment 集成化程序设计环境 IPE Integrated Programming Environment 工具盒 Toolbox 工具箱 Toolkit

105 软件工具 在软件工程的范围内,软件工具是指为实现软件生存周期中管理、开发和维护等各种活动的自动化或半自动化而开发的程序系统。软件工具是软件开发环境中最主要的组成部分,依靠软件工具可提高软件的开发效率、改善软件的质量、降低软件的成本。

106 软件工具 软件工具通常由工具、工具接口和工具用户接口3部分组成。工具通过工具接口与其它工具、操作系统、网络系统、以及通信接口和环境信息库接口等进行交互作用。用户通过工具的用户接口使用工具。当前的软件工具将沿着集成化、用户界面图形化和支持新理论、新技术的方向不断发展。

107 4.6.4 软件过程管理和能力成熟度模型 软件过程管理是对整个软件生存周期的一切活动进行管理。所有工程的成败都与工程管理的好坏有着密切的关系,软件工程也不例外。由于软件产品的独特性,软件过程的管理对保证软件产品的质量具有更为重大的意义。

108 软件过程管理是软件工程领域的一个新兴的研究课题,它涉及到系统工程学、管理学、逻辑学、统筹学及数学等许多学科。人们不仅对管理还缺乏经验和技术,同时也缺乏足够的重视。事实上,很少有软件项目的实施进程能够准确地符合预定目标、预定进度和预算,而由管理失误造成的后果远比程序错误造成的后果严重的多。这足以说明软件过程管理的重要性。

109 CMM 软件能力成熟度模型CMM(Capability Maturity Model)是一个流行的用于软件过程评估和改进的方法,由美国卡内基-梅隆大学的软件工程研究所给出,用来评估一个企业或组织的IT能力。 CMM分为5个级别,企业或组织达到的级别越高,表明它的软件过程成熟度越好。

110 CMM中的过程成熟度层次

111 小 结 软件技术基础是关于如何设计开发正确软件的基本知识。 随着软件复杂性的增加,各类软件间的差别显得越来越模糊。

112 小 结 程序设计语言非常多,按照对机器的依赖程度,将其分为机器语言、汇编语言和高级语言三大类。 程序设计语言的发展大致可划分为4代。

113 小 结 结构化程序设计的思想是:任何程序都只依靠顺序、选择和循环三种基本结构的组合实现。由这三种基本结构组成的程序称为结构化程序
小 结 结构化程序设计的思想是:任何程序都只依靠顺序、选择和循环三种基本结构的组合实现。由这三种基本结构组成的程序称为结构化程序 C是结构化程序设计语言,Java 是完全面向对象的程序设计语言,也是学习面向对象程序设计的理想媒介。

114 小 结 面向对象中两个最重要的概念是类和对象。 类是对具有相同或相似性质的对象的抽象。 类表示了通用特性,对象是类的实例。
小 结 面向对象中两个最重要的概念是类和对象。 类是对具有相同或相似性质的对象的抽象。 类表示了通用特性,对象是类的实例。 封装是指所有的软件模块都有明确的内部范围和清楚的外部边界,每个软件模块都有友好的外部接口。 封装实现了内部实现私有、外部接口公有。

115 小 结 软件的开发需要遵循软件工程原理和方法。 软件设计的基本原理包含了一些很重要的概念,如模块化、抽象、信息隐蔽、软件复用等。

116 小 结 模块化是软件解决复杂问题的主要手段,也是软件复用的基础。
小 结 模块化是软件解决复杂问题的主要手段,也是软件复用的基础。 信息隐蔽使模块内的实现细节和模块私有的数据隐藏在模块内部,局部的修改和变化可以不影响或很少影响全局。 模块独立性概念是模块化、抽象、信息隐蔽等软件工程基本原理的直接产物。

117 小 结 在软件工程中,软件开发方法和软件开发工具是一个问题的两个方面。方法是研制工具的先导,工具是方法的实在体现。良好的软件开发工具才能充分发挥软件工程方法在软件开发中的作用。


Download ppt "计算机导论 主编:丁跃潮."

Similar presentations


Ads by Google