第3章计算机软件基础_第1页
第3章计算机软件基础_第2页
第3章计算机软件基础_第3页
第3章计算机软件基础_第4页
第3章计算机软件基础_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 计算机软件基础曲阜师范大学计算机科学学院2/6/20231计算机软件基础内容摘要

计算机系统由硬件与软件组成,硬件是基础,软件是灵魂。软件是指为运行、维护、管理及应用计算机所编制的所有程序和程序运行所需要的数据及其文档资料的总称,简而言之,软件=程序+数据+文档。 本章主要介绍软件基础知识:算法基础,数据结构基础,程序设计基础和软件工程基础等。2/6/20232计算机软件基础学习目标

理解算法、算法的设计以及评价算法优劣的概念;了解程序设计语言的概念和程序设计的过程;理解数据结构的基本概念和几种典型的数据结构;了解软件工程中有关概念,熟悉软件生存周期、软件开发模型和软件开发方法的内容。为进一步学习本书以下各章内容和以后的各门专业课程学习打好基础。

2/6/20233计算机软件基础主要内容3.1算法基础3.2程序设计基础3.3数据结构基础3.4软件工程基础2/6/20234计算机软件基础3.1 算法基础 算法是计算机科学中最重要的核心概念,算法设计的好坏直接影响软件的性能。

数值计算算法:“计算方法”课程是研究求线性代数方程组、高次代数方程、常微分方程数值解以及计算数值微分、数值积分算法的课程。

非数值计算算法:“算法设计与分析”课程研究解决线性规划、动态规划等典型问题的算法设计问题;“数据结构”课程研究了各种排序与查找算法等。2/6/20235计算机软件基础3.1.1算法及其性质算法:为解决一个问题而采取的方法和步骤。算法的特性:

(1)有穷性:有穷步骤;(2)确定性:无歧义性;(3)输入:0或多个;(4)输出:1或多个;(5)可行性:在有限时间内完成。 综上可知,算法是精确定义的一系列规则,这些规则指出如何经过有限步骤在有限的时间内产生出所求问题的解。2/6/20236计算机软件基础3.1.2算法的描述算法是对解决问题方法的精确描述,常用的描述工具有:自然语言流程图算法描述语言计算机程序设计语言

2/6/20237计算机软件基础3.1.3算法设计举例

例3-1给定两个正整数m和n,试写出求它们的最大公因子的算法。解:欧几里德算法用自然语言表述如下: 第1步:读入两个正整数m和n(设m>n)。 第2步:求m除以n的余数r=mod(m,n)。 第3步:用n的值取代m,用r的值取代n。 第4步:判别r的值是否为零,如果r=0,则m为最大公因子;否则返回第2步。 第5步:输出m的值,即为最大公因子。2/6/20238计算机软件基础

开始

输入m,n

r←mod(m,n)

m←nn←rr≠0结束Y

输出mN欧几里算法流程图:2/6/20239计算机软件基础欧几里德算法用算法描述语言表示PROCEDUREEuclid BEGINREAD(m,n);REPEATr:=求m除以n的余数;m:=n;n:=r;UNTILr=0; WRITE(m);

END2/6/202310计算机软件基础欧几里德算法用C语言表示main(){

Intm,n,r;

printf(“请输入两个正整数m和n:”);

scanf(“%d%d”,&m,&n);/*读入正整数m和n*/ while(n!=0)

{r=m%n;/*求m除以n的余数*/m=n;/*用n的值取代m*/n=r;/*用r的值取代n*/}

printf(“最大公因子是:%d\n”,m);}2/6/202311计算机软件基础3.1.4怎样衡量算法的优劣 正确性是对算法的基本要求。除此之外,一般衡量算法的优劣以下3个方面来考虑。(1)算法的时间特性(2)算法的空间特性(3)算法的易理解性2/6/202312计算机软件基础3.1.4怎样衡量算法的优劣 设计算法时,还要注意以下几点:(1)通用性。一个算法总是针对某类问题设计的,所以对于求解某类问题中的任何一个问题应该是有效的。(2)确定性。算法中的每个步骤都是确定的,在什么情况下做什么都非常明确,没有含糊不清的地方。(3)有限性。一个算法在执行时,必须经过有限步后停下来,结束算法执行,给出结果,而不能无限地执行下去。2/6/202313计算机软件基础3.2 程序设计基础 程序由计算机基本的操作指令组成,计算机所有的指令称为机器的指令系统。程序中的每一步都由程序员用计算机能够理解的计算机语言编写而成。2/6/202314计算机软件基础主要内容3.2.1 程序设计语言3.2.2 结构化程序设计3.2.3 程序设计步骤2/6/202315计算机软件基础3.2.1程序设计语言 人们针对不同的应用领域开发出了几百种编程语言,随着计算机技术的发展,程序设计语言也不断地变化、发展,新的语言不断涌现,老的语言不断发展、改进,当然有些语言也逐步被淘汰。程序设计语言向着易学、易用、描述问题的能力越来越强的方向发展。

2/6/202316计算机软件基础1.程序设计语言的特点和分类(1)机器语言——第一代语言 机器语言是二进制形式的计算机能直接执行的低级语言。它是由机器指令组成的语言,对应不同的机器就有不同的机器语言。机器语言对人来说既难理解又难掌握,编出的程序不易查错纠错。计算机刚出现时用的是机器语言。2/6/202317计算机软件基础(2)汇编语言—第二代语言 汇编语言比机器语言直观,它的每一条符号指令与相应的机器指令有对应关系,同时又增加了一些宏、符号地址等功能。 使用汇编语言编写的程序称为汇编语言程序,它要经过汇编系统翻译成机器语言后才能执行。例如,微机上常用的Microsoft的宏汇编语言MASM。2/6/202318计算机软件基础(3)高级程序设计语言—第三代语言 高级程序设计语言种类很多,依据语言的性质它们可以分为过程性语言、面向对象语言和专用语言三类。2/6/202319计算机软件基础1) 过程性语言 过程性的编程语言适合于那些顺序执行的算法。用过程性语言编写的程序有一个起点和一个终点,程序从起点到终点执行的流程是直线型的。2/6/202320计算机软件基础1)过程性语言BASIC是为初级编程者设计的,自从1964年问世以来,已经出现了几种流行的版本,包括GW-BASIC,QBASIC,TurboBASIC等,它在PC机上得到广泛应用。它以简单易学为主要特点。COBOL是发展于20世纪60年代的一种语言,适合于大型计算机系统上的事务处理。COBOL是编译执行的过程性高级语言,主要被一些专业程序员用来开发和维护大型商业集团的复杂程序。2/6/202321计算机软件基础1)过程性语言FORTRAN语言它出现于1954年,是出现最早的高级编程语言之一,有着非常广泛的用户群,对于数值计算的应用,至今仍然是一种可选的语言。2/6/202322计算机软件基础1)过程性语言Pascal语言开发于1971年,主要用于结构化程序设计的教学,现在在科学、工程计算领域和系统程序设计方面得到广泛使用,各种计算机系统中都已配置了Pascal语言。在微机上用的TurboPascal语言就是一种开发能力很强的语言。2/6/202323计算机软件基础1)过程性语言C语言是20世纪70年代初作为设计UNIX操作系统的语言而研制的。C语言具有很强的功能而且十分灵活,以其高效、简洁、可移植性强等特点受到计算机用户的青睐。它还具有类似汇编语言的特性,使程序员能“最接近机器”。目前流行的TurboC语言是在微机上运行的,它的集成环境包含有编辑、编译、连接、运行和调试程序所需的一切工具。2/6/202324计算机软件基础2)面向对象语言 面向对象的程序设计语言是建立在用对象编程方法的基础上的。程序被看成是正在进行通信的若干对象的集合。程序设计就是定义对象、建立对象间的通信关系。程序运行的结果就是将对象集的初始状态变成终结状态(目标状态),程序中的输入即是对象间发消息(通信),而输出则是程序中的对象向显示器(或打印机)发消息(通信)的结果。2/6/202325计算机软件基础2)面向对象语言

20世纪70年代以来,尽管出现了十多种面向对象的程序设计语言,但最有生命力的当属VisualBasic、C++、Java等。 微软的VisualBasic(VB)是综合性的且功能强大的编程语言,具有图形设计工具、结构化的事件驱动编程模式,使用户可以既快又简便地编制出Windows下的各种应用程序。2/6/202326计算机软件基础2)面向对象语言

C++成为当今最受欢迎的面向对象程序设计语言之一,因为它既融合了面向对象的能力,又与C语言兼容,保留了C语言的许多重要特性。这就维护了大量开发的C库、C工具以及C源程序的完整性,使C程序员不必放弃自己已经十分熟悉的C语言,只要补充学习C++提供的那些面向对象的新概念即可。目前常用的有BorlandC++版和VisualC++版。2/6/202327计算机软件基础2)面向对象语言

Java语言是20世纪90年代新出现的面向对象的语言,它与C++很相似,但更适用于网络应用。Java是一种独立于平台的语言,Java程序不但能在微机的Windows环境下运行,还同样能运行在其他机器的Macintosh和UNIX环境下,对于Java程序可以说“一次编写,多次使用”。近几年广泛而成功的应用,证明它将推动Internet和网络的发展。2/6/202328计算机软件基础3)专用语言 专用语言是为特殊的应用而设计的语言。今天仍有数百种专用语言在流通,最有代表性的包括LISP、Prolog、APL和Forth。LISP和Prolog适用于人工智能领域,特别是关于知识表示和专家系统构造;APL是为数组和向量运算设计的简洁而强有力的语言;Forth是为开发微处理机软件设计的语言,它支持用户自定义函数并以面向堆栈方式执行,以提高速度和节省内存。2/6/202329计算机软件基础(4)第四代语言 第四代语言(4GL)上升到更高的一个抽象层次,尽管还用不同的语法表示程序结构和数据结构,但已不再涉及太多的算法性细节。迄今,使用最广的第四代语言是数据库查询语言,它支持用户以复杂的方式操作数据库。最流行的SQL(StructuredQueryLanguage)结构化查询语言,支持数据库的定义和操作。它功能强大,简单易学。2/6/202330计算机软件基础(4)第四代语言 程序生成器(ProgramGenerators)代表更为复杂的一类4GL,它只需要很少的语句就可生成完整的第三代语言程序,它不必依赖预先定义的数据库作为它的着手点。 此外,一些决策支持语言(DecisionSupportLanguage)、原型语言(PrototypingLanguage)、形式化规格说明语言(FormalSpecificationLanguage)也被认为属于4GL的范畴。2/6/202331计算机软件基础2.程序设计语言的选择 一项任务可以用多种编程语言来实现,当你为一项工程选择程序设计语言时,主要考虑以下几个因素:(1)应用领域;(2)算法和计算复杂性;(3)数据结构复杂性;(4)软件运行环境;(5)性能方面的需要与实现的条件;(6)软件开发组成员是否都精通这门语言。2/6/202332计算机软件基础2.程序设计语言的选择 项目所属的应用领域常常作为首要考虑的因素,例如,C语言经常用于系统软件的开发,FORTRAN在工程及科学计算领域占主导地位(当然Pascal、BASIC、C也广为使用),数据库管理系统在信息处理领域广泛使用(其中SQL使用较广),汇编语言在工业控制领域被广泛使用,面向对象的语言C++正被用来开发大型的软件系统,Java语言正在网络应用方面发挥作用等。2/6/202333计算机软件基础3.2.2结构化程序设计 程序的编写就是用程序设计语言把算法程序化。程序员应该根据算法的要求,选择一种程序设计语言,对算法进行编码。对该程序设计语言,必须要深刻地理解、熟练地掌握、正确地运用,以便能编出高质量的程序代码。2/6/202334计算机软件基础编写程序的基本要求语法上的正确性语义的正确性2/6/202335计算机软件基础高质量程序的特点运行速度快占用存储空间小可靠性高易懂性2/6/202336计算机软件基础1.三种基本的控制结构(1)顺序控制结构(2)选择控制结构(3)重复控制结构2/6/202337计算机软件基础三种基本控制结构共同点(1)只有一个入口(2)只有一个出口(3)结构内的每一部分都有机会被执行(4)结构内没有死循环(无终止的循环)2/6/202338计算机软件基础2.程序设计风格(1)文档化(documentation)要有效、适当地使用注释。要使用含义鲜明的符号名。(2)格式化(layout):尽量使程序布局合理、清晰、明了。恰当地利用空格、空行和缩进。自然的程序段之间用空行分开。2/6/202339计算机软件基础2.程序设计风格(3)模块化 把复杂的程序分解为功能单一的程序模块,每一个程序模块只完成一个独立的功能,模块之间尽量减少联系,即高内聚、低耦合。2/6/202340计算机软件基础3.2.3程序设计步骤 设计一个能解决实际问题的计算机程序需要经过以下几个过程:(1)建立模型:由实际问题的描述抽象出数学模型,即由物理模型到抽象模型,用形式化方法描述现实世界。(

2)算法设计:给出解决问题的步骤,即算法。同一个问题可以有各种不同的解决办法,可以从中选取一种最合适的算法。2/6/202341计算机软件基础3.2.3程序设计步骤(3)算法表达:选择一种表达算法的工具,对算法进行清晰的表达。(4)编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。(5)程序测试:对编写好的程序进行测试,查找并修改程序中的错误。(6)程序文档编写与程序维护:整理和编写程序文档,以便更好地维护程序。对程序员有用的文档为程序手册,对用户有用的文档为用户参考手册。2/6/202342计算机软件基础3.3数据结构基础

《数据结构》是计算机科学技术专业的一门重要专业基础课,是教学计划中的核心课程之一。它不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。2/6/202343计算机软件基础主要内容3.3.1 什么是数据结构3.3.2 几种典型的数据结构线性表栈和队列树图2/6/202344计算机软件基础3.3.1什么是数据结构数据:一切可输入计算机并能为计算机所处理的描述客观事物的符号的集合。例如数、字符、图形、图像、声音等都可以视为数据。数据结构:带有结构的数据元素的集合,结构反映了数据元素之间存在的某种关系,但不涉及数据的具体内容。

2/6/202345计算机软件基础数据结构课程主要研究内容数据结构课程主要研究数据的逻辑结构和物理结构以及它们之间的关系,并对这种结构定义相应运算。 数据的逻辑结构可分为线性数据结构(线性表、栈、队列、串、数组和文件)和非线性数据结构(树、图)。 数据的物理结构指数据元素在主存中存放形式。数据运算是定义在数据的逻辑结构上的,但运算的具体实现要在存储结构上进行。常用的运算有:检索、插入、删除、更新、排序等。2/6/202346计算机软件基础3.3.2几种典型的数据结构1.线性表线性表是n个数据元素的有限序列,可表示为(a1,a2,…,an)。例如:全班学生名单;计算机导论成绩等都可以用线性表表示。当n=0时,定义线性表为空表。同一线性表中的元素属于同一类数据对象。线性表的操作有置空表,求表的长度,取表中元素,在表中查找某元素,插入或删除一个元素等。2/6/202347计算机软件基础线性表的存储结构线性表的存储结构通常采用顺序存储和链式存储两种存储结构。顺序存储结构是用一组地址连续的存储单元依次存放线性表的元素。线性表的第i个元素ai的存储位置为:

LOC(ai)=LOC(a)+(i-1)*C

式中LOC(a)是线性表的第一个数据元a的存储位置,通常称为线形表的基地址。2/6/202348计算机软件基础线性表的顺序存储结构图3-9线性表的顺序存储结构1000H1004H1000H+4(i-1)a1元素ai元素存储地址存储单元2/6/202349计算机软件基础顺序存储结构的缺点①在进行插入或删除运算时,需要移动大量元素。②在为长度变化较大的线性表预先分配空间时,必须按最大空间分配,使存储空间不能得到充分利用。③表的容量难以扩充。2/6/202350计算机软件基础线性表的链式存储结构 链式存储结构用一组任意存储单元(可以是连续的或不连续的存储单元)来存储线性表的元素。 在这种存储结构中,每个元素需存储两个部分信息:一部分就是元素本身的信息,称之“数据域”;另一部分则是该元素的直接后继元素的存储位置,称之“指针域”(或“链”)。2/6/202351计算机软件基础线性表的链式存储结构

(c)删除一个元素a32/6/202352计算机软件基础2.栈和队列栈和队列是各种程序设计中广泛应用的两种数据结构。从逻辑结构上看,它们是一种运算受限制的线性表,也称为限定性数据结构。2/6/202353计算机软件基础(1)栈(stack)

栈是限定在表尾进行插入和删除运算的线性表,其表尾称为栈顶(top),表头称为栈底(bottom)。当表中没有元素时,称为空栈。

若给定栈S=(a1,a2,…,an),则称a1是栈底元素,an是栈顶元素。栈的操作是按“先进后出”(LIOF:LastInFirstOut)的原则进行的。2/6/202354计算机软件基础栈的逻辑结构图3-11进栈和出栈示意图2/6/202355计算机软件基础栈的基本操作与存储结构 栈的基本操作除入栈和出栈外,还有取栈顶位置上的元素、置S为一个空栈、判定S是否为空栈等操作。 在计算机中,栈的存储结构与线性表的相似,可以分为顺序存储结构和链式存储结构两种。2/6/202356计算机软件基础(2)队列队列的逻辑结构与栈相反,队列(queue)是一种“先进先出”(FIFO:FirstInFirstOut)的线性表。只允许在队列一端插入,并在另一端进行删除。2/6/202357计算机软件基础(2)队列 队列的基本运算与栈的运算类似,主要包括下列五种:入队列(在队列Q的队尾插入元素X),出队列(删除队列Q的队头元素),取出队列Q的队头元素,置队列Q为一个空队列,判别Q是否为一个空队列。 队列的存储结构也与栈的存储结构相类似,可分为队列的顺序存储结构和链式存储结构两类。2/6/202358计算机软件基础3.树 树结构是非线性结构,可以用来描述客观世界中广泛存在的层次结构的关系。例如人类社会的族谱、各种社会组织机构等都可以表示为树型结构。

树形的存储结构也可分为顺序存储结构和链式存储结构两类。 下面我们介绍的二叉树和树其结构都是树形的结构。2/6/202359计算机软件基础(1)二叉树 二叉树是有限个元素的集合,该集合或者为空、或者由一个称为根的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。Ф左子树右子树左子树右子树

(a)(b)(c)(d)(e)

图3-13二叉树的五种基本形态2/6/202360计算机软件基础BCDEFGHIJKLMNO123456789101112131415ABCDEFGHI123456789

(a)一棵满二叉树

(b)一棵非满二叉树A2/6/202361计算机软件基础ABDCEFGHIJ12345678910ABDCGEF1234567

(a)一棵完全二叉树

(b)一棵非完全二叉树

2/6/202362计算机软件基础(2)树

树是n个有限数据元素的集合。当n=0时,称这棵树为空树。在一棵非空树T中:1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点。2)若n>1,除根结点之外的其余数据元素被分成m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm称为这个根结点的子树。2/6/202363计算机软件基础ABCDEFGIH图3-16树结构示意图2/6/202364计算机软件基础(2)树

如果一棵树中结点的各子树从左到右是有次序的,即若交换了某结点各子树的相对位置,则构成不同的树,称这棵树为有序树;反之,则称为无序树。零棵或有限棵不相交的树的集合称为森林。任何一棵树,删去根结点就变成了森林。2/6/202365计算机软件基础4.图 图结构是一种比树结构更复杂的非线性结构。任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。图结构被用于描述各种复杂的数据对象,在自然科学、社会科学和人文科学等许多领域有着非常广泛的应用。图的存储结构可以用顺序存储结构和链式存储结构以及顺序存储结构和链式存储结构的结合,例如邻接矩阵、邻接表等。

2/6/202366计算机软件基础4.图图是由非空的顶点集合和描述顶点之间关系的边(或者弧)集合组成,其形式化定义为:G=(V,E); G表示一个图,V是图G中顶点的集合,E是图G中边的集合,集合E中P(vi,vj)表示顶点vi和顶点vj之间有一条直接连线,即偶对(vi,vj)表示一条边。2/6/202367计算机软件基础v1v4v3v2v5图3-17无向图

v4v3v2v1图3-18有向图2/6/202368计算机软件基础3.4软件工程基础软件工程自1968年提出以来,近40年中,已发展成为用于指导软件生产工程化,覆盖软件开发方法学、软件工具与环境、软件工程管理等内容的一门新学科。随着程序设计从结构化程序设计发展到面向对象程序设计,软件工程也由传统的软件工程演变为面向对象的软件工程,现在正向更新一代的基于构件的软件工程迈进。2/6/202369计算机软件基础主要内容3.4.1 软件工程概述3.4.2 软件生存周期3.4.3 软件开发模型3.4.4 软件开发方法2/6/202370计算机软件基础3.4.1软件工程概述1.软件的发展与软件危机

20世纪60年代末期所发生的软件危机,体现在软件可靠性没有保障、软件维护费用不断上升、进度无法预测、成本增长无法控制、程序人员无限度地增加等各个方面,以致形成人们难以控制软件开发的局面。计算机领域把大型软件开发和维护过程中遇到的一系列严重问题称为“软件危机”(SoftwareCrisis)。2/6/202371计算机软件基础2.软件工程学的主要内容

(1)软件工程的定义 软件工程是以系统的、规范的、定量的过程化方法应用于软件的开发、运行和维护,以及对这些方法的研究。 软件工程的目标就是在要求的时间内研制开发出具有良好的软件质量和费用合理的产品。2/6/202372计算机软件基础(2)软件工程学的主要内容软件工程学的主要内容是软件开发技术和软件工程管理。软件开发技术包含了软件开发方法、软件工具和软件工程环境;软件工程管理包含了软件工程经济学和软件管理学。2/6/202373计算机软件基础软件开发方法常用的软件开发方法:结构化方法是采用结构化的技术来完成软件开发的各项任务;面向对象方法是面向对象方法在软件工程领域的全面运用;面向构件的方法是创建和利用可复用的软件构件来解决软件开发问题。2/6/202374计算机软件基础软件工具

软件工具(SoftwareTools)是指帮助开发和维护软件的软件。 利用软件工具可提高软件设计的质量和生产效率。例如,编程时用的编辑程序,测试用的跟踪程序、静态分析工具等。众多的软件工具组成“工具箱”,供开发人员选用。2/6/202375计算机软件基础软件工程环境 软件工程环境正是软件方法和工具的结合,它是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成。软件开发环境的设计目标是提高软件生产率和改善软件的质量。2/6/202376计算机软件基础软件工程管理学 软件工程管理就是对软件工程生存期内的各阶段的活动进行管理,实现按预定的时间和费用成功地完成软件的开发和维护。 软件工程管理学的内容包括软件费用管理、人员组织、工程计划管理和软件配置管理等。

2/6/202377计算机软件基础软件工程经济学 软件工程经济学借鉴经济学的成熟经验、技术和方法为软件工程决策服务。

包括软件成本估算模型分析,软件生命周期成本估算,以成本效益分析、边际分析、风险分析为基础的决策方法以及软件成本估算技术等。2/6/202378计算机软件基础3.4.2软件生存周期 软件生存周期是软件工程的一个重要概念,是一个从用户需求开始,经过开发、交付使用,在使用中不断地增补修订,直至让位于新的软件的全过程,是指软件产品从考虑其概念开始,到该软件产品不再能使用为止的整个时期。2/6/202379计算机软件基础3.4.2软件生存周期 软件生存周期一般划分为软件计划、软件开发和软件运行维护三个时期组成。

软件计划时期分为问题定义、可行性研究两个阶段。

软件开发时期可分为需求分析、软件设计、程序编写、软件测试等阶段。

软件运行维护时期是指软件交付使用后在运行过程中需要不断地维护,使软件能持久地满足用户的需要。2/6/202380计算机软件基础3.4.2软件生存周期1.问题定义:系统要解决的问题是什么?2.可行性研究:问题是否有可行性方案?3.需求分析:目标系统必须做什么?4.软件设计:怎样实现(划分及模块具体描述) 目标系统?5.程序编写6.软件测试:单元、集成及验收测试;7.软件运行维护:改正性、适应性及完善性维 护。2/6/202381计算机软件基础3.4.3 软件开发模型 软件开发模型是软件开发全部过程、活动和任务的结构框架。 软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目开发工作的基础。 常用的有瀑布模型,快速原型模型,演化模型,螺旋模型,喷泉模型,构件组装模型,转换模型和智能模型等。2/6/202382计算机软件基础(1)瀑布模型 瀑布模型(WaterfallModel)是1970年WinstonRoyce提出的最早出现的软件开发模型。 瀑布模型遵循软件生存期的划分,明确规定每个阶段的任务,各个阶段的工作按顺序展开,形如瀑布流水,最终得到软件系统或软件产品。2/6/202383计算机软件基础(1)瀑布模型图3-19瀑布模型2/6/202384计算机软件基础(2)快速原型 快速原型(RapidPrototypeModel)模型是把用户最初的需求快速建立一个只包括核心功能并可在计算机上运行的程序(原型)让用户使用。用户通过使用这个原型,以便能准确地认识到他们的实际需要是什么,提出进一步的需求,开发人员按照用户意见快速修改原型,直到得到明确完整的需求,按照这个最后的需求开发出系统。2/6/202385计算机软件基础(2)快速原型

图3-20快速原型模型快速分析形成最终系统快速构造原型运行原型评价原型快速修改系统不满意满意2/6/202386计算机软件基础(3)演化模型 演化模型(evolutionarymodel)结合了瀑布模型的线性顺序的特点和快速原型模型的迭代思想。 演化模型与快速原型的相同之处是迭代的特征,不同之处是演化模型的每一轮都得到一个用户真正使用的完整版本,而快速原型每一轮得到的是在功能和性能上大大简化了的版本。2/6/202387计算机软件基础(3)演化模型

需求分析设计编码测试运行需求分析设计编码测试运行需求分析设计编码测试运行工作版本n工作版本2工作版本12/6/202388计算机软件基础(4)螺旋模型 螺旋模型是由TRW公司的B.Boehm于1988年提出的,它将瀑布模型和演化模型等结合起来,并且强调了其他模型均忽略了的风险分析。螺旋模型更适合于大型软件的开发,应该说它对于具有高度风险的大型复杂软件系统的开发是较为实际的方法。2/6/202389计算机软件基础图3-22螺旋模型2/6/202390计算机软件基础(5)喷泉模型 喷泉模型(FountainModel)主要用于采用对象技术的软件开发项目。软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动的迭代和无间隙,使其开发自然地包括复用。2/6/202391计算机软件基础图3-23喷泉模型2/6/202392计算机软件基础(6)构件组装模型

构件组装模型(SoftwareReuseModel)旨在开发具有各种一般性功能的软件模块—构件,一般这些构件适用于某个领域(例如建筑、电子、机械、财经等),这些构件设计时考虑其适应各种界面的接口规格,将它们规范化后放入构件库,供软件开发时利用。

构件组装模型利用已有的软件构件来构造应用软件系统,软件开发过程也用螺旋模型,支持软件开发的迭代方法。2/6/202393计算机软件基础(6)构件组装模型

构件组装模型在实施开发活动时,要描述项目需要什么构件,然后在构件库中查找构件,如果有构件可用就直接使用;否则如果有相似的构件就进行修改,修改后的构件用于构造系统并且追加到构件库中;若没有需要的构件,就要进行开发,再将开发的新构件用于构造系统并且追加到构件库中。 建立一个丰富的构件库,充分复用已有构件,可以减少软件生产中的重复开发,避免开发人员的重复劳动,提高开发效率,缩短开发周期,降低开发成本。2/6/202394计算机软件基础3.4.4软件开发方法 软件工程研究的范围非常广泛,包括技术方法、工具和管理等许多方面。其中软件开发的技术方法是软件工程研究的重点。 当前软件开发方法主要有结构化软件开发方法、面向对象开发方法和基于构件的软件开发方法。2/6/202395计算机软件基础1.结构化软件开发方法 结构化方法是通过按功能将问题分解抽象成模块,建立模块和模块之间的调用关系来进行软件开发的。针对软件开发的不同阶段和活动,该方法又可以划分为结构化分析(structuredanalysis,SA)、结构化设计(structureddesign,SD)和结构化程序设计(structuredprogramdesign,SP)3个阶段和方法。2/6/202396计算机软件基础(1)结构化方法的基本原则 采用结构化方法来分析和解决问题应遵循3个基本原则:1)分解原则2)模块化原则3)抽象原则2/6/202397计算机软件基础(2)结构化分析方法 结构化分析方法给出一组帮助系统分析人员产生功能规约的原理和技术。一般利用图形表示用户需求,以数据流图为基础,伴以数据词典,并配上结构化语言、判定表和判定树等手段,从而达到为解决问题建立模型。2/6/202398计算机软件基础(3)结构化设计方法 结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术,它通常与结构化分析街接起来使用,以数据流图为基础得到软件模块结构。 第一阶段是概要设计,又称总体设计或初步设计,从整体上回答系统应该如何实现的问题,即确定软件结构。 第二阶段是详细设计阶段,确定每个模块具体的执行过程,故又称“过程设计”。2/6/202399计算机软件基础(4)结构化程序设计 结构化程序设计是把软件结构化设计的结果翻译成用某种结构化程序设计语言书写的程序。 虽然程序设计的质量取决于软件设计的质量,但是选用的程序设计语言和编码的风格对软件的可靠性、可读性、可测试性和可维护性产生深远影响。2/6/2023100计算机软件基础2.面向对象的软件开发方法 面向对象的软件开发技术(object-orienteddevelopmenttechnology,OOT)以客观世界中的对象为中心,以类和继承为构造机制来抽象现实世界。这种技术起源于面向对象的程序设计语言。自20世纪80年代中期到90年代,面向对象的研究重点已从编程语言转移到设计方法学。面向对象的软件开发方法包

温馨提示

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

评论

0/150

提交评论