《第6章软件工程》由会员分享,可在线阅读,更多相关《第6章软件工程(50页珍藏版)》请在金锄头文库上搜索。
1、第6章软件工程6.1 程序设计语言概述程序设计语言特性 1. 心理特性 程序设计语言经常要求程序员改变处理问题的方法,使这种处理方法适合于语言的语法规定。而程序是人设计的,人的因素在设计程序时是至关重要的。语言的心理特性指影响程序员心理的语言性能,许多这类特性是作为程序设计的结果而出现的,虽不能用定量的方法来度量,但可以认识到它在语言中的表现形式如下: (1) 歧义性: 指程序设计语言通常是无二义性的, 编译程序总是根据语法,按一种固定方法来解释语句的,但有些语法规则容易使人用不同的方式来解释语言, 这就产生了心理上的二义性。 如:X=X1/X2X3,编译系统只有一种解释, 但人们却有不同的理
2、解,有人理解为X=(X1/X2)X3,而另一个人可能理解为X=X1/(X2X3)。 又如 FORTRAN语言中变量的类型有显式定义和隐式定义两种,用REAL K显式说明K是实型变量, 但按隐含类型定义,K是整型变量。在程序较长时,不可能每次都查类型定义,容易产生错误。若程序语言具有这些使人心理上容易产生歧义性的特征,则易使编程出错,而且可读性也差。 (2) 简洁性:指人们必须记住的语言成分的数量。 人们要掌握一种语言,就要记住语句的种类、各种数据类型、各种运算符、 各种内部函数和内部过程,这些成分数量越多,简洁性越差,人们越难以掌握。但特别简洁也不好,有的语言(如APL)为了简洁,提供功能强但
3、形式简明的运算符,允许用最少的代码去实现很多的算术和逻辑运算。可是这样使程序难以理解,一致性差。所以既要简洁又要易读易理解。 (3) 局部性和顺序性:指人的记忆特性有两方面即联想方式和顺序方式。人的联想力使人能整体地记住和辨别某件事情, 如一下子就能识别一个人的面孔,而不是一部分一部分地看过之后才认得出;顺序记忆提供了回忆序列中下一个元素的手段,如唱歌,依次一句一句地唱出, 而不必思索。 人的记忆特性对使用语言的方式有很大的影响。局部性指语言的联想性,在编码过程中, 由语句组合成模块,由模块组装成系统结构,并在组装过程中实现模块的高内聚,低耦合, 使局部性得到加强,提供异常处理的语言特性,则消
4、弱了局部性。若在程序中多采用顺序序列, 则使人易理解,如果存在大量分支或循环, 则不利于人们的理解。 (4) 传统性:指人们习惯于已掌握的语种,而传统性容易影响人们学习新语种的积极性,若新语种的结构、形式与原来的类似,还容易接受,若风格根本不同,则难以接受,如习惯用Pascal或C的编程人员,用Lisp和Prolog编程, 就要用更多的时间来学习。 2. 工程特性 从软件工程的观点、程序设计语言的特性着重考虑软件开发项目的需要,因此对程序编码有如下要求: (1) 可移植性:指程序从一个计算机环境移植到另一个计算机环境的容易程度,计算机环境是指不同机型、不同的操作系统版本及不同的应用软件包。要增
5、加可移植性,应考虑以下几点:在设计时模块与操作系统特性不应有高度联系; 要使用标准的语言,要使用标准的数据库操作,尽量不使用扩充结构; 对程序中各种可变信息,均应参数化,以便于修改。 (2) 开发工具的可利用性:指有效的软件开发工具可以缩短编码时间,改进源代码的质量。目前,许多编程语言都嵌入到一套完整的软件开发环境里。这些开发工具为:交互式调试器、交叉编译器、屏幕格式定义工具、报表格式定义工具、图形开发环境、菜单系统和宏处理程序等。 (3) 软件的可重用性:指编程语言能否提供可重用的软件成分,如模块子程序可通过源代码剪贴、包含和继承等方式实现软件重用。可重用软件在组装时,从接口到算法都可能调整
6、, 需考虑额外代价。 (4) 可维护性:指源程序的可维护性对复杂的软件开发项目的重要性,如易于把详细设计翻译为源程序、易于修改需要变化的源程序。因此,源程序的可读性、语言的文档化特性对软件的可维护性具有重大的影响。 3. 技术特性 语言的技术特性对软件工程各阶段有一定的影响, 特别是确定了软件需求之后,程序设计语言的特性就显得非常重要了, 要根据项目的特性选择相应特性的语言,有的要求提供复杂的数据结构,有的要求实时处理能力强,有的要求能方便地进行数据库的操作。软件设计阶段的设计质量一般与语言的技术特性关系不大(面向对象设计例外),但将软件设计转化为程序代码时, 转化的质量往往受语言性能的影响,
7、可能会影响到设计方法。如Ada, Smalltalk, C+等支持抽象类型的概念,Pascal, C等允许用户自定义数据类型,并能提供链表和其他数据结构的类型。 这些语言特性为设计者进行概要设计和详细设计提供了很大的方便。在有些情况下,仅在语言具有某种特性时, 设计需求才能满足。如要实现彼此通信和协调的并发分布式处理, 要用并发Pascal, Ada, Modula-2等语言才能用于这样的设计。 语言的特性对软件的测试与维护也有一定的影响。支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、 易维护。程序设计语言的选择 1. 项目的应用领域项目应用领域是选择语言的关键因素, 有下列几
8、种类型。 为开发一个特定项目选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。在选择语言时,从问题入手,确定它的要求是什么,以及这些要求的相对重要性。由于一种语言不可能同时满足它的各种需求,所以要对各种要求进行权衡,比较各种可用语言的适用程度,最后选择认为是最适用的语言。1) 科学工程计算 该计算需要大量的标准库函数, 以便处理复杂的数值计算, 可供选用的语言有:(1) FORTRAN语言: 是世界上第一个被正式推广应用的计算机语言,产生于1954年,经过FORTRAN 0到FORTRAN , 又相继扩展为FORTRAN 77,FORTRAN 90,通过几个版本不断的更新,使它
9、不仅面向科学计算,数据处理能力也极强。(2) Pascal语言: 产生于60年代末, 具有很强的数据和过程结构化的能力,它是第一个体现结构化编程思想的语言, 由于它语言简明、数据类型丰富、程序结构严谨,许多算法都用类Pascal来概括。用Pascal语言写程序,也有助于培养良好的编程风格。 (3) C语言:产生于70年代初,最初用于描述UNIX操作系统及其上层软件,后来发展成具有很强功能的语言,支持复杂的数据结构, 可大量运用指针,具有丰富灵活的操作运算符及数据处理操作符。此外还具有汇编语言的某些特性,使程序运行效率高。 (4) PL/1语言: 是一个适用性非常广泛的语言, 能够适用于多种不同
10、的应用领域,但由于太庞大,难以推广使用,目前一些PL/1的子集被广泛使用。 2) 数据处理与数据库应用 数据处理与数据库应用可供选用的语言如下: (1) Cobol语言: 产生于 50 年代末, 是广泛用于商业数据处理的语言,它具有极强的数据定义能力,程序说明与硬件环境说明分开, 数据描述与算法描述分开,结构严谨层次分明, 说明采用类英语的语法结构,可读性强。 (2) SQL语言: 最初是为IBM公司开发的数据库查询语言, 目前不同的软件开发公司有了不同的扩充版本, 如 80 年代后期我国引入Informix-SQL, Microsoft-SQL可以方便地对数据库进行存取管理。 (3) 4GL
11、语言: 称为第4代语言,随着信息系统的飞速发展, 原来的第2代语言(如FORTRAN,Cobol)第3代语言(如Pascal, C等)受硬件和操作系统的局限,其开发工具不能满足新技术发展的需求,因此,在70年代末,提出了第4代语言的概念, 4GL的主要特征是: 友好的用户界面: 指操作简单, 使非计算机专业人员也能方便地使用它。 兼有过程性和非过程性双重特性:非过程性指语言的抽象层次又提高到一个新的高度,只需告诉计算机“做什么”, 而不必描述“怎么做”,“怎么做”的工作由语言系统运用它的专门领域的知识来填充过程细节。 高效的程序代码: 指能缩短开发周期, 并减少维护的代价。 完备的数据库: 指
12、在4GL中实现数据库功能, 不再把DBMS(数据库管理系统)看成是语言以外的成分。 应用程序生成器:能提供一些常用的程序来完成文件维护、屏幕管理、报表生成和查询等任务, 从而有效提高软件生产率。 目前流行的Fox公司的FoxPro, Uniface公司的Uniface, Powersoft公司的Power Builder, Informix公司的Informix-4GL以及各种扩充版本的SQL等都不同程度地具有上述特征。 3) 实时处理 实时处理软件一般对性能的要求很高, 可选用的语言有: (1) 汇编语言:是面向机器的,它可以完成高级语言无法满足要求的特殊功能,如与外部设备之间的一些接口操作
13、。 (2) Ada语言:是美国国防部出资开发的,主要用于适时、 并发和嵌入系统的语言。Ada语言是在Pascal基础上开发出来的,但其功能更强、更复杂。它提供了一组丰富的实时特性, 包括多任务处理、中断处理、任务间同步与通信等, 它还提供了许多程序包供程序员选择。通过修订,已成为安全、高效和灵活的面向对象的编程语言。5) 人工智能4) 系统软件 如果编写操作系统、编译系统等系统软件时,可选用汇编语言、C语言、Pascal语言和Ada语言。 如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别、机器人视角及自然语言处理等人工智能领域内的系统, 应选择的语言如下: (1) L
14、isp: 是一种函数型语言,产生于60年代初,它特别适用于组合问题中的符号运算和表处理,因此用于定理证明、树的搜索和其他问题的求解。近年来Lisp广泛应用于专家系统的开发, 对于定义知识库系统中的事实、规则和相应的推理相对要容易一些。 (2) Prolog: 是一种逻辑型语言,产生于70年代初,它提供了支持知识表示的特性,每一个程序由一组表示事实、规则和推理的子句组成, 比较接近于自然语言,符合人的思维方式。 以上讨论的语言,一般适用于相应的应用领域,但要根据具体情况灵活掌握。有的语言功能强,适用的范围较广,但比较庞大。2 软件开发的方法 有时编程语言的选择依赖于开发的方法,如果要用快速原型模
15、型来开发,要求能快速实现原型,因此宜采用4GL。如果是面向对象方法,宜采用面向对象的语言编程。近年来,推出了许多面向对象的语言,这里主要介绍以下几种: (1) C+:是由美国AT&T公司的Bell实验室最先设计和实现的语言,它提供了面向对象类的定义、继承、封装和消息传递等概念实现的手段,又与C语言兼容,保留了C语言的许多特性, 维护了大量已开发的C库、C工具以及C源程序的完整性,使编程人员不必放弃自己熟悉的C语言,只需补充学习C+提供的那些面向对象的概念,因而从C过渡到C+比较容易,加之它的运行性能较高, 成为当今最受欢迎的对象语言之一。 目前, 除了常用的AT&T C+, Turbo C+,
16、 Borland C+及Microsoft C+等版本外,又推出了Microsoft Visual C+, 充分发挥Windows和Web的功能。 (2) Java: 是由Sun公司开发的一种面向对象的、分布式的、 安全的、 高效的及易移植的语言,它的基本功能类似于C+, 但做了重大修改, 不再支持运算符重载、多继承及许多易于混淆和较少使用的特性,增加了内存空间自动垃圾收集的功能, 使程序员不必考虑内存管理问题。Java应用程序可利用语言提供的例程库,能够自由地打开和访问网络上的对象。 3. 软件执行的环境 良好的编程环境不但有效提高软件生产率, 同时能减少错误,有效提高软件质量。近几年推出了许多可视化的软件开发环境, 如Visual BASIC, Visual C, Visual FoxPro及Delphi(面向对象的Pascal)等,都提供了强有力的调试工具, 帮助你快速形成高质量的软件。4. 算法和数据结构的复杂性 科学计算、实时处理和人工智能领域中的问题算法较复杂, 而数据处理、数据库应用和系统软件领域内的问题,数据结构比较复杂,因此选择语言时可考虑是否有完成复杂算法的能力,