1、什么是算法?有什么特点?常用的算法表示方法有哪些?
算法(algorithm)是对特定问题求解步骤的一种描述。它是一个有穷的规则序列,这些规则决定了解决某一特定问题的一系列运算。输入特定问题,计算机就会依照这些规则进行计算和处理,经过有限的计算步骤后能得到一定的输出。
特点:
确定性:算法中的每一个步骤都有确定的含义,不允许有模棱两可的解释;
可行性:算法中的每一个步骤是可以由计算机执行的;
有输入输出:一个算法可以有0个或多个输入输出,以确定运算对象的初始状态。
表示方法:
1、自然语言法
2、图示法:
程序流程图
N-S图(盒图)
PAD图(ProblemAnalysisDiagram)
PDL图(ProgramDesignLanguage)
3、类高级程序设计语言表示法:
3、简述以下概念:数据,数据元素,数据类型,数据结构,逻辑结构,存储结构,线性表,栈,队列,树,二叉树,完全二叉树,满二叉树,图。
数据(data):计算机系统中要处理的基本对象之一,是对客观事物进行观察或观察后记载下来的一组可以识别的符号。
国际标准化组织(ISO)对数据的定义:数据是对事实、概念或指令的一种特殊表达形式。一般指那些未经加工的事实或对特定现象的描述,是事实性的数字、文本和多媒体等数据,数据最终将被转换为信息。
随着计算机技术的发展,数据这一概念的含义越来越广泛,指一切能够由计算机接收和处理的对象。
数据元素(dataelement):数据的基本单位。也成元素、节点、顶点、记录等。一个数据元素可以有若干个数据项(也可以称为字段、域、属性)组成。数据元素在程序中作为一个整体加以考虑和处理。
数据结构(datastructure):数据之间的相互关系,即数据的组织形式。
逻辑结构:数据元素之间的逻辑关系。数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的逻辑结构,可以看作是中具体问题抽象出来的数学模型。
存储结构:数据元素及其挂系在计算机存储器内的表示。数据的存储结构是逻辑结构用计算机语言的实现(亦称为映像),它依赖于计算机语言。对计算机语言而言,存储结构是具体的。一般只在高级语言的层次上讨论存储结构。数据的存储结构是指数据的逻辑结构在计算机中的表示,可采用顺序存储或链式存储的方法。
数据类型:数据是按照数据结构分类的,具有相同数据结构的数据属同一类,同一类数据的全体称为一个数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。
线性表:由n(n>=0)个数据元素a1,a2,…,an组成的有限序列。它是最简单也是最常用的一种数据结构。非空的线性表(n>0)常记作a1,a2,…an。数据表中数据元素的个数n称为表的长度(n=0时称为空表),数据元素ai(1<=i<=n)只是个抽象符号,其具体含义在不同情况下可以不同。在非空数据表(a1,a2,…,an)中,ai是第i个数据元素,称i为数据元素ai在线性表中的位序。
栈:又称堆栈(Stack),是限定尽在表尾进行插入和删除操作的线性表。对栈来说,表尾端有其特殊含义,称为栈顶(Top),表头端称为栈底(Bottom),不含元素的空表称为空栈。
栈是一种特殊的表,因此凡是可以用来实现表的数据结构都可以用来实现栈。不过,栈的操作相对表来说比较简单,因此通常只用数组和链表两种方法实现栈。
队列:和栈相反,队列(Queue)是一种先进先出(FirstInFirstOut)的线性表。它只允许在表的一端进行插入,而在另一端进行删除,允许插入的一端叫队尾(rear),允许删除的一端叫队头(front)。
队列的修改是依先进先出的原则进行的,新来的成员总是加入队尾,次离开的成员总是队列头上的。
树:树是n(n>=0)个节点的有限集T,T为空时称为空树,否则它满足以下两个条件:
(1)有且仅有一个特定的称为根的节点;
(2)其余的节点可分为m(m>=0)个互不相交的子集T1,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树。
注意,这一递归定义刻画了树的固有特性:一棵非空树,有若干棵子树构成,而子树又可以有若干可更小的子树构成。
节点的度:树中的一个节点拥有的子树数,称为该节点的度。一棵树的度是指该树中节点的最大度数。度为零的节点称为叶子或终端节点。度不为零的节点称为分支节点或非终端节点。除根节点之外的分支节点统称为内部节点。根节点又称为开始节点。
节点的层数、树的高度:从根算起(树根常称为0层),根的层数为1,其余节点的层数等于其父亲节点的层数加1。父亲在同一层的节点互为堂兄弟。数中节点的最大层数称为树的高度或深度。
有序树和无序树:若将树中的每个节点的各子树看成是从左到右有次序的(既不能互换),则称该树为有序树;否则称为无序树。
森林:m(m>=0)棵互不相交的树的集合。
二叉树:树形结构的一个重要类型。二叉树是另一种树形结构,它的特点是每个节点至多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。
完全二叉树:若一棵二叉树至多只有最下面的两层节点的度数小于2,并且最下面一层节点都集中在该层的最左边,则称这种二叉树为完全二叉树。
满二叉树:每一层上的节点数都达到最大值。不存在度数为1的节点,每个分支节点均有两棵高度相同的子树,且树叶都在最下一层上。
关系:
1、满二叉树是完全二叉树,完全二叉树不一定是满二叉树;
2、在满二叉树的最下一层上,从最右边开始连续删去若干节点后得到的二叉树仍然是完全二叉树。
3、在完全二叉树中,若某个节点没有左儿子,则它一定没有右儿子,即该节点必是叶子。
3、数据库管理系统与操作系统的文件管理系统相比较有哪些显著的优点?
数据库管理系统是为数据库的建立、使用和维护而配置的系统软件,它建立在操作系统的基础上,对数据库进行统一的管理和控制。它的主要功能包括如下几个方面:
(1)数据定义功能
(2)数据操纵功能
(3)数据库的运行管理功能
(4)数据库的建立与维护功能
(5)数据通信功能
4、数据库、数据库管理系统与数据库系统三者之间有何区别?有何关系?
数据库是为满足某一组织中许多用户的许多应用系统的需要,而在计算机系统中所建立起来的相互关联的数据的集合,这些数据按照一定的数据模型来组织和存储,并能为所有的应用业务所共享。
数据库管理系统是为数据库的建立、使用和维护而配置的系统软件,它建立在操作系统的基础上,对数据库进行统一的管理和控制。
数据库系统是指引进数据库技术后的计算机系统。数据库系统是指一个完整的、能为用户提供信息服务的系统,它不仅包括数据库本身,还包括相应的硬件、软件和各类人员。
5、什么是数据模型?它包含的三要素是什么?
数据模型(DataModel):是描述现实世界的工具,是数据库系统的核心,是数据库结构的基础。数据模型是一组严格定义的概念的集合,它们精确地描述了数据、数据之间的相互联系、对数据的操作以及有关的语义约束规则。
三要素:数据结构、数据操作、数据的完整性约束规则
数据结构:数据之间的相互关系,即数据的组织形式;
数据操作是指对于数据库中各种对象的实例,允许对它们执行的操作的集合,数据库对数据的操作主要包括查询与更新两项功能,更新包括数据的插入、删除和修改。
数据的完整性约束规则是指定义数据的约束条件,即在给定的数据模型中,规定数据及其联系所具有的制约,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
6、什么是数据模式?它与数据模型有何区别?
数据模式与数据模型有着根本的区别:
数据模型是指已选定某种数据模型为工具,对一个具体单位被处理对象的具体数据进行描述。如果把数据模型比拟为程序设计语言的话,那么数据模式就可以看成是采用某种程序设计语言后,针对某种应用所写的具体程序。
数据模式反应一个单位的各种事务的结构、属性、联系和约束,实质上是用数据模型对一个单位的具体实现(或模拟),它是相对稳定的,数据模式的取值称之为实例,同一数据模式允许有很多的实例。
7、什么是E—R图?举例说明关系数据库的特点。举例说明关系运算的运算规则。列举SQL语言中有关命令动词的含义。
关系数据模型(RelationalDataModel)是当前使用最广泛的模型,以关系数据模型为核心开发出的关系数据库系统称之为第二代数据库系统。
关系数据模型是以集合论中关系概念为基础逐步发展起来的。
当前被广泛使用的Oracle、Sybase、SQLServer、FoxPro和Access等数据库管理系统,都是基于关系数据模型的数据库系统。
关系操作:关系数据库是应用关系代数对关系的运算来表达查询的,其操作对象是关系,操作结果亦为关系。关系代数的运算可以分为两类:传统的集合操作和专门的关系操作。
传统的集合操作包括并、交、差、广义笛卡尔积等。这些操作将关系看成元组的集合。其操作从关系的水平方向进行,即是对关系的行来进行的。
(1)并(union):关系R与关系S的并,就是由属于R或属于S的元组组成的集合。结果为n列属性的关系;
(2)交(intersection):关系R与关系S的交,就是由既属于R又属于S的元组组成的集合。结果为n列的属性的关系;
(3)差(difference):关系R与关系S的差,就是由属于R而不属于S的元组组成的集合。结果为n列属性的关系;
(4)广义笛卡尔积(ExtendCartesianproduct):关系R(假设为n列)和关系S(假设为m列)的广义笛卡尔积是一个(m+n)列元组的集合,每一个元组的前n列是来自关系R的一个元组,后m列是来自关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组;
(5)连接(Join):连接操作是从两个关系的笛卡尔积中,选取属性间满足一定条件的元组。专门的关系操作:包括选择、投影、连接等,这类操作不仅涉及行,而且也涉及列。
(1)选择(selection):选择操作是指在关系中选择满足某些条件的元组。例如,要在存款户基本信息中找出存款期为24个月的所有存款户数据,就可以对存款户基本信息表做选择操作,条件是存款期为24个月。
SQL基本功能:
(1)数据查询:select语句,用于按指定的条件进行查询,它包含着丰富的内容和用法,以select为动词的语句中成分丰富多样,有很多可选的形式,这些需要咋SQL的具体应用中加以体会。
(2)数据定义:
Create:用于定义数据库、基本表、视图以及索引
Drop:用于删除表的定义和表中的数据,同时删除建立在该表上的索引和视图
(3)数据操作:
Insert:将新内容进行插入到指定位置;
Update:对数据库中指定内容进行修改;
Delete:对指定表中的内容进行删除。
(4)数据控制:
Grant:用于指定操作权限;
Revoke:用于回收权限。
8、数据库设计步骤
(1)需求分析
(2)概念设计
(3)逻辑设计:模型转换,设计子模型,定义数据库,分析与评审数据库模式
(4)物理设计:设计存储记录格式,存储记录群集,存取方法设计,评价物理结构
(5)数据库实施和运行及维护
9、软件生命周期划分为哪几个阶段?各阶段的任务是什么?
(1)问题定义
在这一阶段从开发的角度把问题明晰化,明确了要解决的问题,避免了后续工作的盲目性,从而使开发出的软件符合使用要求。
(2)可行性研究
问题定义阶段是从使用的角度,概略地确定用计算机解决问题的框架,可行性研究阶段是从技术、实施以及经济的角度做出是否可行的明确结论。任何工程项目在开始实施之前,都必须进行可行性研究。
可行性研究主要从技术方面分析系统是否有共同约束的条件,现有的技术是否能实现系统目标,预定的操作方式是否能被用户接受等;经济方面要分析实施项目的开发费用,用户能否支付所需的费用,项目建成后能否取得预期的经济效益,综合这些方面的论证,最终决定是否是实施该项目。
(3)需求分析
软件需求分析是软件生命周期中重要的一步,该过程将软件计划阶段所确定的软件范围(工作域)逐步细化到可详细定义的程度,并分析出各种不同的软件元素,然后为这些元素找到可行的解决方法。通过软件需求分析,把用户对产品模糊的、不合理的甚至矛盾的描述变为具体的软件需求规格说明。
(4)系统设计
系统设计是指设计人员设计软件的体系结构,使得结构中的每一组成部分都是意义明确的模块,且每个模块都和某些需求相对应。在这个阶段的主要任务是确定软件的总体结构和数据结构,并定义模块间的接口。
(5)详细设计
详细设计是在系统设计的基础上进行的,他需要给出总体结构中每个模块完整的算法描述,把功能描述转变为精确的、结构化的过程描述,为源程序编写打下基础。
(6)编码
编码就是选用适当的程序设计语言,把详细设计说明书中每一个模块的过程性描述转换成计算机可接受的程序代码。编码产生的源程序要语言结构清晰,能准确实现软件的功能,有较高的运行效率并且易于维护,这就需要程序员要有良好的编码风格,并且熟悉所使用的语言。
(7)测试工作
软件测试是保证软件质量的重要手段,它是根据利用软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果)去运行程序,以发现程序错误的过程。整个测试过程分单元测试、组装测试以及系统测试三个阶段。
(8)运行与维护
运行时期是软件生存周期的最后一个时期。这一阶段的主要工作是做好软件维护、并把每次维护的要求、方案、计划及如何修改程序、重新测试、验收等一系列步骤都详细准确的记录下来,作为文档加以保存。
10、什么是UML?它包括哪些概念模型?
UML是一种标准的图形化建模语言,用它可以简明、准确地为目标系统建立模型。UMl中,提供了5类(10种)图形:用例图、静态图、行为图、交互图、实现图。
事物:UML中最基本的面向对象的构造块,用他们可以写出结构良好的模型。
(1)结构事物:UML模型中的名词。通常是模型中的静态部分,描述概念或物理元素。
1、类(class):是对一组具有相同属性、相同操作、相同关系和相同语义的对象的描述。一个类实现一个或多个接口。类在UML中被画为一个矩形,通常包括它的名字、属性和方法。
2、接口(interface):描述了一个类或组件的一个服务的操作集。
3、协作(collaboration):定义了一个交互,它是由一组共同工作以提供某协作行为的角色和其他元素构成的一个群体,这些协作行为大于所有元素的各自行为的总和。
4、用例(usecase):是在系统中执行的一系列动作,这些动作将生成特定的参与者可见的价值结果。在模型中usecase通常用来组织行为事物,它是通过协作来实现的。
5、主动类(activeclass):主动类的对象至少拥有一个或多个进程或线程。主动类的对象代表的原素的行为和其他的元素的行为是同时存在的,除此以为,主动类和类似一样的。
6、组件(component):系统中物理的、可替换的部分,它提供一组接口的实现。在一个系统中,可能会遇到不同种类的组件。
7、节点(node):是一个物理元素,他在运行时存在,代表一个可计算的资源,通常占用一些内存和具有处理能力。一个组件集合可以驻留在一个节点内,也可以从一个节点迁移到另一个节点。
1、交互(interaction):是由一组对象之间在特定上下文中,为达到特定的目的而进行的一系列消息交换而组成的动作。一个对象群体的行为或单个操作的行为可以用一个交互来描述。在交互中组成动作的对象的每个操作都要详细列出,包括消息、动作次序、链。
2、状态机(Statemachine):描述了一个对象或交互在生命周期内响应事件所经历的状态序列。单个类或者一组类之间协作的行为也可以用状态机来描述。在状态机中要列出其他的元素,包括状态、转换。
(3)分组事物:UML模型中的组织部分,可以把它们看成是一些“盒子”,模型分解后放在这些“盒子”中。分组事物只有一个,称为包。
包(package):是一种将有组织的元素分组的机制。结构事物、行为事物、甚至其他的分组事物都有可能放在一个包中。与组件(存在于运动时)不同的是,包纯粹是一种概念上的东西,只存在于开发阶段。包也有变体。
(4)注释事物:UML的解释部分,用来描述、说明和标注模型中的元素。
注解(note):依附于模型元素而存在,对元素进行约束或者解释。
(1)依赖(dependency):依赖是一种使用关系,它说明一个事物的变化可能影响到使用它的另一个事物,但反之未必。在一般情况下,在类中用依赖表示一个类把另一个类作为它的操作的参数。有时,也可以在很多其他的事物之间建立依赖。特别是注解和包。
(2)关联(association):类之间的一种连接关系,通常是一种双向关系。从语义角度来说,关联的类之间要求有一种手使得它们彼此能够索引到对方,这种手段就是关联。
(3)泛化(generalization):一般事物(称为超类或父类)和该事物较为特殊的种类(称为子类或儿子)之间的关系。
(4)实现(realization):规格说明和其实现之间的关系。规格说明描述了某种事物的结构和行为,但是不决定这些行为如何实现。实现提供了如何以高效的可计算的方式来实现这些行为的细节。实现是元素之间多对多的联系。
图:
类图、对象图、用例图、顺序图、协作图、状态图、活动图、组件图和实施图。
11、简述CASE的主要功能。
(1)认识与描述系统需求
(2)保存与管理开发过程中的信息
(3)代码的生成
(4)文档的编制与生成
(5)软件项目的管理
12、软件测试的过程分为哪些步骤?什么是白盒测试?什么是黑盒测试?
编程测试用例的主要原则有哪些?程序调试的主要步骤有哪些?
1、测试过程:
(1)软件配置:软件需求说明、软件设计说明、源程序代码
(2)测试配置:测试计划、测试用例、测试驱动程序、预期的结果
(3)测试工具
2、黑盒测试:完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是通过程序的接口进行的测试,又称为功能测试。黑盒测试检查的主要方面有:
(1)程序的功能是否正确或完善
(2)数据的输入能否正确接收,输出是否正确
(3)是否能保证外部信息(如数据文件)的完整性等。
用黑盒测试设计测试用例时,必须用所有可能的输入数据来检查程序是否都能产生正确的输出。黑河测试不可能实现穷尽测试。
3、白盒测试:将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部逻辑测试程序,检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。白盒测试也不能实现穷尽测试。
4、白盒测试的用例:逻辑覆盖法适用于白盒法测试。所谓逻辑覆盖法是对一系列测试过程的总称,大致有以下一些不同的覆盖标准:
(1)语句覆盖
(2)条件覆盖
(3)判定/条件覆盖
(4)条件组合覆盖
(5)路径覆盖
5、黑盒测试的用例:等价类划分、边界值分析法以及错误推测法等均试用于黑盒测试。
等价类划分是一种使用的测试技术,其与逻辑覆盖不同,使用等价类划分测试用例时,完全不需要考虑程序的内部逻辑结构,而主要依据程序的功能说明。
划分户等价类后,根据以下原则设计测试用例:
(1)为每一个等价类编号
(2)设计一个新的测试用例,使它能包含尽可能多的尚未被覆盖的有效等价类。重复这一过程,直到所有的有效等价类都被覆盖。
(3)设计一个新的测试用例,使它包含一个尚未被覆盖的无效等价类。重复这一过程,直到所有的无效等价类都被覆盖。
边界值分析法:人们在长期的测试中发现,程序往往在处理边界值得时候容易出错,比如数组的下标,循环的上下界等。针对这种情况设计测试用例的方法就是边界值分析方法。
使用边界值分析方法设计测试用例时,首先要确定边界情况。通常输入等价类和输出等价类的边界,即应着重测试的程序边界情况。也就是说,应该选取恰好等于、小于和大于边界的值作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。
边界值分析也属于黑盒测试,可以看作是对等价类划分的一个补充。在设计测试用例时,往往联合等价类划分和边界值分析这两种方法。
错误推测法:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。例如,输入数据为0或输出数据为0的地方往往容易出错;各模块间对公有变量的引用也是容易出错的地方。
6、程序调试的主要步骤:
(1)从错误的外部表现入手,确定程序中出错的位置。
(2)研究有关部分的程序,找出错误的内在原因
(3)修改设计和代码,以排除这个错误
(4)重复进行暴露了这个错误的原始测试或某些有关测试,以确认该错误是否被排除、是否引用了新的错误。
(5)如果所做的修正无效,则撤销这次行动,重复上述的过程直到找到一个有效的解决办法为止。
13、软件项目管理的主要任务与含义是什么?
从概念上讲,软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。实际上,软件项目管理的意义不仅如此,进行软件项目管理有利于将开发人员的个人开发能力转化成企业的开发能力,企业的软件开发能力越高,表名这个企业的软件生产越趋向成熟,企业越能够稳定发展。
软件项目管理的主要任务:软件项目计划与组织、软件项目成本管理、软件项目进度控制、软件质量保证、软件配置管理、生成软件项目管理文档。