二级VB公共基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构与算法
一、基本概念:
数据(Data):信息的载体,能够被计算机识别、存储和加工处理的物理符号。
包括文本类型的数据(如:字母、数字、汉字)和多媒体类型的数据(如:声音、动画、图像)。
数据元素(Data Element):是数据的基本单位,有时也称为元素、结点、顶点、记录,可以有若干个数据项(字段、域、属性)组成。
数据结构(Data Structure):指的是数据之间的相互关系,即数据的组织形式。
其包括三个部分:
1、逻辑结构:数据元素之间的逻辑关系
2、存储结构:数据元素及其关系在计算机存储器内的表示。
3、数据的运算(算法):即对数据施加的操作
数据的逻辑结构有两大类:
1、线性结构:
特征是:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。
例:一维数组、链表、栈、队列、串、线性表、线性链表
2、非线性结构:
特征是:一个结点可能有多个直接前趋和直接后继。
例:多维数组、广义表、树、图
数据的存储结构有以下基本存储方法:
1、顺序存储方法:
该方法是将逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,一般通过数组来实现的。
2、链接存储方法:
该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
通过指针类型来实现的。
3、索引存储方法:
该方法通常是在存储结点信息的同时,还建立附加的索引表,索引表中的每一项称为索引项,索引项的一般形式是:关键字,地址。
4、散列存储方法:
该方法的基本思想是根据结点的关键字直接计算出该结点的存储地址,通过散列函数实现。
例:除余法散列函数、相乘取整法散列函数
算法的概念:计算机算法为计算机解题的过程实际上是在实施某种算法。
算法的基本特征:
1、可行性(Effectiveness):针对实际问题而设计的算法,执行后能够得到满意的结果。
2、确定性(Definiteness):算法中的每一个步骤都必须有明确的定义,不允许出现歧义性。
3、有穷性(Finiteness):算法必须在有限时间内做完,即必须在执行有限个步骤之后终止。
4、算法的复杂度包括时间复杂度和空间发杂度。
时间复杂度:该算法执行的时间耗费,它是该算法所求解问题规模n的函数。
空间复杂度:该算法执行时所耗费的存储空间,它也是问题规模n的函数。
二、线性表:
线性表(Linear List):是由n(n>=0)个数据元素(结点)a1,a2,a3,······,an组成的有限序列。
对于非空的线性表,有且仅有一个开始结点a1,它没有直接前趋;有且仅有一个终
端结点an,它没有直接后继;其余的结点有且仅有一个直接前趋结点和一个直接后继结点。
线性表的存储结构:
1、顺序存储(Sequential List):将线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。
2、链式存储(Linked List):逻辑上相邻的结点,物理上也相邻,存储单元可以是连续的,也可以是不连续的,在存储每个结点值的同时,还存储指向其后继结点的地址,用这种方法存储的线性表称为链表。
常见的运算有:
表的初始化、求表的长度、取表中的第i个结点、查找结点、插入新的结点、删除结点。
顺序表和链表的比较:
1、基于空间的考虑:
A、顺序表的存储空间是静态分配的,而链表的存储空间是动态分配的。
B、顺序表占的存储空间必须是连续的,而链表占的存储空间可以是连续的,也可是不连续的
C、顺序表存储密度为1,而链表中的每个结点,除了数据域外,还要额外的设置指针域,存储密度小于1
2、基于时间的考虑:
A、在链表中的任何位置上进行插入和删除,只需要修改指针,而顺序表中平均将要移动近一半的结点。
B、顺序表是随机存取结构,它的存取时间为O(1),而链表需从头结点顺着链扫描链表。
总之,当线性表的长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表作为存储结构;当线性表的长度变化较大,难以估计其存储规模时,以采用链表作为存储结构为好。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;对于频繁进行插入和删除的线性表,宜采用链表做存储结构。
例:关于线性表的描述中,错误的是( C )
A、线性表是线性结构
B、线性表的顺序存储结构,必须占用一片连续的存储单元
C、线性表是单链表
D、线性表的链式存储结构,不必占用一片连续的存储单元
三、栈:
栈(Stack):是限制仅在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
当表中没有元素时称为空栈。
是一种后进先出的线性表,又称为LIFO表。
栈是按照“先进后出”或“后进先出”的原则组织数据的。
栈的顺序存储及其运算
用一维数组s(1:m)作为栈的顺序存储空间,其中m为最大容量。
在栈的顺序存储空间s (1:m)中,s(bottom)为栈底元素,s(top)为栈顶元素
栈的基本运算有三种:入栈、退栈与读栈顶元素。
Top=0表示栈空;top=m表示栈满。
入栈运算:是指在栈顶位置插入一个新元素。
首先将栈顶指针加一(即top加1),然后将新元素插入到栈顶指针指向的位置。
当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。
这种情况称为栈“上溢“错误。
退栈运算:是指取出栈顶元素并赋给一个指定的变量。
首先将栈顶元素(栈顶元素指向的元素)赋给一个指定的变量,然后将栈顶指针减一(即top减1)。
当栈顶指针为0时,说明栈空,不可能进行退栈操作。
这种情况称为栈的“下溢“错误。
(3) 读栈顶运算:是指将栈顶元素赋给一个指定的变量。
这个运算不删除栈顶元素,只是将它赋给一个变量,因此栈顶指针不会改变。
当栈顶指针为0时,说明栈空,读不到栈顶元素
栈的存储:
顺序存储、链式存储
例:若进栈的输入序列是A、B、C、D、E,并且在它们进栈的过程中可以进行出栈操作,则不可能出现的出栈序列是( D )
A、EDCBA
B、DECBA
C、DCEAB
D、ABCDE
四、队列:
队列(Queue):也是一种运算受限的线性表,它只允许在表的一端进行插入,而在另一端进行删除。
允许删除的一段称为队头(Front),允许插入的一段称为队尾(Rear)。
(类似于生活中的购物排队)。
是一种先进先出的线性表,又称为FIFO表。
队列的修改是按照先进先出的原则进行的,因此队列也称为“先进先出“的线性表,或者”后进后出“的线性表。
队列的基本运算:
队列的初始化、判队空、判队满、入队、出队
队列的存储实现:
顺序存储、链式存储
例:一个队列的入队序列是1,2,3,4,则队列的输出序列是( B )
A、4,3,2,1
B、1,2,3,4
C、1,4,3,2
D、3,2,4,1
五、串:
串(String):是零个或多个字符组成的有限序列。
串中所包含的字符个数称为该串的长度。
串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串
注:空串是任意串的子串,任意串是其自身的子串
串有串常量、串变量之分:
1、串常量在程序中只能被引用但不能改变其值,即只能读不能写。
2、串变量其值是可以改变的。
串的基本运算:
求串长、串复制、串联接、串比较、字符定位、
六、树(非线性结构):
树(Tree):是n(n>=0)个结点的有限集T,T(n=0)为空时称为空树,否则它满足如下两个条件:
1、有且仅有一个特定的称为根(Root)的结点
2、其余的结点可分为m(m>=0)个互不相交的子集T1,T2,…….,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subtree)。
在树的树形图表示中,结点通常是用圆圈表示的,结点的名字一般是写在圆圈旁边,有时亦可写在圆圈内。
度(Degree):一个结点拥有的子树数称为该结点的度。
一棵树的度是指该树中结点的最大度数。
叶子(Leaf):度为零的结点称为叶子或终端结点
分支结点(Node):度不为零的结点称为分支结点。
树中某个结点的子树之根称为该结点的孩子(Child)结点或子结点,相应的该结点称为孩子结点的双亲(Parents)结点或父结点。
同一个双亲的孩子称为兄弟结点(Sibling)
结点的层数(Level)是从根起算,设根的层数为1,其余结点的层数等于其双亲结点的层数加1.
树中结点的最大层数称为树的高度(Height)或深度(Depth).
森林(Forest):是m(m>=0)棵互不相交的树的集合。
删去一棵树的根,就得到一个森林,反之,加上一个结点作树根,森林就变为一棵树。
二叉树(Binary Tree):是n(n>=0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。
二叉树中,每个结点最多只能有两棵子树,并且有左右之分。
父结点(根)在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。
例如结点A是树的根结点。
子结点和叶子结点在树结构中,每一个结点可以有多个后件,称为该结点的子结点。
没有后件的结点称为叶子结点。
例如,结点D,E,F均为叶子结点。
度在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
例如,根结点A和结点B的度为2,结点C的度为1,
叶子结点D,E,F的度为0.所以,该树的度为2.
深度定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1.树的最大层次称为树的深度。
例如,根结点A在第一层,结点B,C在第二层,结点D,E,F在第三层。
该树的深度为3.
子树在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。
二叉树的五种基本形态:
例:具有3个结点的二叉树有几种形态。
满二叉树(Full Binary Tree):一棵深度为k且有2K-1个结点的二叉树称为满二叉树完全二叉树(Complete Binary Tree):若一棵二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。
二叉树的性质:
性质1:二叉树第i层上的结点数目最多为2K-1(i>=1)
性质2:深度为k的二叉树至多有2k-1个结点(k>=1)
性质3:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1 性质4:具有n个结点的完全二叉树的深度为[lgn]+1(取下整) 或 [lg(n+1)](取上整)。
完全二叉树具有两个性质:
(5):具有n个结点的完全二叉树的深度为(log2|n)+1。
.
(6):设完全二叉树共有n个结点。
如果从根结点开始,按层次(没层次从左到右)用自然数1,2,…..,n给结点进行编号,则对于编号为k(k=1,2,….)的结点由以下结论:(1)若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2).
(2)若2k<=n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点)。
(3)若2k+1《+n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
例:一棵二叉树的结点数为18个,求它的最小高度
已知度为2的结点数为15个,求叶子结点数
二叉树的遍历:
遍历(Traversal):是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。
前序遍历:(又称为先序遍历、先根遍历)
若二叉树为空,则执行空操作。
否则:
1、访问根结点;
2、前序遍历左子树;
3、前序遍历右子树。
中序遍历:(又称为中根遍历)
若二叉树为空,则执行空操作。
否则:
1、中序遍历左子树;
2、访问根结点;
3、中序遍历右子树。
后序遍历:(又称为后根遍历)
若二叉树为空,则执行空操作。
否则:
1、后序遍历左子树;
2、后序遍历右子树;
3、访问根结点。
例:一棵二叉树的结点数为18个,求它的最小高度
已知度为2的结点数为15个,求叶子结点数
1)一棵二叉树的前序遍历序列为ABDGCFK,中序遍历序列为DGBAFCK,则结点的后序遍历序列是( B )
A、ACFKDBG
B、GDBFKCA
C、KCFAGDB
D、ABCDFKG
后序遍历的顺序是“左子树—右子树—根结点”;中序遍历顺序是“左子树—根结点——右子树”;前序遍历顺序是“根结点—左子树——右子树”。
2) 在一棵二叉树上第5层的结点数最多是__B____。
A. 8
B. 16
C. 32
D. 15
性质1:二叉树第i层上的结点数目最多为2K-1(i>=1)
3) 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为_B_____。
A. 349
B. 350
C. 255
D. 351
4)在深度为5的满二叉树中,叶子结点的个数为__C____。
A. 32
B. 31
C. 16
D. 15
一棵深度为k且有2K-1个结点的二叉树称为满二叉树
七、排序(Sort):
所谓排序,就是指整理文件中的记录,使之按关键字递增(或递减)次序排列起来。
交换类排序法:
1)冒泡排序(Bubble Sorting):
通过对待排序序列从后向前或从前向后(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较大的元素逐渐从前部移向后部或较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元)。
冒泡排序法,需要比较的次数为n(n-1)/2;
2)快速排序(Quick Sorting):任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。
选择排序(Selection Sorting):
扫描整个线性表,从中选出最小的元素,将它交换到表的最前面;然后对剩下的子表采用同样的方法,直到子表空为止。
1)简单选择排序法,最坏情况需要n(n-1)/2次比较;
(2)堆排序法,最坏情况需要O(nlog?n)次比较。
插入排序(Insertion Sorting):
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位
(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)置,直到全部记录插入完成为止。
希尔排序法,最坏情况需要O(n?)次比较。
各种内部排序方法的比较
排序方法时间复杂度空间复杂度
最好时间平均时间最坏时间
直接插入O(n) O(n2) O(n2) O(1)
直接选择O(n2) O(n2) O(n2) O(1)
冒泡O(n) O(n2) O(n2) O(1)
快速O(nlgn) O(nlgn) O(n2) O(lgn)
堆O(nlgn) O(nlgn) O(nlgn) O(1)
例:1)下列关于栈的叙述中正确的是__D____。
A. 在栈中只能插入数据
B. 在栈中只能删除数据
C. 栈是先进先出的线性表
D. 栈是先进后出的线性表
2)希尔排序法属于哪一种类型的排序法__B____。
A. 交换类排序法C. 选择类排序法
B. 插入类排序法D. 建堆排序法
3)对一个具有n个元素的序列进行冒泡排序,在最坏情况下,要进行交换的次数是(C )
A、n(n+1)/2
B、n(n-1)/2
C、n*n/2
D、n(n+1)/2-1
4)对n个元素进行冒泡排序过程中,最好情况下的时间复杂性为( D )
A、O(1)
B、O(log2n)
C、O(n2)
D、O(n)
5)对n个元素进行快速排序的过程中,平均情况下的时间复杂性为( D)
A、O(1)
B、O(lgn)
C、O(n2)
D、O(nlgn)
6)在下列选项中,哪个不是一个算法一般应该具有的基本特征__C____。
A. 确定性
B. 可行性
C. 无穷性
D. 拥有足够的情报
7)下列关于队列的叙述中正确的是__C____。
A. 在队列中只能插入数据
B. 在队列中只能删除数据
C. 队列是先进先出的线性表
D. 队列是先进后出的线性表
8)在下列几种排序方法中,要求内存量最大的是__D____。
A. 插入排序
B. 选择排序
C. 快速排序
D. 归并排序
9)线性表的顺序存储结构和线性表的链式存储结构分别是___B___。
A. 顺序存取的存储结构、顺序存取的存储结构
B. 随机存取的存储结构、顺序存取的存储结构
C. 随机存取的存储结构、随机存取的存储结构
D. 任意存取的存储结构、任意存取的存储结构
10)在单链表中,增加头结点的目的是_A_____。
A. 方便运算的实现
B. 使单链表至少有一个结点
C. 标识表结点中首结点的位置
D. 说明单链表是线性表的链式存储实现
八、查找(Searching):
所谓查找是指给定一个值K,在含有n个结点的表中找出关键字等于给定值K的结点。
若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关的提示信息。
顺序查找(Sequential Search)的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和给定值K相比较,若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。
顺序查找即适用顺序存储结构,又适用链式存储结构。
查找成功的平均查找长度为:(n为结点数目)
(1+2+3+4+···+n) / n = (n+1)/2
二分查找(Binary Search)又称折半查找,它是一种效率较高的查找方法,二分查找要求线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。
另外,二分查找只适用顺序存储结构,在链式存储结构上无法实现二分查找。
二分法查找只适用于顺序存储的有序表,对于长度为n的序线性表,最坏情况只需比较??n次。
查找成功时的平均查找长度:(n为结点数目)
当n很大时,可用近似公式: lg(n+1)-1 表示
例:对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为___B___。
A. N+1
B. N
C. (N+1)/2
D. N/2
一、程序设计设计方法和风格?
如何形成良好的程序设计风格:1、源程序文档化; ?2、数据说明的方法; ?3、语句的结
构清晰第一、效率第二;?4、输入和输出
二、结构化程序设计
结构化程序设计方法的四条原则是:1、自顶向下;2、逐步求精;3、模块化;?4、限制使用goto语句。
结构化程序的基本的特点:
(1)顺序结构:一种简单的程序设计,最基本、最常用的结构;
(2)选择结构:又称分支结构,包括简单选择和多分支选择结构,可根据条件,判断应该选择哪一条分支来执行相应的语句序列;
(3)重复结构:又称循环结构,可根据给定条件,判断是否需要重复执行某一相同程序段。
三、面向对象的程序设计
面向对象的程序设计:以60年代末挪威奥斯陆大学和挪威计算机中心研制的SIMULA 语言为标志。
面向对象方法的优点:(1)与人类习惯的思维方法一致;?(2)稳定性好;?(3)可重用性好;?(4)易于开发大型软件产品;?(5)可维护性好。
对象是面向对象方法中最基本的概念,可以用来表示客观世界中的任何实体,对象是实体的抽象。
面向对象的程序设计方法中的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组表示其静态特征的属性和它可执行的一组操作组成。
属性即对象包含的信息,操作描述了对象执行的功能,操作也称为方法或服务。
对象的基本的特点:(1)标识惟一性;?(2)分类性;?(3)多态性;?(4)封装性;?(5)模块独立性好。
类是指具有共同属性、共同方法的对象的集合。
所以类是对象的抽象,对象是对应类的一个实例。
消息是一个实例与另一个实例之间传递的信息。
消息的组成包括(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。
继承是指能够直接获得已有的性质和特征,而不必重复定义他们。
继承分单继承和多重继承。
单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。
多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象。
例:1)下面描述中,符合结构化程序设计风格的是_A_____。
A. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
B. 模块只有一个入口,可以有多个出口
C. 注重提高程序的执行效率
D. 不使用goto语句
2)下面概念中,不属于面向对象方法的是__D____。
A. 对象
B. 继承
C. 类
D. 过程调用
3)对建立良好的程序设计风格,下面描述正确的是______。
(A)
A. 程序应简单、清晰、可读性好
B. 符号名的命名要符合语法
C. 充分考虑程序的执行效率
D. 程序的注释可有可无
4)下面对对象概念描述错误的是______。
(A)
A. 任何对象都必须有继承性
B. 对象是属性和方法的封装体
C. 对象间的通讯靠消息传递
D. 操作是对象的动态性属性
5)面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。
(C)
A. 模拟现实世界中不同事物之间的联系
B. 强调模拟现实世界中的算法而不强调概念
C. 使用现实世界的概念抽象地思考问题从而自然地解决问题
D. 鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考
6)在设计程序时,应采纳的原则之一是______。
(A)
A. 程序结构应有助于读者理解
B. 不限制goto语句的使用
C. 减少或取消注解行
D. 程序越短越好
7)下列叙述中,不属于软件需求规格说明书的作用的是__D____。
A. 便于用户、开发人员进行理解和交流
B. 反映出用户问题的结构,可以作为软件开发工作的基础和依据
C. 作为确认测试和验收的依据
D. 便于开发人员进行需求分析
软件工程基础
一、基本概念:
软件(Software):软件是一种产品(逻辑产品),指的是计算机中程序及其说明程序的各种文档。
“程序”是计算任务的处理对象和处理规则的描述;“文档”是有关计算机程序功能、设计、编制、使用的文字或图形资料。
计算机软件是包括程序、数据及相关文档的完整集合。
软件的特点包括:
(1)软件是一种逻辑实体;
(2)软件的生产与硬件不同,它没有明显的制作过程;
(3)软件在运行、使用期间不存在磨损、老化问题;
(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;
(5)软件复杂性高,成本昂贵;
(6)软件开发涉及诸多的社会因素
软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。
应用软件为解决特定领域的应用而开发的软件
系统软件计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件
支撑软件(工具软件)支撑软件是介于两者之间,协助用户开发软件的工具软件
软件危机的表现:
1、软件需求的增长得不到满足
2、软件开发成本和进度无法控制
3、软件质量难以保证
4、软件不可维护或维护程度非常低
5、软件成本不断提高
6、软件开发生产效率的提高赶不上硬件的发展和应用需求的增长
软件工程(Software Engineering):用工程化的方法、科学知识和技术原理来定义、开发、维护软件的一门学科。
软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
软件工程包括3个要素:方法、工具和过程。
方法方法是完成软件工程项目的技术手段
工具工具支持软件的开发、管理、文档生成
过程过程支持软件开发的各个环节的控制、管理
软件工程过程是把软件转化为输出的一组彼此相关的资源和活动,包含4种基本活动:(1)P——软件规格说明;(2)D——软件开发;(3)C——软件确认;(4)A——软件演进。
软件工程的目标:
目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
基本目的:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
基本原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。
软件生存周期:是指一个软件从提出开发要求开始直到该软件报废(停止运行)为止的整个时期。
软件生命周期三个阶段:软件定义、软件开发、运行维护,主要活动阶段是:(1)可行性研究与计划制定;(2)需求分析;(3)软件设计;(4)软件实现;(5)软件测试;(6)运行和维护。
软件生存周期模型:是描述软件开发过程中各种活动如何执行的模型。
常用的模型有:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。
主要包括问题定义及可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护几个阶段。
软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。
软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。
软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。
软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。
软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
软件生命周期各阶段的任务
任务
问题定义确定要求解决的问题是什么。