计算机英语翻译.docx
《计算机英语翻译.docx》由会员分享,可在线阅读,更多相关《计算机英语翻译.docx(34页珍藏版)》请在冰豆网上搜索。
计算机英语翻译
第三单元:
计算机语言与编程
课文A:
编程语言
一、引言
在计算机科学中,编程语言是用于编写可由计算机运行的一系列指令(计算机程序)的人工语言。
与英语等自然语言相类似,编程语言有词汇、语法和句法。
然而,自然语言不适合为计算机编程,因为它们会引起歧义,也就是说它们的词汇和语法结构可能被用多种方式进行解释。
用于计算机编程的语言必须有简单的逻辑结构,它们的语法、拼写和标点符号规则必须精确
编程语言在复杂性和通用程度上差异很大。
一些编程语言是为了处理特定类型的计算问题或为了用于特定型号的计算机系统而编写的。
例如,FORTRAN和COBOL等编程语言是为解决某些普遍的编程问题类型而编写的——FORTRAN是为了科学领域的应用,而COBOL是为了商业领域的应用。
尽管这些语言旨在处理特定类型的计算机问题,但它们具有很高的可移植性,也就是说它们可以用来为多种类型的计算机编程。
其他的语言,如机器语言,是为一种特定型号的计算机系统,甚至是一台特定的计算机,在某些研究领域使用而编写的。
最常用的编程语言具有很高的可移植性,可以用于有效地解决不同类型的计算问题像C、PASCAL和BASIC这样的语言就属于这一范畴。
二、语言类型
编程语言可分为低级语言和高级语言。
低级编程语言或机器语言,是编程语言中最基础的类型,可以被计算机直接理解。
机器语言视计算机制造商与型号不同而有所区别。
高级语言是必须首先翻译成机器语言计算机才能理解和处理的编程语言。
C、C++、PASCAL和FORTRAN都是高级语言的例子。
汇编语言是中级语言,非常接近于机器语言,没有其他高级语言所表现出的语言复杂程度,但仍然得翻译成机器语言。
1、机器语言
在机器语言中,指令被写成计算机能够直接理解的1和0(称作位)序列。
一条机器语言指令一般告诉计算机4件事:
(1)到计算机主存(随机存储器)的什么位置去找一两个数字或简单的数据片;
(2)要执行的简单操作,如将两个数字相加;(3)在主存的什么位置存放该简单操作的结果;(4)到什么位置去找下一条要执行的指令。
尽管所有的可执行程序最终都是以机器语言的形式被计算机读入的,但它们并非都是用机器语言编写的。
直接用机器语言编程极端困难,因为指令是0和1的序列。
一条典型的机器语言指令可能写成1001011001011,意思是把存储寄存器A的内容加到存储寄存器B的内容中。
2、高级语言
高级语言是相对复杂的一系列语句,它们使用来自人类语言的词汇和句法。
高级语言比汇编语言或机器语言类似于正常的人类语言,因此用高级语言来编写复杂的程序比较容易。
这些编程语言可以更快地开发更大和更复杂的程序。
然而,高级语言必须由称为编译器的另外一种程序翻译成机器语言,计算机才能理解它们。
因为这个原因,与用汇编语言编写的程序相比较,用高级语言编写的程序可能运行时间长,占用内存多。
3、汇编语言
计算机程序员通过使用汇编语言,使机器语言程序比较容易编写。
在汇编语言中,每个语句大致对应于一条机器语言指令。
汇编语言的语句是借助易于记忆的命令编写的。
在一个典型的汇编语言语句中,把存储寄存器A的内容加到存储寄存器B的内容中这一命令,可能写成ADDB,A。
汇编语言与机器语言具有某些共同的特征。
例如,对特定的位进行操控,用汇编语言和机器语言都是可行的。
当尽量减少程序的运行时间很重要时,程序员就使用汇编语言,因为从汇编语言到机器语言的翻译相对简单。
汇编语言也用于计算机的某个部分必须被直接控制的情况,如监视器上的单个点或者单个字符向打印机的流动。
三、高级语言的分类
高级语言通常分为面向过程语言、函数式语言、面向对象语言或逻辑语言。
当今最常见的高级语言是面向过程语言。
在这种语言中,执行某个完整功能的一个或多个相关的语句块组成一个程序模块或过程,而且被给予诸如“过程A”一类名称。
如果在程序的其他地方需要同样的操作序列,可以使用一个简单的语句调回这个过程。
实质上,一个过程就是一个小型程序。
一个大型程序可以通过将执行不同任务的过程组合在一起而构成。
过程语言使程序变得比较短,而且比较容易被计算机读取,但要求程序员将每个过程都设计得足够通用,能用于不同的情况。
函数式语言像对待数学函数一样对待过程,并允许像处理程序中的任何其他数据一样处理它们。
这就使程序构造在更高、更严密的水平上得以实现。
函数式语言也允许变量——在程序运行过程中可以被用户指定和更改的数据符号——只被赋值一次。
这样,通过减少对语句执行的确切顺序给予关注的必要性,就简化了编程,因为一个变量没有必要每次在一个程序语句中用到,都重新声明或重新说明。
来自函数式语言的许多思想已经成为许多现代过程语言的关键部分。
面向对象语言是函数式语言的发展结果。
在面向对象语言中,用来编写程序的代码和由程序处理的数据,组合成叫做对象的单元。
对象进一步组合成类,而类则定义对象必须具有的属性。
类的一个简单例子就是书这个类。
这个类中的对象可能是小说和短篇小说。
对象还有某些与其相关的功能,称为方法。
计算机通过使用一个对象的某种方法来访问该对象。
方法对对象中的数据执行某种操作,然后将值返回给计算机。
对象的类也可进一步组合成层,而在层中一个类的对象可继承另一个类的方法。
面向对象语言提供的这种结构,使该语言对于复杂的编程任务非常有用。
逻辑语言将逻辑用作其数学基础。
逻辑程序由事实组和“如果―则”规则构成,“如果―则”规则具体说明一组事实如何可以从其他事实组中推断出来,例如:
如果X语句为真,则Y语句为假。
在这样一个程序的执行过程中,一条输入语句可以按照逻辑从程序中的其他语句推断出来。
许多人工智能程序使用这种语言编写。
四、语言结构与成分
编程语言使用特定类型的语句或指令,来给程序提供功能结构。
程序中的一个语句是表达一个简单想法的基本句子——它的目的是给计算机一条基本指令。
语句定义所允许的数据类型、数据如何处理以及过程和函数的工作方式。
程序员使用语句来操控编程语言的常见成分,如变量和宏(程序中的小程序段)。
数据声明语句给称为变量的那些程序元素以名称和属性。
变量在程序中可以赋予不同的值。
变量可以具有的属性称为类型,它们包括:
变量中能保存哪些可能的值;这些值中使用何种程度的数值精度;以及一个变量可以如何以有组织结构的方式——如以表或数组的形式——表示一组比较简单的值。
在许多编程语言中,一个关键的数据类型是指针。
指针变量本
身没有值,而是含有计算机可以用来查找某个其他变量的信息——也就是说,它们指向另一个变量。
表达式是语句的一段,用于描述要对一些程序变量执行的一系列计算操作,如X+Y/Z,其中X、Y和Z为变量,加法和除法是计算操作。
赋值语句给一个变量赋予得自某个表达式的值,而条件语句则指定要被测试、然后用于选择接下来应该执行的其他语句的表达式。
过程和函数语句将某些代码块定义为以后可在程序中回调的过程或函数。
这些语句也定义程序员可选的变量和参数种类,以及当表达式访问过程或函数时代码所返回的值的类型。
许多编程语言也容许叫做宏的小翻译程序。
宏将那些用程序员定义的语言结构编写的代码段翻译成编程语言可以理解的语句。
五、历史
编程语言几乎可以追溯到20世纪40年代数字计算机发明之时。
随着商用计算机的推出,最早的汇编语言出现于20世纪50年代末。
最早的过程语言是在20世纪50年代末到60年代初开发的:
约翰.巴克斯创造了FORTRAN语言,接着格雷斯.霍珀创造了COBOL语言。
第一种函数式语言是LISP,由约翰.麦卡锡于20世纪50年代末编写。
所有这3种语言今天仍在广泛使用,但经历过大量更新。
20世纪60年代末,出现了最早的面向对象语言,如SIMULA语言。
逻辑语言在20世纪70年代中期随着PROLOG语言的推出而变得广为人知,PROLOG语言是一种用于编写人工智能软件的语言。
在20世纪70年代,过程语言继续发展,出现了ALGOL、BASIC、ASCAL、C和Ada等语言。
SMALLTALK语言是一种具有高度影响力的面向对象语言,它导致了面向对象语言与过程语言在C++和更近期的JAVA语言中的结合。
尽管纯粹逻辑语言的流行程度已经下降,但其以关系语言形式用于现代数据库的变种却变得非常重要,如结构化查询语言。
第四单元:
软件开发
课文A:
计算机程序
一、引言
计算机程序是指挥计算机执行某种处理功能或功能组合的一套指令。
要使指令得到执行,计算机必须执行程序,也就是说,计算机要读取程序,然后按准确的顺序实施程序中编码的步骤,直至程序结束。
一个程序可多次执行,而且,取决于用户提供给计算机的选项和数据,每次执行可能产生不同的结果。
程序分为两大类:
应用程序和操作系统。
应用程序直接为用户执行某种功能,如处理文字或玩游戏。
操作系统管理计算机以及与之相连的各种资源和设备,如随机存储器、硬盘驱动器、监视器、键盘、打印机和调制解调器,以便其他程序可以使用它们。
操作系统的例子包括:
DOS、Windows95、OS/2和UNIX。
二、程序开发
软件设计者使用经常被称为实用程序或开发程序的专门应用程序来创建新程序。
程序员使用称为文本编辑程序的另一种程序,来以称为编程语言的特殊符号编写新程序。
程序员使用文本编辑程序创建一个文本文件,这个文本文件是一个有序指令表,也称为程序源文件。
构成程序源文件的单个指令称为源代码。
在这个时候,一种专门的应用程序将源代码翻译成机器语言或目标代码——操作系统将认作真程序并能够执行的一种格式。
将源代码翻译成目标代码的应用程序有3种:
编译程序、解释程序和汇编程序。
这3种应用程序有不同的操作方式,对不同类型的编程语言进行操作,但是,它们都要达到将编程语言翻译成机器语言的相同目的。
编译程序将使用FORTRAN、C和Pascal等高级编程语言编写的文本文件一次性从源代码翻译成目标代码。
这不同于BASIC等解释执行的语言所采取的方式。
在解释执行的语言中,程序是随着每条指令的执行而逐个语句地翻译成目标代码的。
解释执行的语言的优点是,它们可以立即开始执行程序,而不需要等到所有的源代码都得到编译。
对程序的更改也可以相当快地进行,无需等到程序重新编译完。
解释执行的语言的缺点是,它们执行起来慢,因为每次运行程序,都必须对整个程序一次一条指令地翻译。
另一方面,编译执行的语言只编译一次,因此计算机执行起来可比解释执行的语言快得多。
由于这个原因,编译执行的语言比解释执行的语言常用,而且,在专业和科学领域几乎总是应用编译执行的语言。
另一种翻译程序是汇编程序,它用于以汇编语言编写的程序或程序组成部分。
汇编语言也是一种编程语言,但它远比其他类型的高级语言类似于机器语言。
在汇编语言中,一个语句通常可以翻译成机器语言的一条指令。
今天,汇编语言很少用来编写整个程序,而是最常用于程序员需要直接控制计算机某方面功能的情况下。
程序经常编写为一组较小的程序片,每片表示整个应用程序的某个方面。
每片独立编译之后,一种称为连接程序的程序将所有翻译好的程序片组合成一个可执行程序。
程序罕有第一次能够正确运行的,所以一种称为调试程序的程序常被用来帮助查找称为程序错误的问题。
调试程序通常在运行的程序中检测到一个事件,并将程序员指引到该事件在程序代码中的起源。
Java等最近出现的编程系统,采取多种方法相结合的方式创建和执行程序。
编译程序取来Java源程序,并将其翻译成中间形式。
这样的中间程序随后通过因特网传送给计算机,而计算机里的解释程序接着将中间形式作为应用程序来执行。
三、程序元素
多数程序仅由少数几种步骤构成,这些步骤在整个程序中在不同的上下文和以不同的组合方式多次重复。
最常见的步骤执行某种计算,然后按程序员指定的顺序,进入程序的下一个步骤。
程序经常需要多次重复不长的一系列步骤,例如:
在浏览游戏得分表并从中找出最高得分时。
这种重复的代码序列称为循环。
计算机具有的使其如此有用的能力之一,是它们能够作出条件判定,并根据正在处理的数据的值执行不同的指令。
if-then-else(如果-则-否则)语句执行这种功能,采用的方法是测试某个数据片,然后根据结果从两个指令序列中选择一个。
这些选择对象中的指令之一可能是一个goto语句,用以指引计算机从程序的另一个部分选择下一条指令。
例如,一个程序可能比较两个数,并视比较结果而分支到程序的另一个部分:
Ifxisgreaterthany
then
gotoinstruction#10
elsecontinue
程序经常不止一次地使用特定的一系列步骤。
这样的一系列步骤可以组合成一个子例程,而子例程根据需要可在主程序的不同部分进行调用或访问。
每次调用一个子例程,计算机都会记住该调用发生时自己在程序中所处的位置,以便在运行完这个子例程后还能够回到那里。
在每次调用之前,程序可以指定子例程使用不同的数据,从而允许一个通用性很强的代码片只编写一次,但以多种方式使用。
大多数程序使用几种不同的子例程。
其中最常用的是函数、过程、库、系统例程以及设备驱动程序。
函数是一种短的子例程,用来计算某个值,如角的计算,而该值计算机仅用一条基本指令无法计算。
过程执行的是比较复杂的功能,如给一组名字排序。
库是为多种不同程序使用而编写的子例程。
系统例程类似于库程序,但实际上用于操作系统。
它们为应用程序提供某种服务,如打印一行文字。
设备驱动程序是一种系统例程,它们加到操作系统中,以使计算机能够与扫描仪、调制解调器或打印机等新设备通信。
设备驱动程序常常具有可以作为应用程序直接执行的特征。
这使用户得以直接控制设备。
这一点很有用,例如:
在彩色打印机更换墨盒后需要重新调整以达到最佳打印质量的情况下。
四、程序功能
现代计算机通常将程序存储在计算机可以随机访问的某种形式的磁性存储介质上,如固定放在计算机内的硬盘或者便携式软盘。
这些磁盘上称为目录的额外信息,指明盘上各种程序的名称、它们写入盘中的时间以及它们在磁盘介质上的起始位置。
用户命令计算机执行一个特定应用程序时,操作系统就浏览这些目录,找到程序,并将一个副本读入随机存储器。
操作系统然后命令中央处理器开始执行程序开头的指令。
程序开头的指令为计算机处理信息作好准备,其方法是在随机存储器中找到空闲存储单元来容纳工作数据,从盘中检索用户指出的标准选项和默认值的副本,并在监视器上绘制初始显示。
应用程序通过调用系统例程来对用户输入的任何信息都要求一个副本。
操作系统将如此输入的任何数据都转换成标准的内部形式。
应用程序然后使用该信息决定下一步干什么,如执行某项期望的处理功能——像重新格式化一页文本或从盘上的另一个文件获取一些额外信息。
两种情况无论是哪一种,都要调用其他系统例程,以事实上完成结果的显示或对盘上文件的访问。
运行结束或接到退出的提示时,应用程序进行进一步的系统调用,以确保所有需要保存的数据已写回磁盘。
然后,应用程序向操作系统进行最后一次系统调用,指明它已运行结束。
操作系统接下来释放随机存储器和该应用程序使用的任何设备,并等待用户的命令,以开始运行另一个程序。
五、历史
人们以程序的形式存储指令序列已经有几个世纪了。
18世纪的音乐盒和19世纪末与20世纪初的自动钢琴,就可以播放音乐程序。
这些程序以一系列金属针或纸孔的形式存储,每一行(针或孔)表示何时演奏一个音符,而针或孔则表明此时演奏什么音符。
19世纪初,随着法国发明家约瑟夫―玛丽·雅卡尔发明由穿孔卡片控制的织机,对物理设备更精巧的控制变得常见了。
在编织特定图案的过程中,织机的各个部分得进行机械定位。
为了使这个过程自动化,雅卡尔使用一张纸质卡片代表织机的一个定位,用卡片上的孔来指示应该执行织机的哪种操作。
整条花毯的编织可编码到一叠这样的卡片上,同样的一叠卡片每次使用都会编出相同的花毯图案。
在开发和使用的程序中,有的由24,000多张卡片构成。
世界上第一台可编程的机器是由英国数学家和发明家查尔斯.巴比奇设计的,但他从未完全制造成该机器。
这台叫做分析机的机器,使用和雅卡尔织机类似的穿孔卡片,来选择每个步骤应该执行的具体算术运算。
插入不同的卡片组,就会改变机器执行的运算。
这种机器几乎能在现代计算机中找到所有的对应物,但它是机械化的,而非电气化的。
分析机的制造从未完成,因为制造它所需要的技术当时不存在。
供分析机使用的最早卡片组式程序是由诗人拜伦勋爵的女儿、英国数学家奥古斯塔.埃达.拜伦开发的。
由于这个原因,她被公认为世界上第一位程序员。
现代的内部存储计算机程序概念是由美籍匈牙利数学家约翰.冯.诺伊曼于1945年首先提出来的。
冯.诺伊曼的想法是,使用计算机的存储器既存储数据又存储程序。
这样,程序可被视为数据,可像数据一样被其他程序处理。
这一想法极大地简化了在计算机中存储与执行程序的任务。
六、未来
由于计算机使用的增加,自20世纪50年代以来,计算机科学领域发展迅猛。
作为对用户需求和技术进步的反应,计算机程序在这一时期经历了许多变化。
计算领域的新思想,如并行计算、分布式计算和人工智能,从根本上改变了一度决定程序形式与功能的传统概念。
致力于并行计算领域研究的计算机科学家们,推出了许多新的程序模型。
在并行计算中,多个中央处理器同时合作处理同一个问题。
一个问题的组成部分由不同的处理器同时处理,这样就加快了问题的解决速度。
由于并行处理计算机的极端复杂性,以及使其尽可能有效地运行所包含的困难,为这种系统设计程序的科学家和工程师面临着许多挑战。
一种称为分布式计算的并行计算,使用多个互连计算机的中央处理器来解决问题。
用来在分布式计算应用环境下处理信息的计算机,常常通过因特网连接。
因特网的应用正在成为分布式计算的一种特别有用的形式,尤其是在使用Java等编程语言的情况下。
在这种应用中,用户登录到一个站点,并下载一个Java程序到其计算机上。
该Java程序运行时,就会与其所来自的站点上的其他程序通信,也可以与不同计算机或站点上运行的其他程序通信。
人工智能研究已经带来其他几种新的编程风格。
例如,逻辑程序不是由供计算机盲目执行的单个指令构成,而是由成套的规则组成:
如果x发生,则执行y。
一种称为推理机的特殊程序,在向其提出一个新问题时,就使用这些规则来“推理”出一个结论。
逻辑程序的用途包括自动监控复杂系统和证明数学定理。
一种全然不同的计算方法称为神经网络,在这种计算中没有传统意义上的程序。
神经网络是一组高度互连的简单处理单元,旨在模拟大脑。
神经网络不是像传统计算机那样通过程序来指挥信息处理,而是依靠其处理单元的连接方式来处理信息。
给神经网络编程的实现方法是,给其提供输入与输出数据的已知模式,并调整处理单元之间各种互连的相对重要性,直到完成所期望的模式匹配。
神经网络通常在传统计算机上模拟,但是,不同于传统的计算机程序,神经网络具有经验学习的能力。
第五单元:
软件过程
课文A:
软件过程模型
一、引言
一个软件过程是生产出软件产品的一系列活动。
这些活动可能涉及使用一种像Java或C这样的标准编程语言从零开始开发软件。
然而,开发新软件越来越多地使用的方法是,扩展和修改现有系统,以及配置和集成现成软件或系统组件。
一个软件过程模型是对一个软件过程的一种抽象表示。
每个过程模型都从一个特定角度表示一个过程,因此都只提供有关那个过程的部分信息。
本文介绍几种非常通用的过程模型(有时称为过程范例),并从体系结构的角度描述它们。
也就是说,我们看到的是过程的框架,而非具体活动的细节。
这些类属模型不是对软件过程的规定性描述。
确切点说,它们是过程的抽象,可用于解释软件开发的不同方法。
你可以将其视为可扩展和调整以创建更为具体软件工程过程的过程框架。
这里论述的过程模型是瀑布模型、演化开发和基于组件的软件工程。
这3种类属过程模型在当前的软件工程实践中广泛使用。
它们不是互不相容,而是经常一起使用,尤其是在大型系统开发的情况下。
一个较大型系统内的子系统可使用不同的方法开发。
因此,尽管分别讨论这些模型比较方便,但应该明白,实际上它们经常结合使用。
二、瀑布模型
最早公布的软件开发过程模型源自比较通用的系统工程过程。
这种模型如图5A-1所示。
由于从一个阶段到另一个阶段的瀑布状级联,该模型称为瀑布模型或软件生命周期。
该模型的主要阶段映射基本的开发活动:
1、需求分析与定义。
系统的服务、约束和目标要经过与系统用户的磋商加以确定。
然后,它们得到详细定义并作为系统规格说明。
2、系统与软件设计。
系统设计过程将需求划分成需硬件或软件系统实现的部分。
该过程确立一个总的系统体系结构。
软件设计涉及到确定和描述基本的软件系统抽象及其相互关系。
3、实现与单元测试。
在这个阶段,软件设计被实现为一组程序或程序单元。
单元测试涉及到验证每个单元是否符合其规格说明。
4、集成与系统测试。
单个的程序单元或程序进行集成并作为一个完整系统进行测试,以确保软件需求已得到满足。
测试之后,软件系统交付客户。
5、运行与维护。
通常(但并非必定),这是软件生命周期最长的阶段。
系统经过安装投入实际使用。
维护涉及到纠正在软件生命周期前面阶段没有发现的错误,改进系统单元的实现,并随着新需求的发现增强系统的服务。
原则上,每个阶段的结果都要形成一份或多份经过批准的文件。
前一个阶段未结束,下一个阶段不应开始。
实际上,这些阶段重叠并互相馈送信息。
在设计期间,需求方面存在的问题得到识别;在编码期间,设计问题被发现,等等。
软件过程并非一个简单的线性模型,而是涉及到一系列迭代的开发活动。
由于编制和批准文件的成本,迭代需要大笔开销,而且需要做大量重复工作。
因此,经过少数迭代之后,通常应冻结开发的某些部分,如规格说明,并继续进行后面的开发阶段。
存在的问题留待以后解决,置之不顾,或者通过编程绕过去。
这样仓促冻结需求,可能意味(图5A-1:
软件生命周期)运行与维护、集成与系统测试、实现与单元测试、系统与软件设计、需求定义着系统将难以满足用户的要求。
由于使用实现技巧规避了设计问题,这也可能导致不良的系统结构。
在最后的生命周期阶段(运行与维护),软件投入使用。
最初软件需求中存在的错误与疏漏被发现,程序与设计错误浮现,而且新的功能需要得到确定。
因此,为保持有用性,系统必须演变。
进行有关更改(软件维护)可能涉及到重复以前的过程阶段。
瀑布模型的优点在于每个阶段都编制文件,而且它与其他的工程过程模型相符合。
其主要问题在于将项目僵硬地划分成不同的阶段。
在过程的一个早期阶段,必须定下决心,从而使得应对客户需求变化很困难。
因此,只有在需求得到很好理解、在系统开发期间不可能发生根本性变化的情况下,才应使用瀑布模型。
然而,瀑布模型体现了在其他工程项目中所使用的过程模型类型。
所以,基于这种方法的软件过程仍然用于软件开发,特别是当有关软件项目是一个较大系统工程项
目的一部分时。
三、演化开发
演化开发基于这样的思想:
开发一个初始的实现,让其接受用户评论,并让其经过多个版本的改进,一直到开发出能够满足需要的系统(图5A-2)。
规格说明、开发及验证活动不是分开进行,而是交叉进行,各项活动之间有快速的信息反馈。
演化开发有两个基本类型:
1、探索式开发。
在这种类型中,过程的目标是与客户协作探索其需求,并交付一个最终的系统。
开发从业已理解的系统部分开始。
随着增添客户提出的新特征,系统不中间版本、并行活动。
图5A-2:
演化开发、描述最终版本、初始版本、开发验证、规格说明、断演变。
2、抛弃式原型开发。
在这种类型中,演化开发过程的目标是理解客户的需求,从而为系统开发比较好的需求定义。
原型集中试验没有很好理解的客户需求。
在生产满足客户眼下需要的系统时,软件开发的演化方法常常比瀑布方法有效。
基于演化方法的软件过程的优点是,规格说明可以渐进地开发。
随着用户增进对其问题的理解,这种理解可以反映在软件系统中。
然而,从工程和管理的角度来看,演化方法存在两个问题:
1、过程缺乏可视性。
管理员需要定期交付的产品来衡量进度。
在快速开发系统的情况下,编制反映每个系统版本的文件不合算。
2、系统常常缺乏良好的结构。
不断的更改往往会破坏软件的结构。
吸收软件更改变得越来越困难,越来