7程序设计和软件工程基础

上传人:无*** 文档编号:253377605 上传时间:2024-12-12 格式:PPT 页数:81 大小:421KB
收藏 版权申诉 举报 下载
7程序设计和软件工程基础_第1页
第1页 / 共81页
7程序设计和软件工程基础_第2页
第2页 / 共81页
7程序设计和软件工程基础_第3页
第3页 / 共81页
资源描述:

《7程序设计和软件工程基础》由会员分享,可在线阅读,更多相关《7程序设计和软件工程基础(81页珍藏版)》请在装配图网上搜索。

1、,,,,,,,西北师范大学计算中心,81,第,7,,章,,程序设计 和软件工程基础,7.1,程序设计风格,,7.2,结构化程序设计,,7.3,面向对象程序设计,,7.4,软件工程基础,7,程序设计和软件工程基础,随着计算机应用范围的不断扩大和硬件环境的不断完善,软件的规模也越来越大,复杂性不断增加,,如何保证软件的正确性,验证软件的正确性成为突出问题。为此在软件设计领域涌现出结构化程序设计、面向对象程序设计等技术,同时将工程化引入到软件开发中,像处理工程一样处理软件研制的全过程,,本章主要介绍,:,,,◇,结构化程序设计,,,◇,面向对象程序设计,,,◇,软件工程,7.1,程序设计风格,

2、____,程序与程序设计,,◆,程序,是为计算机解决某一问题而编写的指令序列,,从计算机角度来说,程序是用某种计算机所能理解并执行的计算机语言描述解决问题的方法步骤,,程序,=,算法,+,数据结构,,◆,程序设计,是编写程序的过程,,◆,程序设计语言,是用于描述计算机所执行操作的语言,,◆,程序设计,主要经历了四个阶段:,机器语言程序设计阶段,,高级语言程序设计阶段,,结构化程序设计阶段,,面向对象程序设计阶段,7.1,程序设计风格,____,语言与程序设计语言,◆,,程序设计语言的,发展,:,,,◇,,低级语言,→,高级语言,,,◇,,具体算法,→,程序设计方法学,,,◇,,顺序程序设计,→

3、,并发、并行、分布式程序设计,,,◇,,非结构化程序设计,→,结构化程序设计,,,◇,,过程式程序设计,→,逻辑式、函数式、对象式以及可视化程序设计,,阶段,年 限,语 言,程 序 标 准,一,1946,年,~,1956,年,机器语言或汇编语言,功效、时间短、占用空间小,二,1956,年,~,1968,年,高级语言,易读性、易维护性,三,,1968,年,~,现代高级语言,结构良好性,易读、易维护,◆,,程序设计语言的,发展趋势,:,,,◇,,模块化,,◇,,简明性,,◇,,形式化,,◇,,并行化,,◇,,可视化,7.1,程序设计风格,____,面向机器的语言,,◆,,机器指令,,是计算机可

4、以理解并执行的操作命令,有完整含义,,,指令格式:,,操作码+地址码,,◇,操作码,是指明该指令要完成的操作,如加、减、传送、输入等,,,◇,,操作数,是指参加运算的数或者数所在的单元地址,,,◆,,机器语言,,直接用二进制代码表示指令系统的语言。用机器语言所编写的程序可以被计算机直接识别和执行,,,◆,,汇编语言,,用一些特定的助记符形式来表示所要进行的操作和数据,又被称为,“,符号语言,”,。例如:,MOV AX,1,;,MOV BX,1,;,ADD AX,BX,,,汇编语言编写的程序还需要通过汇编程序,“,翻译,”,成机器指令后才能执行,,在不同的计算机上提供了不同的机器语言或汇编语言,

5、所编写的程序一般只能在同类型的计算机上运行,所以机器语言和汇编语言被称为,“,面向机器的语言,”,,相对于高级语言又被成为,“,低级语言,”,操作码,地址码,7.1,程序设计风格,____,面向过程的语言,,◆,,高级语言,使用了人类的自然语言,采用了数学的公式描述方法;同时又能脱离对机器的要求,能在任何计算机上运行。如:,,IF B^2-4*a*c>=0 THEN PRINT (-B+SQR(B^2-4*A*C))/(2*A),,,◆,,汇编语言或高级语言编写的程序称为“,源程序,”,源程序不能在计算机上直接运行,必须将其“翻译”成击机器指令的“,目标程序,”,,,◆,,编译方式,,,◇,,

6、编译,,整个翻译,整体执行,,◇,,解释,,逐条翻译,逐条执行,源程序,结果,解释程序,,(解释执行),源程序,目标文件,,.,obj,编译程序,结果,连接程序,可执行文件,,.exe,执行,7.1,程序设计风格,____,程序示例,,以,A=7+8,的计算为例,比较机器、汇编和高级语言不同的表达方式,,,◇,IBM-PC,机的,机器语言程序,:,,,1011 0000,0000,0111,: 把,7,放入累加器,A,中,,,0010 1100 0000 1000,:,8,与累加器,A,中的值相加,结果仍放入,A,中,,,1111 0100,: 停机,,◇,,IBM-PC,机的,汇编程序,,,

7、ORG 00H,:,设置程序起始地址,,,MOV A,7,: 把,7,放入累加器,A,中,,,ADD A,8,:,8,与累加器,A,中的值相加,结果仍放入,A,中,,,HALT,:,停机,,◇,,高级语言程序,(,FORTRAN,),,,A=7+8,:,7,与,8,相加的结果放入变量,A,中,,,WRITE(*,*)A,:,在显示器上输出变量,A,的值,,,END,:,结束程序,7.1,程序设计风格,____,常用,程序设计语言,语言,特 点,FORTRAN,第一个计算机高级语言。面向过程,适合于科学计算,ALGOL,算法语言。面向过程,以子程序结构为基础,COBOL,

8、一种用于事务数据处理的通用程序设计语言,LISP,一种用于处理“表”的函数式程序设计语言,BASIC,一种交互式程序设计语言,简单易学、小巧灵活、使用方便,PASCAL,一种结构化程序设计语言,简明性和结构化,适于描述算法,PROLOG,一种处理逻辑问题的逻辑程序设计语言,C,一种通用程序设计语言,中级语言,主要用于系统程序设计,Ads,一种通用的模块化程序设计语言,主要特征是强类型化和模块化,C++,一种以,C,语言为基础、支持数据抽象和面向对象技术的通用程序设计语言,Java,一种简捷的、面向对象的、用于网络环境的、可分布执行的程序设计语言,7.1,程序设计风格,____,面向对象的语言,

9、,◆,,面向对象的计算机语言,是一种非过程化语言或陈述性语言。使用时只要提出问题,计算机就能自动给出计算步骤或结果,,,◆,,Visual Basic,、,Visual FoxPro,、,C++,、,Java,、,Object Pascal,等,,,◆,,面向对象计算机语言的,优点,,,◇,,与人类的思维方法一致,,,,◇,,稳定性好,,,◇,,可重用性好,,,◇,,可维护性好,,,◇,,易于开发大型软件产品,7.1,程序设计风格,程序设计风格,是指编写程序时所表现出的特点、习惯和逻辑思路,,,程序设计风格会极大地影响软件的质量和可维护性,良好的程序设计风格可以使程序结构清晰合理,使程序代码便

10、于维护。因此总体而言应该强调程序简单和清晰,并且是可以理解的,,著名的,“,清晰第一,,,效率第二,”,论点已成为当今主导的程序设计风格,,,形成良好的程序设计的风格,需要注意以下几个方面:,,,◇,,程序文档与使用的符号名应具有一定的实际含义,以便对程序功能的理解,,,◇,,数据的说明次序要规范,数据总体说明次序固定,可以使数据的属性容易查找,有利于测试、排错和维护,,,◇,,程序简单易懂,语句构造简单直接,不应该为了提高效率而把语句复杂化,,,◇,,输入和输出方式和格式应尽可能方便用户的使用,7.2,,结构化程序设计,7.2.1,结构化程序设计的原则,,7.2.2,结构化程序的基本结构与特

11、点,,7.2.3,结构化程序设计原则和方法的应用,7.2.1,结构化程序设计的原则,结构化程序设计方法,是一种程序设计的技术,采用自顶向下、逐步求精的方法和单入口,/,单出口的控制结构,,程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标,将一个复杂的,问题解法逐步细化成若干个简单的问题,采用模块化组织,再进一步分解为具体的处理步骤,每个处理步骤可以使用单一入口的控制结构,,结构化程序设计的,主要原则,:,,,◇,,自顶向下,,,◇,逐步求精,,,,◇,,模块化,,,◇,,限制使用,goto,语句,,,,采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护;

12、提高了编程工作的效率,降低了软件开发成本,7.2.2,结构化程序的基本结构与特点,,◆,,结构化程序设计基本结构,,,◇,,顺序结构,。按照程序语句行的自然顺序,一条语句一条语句地执行程序。顺序结构是一种最基本、最常用的程序设计结构,,◇,,选择结构,(分支结构,),。包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列,,◇,,循环结构,(重复结构,),。根据给定条件,判断是否需要重复执行某一相同的或类似的程序段。循环结构对应两类:对先判断后执行循环体的称为当型循环结构。对先执行循环体后判断的称为直到型循环结构,,使用这三种基本控制结构就能表达

13、出各种其它形式结构的程序设计方法,A,B,条件,A,B,T,F,条件,A,F,T,条件,A,T,F,条件,F,A,T,顺序结构 对称选择结构 非对称选择结构 当型循环结构 直到型循环结构,7.2.3,结构化程序设计原则和方法的应用,,◆,,结构化程序设计原则,,,基于对结构化程序设计原则、方法以及结构化程序基本构成结构的掌握和了解,在结构化程序设计的具体实施中,要注意把握如下要素:,,,◇,,使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑,,,◇,,选用的控制结构只准许有一个入口和一个出口,,,,◇,,每个程序块

14、只有一个入口和一个出口,,,,◇,,复杂结构应该用基本控制结构的嵌套、组合来实现,,,,◇,,严格控制,GOTO,语句的使用,7.3,,面向对象程序设计,,7.3.1,面向对象程序设计基本概念,,7.3.2,面向对象的程序设计,7.3.1,面向对象程序设计基本概念,,虽然结构化程序设计方法曾经给计算机软件业带来了巨大进步。但是,,20,世纪,80,年代末期以来,人们注意到把结构化程序设计方法应用到大型软件开发时很少取得成功。到,20,世纪,90,年代前半期,面向对象的设计方法已经成为人们开发软件时的首选技术。今天,面向对象技术是一种非常流行的软件开发技术,,所谓面向对象就是指一个软件系统使用对

15、象、类、继承、通信等,4,个概念设计和实现的,一个面向对象的程序的每一组成部分都是对象,计算是通过建立新的对象与对象之间的通信来执行的。即,,面向对象,=,对象,+,类,+,继承,+,通信,,,下面分别介绍面向对象方法中几个重要的基本概念,这些概念是理解和使用面向对象方法的关键和基础,7.3.1,面向对象程序设计基本概念,____,对象、属性和方法,,对象是面向对象方法中最基本的概念。面向对象程序设计方法中涉及的,对象是系统中用来描述客观事物的一个实体,,是构成系统的基本单位,它由一组表示静态特征的属性和它可执行的一组操作组成,,组成对象的三要素:,,属性,用于描述对象的一组特征,,事件,是对

16、象上所发生的事情,是预先定义好的、能够被对象识别的动作,,,方法,是对象要执行的操作,,,对象具有惟一性、分类性、封装性和模块独立性较好等特点,7.3.1,面向对象程序设计基本概念,____,封装性,操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,只需要调用就可以了,用户不必关心这一过程是如何编写的,,也就是说,把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的细节,这个过程已经封装在对象中,用户也看不到。对象的这一特性,就是,对象的封装性,7.3.1,面向对象程序设计基本

17、概念,____,类和实例,类是具有共同属性、共同方法的对象的集合,。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而,一个对象则是其对应类的一个实例,,实例是指一个具体的对象,,例如:,Integer,是一个整型类,它描述了所有整数的性质。因此任何整数都是整数类的对象,而一个具体的整数,“,123,”,是类,Integer,的一个实例,,由类的定义可知,,类是关于对象性质的描述,,它同对象一样,包括一组数据属性和数据上的合法操作,,例如,显示一个半径,3cm,红颜色的圆,一个半径,4cm,绿颜色的圆和一个半径,1cm,黄颜色的圆。这三个圆的圆心位置、半径大小,,和颜色均不相同,

18、是三个不同的对象。但它们有相,,同的属性(圆心坐标、半径、颜色)和相同的操作,,(显示、放大缩小半径、在屏幕上移动位置等等)。,,因此,可以用,“,Circle,类,”,来定义,7.3.1,面向对象程序设计基本概念,____,消息,,面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为,“,消息,”,,,消息是一个实例与另一个实例之间传递的信息,,它请求对象执行某一处理或回答要求的信息,它统一了数据流和控制流,,消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者如何完成这些处理。消息完全由接受者解释,接受者独立决定

19、采用什么方式完成所需的处理,发送者对接受者不起任何控制作用,,一个对象能够接受不同形式、不同内容的多个消息;相同形式的消息可以送往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够做出不同的反映。一个对象可以同时往多个对象传递信息,两个对象也可以同时向某个对象传递消息,传递对象,消息,接口,接受对象,,操作名、参数,,,7.3.1,面向对象程序设计基本概念,____,消息,通常,一个消息由接受消息的对象的名称、消息标识符,(,也称为消息名,),、零个或多个参数三部分组成,,例如,,MyCircle,是一个半径,4cm,、,圆心位于,(100,200),的,Circle,类的对象,也

20、就是,Circle,类的一个实例,当要求它以绿颜色在屏幕上显示自己时,在,C++,语言中应该向它发下列消息:,,,MyCircle,.Show(Green),,,其中,,MyCircle,是接受消息的对象的名字,,Show,是消息名,,Green,是消息的参数,发送对象,消息,接口,接受对象,,操作名、参数,,,7.3.1,面向对象程序设计基本概念,____,继承性,,继承是面向对象的方法的一个主要特征。,继承是使用已有的类定义新类的定义技术,。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,,面向对象软件技术的许多

21、强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法,,继承具有传递性,如果类,C,继承,,类,B,,类,B,继承类,A,,,则类,C,继承类,A,。,,因此,一个类实际上继承了它上层,,的全部基类的特性,也就是说,属,,于某类的对象除了具有该类所定义,,的特性外,还具有该类上层全部基,,类定义的特性,类A,,A,类实例,a1,A,类操作,,类A,A,的变量,,A,的实例变量,,,,类,B:A,的子类,,B,的实例,b1,

22、从,A,的继承性,,类B,B,类操作,,继承来的,A,的实例变量,B,的变量,,B,的实例变量,7.3.1,面向对象程序设计基本概念,____,多态性,,对象的,多态性,是指在一般类中定义的属性、方法被特殊类继承后,可以具备不同的数据类型或表现不同的行为,使对象的同一个属性或方法名在一般类及其各个特殊类中具有不同的语义,7.3.2,面向对象的程序设计,____,对象方法的主要优点,◇,,面向对象方法和技术,以对象为核心,。对象由数据和操作组成的封装体,对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系,使用现实世界的概念抽象地理解思考问题从而自然地解决问题,,,◇,,面向对象

23、方法,基于对象模型,。当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需作一些局部性的修改,,◇,,面向对象方法,可重用性好,。软件重用是指在不同的软件开发过程中重复使用相同或相似软件的过程。可以利用可重用的软件成分构造新的系统,,◇,,用面向对象方法开发软件时,可以把一个大型产品看作是一系列本质上相互独立的小产品来处理,这样不仅降低了开发的技术难度和成本,而且使得对开发工作的管理变得容易,软件整体质量也大大提高,,◇,,面向对象的方法开发的,软件可维护性好,,,软件稳定性比较好,,比较容易修改,容易理解,易于测试和调试,7.4,,软件工程基础,,7.4.1,软件工程基本概念,,7

24、.4.2,结构化分析与设计方法,,7.4.3,软件测试,,7.4.4,程序调试,7.4.1,软件工程基本概念,____,软件特点,,计算机软件,包括程序、数据及相关文档的完整集合。其特点是:,,◇,,软件是一种逻辑部件,不是硬件部件,具有很高的抽象性,,◇,,软件生产没有明显的制作过程,一旦研制开发成功,可以大量拷贝同一内容的副本,所以对软件的质量控制,必须着重在软件开发方面下功夫,,◇,,软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题,,◇,,软件复杂性高,成本昂贵,软件涉及人类社会的各行各业,开发常常涉及其他领域的专门知识,开发需要投入大量、高强度的脑力

25、劳动,成本高,风险大,,◇,,软件开发涉及诸多的社会因素,许多软件的开发和运行涉及软件用户的机构设置,体制问题以及管理方式等,甚至涉及到人们的观念和心理,软件知识产权及法律等问题,7.4.1,软件工程基本概念,____,软件危机,,随着计算机技术的发展和应用领域的扩大,软件规模越来越大,复杂程度不断增加,软件成本逐年上升,质量没有可靠的保证,软件已成为计算机科学发展的,“,瓶颈,”,,所谓,软件危机,是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有的软件都不同程度地存在这个问题,,具体地说,在软件开发和维护过程中,软件危机主要表现在:,,◇,,软件需求的增长得不到满足

26、,,◇,,软件开发的进度无法控制,,◇,,软件质量难以保证,,◇,软件不可维护或维护程度非常低,,◇,软件的成本不断提高,,◇,软件开发生产率的提高赶不上硬件的发展和应用需求的增长,,总之,可以将软件危机归结为成本、质量、生产率等问题,7.4.1,软件工程基本概念,____,软件工程,,在软件开发和维护过程中,之所以存在这些严重的问题,一方面,与软件本身的特点有关,,例如,在软件运行前,软件开发过程的进展难衡量,质量难以评价,因此管理和控制软件开发过程相当困难;在软件运行过程中,软件维护意味着改正或修改原来的设计;另外,软件的显著特点是规模庞大,复杂度超线性增长,在开发大型软件时,要保证高质量

27、,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。另一方面,与软件开发和维护方法不正确有关,,这是主要原因,,为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新兴领域,——,软件工程学,,,软件工程,就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法,7.4.1,软件工程基本概念,____,软件工程,,软件工程的进步是近几十年软件产业迅速发展的重要原动力,,软件工程的核心思想是把软件产品看作是一个工程产品来处理,,把需求计划、

28、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:,进度,、,经费,和,质量,的目标。同时,软件工程针对软件的特点提出了许多有别于一般工业工程技术的一些技术方法。代表性的有结构化方法、面向对象方法和软件开发模型及软件开发过程等,,特别地,从经济学的意义上来说,考虑到软件庞大的维护费用远比软件开发费用要高,因而开发软件不能只考虑开发期间的费用,而且应该考虑软件生命周期内的全部费用。因此,软件生命周期的概念就变得特别重要。在考虑软件费用时,不仅仅要降低开发成本,更要降低整个软件生命周期的总成本,7.4.1,软件工程基本概念,____,软件生命周期,,为

29、了有效、科学地组织和管理软件生产,根据某一软件从被提出并着手开始实现,直到软件完成其使命为止的全过程称为,软件生命周期,,通常,软件生命周期包括问题定义、可行性研究、需求分析、概要设计、详细设计、软件编码、软件测试及运行维护,八个阶段,,为使各时期的任务更明确,将,软件生命周期,划分为以下三个时期:,,,◇,软件定义期,,,◇,软件开发期,,,◇,软件维护期,软件定义期,问题定义,,,,可行性研究,,,,需求分析,,,软件开发期,,,概要设计,,,,详细设计,,,,软件编码,,,,软件测试,,,软件,,维护期,,,运行维护,7.4.1,软件工程基本概念,____,软件生命周期,,◆,,软件定义

30、期,问题定义,理解用户要求,划清工作范围,提交书面报告给用户及使用部门负责人进行审查,,,可行性研究,复查系统的目标和规模,研究当前系统,导出系统逻辑模型;分析物理系统的可行性,推荐一个可行方案,提出可行性分析报告,,,需求分析,从数据流程图出发,对目标系统提出清晰、准确和具体的要求。确定对系统的综合要求;分析系统数据要求;推导出系统的详细模型系统;建立模型系统,软件定义期阶段提交的文档内容包括:系统的功能说明;系统对数据的要求;用户系统描述,7.4.1,软件工程基本概念,____,软件生命周期,,◆,,软件开发期,概要设计,进行系统的逻辑设计,划分出构成系统的各物理元素,设计出软件的结构。提

31、出可选择方案;选择合理方案;推荐最佳方案;功能分解;设计软件结构;制定测试计划;提交文档,,,详细设计,进行系统模块的设计,对系统作出精确的描述,以便在编码阶段可直接将这一描述用程序设计语言编制成程序。通常用层次图加输入,/,处理,/,输出图或过程描述语言来描述,,,软件编码,该概要设计和详细设计阶段中的结果翻译成用某种程序设计语言书写的程序。以文档形式提交程序、数据和详细注释,,,软件测试,是保证软件可靠性的主要手段,是软件开发过程中最艰巨、最繁重的工作。测试的目的是查找程序中的错误,但决不能证明程序中没有错误,7.4.1,软件工程基本概念,____,软件生命周期,◆,,软件维护期,,,软件

32、维护通常有以下四类:,,改正性维护,为纠正使用中出现的错误而进行,,适应性维护,为适应环境变化而进行,,完善性维护,为改进原有软件而进行,,预防性维护,为将来的可维护和可靠而进行,7.4.1,软件工程基本概念,____,软件工程的目标与原则,,软件工程的,目标,是在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可操作性且满足用户需求的产品,,基于上述目标,软件工程的理论和技术性研究的内容主要包括,软件开发技术,和,软件工程管理,,为了达到软件工程目标,在软件开发过程中,,必须遵循软件工程的基本原则,,这些原则适用于所有的软件项目。这些基本原

33、则包括抽象、信息隐蔽、模块化、局部化、一致性、完备性和可验证性,7.4.1,软件工程基本概念,____,软件开发工具与软件开发环境,,现代软件工程方法之所以得以实施,其,重要的保证是软件开发工具和环境的保证,,使软件在开发效率、工程质量等多方面得到改善,,工具和环境的使用进一步提高了软件的开发效率、维护效率和软件质量,,◇,,软件开发工具,是为支持软件人员开发和维护活动而使用的软件,软件开发工具的发展从单项工具的开发逐步向集成工具发展,为软件工程方法提供了自动的或半自动的软件支撑环境。同时,软件开发方法的有效应用也必须得到相应工具的支持,,◇,,软件开发环境,或称软件工程环境是全面支持开发全过

34、程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成,7.4.2,结构化分析与设计方法,____,结构化分析方法,,结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用,其目的是帮助弄清用户对软件的需求,,结构化分析就是使用数据流图、数据字典、结构化自然语言、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。其实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型,,结构化分析的常用工具,:,,,◇,,数据流图,,,◇,,数据字典,,,◇,,判定树,,,◇,,判定

35、表,7.4.2,结构化分析与设计方法,____,结构化分析方法,,◆,,数据流图,,,数据流图是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,直接支持系统的功能建模,从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程,,加工,(,转换,),。输入数据经加工变换产生输出,,数据流,。沿箭头方向传送数据的通道,一般在旁边标注数据流名,,存储文件,(,数据源,),。表示处理过程中存放各种数据的文件,,源,。表示系统和环境的接口,属系统之外的实体,研究生业务活动数据流图,7.4.2,结构化分析与设计方法,____,结构化分析方法,,数据流图是对实际(已有的或要设计的)信息处理系统

36、的抽象。具体画数据流图的方法有很多,常用的有以下两种方法:,,◇,,自顶向下逐步分解,,对于一个大型的软件系统来说,直接画出一张数据流图是很困难的,但如果自顶向下分成若干层,再对每一层的数据来描述就简单了,分层的数据流图一般由顶层、中层和底层组成,顶层图说明系统的边界,即系统的输入和输出,底层有一些不再分解的加工组成,中间层还可以分为若干层,最后就将这三层的数据流图并为一张的总的数据流图,,◇,,由外向里逐步深化,,用这种方法画数据流图时,首先画出系统的输入和输出数据流 ,然后再考虑系统的内部。在画加工时,同样画出它们的输入和输出,再考虑这个加工的内部,在数据流的组成或发生变化地方应画上一个,

37、“,加工,”,,以便实现这一变化,7.4.2,结构化分析与设计方法,____,结构化分析方法,,◆,,数据字典,,,数据字典是结构化分析方法的核心。,数据字典,是对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。数据字典把不同的需求文档和分析模型紧密地结合在一起,与各模型的图形表示配合,能清楚地表达数据处理的要求,,通常数据字典包含的信息有:名称、别名、何处使用,/,如何使用、内容描述、补充信息等,,数据字典是给数据流图中的每一个数据流名、文件名及加工名建立一个目录,在这些条目中给出各名字的定义。而在每

38、一个目录下又可建立子目录,直到每一个组成部分不能再分为止,7.4.2,结构化分析与设计方法,____,结构化分析方法,,在数据字典中,通常有四种类型的条目:,,◇,,数据流条目,:数据流条目给出某个数据流的定义,其形式为列出组成数据流的数据项。如数据流,“,课程目录,”,(由文件流出)由课程名、学时、学分、教员等数据项组成,在数据字典中表示为:课程目录,=,课程名,+,学时,+,学分,+,教员,+,课表,而,“,课表,”,又可以列为一个子条目,表示为:课表,=,星期几,+,第几节,+,教室,,◇,,文件条目,:文件条目给出某个文件的定义,它的形式与数据流条目基本相同。例如,上述数据流条目实际上

39、也是,“,课程目录,”,文件的条目,,◇,,数据项条目,:数据项条目给出某个数据单项的定义,通常是数据项值的类型、允许值范围等。如学生,“,年龄,”,这个数据项值是,16,~,30,之间的任意整数,则在数据字典中表示成:年龄,=16,~,30,,◇,,加工条目,:加工条目实际上是对数据流图中的每个基本加工给出精细的描述,所有加工条目的综合就是整个系统的说明,每一个加工条目对应系统的一个模块的处理描述,7.4.2,结构化分析与设计方法,____,结构化分析方法,,◆,,判定树,,,使用判定树进行描述时,应先从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判

40、定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树,,例如,某货物托运管理系统中,对发货情况的处理要依赖检查发货单,检查发货单受货物托运金额、欠款等条件的约束,可以使用类似分段函数的形式来描述这些约束和处理。对这种约束条件的描述,如果使用自然语言,表达易出现不准确和不清晰。如果使用判定树来描述,则简捷清晰,检查发货单,欠款,>$500,欠款,>60———,不发出批准书,,,欠款≤,60———,发出批准书、发货单,,欠款≤,$500,欠款,>60———,发出批准书、发货单及赊欠报告,,,欠款≤,60———,发出批准书、发货单,7.4.2,结构化分析与设计方法,____,结构化分析方法,

41、,◆,,判定表,,,判定表与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。判定表由四部分组成:,,①,基本条件,列出了各种可能的条件,,②,条件项,列出了各种可能的条件组合,,③,基本动作项,列出了所有的操作,,④,动作项,列出在对应的条件组合下所选的操作,其中,“,√,”,表示满足对应条件项时执行的操作,,,1,2,3,4,条件,发货单金额,>$500,>$500,≤,$500,≤,$500,,赊欠情况,>,60,天,≤,60,天,>60,天,≤,60,天,操 作,不,发出批准书,√,,,,,发出

42、批准书,,√,√,√,,发出发货单,,√,√,√,,发出赊欠报告,,,√,,① 基本条件,③ 基本动作项,② 条件项,④ 动作项,7.4.2,结构化分析与设计方法,____,结构化设计方法,,软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的,基本目标,是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型,,,从技术观点来看,,软件设计包括软件结构设计、数据设计、接口设计、过程设计。其中,结构是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模块转化为数据结构的定义;接口设计是描述软件内部、软件和协作系统之间以及软件与人之间

43、如何通信;过程设计则是把系统结构部件转化为软件的过程性描述,,,从工程管理角度来看,,软件设计分两步来完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节,7.4.2,结构化分析与设计方法,____,结构化设计方法,,软件设计阶段通常分为两步:,,◇,,系统的总体设计,(概要设计),,以确定软件系统结构,,◇,,系统的详细设计,,即模块内部的具体设计。一般过程是先进行高层次的结构设计,后进行低层次的过程设计,穿插进行数据设计和接口设计,,,与结构

44、化需求分析方法相对应的是结构化设计方法,,,结构化设计,是采用可能的最佳方法设计系统的各个组成部分以及各成分之间的内部联系的技术,,,结构化设计的基本思想,是将软件设计成由相对独立、单一功能的模块组成的结构,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◆,,概要设计,设计软件系统结构,将需求分析阶段的层次结构进一步分解、划分为模块以及模块的层次结构。,划分的具体过程,为:,①,将系统按功能划分成模块;,②,确定每个模块的功能;,③,确定模块之间的调用关系;,④,确定模块之间的接口,即模块之间传递的信息;,⑤,评价模块结构的质量,数据结构及数据库设计,,(,数据设计,),实现数

45、据对象的逻辑表示。数据设计的,具体任务,是:,①,确定输入、输出文件的详细数据结构;,②,结合算法设计,确定算法所必需的逻辑数据结构及其操作;,③,确定对逻辑数据结构操作的程序模块,限制和确定各个数据设计决策的影响范围;,④,需要和操作系统或调度程序接口所必需的控制表进行数据交换时,确定其详细的数据结构和使用规则;,⑤,数据的防卫性、一致性、冗余性设计,编写概要设计文档,编写,①,概要设计说明书、,②,数据库说明书、,③,集成测试计划等,概要设计文档评审,对,①,设计部分是否完整地实现了需求中规定的功能、性能等要求,,②,设计方案的可行性,,③,关键的处理及内部接口定义的正确性,,④,各部分之

46、间的一致性等都要进行评审,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◆,,详细设计,,,详细设计是为每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。表达工具可以由设计人员自由选择,但它应该具有描述过程细节的能力,而且能够使程序员在编程时便于直接翻译成程序设计语言的源程序。常见的设计工具有:,,◇,,图形工具,:程序流程图,,N-S,图,,PAD,,,HIPO,,◇,,表格工具,:判定表,,◇,,语言工具,:,PDL,(,伪代码),,,在过程设计阶段,要对每个模块规定的功能以及算法的设计,给出适当的算法描述,即确定模块内部详细执行过程,包括

47、局部数据组织、控制流、每一步具体处理要求和各种实现细节等。其目的是确定应该怎样来具体实现所要求的系统,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◇,,程序流程图,,,程序流程图是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,程序流程图表达直观、清晰、易于学习掌握,且独立于任何一种程序设计语言。程序流程图虽然简单易学,但若程序员不受任何约束,随意转移控制,会破坏结构化设计原则,而且程序流程图不易表示数据结构,起止框 输入输出框 判断框 处理框 流程线 连接点 注释框,A,B,条件,A,B,T,F,条件,A,F,T,条件,

48、A,T,F,条件,F,A,T,顺序结构 对称选择结构 非对称选择结构 当型循环结构 直到型循环结构,7.4.2,结构化分析与设计方法,____,结构化设计方法,,【,程序流程图示例,】,简单托运货物运费计算的问题。设货物重量,x,,,客户信息,y,输入,X,Y,0<,X≤15,X>15,公式,1,计算,公式,2,计算,I=0,I<3,记账、输出,I=I+1,结束,T,T,T,F,F,F,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◇,,N-S,图,,,为避免流程图在描述程序逻辑时的随意性,通常使用,N-S,图,,,N-

49、S,图的特征为:每个构件具有明确的功能域;控制转移必须遵守结构化设计要求;易于确定局部数据和(或)全局数据的作用域;易于表达嵌套关系和模块的层次结构,A,,,T,,F,B,,A,B,当P1,,,A,,,A,,,,,,,直到,P2,,P0,,◇,,伪代码,不用图形符号,,用介于自然语言和计算机语言之间的文字和符号来描述算法,S1,:,C←A,(,将变量,A,的值赋给变量,C),;,,S2,:,A←B,(,将变量B的值赋给变量,A),;,,S3,:,B←C,(,将变量,C,的值赋给变量,B),。,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◇,,PAD,图,,,PAD,图(问题分

50、析图)是继程序流程图和方框图之后,提出的一种主要用于描述软件详细设计的图形表示工具,,,PAD,图结构清晰,结构化程度高;易于阅读;最左端的纵线是程序主干线,对应程序的第一层结构,每增加一层,PAD,图向右扩展一条纵线,故程序是纵线数等于程序层次数;程序执行:从,PAD,图最左主干线上端结点开始,自上而下,自左而右依次执行,程序终止于最左主干线,7.4.2,结构化分析与设计方法,____,结构化设计方法,,◇,,PDL,,,PDL,(,过程设计语言)是一种混合语言,采用英语的词汇和结构化程序设计语言的语法,类似编程语言,C,,,用,PDL,表示的基本控制结构的常用词汇如下:,,条件:,IF/T

51、HEN/ELSE/ENDIF,,,循环:,DO WHILE/ENDO,、,REPEAT UNTIL/ENDREPEAT,,,分支:,CASE_OF/WHEN/,,SELECT/WHEN/SELECT/ENDCASE,/*,计算运费 *,/,,count ( );,,{,输入,x;,输出,y;,,if (o15) {,公式,2,计算,;call sub;},,},,sub ( );,,{ for(i=1,3,i++) do {,记账;输出;,},,},7.4.3,软件测试,,提高程序的可靠性是每一个

52、软件工作者的愿望,也是用户对软件开发人员的要求。虽然有效的软件设计方法可以提高软件的可靠性,但是,由于各种各样的原因,软件产品中的缺陷总是难免的。为了保证软件产品的质量,提高每一个程序的可靠性,必须对软件进行测试,,测试具有以下特点:,,◇,,测试的挑剔性,,,◇,,完全测试的不可能性,,,◇,,测试的经济性,7.4.3,软件测试,____,软件测试的目的、准则,,◆,,软件测试的目的,,,软件测试就是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,,,◆,,软件测试的准则,,◇,,软件测试的目的是发现错误,而最严重的错误不

53、外乎是导致程序无法满足用户需求的错误。因此,所有测试都应追溯到需求,,,◇,,软件测试应当制定明确的测试计划并按照计划执行,严格执行测试计划,排除测试的随意性,,,◇,,为了达到好的测试效果,应该由第三方来构造测试,应避免程序员自己检查程序,,,◇,,即使规模较小的程序,其路径排列数也相当大,在实际测试过程中不可能穷举每一种组合,测试只能证明程序中有错误,不能证明程序中没有错误,7.4.3,软件测试,____,软件测试的过程,静态测试、动态测试和自动测试是程序的测试的三种方式进行,也是。测试的过程,即先进行静态分析,然后进行动态测试,在某些特殊情况下,又可以借助自动测试工具对程序进行查错,静态

54、测试,是指不执行程序,而只由人工对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。大约,30,~,70%,的逻辑设计错误和编码错误可以通过静态分析检查出来,动态测试,是使用测试用例在计算机上运行程序,使程序在运行过程中暴露错误,自动测试,自动测试工具通常有静态分析工具、动态分析工具、综合测试评估工具几种,7.4.3,软件测试,____,软件测试的层次,,◆,,模块测试,(单元测试),,大型程序是由许多模块按层次结构组织在一起的。因此,首先要对组成程序的各个模块进行测试,其,目标,是发现局部模块的逻辑与功能上的错误和缺陷。它主要对以下几个方面进行测试:,,◇,,模块接口,。主要测试穿过

55、模块的数据流,,◇,,局部数据结构,。数据结构通常是错误的藏身之地。这些错误主要包括数据引用错和数据说明错。除了对局部变量进行测试外,有时还需要测试全局变量对模块的影响,,◇,,重要路径,。选择适当的测试用例,对模块中的重要执行路径进行测试,从而暴露程序中的错误,,◇,,错误处理能力,。有意识地给出不合理的输入,以检查程序对错误的处理能力,,◇,,I/O,错,。对含有,I/O,功能的模块,还应测试,I/O,方面的有关错误,如文件属性是否正确、,OPEN,语句是否正确、格式说明是否正确等,7.4.3,软件测试,____,软件测试的层次,由于模块不是一个独立的程序,不能单独运行,因此,在进行模块测

56、试时,还应为每个被测试的模块另外设计两类模块:驱动模块和承接模块。其中,驱动模块,的作用是将测试数据传给被测试模块,并显示被测试模块所产生的结果;,承接模块,的作用是模拟被测试模块的下层模块,,通常,承接模块有若干个,,,驱动模块,,,,,,,,,,,,,,被测试模块,,,,,,,,,,,,承接模块,,,…,承接模块,,,7.4.3,软件测试,____,软件测试的层次,,◆,,整体测试,,,当各模块的独立测试完成之后,还要将各模块连接起来进行整体测试。整体测试的目标在于暴露模块测试时不能暴露的结构错误,如一个模块是否破坏另外一个模块的功能,数据通过接口时是否会丢失,能否产生主功能,误差是否有积

57、累等。整体测试分为渐增式和非渐增式两种:,,◇,,非渐增式的整体测试,是将经过单独测试的所有模块连接到一起进行测试,,◇,,渐增式的整体测试,往往是与模块测试同步进行的,即在对模块逐步装配的过程中同时进行的。这种测试方式可以减少模块测试时要设计的驱动模块或承接模块数,又可以及时、准确地发现结构错误的位置。渐增式的整体测试一般又可以分为,“,由顶向下,”,和,“,由底向上,”,两种,7.4.3,软件测试,____,软件测试的层次,,◆,,高级测试,功能测试,有效性测试主要用黑箱法测试软件功能是否与用户要求一致,,,系统测试,把软件元素与硬件元素结合在一起进行测试,,,验收测试,主要检查程序的操作

58、与原设计要求及用户要求是否一致,,,安装测试,主要检查软件在安装时产生的问题,以上四种测试统称为高级测试。进行这四种测试,往往要求测试人员有比较深入的知识和丰富的经验,7.4.3,软件测试,____,软件测试技术,,对程序进行测试需要使用一些数据,通常称为一个,“,测试用例,”,。由于完全测试的不可能性,用有限的测试用例去发现更多的错误就显得非常重要。设计和使用测试用例有以下几个基本原则:,,,◇,,设计测试用例应同时确定程序运行的预期结果,,,◇,,测试用例不仅要选用合理的输入数据,也要选用不合理的输入数据,,,◇,,除了需要检查程序是否做了应该做的事,还要检查程序是否做了不应该做的事,,,

59、◇,,千万不要幻想程序是正确的,,,◇,,保留有用的测试用例,以便再测试时使用,,,◇,,测试用例要系统地进行设计,不可随意凑合,,,下面分别介绍用白箱法和黑箱法测试时其测试用例的设计,7.4.3,软件测试,____,软件测试技术,,◆,,白箱法,(逻辑覆盖测试),,白箱测试是根据对程序内部逻辑结构的分析来选取测试用例。由于测试用例对程序逻辑覆盖的程度决定了测试完全性的程度,,白箱测试用例的设计准则有:,,◇,,语句覆盖,。企图用足够多的测试用例,使程序中的每个语句都执行一遍,以尽可能多地发现程序中的错误,,◇,,分支覆盖,(,判定覆盖准则,),。它要求通过足够多的测试用例,使程序中的每个分支

60、至少通过一次,,◇,,条件覆盖,。通过执行足够多的测试用例,使每个判定中的每个条件都能取到两种不同的结果(,“,真,”,与,“,假,”,),,◇,,组合条件覆盖,。条件覆盖并不能完全满足分支覆盖。例如,上述条件覆盖所使用的两个测试用例不能使第一个判定框为,“,真,”,,也不能使第二个判定框为,“,假,”,。于是,人们便提出组合条件覆盖准则,要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次,7.4.3,软件测试,____,软件测试技术,,◆,,黑箱法,,,黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、

61、因果图法和错误推测法,,◇,,等价分类法,。等价分类法是把所有可能的输入数据(有效的和无效的)划分成若干等价类,使每一类中的一个典型数据在测试中的作用与这类中所有其它数据的作用相同。因此,在实际进行测试时,可以从每个等价类中只取一组数据作为测试用例,,等价分类法分为两步:一是划分等价类(包括有效等价类和无效等价类);二是从每个等价类中选取测试用例,,划分等价类的基本方法是:根据程序的功能说明,找出所有的输入条件,然后为每一个输入条件划分等价类,7.4.3,软件测试,____,软件测试技术,◇,,边值分析法,。边值分析不是从等价类中随便选一个例子作为代表,而是着眼于使该等价类的边界情况成为测试的

62、主要目标来选取测试用例,并且边值分析不仅考虑输入条件,还要考虑输出条件。采用边值分析设计测试的原则为:如果输入条件规定了值的范围,则要对这个范围的边界情况以及稍超出范围的无效情况进行测试;如果输入条件规定了值的个数,则要分别对值的最大个数、最小个数、稍多于最大个数及稍少于最小个数的情况进行测试,,◇,,因果图法,。设计测试用例的一种系统方法,有助于测试人员系统地选择高效的测试用例。其基本思想是把输入条件视为,“,因,”,,输出条件视为,“,果,”,,把黑箱视为从因到果的逻辑网络图。通过因果图可以得到一张判定表,然后为判定表的每一列设计测试用例,,◇,,错误推测法,(猜错法),无一定之规可循,在

63、很大程度上是凭经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写测试用例,7.4.3,软件调试,,程序调试,也称排错,它是一个与测试有联系又有区别的概念,调试与测试的关系体现在以下几个方面:,,,◇,,测试的目的是暴露错误,评价程序的可靠性;而调试的目的是发现错误的位置,并改正错误,,,◇,,测试是机械的、强制的、严格的、也是可预测的,,,◇,,经测试发现错误后,可以立即进行调试并改正错误;经过调试的程序还需要进行回归测试,以检查调试的效果,同时也可防止在调试过程中引进新的错误,,,◇,,调试用例与测试用例可以一致,也可以不一致,7.4.3,软件调试,,调试的关键在于推断程序内部的错误

64、位置及原因。软件调试可以分为静态调试和动态调试。软件测试中讨论的静态分析方法同样适用静态调试。静态调试主要指通过人的思维来分析源程序代码和排错,是主要的调试手段,而动态调试是辅助静态调试的,,主要的调试方法可以采用:,,◇,,强行排错法,,,作为传统的调试方法,其过程可概括为,:,设置断点、程序暂停、观察程序状态、继续运行程序。这是目前使用较多、效率较低的调试方法。涉及的调试技术主要是设置断点和监视表达式。例如:通过内存全部打印来排错、在程序特定部位设置打印语句(断点法)、自动调试工具等。应用以上任何一种技术之前,都应当对错误的征兆进行全面彻底的分析,得出对出错位置及错误性质的推测,再使用一种

65、适当的排错方法来检验推测的正确性,7.4.3,软件调试,,◇,,回溯法,,,该方法适合于小规模程序的排错。即一旦发现了错误,先分析错误征兆,确定最先发现,“,症状,”,的位置。然后,从发现,“,症状,”,的地方开始,沿程序的控制流程,逆向跟踪源程序代码,直到找到错误根源或确定错误产生的范围。回溯法对于小程序很有效,往往能把错误范围缩小到程序中的一小段代码,仔细分析这段代码不难确定出错的准确位置。但随着源代码行数的增加,潜在的回溯路径数目很多,回溯会变得很困难,而且实现这种回溯的开销大,7.4.3,软件调试,,◇,,原因排除法,,通过演绎、归纳和二分法来实现,,○,,演绎法,一种从一般原理或前提

66、出发,推导出结论的思考方法。首先测试人员根据已有的测试用例,设想及枚举出所有可能出错的原因作为假设,然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设,最后,再用测试数据验证余下的假设确定出错的原因,,○,,归纳法,一种从特殊推断出一般的系统化思考方法。从一些线索(错误征兆或与错误发生有关的数据)着手,通过分析寻找潜在的原因,从而找出错误,,○,,二分法,已知每个变量在程序中若干个关键点的正确值时,使用赋值语句、输入语句等定值语句在程序中的某点附近给这些变量赋值,然后运行程序并检查程序的输出。如果输出结果是正确的,则错误原因在程序的前半部分;反之,错误原因在程序的后半部分。对错误原因所在的部分重复使用这种方法,直到将出错范围缩小到容易诊断的程度为止,7.4.3,软件调试,上面的每一种方法都可以使用调试工具来辅助完成。例如,可以使用带调试功能的编译器、动态调试器、自动测试用例生成器以及交叉引用工具等,,,需要注意的一个实际问题是,调试的结果是排错,为了修改程序中错误,往往会采用,“,补丁程序,”,来实现,而这种做法会引起整个程序质量的下降,但是从目前程序设计发展的状况看,对大规

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!