软件工程基础知识

软件工程基础知识
软件工程基础知识

软件工程基础知识

一.什么是软件

1.满足功能要求和性能的指令或计算机程序集合;

2.处理信息的数据结构;

3.描述程序功能以及程序如何操作和使用所要求的文档;

二.软件危机以及产生软件危机的原因

1.软件开发生产率提高的速度,远远跟不上计算机迅速普及的趋势.软件产品"供不应求".

2.软件成本在计算机系统总成本中所占的比例逐年上升.

3.软件开发人员和用户之间的信息交流往往很不充分,用户对"已完成的"的软件系统不满足的现象经常发生.

4.软件产品的质量不容易保证.

5.软件产品常常是不可维护的.

6.软件产品的重用性差,同样的软件多次重复开

发.

7.软件通常没有适当的文档资料.

产生软件危机的原因可归结为两个重要的方面:

软件生产本身存在的复杂性;

软件开发所使用的方法和技术.

三.有哪些软件工程方法学及其要素

1.使用最广泛的软件工程方法学是结构化方法学和面向对象的方法学.

2.要素:方法,工具和过程.

四.什么是软件生存周期有哪些活动

4.1软件生存周期

一个软件从提出开发要求开始到软件废弃不用的整个过程.

4.2开发活动

可行性分析和项目开发计划,需求分析和定义,软件设计(先后细分为:概要设计和详细设计),编码,测试和运行维护

4.3各活动阶段主要文档

4.3.1可行行分析和项目开发计划

可性行研究报告

项目开发计划

4.3.2需求分析中的文档

需求规格说明书

初步用户使用手册

确认测试计划

修改完善的软件开发计划

4.3.3概要设计阶段文档

概要设计说明书

数据库说明书

用户手册

修订的测试计划(测试的策略,方法,步骤)

4.4.4详细设计阶段

详细设计说明书

4.4.5系统测试阶段

系统测试计划文档

五.有哪些主要生存期模型

瀑布模型,原型开发模型(快速原型模型,演化模型,增量模型),螺旋模型,喷泉模型,基于知识的模型和变化模型.

5.1瀑布模型

瀑布模型(传统的软件周期模型)严格遵循软件生命周期各阶段的固定顺序:计划,分析,设计,编程,测试和维护,上一阶段完成后才能进入到下一阶段,整个

模型就像一个飞流直下的瀑布,如图4-1所示.

优点:可强迫开发人员采用规范的方法,严格规定了各阶段必须提交的文档;要求每一阶段结束后,都要进行严格的评审.与它最相适应的开发方法是结构化

方法.

缺点:不适应用户需求的改动.

5.2原型模型

5.2.1快速原型模型

快速原型的用途是获知用户的真正需求,一旦需求确定了,原型即被抛弃.主要用于需求分析阶段.

不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法,所以不能定义完善的文档.

特征:简化项目管理,尽快建立初步需求,加强用户参与和决策.

具有广泛技能水平的原型化人员是原型实施的重要保证.原型化人员应该是具有经验与才干,训练有素的专业人员.衡量原型化人员能力的重要标准是他是否能够从用户的模糊描述中快速获取需求.

5.2.2演化模型

在快速原型模型中,原型的用途是获知用户的真正需求,一旦需求确定了,原型即被抛弃.而演化模型应用于整个软件开发过程,是从初始模型逐步演化为最终软件产品的渐进过程.也就是说,快速原型模型是一种"抛弃式"的原型化方法,而演化模型则是一种"渐进式"的原型化方法.

5.2.3增量模型

增量模型主要用于设计阶段,把软件产品划分为一系列的增量构件,分别进行设计,编程,集成和测试.新的增量构件不得破坏已经开发出来的产品.其示意图如图4-2所示.

5.2.4原型模型小结

从下面的有关原型化方法的叙述中,选择出正确的叙述:

(1)快速原型方法是一种企图克服传统软件周期模型缺点的开发方法.

(2)在用户的数据资源没有得到很好地组织和管理的时候,应该使用原型化方法.

(3)在用户没有明确地肯定其需求的时候,应该使用原型化方法.

(4)在用户不希望把自己的时间花在软件开发过程中的时候,应该使用原型化方法.

(5)使用原型化方法时应该使用第三代编程语言.

(6)原型化加强了开发过程中用户的参与和决策.

(7)原型化方法大致可分为三类:抛弃式,演化式和递增式.

(8)原型化方法大致可分为演化式和递增式.

(9)采用原型化方法时,软件的开发成本较高.

(10)采用原型化方法时,关键的因素是建立原形的速度,而不是原形运行的效率.

5.3螺旋模型

螺旋模型综合了瀑布模型和原型模型中的演化模型的优点,还增加了风险分析.螺旋线第一圈的开始点可能是一个概念项目.从第二圈开始,一个新产品开发项目开始了,新产品的演化沿着螺旋线进行若干次迭代,一直转到软件生命期结束.

5.4喷泉模型

喷泉模型主要用于描述面向对象的开发过程.喷泉一词体现了面向对象开发过程的迭代和无间隙特征.

六.软件过程基础知识

6.1软件过程

软件过程是指人们用于开发和维护软件及相关产品的一系列活动,包括软件工程过程和软件管理过程.

6.2评估工具

软件过程的评估,通常采用软件能力成熟度

模型(Capability Maturity Model,CMM).

CMM1.1的5个等级(由低级到高级):

初始级

软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力,管理是反应式(消防式)的.

可重复级

建立了基本的项目管理过程来跟踪费用,进度和功能特性.制定了必要的过程纪律,能重复早先类似应用项目取得的成功.

已定义级

已将软件管理和工程两方面的过程文档化,标准化,并综合成该组织的标准化软件过程.所有项目均使用经标准,裁减的标准软件过程来开发和维护软件.

已管理级

收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解与控制.

优化级

加强了定量分析,通过来自过程质量反馈和来自新观念,新技术的反馈使过程能持续不断地改进.

七.软件工程项目管理基本知识

软件项目管理开始于任何技术活动之前,并且贯穿于整个的软件生命周期.

软件工程项目管理一般分为时间管理,成本管理,人力资源管理,风险管理.

7.1时间管理

7.1.1 Gantt图

是一种简单的水平条形图,它以水平线段表示子任务的工作阶段,线段的起

点和终点分别对应着子任务的起始时间,线段长度指示完成该任务所需要的时间.

甘特图的优点:直观简明,易学易绘,可从图上清楚地标出子任务间的时间

对比,但它也有

缺点:

(a)不能显示地描绘各项彼此间的依赖关系;

(b)进度计划的关键部分不明显,难以判断哪些部分应当是主攻和主控的对象;

(c)计划中有潜力的部分以及潜力的大小不明确,往往造成潜力的浪费.

7.1.2 PERT网图与关键路径

PERT网图是一个由箭头(标识任务)和结点(标识事件)组成的有向图.将网

络方法用于工作计划安排的评审和检查.

开发模块A,B,C模块的任务网络图

PERT图不仅给出了每个任务的开始时间,结束时间和完成该任务所需的时间,还给出了任务之间的依赖关系,即哪些任务完成后才能开始另一些任务,以及如期完成整个工程的"关键路径".

关键路径(Critical Path)是由一连串的任务所组成的链,距离最大的一条

路径.

软件项目的管理人员应该密切注视关键任务的进展情况.如果希望缩短工期,只有往关键任务中增加资源才会有效果.

7.2成本管理

一种常用的成本估算方法是先估计完成软件项目所需的工作量(人月数),然后根据每个人月的代价(金额)计算机软件的开发费用:

开发费用=人月数×每个人月的代价

另一种方法是估计软件的规模(通常指源代码行数),然后根据每行源代码的平均开发费用(包括分析,设计,编码,测试所花的费用),计算机软件的开发费用:

开发费用=源代码行数×每行平均费用

估算源代码行数时,可以请n为有经验的专家,每位专家对软件给出3各估

计值:

ai---最少源代码行数(该软件可能的最小规模)

bi---最大源代码行数(该软件可能的最大规模)

mi---最可能的代码行数(该软件最可能的规模)

然后计算出每位专家的估算期,n位专家的估算期望值的平均值就是代码行

数的估算值.

7.3其他管理

人力资源管理

风险管理

风险管理的主要活动有风险识别,风险估算,风险评价和风险控制.

八.模块化基本知识

模块是指执行某一特定任务的数据和可执行语句程序元素的集合,通常是指可通过名字来访问的过程,函数,子程序或宏调用等.

模块化就是将一个待开发的软件划分成若干个可完成某一子功能的模块,每个模块可独立地开发,测试,最后组装成完整的程序.

8.1模块特性

8.1.1可分解性

如果一种设计方法提供了将问题分解成子问题的系统化机制,它就能降低整个系统的复杂性,从而实现一种有效的模块化解决方案.

8.1.2可组装性

如果一种设计方法使现存的(可复用的)设计构件能被组装成新系统,它就能提供一种不需要一切从头开始的模块化解决方案.

8.1.3可理解性

如果一个模块可以作为一个独立的单位(不用参考其他模块)被理解,那么它就易于构造和修改.

8.1.4连续性

如果对系统需求的微小修改只导致对单个模块,而不是整个系统的修改,则修改引起副作用就会被最小化.

8.1.5保护性

如果模块内部出现异常情况,并且它的影响限制在模块内部,不会影响其他模块,则错误引起的副作用就会被最小化.

8.2模块与模块的耦合性

耦合是对一个软件结构内不同模块之间互连程序的度量.

耦合可以分成下列几种,它们之间的耦合度由高到低排列.

8.2.1内容耦合

直接操作或修改另一模块的数据,或不通过正常入口转入另一个模块.

软件设计时应坚决禁止内容耦合,应设计成单入口,单出口的模块,避免病态连接.

8.2.2公共耦合

多个模块引用同一全局数据区.例如,C语言中的external数据类型,磁盘

文件等都是全局数据区.

8.2.3外部耦合

模块与软件以外的环境有关联.例如,输入输出把一个模块与特定的设备,格式,通信协议耦合在一起.

8.2.4控制耦合

一模块明显把开关量,名字等信息送入另一模块,控制另一模块的功能.

8.2.5标记耦合

两个模块之间通过传递公共指针或地址相互作用的耦合.

8.2.6数据耦合

模块间通过传递数据交换信息.

8.2.7非直接耦合(无耦合)

模块间无任何关系,独立工作

原则上讲,模块化设计总是希望模块之间的耦合表现为非直接耦合方式.

在以上耦合中,耦合度从高到低,内容耦合度最高,非直接耦合度最低.

8.3模块的内聚性

内聚是指一个模块内各个元素彼此结合的紧密程序,它是信息隐蔽和局部的概念的自然扩展.设计时应该力求高内聚,理想内聚的模块应当恰好做一件事情.

1).偶然内聚:一个模块的各成分之间毫无关系.比如:一组语句在程序的多处出现,为了节省内存空间,这些语句放在一个模块中,该模块的内聚是偶然内聚的.

2)逻辑内聚:把几种逻辑上相关的功能组放在同一模块中.

3)瞬时内聚(时间内聚):一个模块所包含的任务必须在同一时间间隔内执行,例如初始化模块.

4)过程内聚:一个模块的处理元素是相关的,而且必须按特定的次序执行.

5)通信内聚:一个模块的所有成分都结合再同一个数据结构上.

6)顺序内聚:模块的成分同一个功能密切相关,且输出,作为另外一个成分的输入.

7)功能内聚:模块内的所有成分属于一个整体,完成单一的功能.

在以上的内聚中,内聚度从低到高,偶然内聚度最低,功能内聚度最高.

模块的高内聚,低耦合的原则称为模块独立原则,也称为模块设计的原则.

8.4模块的深度,宽度,扇出与扇入

深度:表示软件结构中控制的层数.

宽度是软件结构中同一个层次上的模块总数的最大值

一个模块的扇入是指直接调用该模块的上级模块的个数.

一个模块的扇出是指该模块直接调用的下级模块的个数.

设计原则:低扇出高扇入

8.5模块作用域和控制域

软件设计时,模块的作用域应在控制域之内.

8.6模块化基础知识小结

通过模块的合并和分解,降低模块的耦合度.

模块的扇入应尽量大,扇出应尽量小.一个模

块的扇入是指直接调用该模块的上级模块的个数.一个模块的扇出是指该模块直接调用的下级模块的个数.扇入大表示模块的重用性高,利用率高.扇出大表示模块的复杂度高.所以要高扇入低扇出.

要将模块的作用范围限制在模块的控制范围之内.

降低模块之间的复杂性,避免"病态连接".

九.什么是软件开发方法有哪些主要方法

软件开发方法:使用已定义好的技术集及符号表示习惯组织软件生产的过程.

结构化方法,面向对象方法,JACKSON方法,维也纳开发方法(VDM).

9.1结构化方法学

结构化方法学也称为生命周期方法学(瀑布模型方法),是一种面向数据流的需求分析方法.它的基本思想是自顶向下逐层分解.

为了在需求改变时对软件的影响较小,结构化分析时应该使程序结构与问题结构相对应.

常用工具:

数据流图(DFD),数据字典(DD),实例-关系图(E-R图)及描述加工处理的结构化语言,判定表,判定树.

9.1.1数据流图(DFD图)

DFD的基本成分

数据流图主要由4种成分组成,如下表所示:

数据流(data flow):由一组固定成分的数据组成,表示数据的流向.它可以从源,文件流向加工,也可以从加工流向文件和宿,还可以从一个加工流向另一个加工.通常每个数据流必须有一个合适的名字,一方面是为了区别,另一方面也给人一个直观的印象,使人容易理解这个数据流的含义.但流向文件或从文件流出的数据流不必命名,因为这种数据流的组成部分就是相应文件的组成部分.

加工(process):描述了输入数据流到输出数据流之间的变换,也就是输入数据流做了什么处理后变成了输出数据流.每个加工有一个名字和一个编号.编号反映了该加工位于分层DFD的哪个层次和哪张图中以及它是哪个加工分解出来的子加工.

文件(file):可以表示数据文件,也可以表示一个数据记录.流向文件的数据流表示写文件,流出文件的数据流表示读文件,双向箭头表示对文件既读又写.每个文件都有一个文件名.

源/宿(source/sink):源是指系统所需数据的发源地,宿(也称数据池)是指系统所产生的数据的归宿地.无论源或宿,均对应于外部实体,在框内应加注实体的名字,在一个软件各级软件系统中,有些源和宿可以是一个外部实体,外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生数据的归宿地.

分层数据流图

一套分层的的数据流图由顶层,底层,和中间层组成.

画分层数据流图基本原则与注意事项

a.自外向内,自顶向下,逐层细化,完善

求精.

b.保持父图与子图的平衡.也就是说,父

图中某加工的输入数据流中的数据必须与它的子图的输入数据流在数量和名字上相同.

c.保持数据守恒.也就是说,一个加工所

有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据.

c.加工细节隐藏.根据抽象原则,在画父

图时,只需画出加工和加工之间的关系,而不必画出各个加工内部的细节.

d.简化加工间关系.在数据流图中,加工

间的数据流越少,各加工就越相对独立,所以应尽量减少加工间输入输出数据流的数目.

e.均匀分解.应该使一个数据流中的各个

加工分解层次大致相同.

f.适当地为数据流,加工,文件,源/宿命

名,名字应反映该成分的实际意义,避免空洞的名字.

g.忽略枝节.应集中精力于主要的数据流,

而暂不考虑一些例外情况,出错处理等枝节性问题.

h.表现的是数据流而不是控制流.

i.每个加工必须既有输入数据流,又有输

出数据流.在整套数据流图中,每个文件必须既有读文件的数据流又有写文件的数据流,但在某一张子图中可能只有读没有写或者只有写没有读.

小结:一个软件系统,其数据流图往往有多层.如果父图有N个加工(Process),则父图允许有0~N张子图,但是每张子图只能对应一张父图.在一张DFD图中,任意两个加工之间可以有0条或多条名字互不相同的数据流;在画数据流图时,应该注意父图和子图的平衡,即父图中某加工的输入输出数据流必须与其输入输出流在数量和名字上相同.DFD信息流大致可分为两类:交换流和事务流.

9.1.2数据字典

数据字典是关于数据的信息的集合也就是对

数据流图中包含的所有元素的定义的集合.

组成部分:

a.数据项条目

b.数据流条目

c.文件条目

d.加工条目

加工条目是对数据流图中每一个不能再分

解的基本加工的精确说明.

对于加工的描述是数据字典的组成内容之一,常用的加工描述方法有结构化语言,判定树和判定表.

9.1.3结构化语言

结构化语言实际上是一种半形式化语言,

它的结构通常可分为内外两层.外层接近于形式化语言,而内层近似于自然语言的描述.

9.1.4实体--关系图(E-R图)

实体--关系图(Entity-Relabionship Diagram),简称E-R图,包含实体,关系和属性等3种基本成分.通常用矩形框代表实体,并用直线把实体(或关系)与其属性连接起来.

E-R图通常用于数据库应用系统.

9.2结构化设计

结构化设计通常可分为概要设计和详细设计,但是主要用于概要设计阶段.概要设计的任务是确定软件系统的结构,进行模块划分,确定每个模块的功能,接口以及模块间的调用关系.详细设计的任务是为每个模块设计实现的细节.

9.2.1概要设计

经过需求分析阶段的工作,系统必须"做什么"已经清楚了,概要设计的基本目的就是回答"概括地说,系统应该如实现"这个问题.

概要设计的重要任务:

将一个复杂的系统按功能化分为模块,确

定每个模块的功能,确定模块之间的调用关系,确定模块之间的接口(模块之间传递的信息),评价模块的结构质量.

1.软件结构图形工具

结构化设计方法(SD)方法采用结构图(Structure Chart),层次图和HIPO图描述软件结构.

结构图的主要成分有模块,调用和数据,结构图中的模块用矩形表示,在矩形框内可标上模块的名字.模块间如有箭头或直线相连,表明它们之间有调用关系.

层次图用来描绘软件的层次结构.层次图中一个矩形框代表一个模块,方框间的连线表示模块间的调用关系.

HIPO图实际上就是层次图加输入/处理/输出图.HIPO图是美国IBM公司发明的"层次图加输入/处理/输出图",是在层次图里出了最顶层的方框之外,每个方框都加了编号.编号规则和数据流图的编号规则一样.

2.概要设计中的信息流

变换流:信息沿着输入通道进入系统,然后通过变换中心(也称主加工)处理,再沿着输出通道离开系统.具有这一特性的信息流称为变换流.具有变换流型的数据流图可明显地分成输入,变换(主加工),输出三大部分.

事务流:信息流沿着输入通道到达一个事务中心,事务中心根据输入信息(即事务)的类型在若干个动作序列(称为活动流)中选择一个来执行,这种信息流称为事务流.事务流有明显的事务中心,各活动以事务中心为起点呈辐射状流出.

9.2.2详细设计

概要设计已经确定了每个模块的功能和接口,详细设计的任务就是为每个模块设计其实现的细节.

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,得出对目标系统的精确描述.

1.详细设计阶段的内容

为每个模块进行详细的算法设计.

为模块内部的数据结构进行设计.

对数据库进行物理设计.

其他

详细设计工具主要包括程序流程图(系统流程图),盒图(N-S图),PAD图和伪码(PDL).

2.人机界面设计

人机界面的设计质量,直接影响用户对软件产品的评价.界面的美观,灵活和风格都很重要,但人机界面设计中最重要的也是最基本的目标是软件的易操作性.

人机界面设计主要包括系统响应时间,用户帮助设计,出错信息处理和命令

交互设计等几个方面.

9.3 Jackson方法

上面讲的结构化设计方法是面向数据流的,另外还有一种面向数据结构的设计方法,

Jackson方法是最著名的面向数据结构的设计方法,而不是面向数据流的设

计方法.

Jackson方法的基本步骤是:建立系统的数据结构;以数据结构为基础,对

应地建立程序结构;列出程序中要用到的各种基本操作,再将这些操作分配到程序结构适当的模块中.

9.4面向对象分析方法(00A)

OTM方法的三个模型,分别从三个不同侧面描述了所要开发的系统:功能模

型指明了系统应该"做什么";动态模型明确了什么时候做;对象模型则定义了

做事情的实体.

对象模型描述了系统中对象的静态结构及对象间的联系,用对象模型图来表示.

动态模型描述了与时间和操作次序有关的系统属性.

动态模型由多张状态图组成.各个类的状态图通过共享事件组成系统的动态模型.

功能模型描述系统内数据值的变化,它由数据流图组成.数据流图说明数据

流是如何从外部输入,经过操作和内部存储而得到输出的.

十.软件工具

软件工具是指用于辅助软件开发,运行,维护,管理,支持等过程中的活动的软件.通常也称为CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具.

按软件过程的活动分为软件开发工具,软件维护工具和软件管理工具等.

十一.软件开发环境

集成型开发环境通常可由工具集和环境集成机制两部分组成.这种环境应具有开放性和可裁减性.环境集成机制主要有数据集成机制,控制集成机制和界面集成机制.

十二.软件质量管理基础知识

12.1软件质量

ISO/IEC 9126软件质量模型可从软件功能性,可靠性,可用性,效率,可维护性,可移植性6个方面来衡量.

(1).功能性

与功能及其指定的性质的一组软件属性.

(2)可靠性

软件在规定的一段时间内和规定的条件下保持其性能水平有关的一组软件属性.也可以称为在规定的条件下和规定的时间间隔内,软件实现其规定功能的概率.

(3)可用性

与使用的难易程序及规定或隐含用户对使用

方式所做的评价有关的软件属性.

(4)效率

与在规定条件的性能水平与所用资源量之间的关系有关的一组软件属性.

(5)可维护性

与软件维护的难易程序有关的一组软件属性.

(6)可移植性

软件可从某一环境转移到另一环境的能力有关的一组属性.即软件从一个计算机系统转换到另一个计算机系统运行的难易程度是指软件的可移植性.为了提高可移植性,应注意提高软件的设备独立性.采用表格驱动程序有助于提高设备独立性.为了提高可移植性,还应有完备的文档资料.使用C语言开发的系统软件具有较好的可移植性.

12.2软件质量保证

软件质量保证的主要困难表现在以下几个方面:

1)软件开发的管理人员往往关心项目开发的成本与进度.因为成本和进度是显而易见的,而软件质量则难以度量.

如果软件开发的管理人员对交付的软件含有多少隐患并不必负什么责任,他们必定没有太高的热情去控制开发的质量,更不必说保证质量并不容易且代价昂贵.

开发人员的习惯一旦形成难以改变,他们的形为也难于控制,而高质量的软件产品,又主要取决于参与开发的人员.

复杂的软件项目需要许多技术人员和管理人员参与,对问题的不同认识和误解如不能及时消除必然影响软件质量.

软件开发人员的频繁流动,特别是骨干开发人员的流失,也会使软件质量受到一定的影响.

软件质量的保证手段:

软件工程作业及参考答案(版)

软件危机与软件工程 3. 软件工程方法学的研究内容包含软件开发技术和软件工程管理两部分, 其期望达到的最终目标是 ()。 A ?消除软件危机 B ?软件开发工程化 C ?程序设计自动化 D ?实现软件重用 4?软件工程学中除重视软件开发技术的研究外,另一重要组成内容是软件的( )。 A .工程管理 B .成本核算 C .人员培训 D .工具开发 5?软件计划是软件开发的早期和重要阶段,此阶段要求交互和配合的是( )。 A ?设计人员和用户 B ?分析人员和用户 C .分析人员和设计人员 D .编码人员和用户 6 .软件工程的结构化生命周期方法是将软件开发的全过程划分为相互独立而又相互依存的阶段,软件的 逻辑模型形成 于( )。 A .开发阶段 B .计划阶段 C .分析阶段 D .设计阶段 7 .在软件工程中,软件生存期可分为计划、开发以及维护三个阶段,每个时期又分为若干更小的阶段。 通常,计划时期包括问题定义、可行性研究和 ①,开发时期包括 ②、详细设计、编码以及 ③。 ① A . 需求分析 B . 可行性研究 C . 经费预算 D . 质量保证 ② A . 需求分析 B . 可行性研究 C 总体设计 D 模块化设计 ③ A . 文档编制 B . 运行维护 C . 测试 D . 验收 &软件开发中常采用的生命周期方法,由于其特征而一般称其为() A .层次模型 B .瀑布模型 C .螺旋模型 D .对象模型 9.描述软件生存周期的瀑布模型包括计划、 (A ) 、设计、编码、测试、维护等阶段。其中,设计阶段又可 以分成(B )和(C )两个步骤。 A :①需求分析 ②可行性研究 ③需求调查 ④问题定义 B, C :①方案设计 ②代码设计 ③概要(总体)设计 ④数据设计 ⑤详细设计 10.什么是软件危机?软件危机产生的原因? ".生命周期阶段的划分?每个阶段的任务? 可行性研究 软件工程 1软件危机是指在开发和( A .运行 B .设计 2 ?造成软件危机的原因是: A. 用户使用不当 C .硬件不可靠 )过程中所遇到的一系列严重问题。 B .对软件的错误认识 D ?缺乏好的开发方法和手段

软件工程专业基础综合

《软件工程专业基础综合》考试大纲 第一部分数据结构与算法 考试题型:问答、分析、编程 总分:60分 一、栈(Stack)、队列(Queue)和向量(Vector) 内容: 单链表,双向链表,环形链表,带哨兵节点的链表; 栈的基本概念和性质,栈ADT及其顺序,链接实现;栈的应用;栈与递归; 队列的基本概念和性质,队列ADT及其顺序,链接实现; 队列的应用; 向量基本概念和性质;向量ADT及其数组、链接实现; 二、树 内容: 树的基本概念和术语;树的前序,中序,后序,层次序遍历; 二叉树及其性质;普通树与二叉树的转换; 树的存储结构,标准形式; 完全树(complete tree)的数组形式存储; 树的应用,Huffman树的定义与应用; 三、查找(search) 内容: 查找的基本概念;对线性关系结构的查找,顺序查找,二分查找; Hash查找法,常见的Hash函数(直接定址法,随机数法), hash冲突的概念, 解决冲突的方法(开散列方法/拉链法,闭散列方法/开址定址法),二次聚集现象; BST树定义,性质,ADT及其实现,BST树查找,插入,删除算法;

平衡树 (AVL) 的定义,性质,ADT及其实现,平衡树查找,插入算法,平衡因子的概念; 优先队列与堆,堆的定义,堆的生成,调整算法;范围查询; 四、排序 内容: 排序基本概念;插入排序,希尔排序,选择排序,快速排序,合并排序,基数排序等排序算法基本思想,算法代码及 基本的时间复杂度分析 五、图 内容:图的基本概念;图的存储结构,邻接矩阵,邻接表;图的遍历,广度度优先遍历和深度优先遍历;最小生成树基本概念, Prim算法,Kruskal算法;最短路径问题,广度优先遍历算法,Dijkstra算法,Floyd算法;拓扑排序 第二部分计算机系统基础 考试题型:问答、分析、编程 总分:40分 一、处理器体系结构 内容:CPU中的时序电路、单周期处理器的设计、流水线处理器的基本原理、Data Hazard的处理、流水线设计中的其他问题 二、优化程序性能 内容:优化程序性能、优化编译器的能力和局限性以及表示程序性能、特定体系结构或应用特性的性能优化、限制因素、确认和消除性能瓶颈 三、存储器结构及虚拟存储器 内容:局部性、存储器层级结构、计算机高速缓存器原理、高速缓存对性能的影响、地址空间、虚拟存储器、虚拟内存的管理、翻译和映射、TLB、动态存储器分配和垃圾收集 四、链接、进程及并发编程

软件工程基础知识点总结

软件工程基础部分知识点总结 知识点一软件工程的基本概念 1、软件定义:是计算机系统中与硬件相互依存的另一部分,是包括程序、数据以及相关文档的完整集合。 1)程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。 2)数据是使程序能够正常操作信息的数据结构。 3)文档是与程序开发、维护和使用有关的图文资料。 国标(GB)计算机软件的定义:与计算机系统的操作相关的计算机程序、规程、规则以及可能有的文件、文档及数据。 2、软件特点: 1)软件是一种逻辑实体,而不是物理实体,具有抽象性,是计算机的无形部分; 2)软件的生产与硬件不同,它没有明显的制作过程; 3)软件在运行、使用期间不存在磨损、老化问题; 4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题; 5)软件复杂性高,成本昂贵; 6)软件开发涉及诸多的社会因素 3、软件的分类: 按照功能可以分为:应用软件、系统软件、支撑软件(或工具软件)

1)应用软件是为解决特定领域的应用而开发的软件。 2)系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。 3)支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具软件。 4、软件危机:是指在软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要体现在以下几个方面: ①软件开发的实际成本和进度估计不准确 ②开发出来的软件常常不能使用户满意 ③软件产品的质量不高,存在漏洞,需要经常打补丁 ④大量已有的软件难以维护 ⑤软件缺少有关的文档资料 ⑥开发和维护成本不断提高,直接威胁计算机应用的扩大 ⑦软件生产技术进步缓慢,跟不上硬件的发展和人们需求增长 5、软件工程:此概念的出现源自软件危机。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来开发与维护软件的学科。 1)研究软件工程的主要目的就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统(高质量是指错误率低、好用、易用、可移植、易维护等)。 2)软件工程的三个要素:方法、工具和过程。 ①方法:完成软件工程项目的技术手段;

软件工程课后作业

第1次作业 路松峰20140062 2018-07-29 10:32:40

软件产品的开发基本上是线性顺序进行的。 2、什么是模型? 模型是认识客观事物时,用文字、符号或者图表等进行简化问题描述的一种方式。 二、判断题 1、在软件开发中采用原型系统策略的主要困难是成本问题。 正确 2、软件过程改进也是软件工程的范畴。 正确 三、选择题 1、包含风险分析的软件工程模型是( D )。 A.喷泉模型 B.瀑布模型 C.增量模型 D.螺旋模型 2、软件过程是(C )。 A.特定的开发模型 B. —种软件求解的计算逻辑 C.软件开发活动的集合 D.软件生命周期模型 3、CMM模型将软件过程的成熟度分为5个等级。在(B )使用定量分析来不断地改进和管理软件过程。 A.管理级 B.优化级 C.定义级 D.可重复级 第3次作业 路松峰_20140062 2018-07-29 10:34:34 一、简答题 1、需求分析有哪三种方法? 面向功能分析、面向数据分析、面向对象分析 2、什么是面向数据结构方法? 面向数据结构方法是一类侧重从数据结构方面去分析和表达软件需求,进行软件设计的开发方法。该方法从数据结构入手,分析信息结构,并用数据结构图来表示,再在此基础上进行需求分析,进而导岀软件的结构。

二、判断题 1、需求评审人员主要由开发人员组成,一般不包括用户。 错误 2、非功能需求是从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的要求。正确 三、选择题 1、增量模型本质上是一种( C )。 A.线性顺序模型 B.整体开发模型 C.非整体开发模型 D.螺旋模型 2、需求工程的主要目的是( C )。 A.系统开发的具体方案 B.进一步确定用户的需求 C.解决系统是“做什么的问题” D.解决系统是“如何做的问题” 3、在E-R模型中,包含以下基本成分(D )。 A.数据、对象、实体 B.控制、关系、对象 C.实体、关系、控制 D.实体、属性、关系 第4次作业 路松峰_20140062 2018-07-29 10:35:04 一、简答题 1、面向对象分析模型的五个层次是什么? 五个层次:类与对象层,属性层,服务层,结构层,主题层 2、对象的五个特点是什么?

计算机公共基础

第一章数据结构与算法 1.1算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。 基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。 算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。 算法复杂度:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量。 算法空间复杂度是指执行这个算法所需要的内存空间。 1.2数据结构的基本基本概念 数据结构研究的三个方面: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; (2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; (3)对各种数据结构进行的运算。 数据结构是指相互有关联的数据元素的集合。 数据的逻辑结构包含: (1)表示数据元素的信息; (2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构条件: (1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。 1.3线性表及其顺序存储结构 线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。 在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。 非空线性表的结构特征: (1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件; (3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素的所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 顺序表的运算:插入、删除。(详见14--16页) 1.4栈和队列 栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。 栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。 栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。 队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear指针指向队尾,front 指针指向队头。 队列是“先进行出”(FIFO)或“后进后出”(LILO)的线性表。 队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。 循环队列:s=0表示队列空,s=1且front=rear表示队列满

电子科技大学2018年《软件工程学科基础综合 》硕士研究生考研大纲_电子科技大学考研网

电子科技大学2018年《软件工程学科基础综合》硕士研究生考研大 纲 考试科目860软件工程学科基础综合考试形式笔试(闭卷) 考试时间180分钟考试总分150分 一、总体要求 《软件工程学科基础综合》包括《软件工程》和《网络技术》两门课程,其中《软件工程》要 求考生了解软件工程的基本知识和方法,熟悉软件工程的主要环节,掌握最基础的软件工程理论方法,并能应用到实际的软件项目开发中。《网络技术》要求学生掌握计算机网络的基本概念、基本原理和基本方法;掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理;能够运用计算机网络的基本概念、基本原理和基本方法进行网络系统的分析、设计和应用。两门课程各占总分的50%。 二、内容 《软件工程》考试内容如下: 1.基本概念 重点是软件的特性、软件工程学的研究范畴,以及学习软件工程的意义。掌握软件的概念、特 点和软件工程的基本特征;理解为什么学习软件工程、如何学习。主要知识点: 1)软件的概念和特点 2)软件危机的概念和产生的原因 3)软件工程的定义、三要素和发展过程 2.过程模型 重点是各种实用的软件过程模型,以及不同过程模型的特点比较。掌握几种典型模型的优缺点 和能依据项目特征选择使用不同的模型;理解为什么有不同的模型、不同模型的特征。主要知识点: 1)软件生命周期概念、软件过程概念、能力成熟度模型CMM概念 2)常见的几种软件过程模型:瀑布、增量、原型、螺旋、喷泉等,比较各自优缺点 3.需求分析 重点是需求分析的一般步骤、数据流图、用例图、活动图、需求规格说明文档的编制。掌握结 构化分析模型的导出、数据流图/用例图/活动图的基本画法和需求规格说明文档的编制;理解需求分析的过程、主要步骤。主要知识点: 1)需求分析的概念 2)需求分析的过程:需求确认与需求变更 3)需求确认的步骤:需求获取→需求提炼→需求描述→需求验证 4)需求分析三类建模:功能模型、数据模型、行为模型。面向过程和面向对象的需求分析过 程中,三类模型各包含哪些内容? 5)掌握数据流图和用例图作法。 4.系统设计 重点是面向数据流的设计方法、面向对象的设计方法、过程设计的常用工具。掌握软件设计的 主要技术、主要内容和主要方法,能根据具体项目进行模块划分和软件架构设计;理解软件设计和需求分析之间的相互关系。主要知识点: 1)系统设计分为概要设计和详细设计 2)与设计相关的8个概念:抽象、体系结构、设计模式、模块化、信息隐藏、功能独立、细 化、重构。其中,着重考察体系结构、模块化、信息隐藏、功能独立。

软件工程师考试大纲

一、考试说明 1.考试要求: (1) 掌握数据表示、算术和逻辑运算; (2) 掌握相关的应用数学、离散数学的基础知识; (3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理; (4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识; (5) 熟练掌握常用数据结构和常用算法; (6) 熟悉数据库、网络和多媒体的基础知识; (7) 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中的一种程序设计语言; (8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识; (9) 熟悉掌握软件设计的方法和技术; (10) 掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识; (11) 了解信息化、计算机应用的基础知识; (12) 正确阅读和理解计算机领域的英文资料。 2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程的实际工作能力和业务水平。 3.本考试设置的科目包括: (1) 计算机与软件工程知识,考试时间为150分钟,笔试; (2) 软件设计,考试时间为150分钟,笔试。

二、考试范围 考试科目 1.计算机科学基础 1.1 数制及其转换 二进制、十进制和十六进制等常用制数制及其相互转换 1.2 数据的表示 数的表示(原码、反码、补码、移码表示,整数和实数的机内表示,精度和溢出)非数值表示(字符和汉字表示、声音表示、图像表示) 校验方法和校验码(奇偶校验码、海明校验码、循环冗余校验码) 1.3 算术运算和逻辑运算 计算机中的二进制数运算方法 逻辑代数的基本运算和逻辑表达式的化简 1.4 数学基础知识 命题逻辑、谓词逻辑、形式逻辑的基础知识 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分) 排列组合、概率论应用、应用统计(数据的统计分析) 运算基本方法(预测与决策、线性规划、网络图、模拟) 1.5 常用数据结构 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作 Hash(存储地址计算,冲突处理)

软件工程课后作业

路松峰_ 2018-07-29 10:32:40 一、简答题 1.什么是软件工程 软件工程是关于软件生产的各个方面的工程学科。 二、判断题 1、软件危机的主要表现是软件需求增加,软件价格上升。 / 正确 2、软件就是程序,编写软件就是编写程序。 错误 三、选择题 1、用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为( A )工具。 A. CASE C. CAM D. CAD 2、在下列选项中,( C )不是软件的特征。 A.系统性与复制性 B.可靠性与一致性 C.有形性与可控性 D.抽象性与智能性 ) 3、软件工程的三要素是( B ) A.技术、方法和工具 B.方法、工具和过程 C. 方法、对象和类 D.过程、模型和方法

第2次作业 路松峰_ 2018-07-29 10:33:32 一、简答题 … 1、快速原型模型的主要优点是什么 软件产品的开发基本上是线性顺序进行的。 2、什么是模型 模型是认识客观事物时,用文字、符号或者图表等进行简化问题描述的一种方式。 二、判断题 1、在软件开发中采用原型系统策略的主要困难是成本问题。 正确 2、软件过程改进也是软件工程的范畴。 · 正确 三、选择题 1、包含风险分析的软件工程模型是( D )。 A.喷泉模型 B.瀑布模型 C.增量模型 D.螺旋模型 2、软件过程是( C )。 A.特定的开发模型 B.一种软件求解的计算逻辑 C.软件开发活动的集合 D.软件生命周期模型 3、CMM模型将软件过程的成熟度分为5个等级。在(B )使用定量分析来不断地改进和管理软件过程。

… 第3次作业 路松峰_ 2018-07-29 10:34:34 一、简答题 1、需求分析有哪三种方法 面向功能分析、面向数据分析、面向对象分析 ) 2、什么是面向数据结构方法 面向数据结构方法是一类侧重从数据结构方面去分析和表达软件需求,进行软件设计的开发方法。该方法从数据结构入手,分析信息结构,并用数据结构图来表示,再在此基础上进行需求分析,进而导出软件的结构。 二、判断题 1、需求评审人员主要由开发人员组成,一般不包括用户。 错误 2、非功能需求是从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的要求。正确 三、选择题 ;

软件开发工程师面试题(基础知识)

.NET开发人员试题(综合) 1、用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的 关系以及为什么要这样分层? 2、软件开发过程一般有几个阶段?每个阶段的作用? 3、您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一 般怎样去提高自己的编程水平? .NET开发人员试题(基础) 1、请你说说.NET中类和结构的区别? 答:结构是值类型,在堆栈上分配地址,所有的基类型都是结构类型,如 System.int或System.string,不能被继承 类是引用类型(new),可以被继承,在堆上分配地址,堆栈的执行效率要比堆的执行效率高,但堆栈的资源有限, 2、死锁的必要条件?怎么克服? 答:系统资源不足,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源阻塞,且对已获得的资源不放 3、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以 继承实 体类? 答:接口是可以继承接口;抽象类是可以实现接口;抽象类可以继承实体类,只要实体类有明确的构造函数. 4、构造器 Constructor是否可以被继承?是否可以被Override? 答: Constructor不可以被继承,因此不能被重写(Override),但可以被重载(Overloading) 5、当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的 方法?

答:不可以,一个对象的方法只能由一个线程访问 6、C#是否可以对内存直接进行操作? 答:可以,因为可以使用指针 7、数组有没有Length()这个方法?string有没有这个方法?8、谈谈final,finally,finallize的区别? 答:final用来申明属性、方法、类,表示属性不可变,方法不可以被覆盖,类不可以被继承 Finally是异常处理语句结构,总是执行 Finallize是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法 9、C#中委托是什么?事件是不是一种委托? 答:委托是一种安全的类似于函数指针,但比指针安全,它可以把方法作为一个参数传递给另一个方法,可理解为指向函数的引用,事件是一种消息机制,是一种委托,委托不带方法体。 10、Override, Overload,的区别? 11、概述反射、序列化和反序列化?12、UDP和TCP连接有和异 同?13、进程和线程分别该怎么理解? 14、ASP。NET页面之间传递值的几种方式? 15、a=10,b=15在不使用第三方变量的前提下,把a,b的值互换。 答:a=b+(b=a)*0; 16、请简述面向对象的多态的特性及意义? 17、Session喜欢丢值且占内存,Cookies不安全,请问用什么办法替代这两种方法? 18、try{}里有一个return语句,那紧跟在这个后边有个finally{}里的代码会不会被执行,什么时候执行? 20、求当前日期所在的周的起止日期。 答:select sysdate-to_char(sysdate, 'D ')+1 as起始日 期,sysdate+7-to_char(sysdate, 'D ') as 中止日期 from dual 21、c#中的&符号与&&符号有什么区别?22、函数和存储过程的区别?

软件工程基础(复习题及答案)

复习题 一、判断题(每题2分,共30分) 1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析 活动。(对) 2.数据字典是对数据流图中的数据流,加工、数据存储、数据的源和终点进行详细定义。(错) 3.JAVA语言编译器是一个CASE工具。(对)。 4.软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC 等)编写的程序,软件开发实际上就是编写程序代码。(错) 5.软件模块之间的耦合性越弱越好。(对) 6.数据库设计说明书是一个软件配置项(对) 7.在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是生成类的模板。(错) 8.过程描述语言可以用于描述软件的系统结构。(错) 9.如果通过软件测试没有发现错误,则说明软件是正确的。(错) 10.快速原型模型可以有效地适应用户需求的动态变化。(对) 11.模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。(对) 12.集成测试主要由用户来完成。(错) 13.确认测试计划应该在可行性研究阶段制定(错) 14.白盒测试无需考虑模块内部的执行过程和程序结构,只要了解模块的功能即可。(错) 15.软件概要设计包括软件系统结构设计以及数据结构和数据库设计。(对) 16.在可行性研究中最难决断和最关键的问题是经济可行性。(╳) 17.耦合是指一个模块内各个元素彼此结合的紧密程度。(╳) 18. 一笔交易、一个动作、甚至操作人员按一个按钮都可以看做是一次事物。(√)

19.概要设计阶段完成的主要文档是概要设计说明书。(√) 20.过大的模块可能是由于分解不充分造成的,即使降低模块独立性也必须继续分解。(╳) 21.程序设计语言中应绝对禁止使用GOTO语句。(╳) 22.类是关于对象性质的描述,由方法和数据组成。(√) 23.随着软件技术的发展,人们逐渐认识到编码不仅要强调效率还要强调清晰。(√) 25.为保证程序的安全,必须做到程序中没有任何错误存在,即容错。(╳) 26.如果把软件开发所需的资源画成一个金字塔,人是最基本的资源。(√) 名词解释 1.数据词典——是描述数据信息的集合,它对数据流图中的各 个元素按规定格式进行详细的描述和确切的解释,是数据流图的补充工具。 2.数据流图——他以图形的方式反映系统的数据流程 3.白盒测试——按照程序内部的结构测试程序,检验程序中的 每条路径是否都能按预定要求正确工作。有两种测试法既逻辑覆盖测试法和路径测试法 4.黑盒测试——按照程序的功能测试程序,检验与程序功能有 关的输入、输出与程序执行是否正确。有四种方法既等价分类法、边界值分析法、错误猜测法和因果图法 5.完善性维护——为了适应用户业务和机构的发展变化而对软 件的功能、性能进行修改、扩充的过程称为完善性维护。因为各种用户的业务和机构在相当长的时期内不可能是一成不变的,所以功能、性能的增加是不可避免的,而且这种维护活动在整个维护工作中所占的比重很大 6.软件可靠性——指在给定的时间内,程序按照规定的条件成 功地运行的概率 7.软件配置——是一个软件在生存周期内,他的各种形式、各 种版本的文档与程序的总称

c语言公共基础课本

第1章数据结构与算法 1.1算法 1.算法的概念:是指解题方案的准确而完整的描述 2.算法的基本特征:可行性、确定性、有穷性(有限的时间)、拥有足够的情报 3.算法的复杂度:时间复杂度和空间复杂度(1)时间复杂度:算法所需要的计算工作量(算法所执行的基本运算次数) (2)空间复杂度:执行这个算法所需要的内存空间1.2数据结构的基本概念 1.数据结构研究的三个问题 (1)逻辑结构:指反应数据元素之间逻辑关系的数据结构 (2)存储结构(物理结构):数据的逻辑结构在计算机存储空间中的存放形式。

(3)对各种数据结构进行的运算 2.数据结构定义:是指带有结构的数据元素的集合。所谓结构就是指数据元素之间的前 后件关系。 在数据结构中,没有前件的结点称为根结点,没有后件的结点为终端结点(也叫叶子结点)。3.空的数据结构:一个元素都没有的数据结构。4.数据结构的种类:线性结构与非线性结构。 线性结构:有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件。 非线性结构:如果一个数据结构不是线性结构,则称之为非线性结构。 1.3线性表及其顺序存储 1.线性表是最简单、最常用的一种线性结构。2.非空线性表的结构特征: (1)有且只有一个根结点,无前件

(2)有且只有一个终端(叶子)结点,无后件 (3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。 在线性表中结点的个数n称为线性表的长度,当n=0时,称为空表。 3.线性表顺序存储结构的基本特点: (1)所有元素所占的存储空间是连续的 (2)各元素在存储空间中是按逻辑顺序依次存放的4.在长度为n的顺序存储的线性表中,当在任何位置上插入或删除一个元素概率都相等时, 插入或删除一个元素所需移动元素的平均 个数是为n/2。 1.4栈和队列 1.栈:限定在一端进行插入与删除的线性表。 2.栈的结构特点:先进后出或后进先出 3.栈的基本运算:入栈运算、退栈运算、读栈

软件工程作业第一章

1-1什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现:软件总是超出预算、落后于进度表,而且产品质量不可靠、维护困难等。 危机原因: 1、软件受其自身特点的影响,生产过程不象硬件那样规范,受人的因素和外界影响很大,在软件生产的各阶段都会引入不同程度的错误,造成不能预期完成任务,致使成本上升,甚至导致软件失败。 2、主客观不相适应。 ●客观上:软件规模增大、功能要求越来越复杂,需求不断变化等; ●主观上:传统的个体化开发观念和方法的影响,无开发过程指导,无开发过程管理;由于主客观矛盾,必然产生软件质量差、开发超期、超预算、维护困难等现象。 1-3 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机? ?基本思想:是强调在软件开发过程中应用工程化原则,解决软件的整体质量较低、最后期限和费用没有保证等问题。 ?软件工程定义:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它. ?软件工程的根本在于提高软件的质量与生产率,最终实现软件的工业化生产。 本质特性:P6 消除软件危机:软件工程基本原理7条。 1-6 什么是软件过程?它与软件工程方法学有何关系? ?软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 ?过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。 关系:是软件工程方法学包含3个要素(方法、工具和过程)之一。 1-7 什么是软件生命周期模型?试比较瀑布模型、(快速)原型模型、增量模型和螺旋模型、喷泉模型的优缺点,说明每种模型的适用范围。 生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。 瀑布模型:它将软件生命周期划分为需求分析、软件设计、程序编写、软件测试和运行维护等基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。优点:文档驱动。 强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。遵守瀑布模型的文档约束,将使软件维护变得比较容易一些。 缺点:系统可能不满足需求,用户仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品 适用范围:软件需求明确。 原型模型:在初步调查了解的基础上,提供快速的软件建造工具,开发出一个功能并不十分完善的可实际运行的系统,即原型。需求分析入手快速、表达直观、容易交流。重点解决瀑

国家二级公共基础知识(程序设计基础、软件工程基础)-试卷1

国家二级公共基础知识(程序设计基础、软件工程基础)-试卷 1 (总分:72.00,做题时间:90分钟) 一、选择题(总题数:36,分数:72.00) 1.选择题下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。(分数: 2.00) __________________________________________________________________________________________ 解析: 2.下列叙述中正确的是( )。 (分数:2.00) A.程序执行的效率与数据的存储结构密切相关√ B.程序执行的效率只取决于程序的控制结构 C.程序执行的效率只取决于所处理的数据量 D.以上都不正确 解析:解析:影响程序执行效率的因素有很多,如数据的存储结构、程序处理的数据量、程序的算法等。顺序存储结构和链式存储结构在数据插入和删除操作上的效率就存在差别。其中,链式存储结构的效率要高一些。 3.下列描述中,不符合良好程序设计风格要求的是( )。 (分数:2.00) A.程序的效率第一,清晰第二√ B.程序的可读性好 C.程序中要有必要的注释 D.输入数据前要有提示信息 解析:解析:一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。 4.结构化程序所要求的基本结构不包括( )。 (分数:2.00) A.顺序结构 B.GOTO跳转√ C.选择(分支)结构 D.重复(循环)结构 解析:解析:结构化程序的基本结构有:顺序结构、选择结构和循环结构,没有GOTO跳转结构。 5.下列选项中不属于结构化程序设计原则的是( )。 (分数:2.00) A.可封装√ B.自顶向下 C.模块化 D.逐步求精 解析:解析:结构化设计方法的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用goto语句。 6.结构化程序设计的基本原则不包括( )。 (分数:2.00) A.多元性√ B.自顶向下 C.模块化

软件工程大作业.

软件工程大作业 题目:学生档案管理系统 小组成员:戚盈洁( 王大伟( 王磊( 霍成海( 目录 第一章. 系统调查 (3 1.1系统调查内容 (3 1.2系统调查方法 (3 第二章. 系统分析 (3 2.1 系统分析 (3 2.2 系统调结构图 (4 2.3 子系统功能描述 (4 第三章. 系统设计 (6 3.1 界面设计原则 (6 3.2 数据库设计 (6 3.3 代码设计 (10 第四章. 学生照片管理模块设计 (14

4.1 ImageFunc模块 (14 4.2 设计照片管理窗体 (16 4.3 在学生信息管理窗体中添加照片管理代码 (17 第五章. 系统测试 (18 5.1 系统测试项目 (18 5.2 系统评估 (20 第一章. 系统调查 1.1系统调查内容 学校各院系基本概况:院系名称,专业设置,课程设置,课时安排,学生人数,学生班级数等。 学校资源条件调查,包括计算机配备,网络支持条件等。 各院系专业设置概况:现有开设专业及规划中开设专业设置,专业开设课程,各课程授课教师与成绩处理。 学校各部门(学生处、教务处、档案管理室、各院系对学生基本情况的需求与掌握,对学生基本信息的处理方式与业务流程。 学校各部门、单位、教师、学生对系统的其他要求和希望。 1.2系统调查方法 通过对部分高校学生档案管理人员的访问,了解到目前大部分高校的档案管理工作存在工作效率低,成本高,保密性差,查询困难等问题。大部分工作人员都提出需要一个具有检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本

低等优点的现代化信息管理系统。为解决此问题我们决定开发一个既方便又操作简单,功能较为齐全的学生档案管理系统。 第二章. 系统分析 2.1 系统分析 1 系统开发的总体任务是学生档案管理的系统化和规范化。 2 系统开发的目标是使档案管理工作科学化和规范化,提高安全系数。 3 系统功能树本系统主要功能是实现学生基本情况的管理。 图3.1学生档案管理系统功能模块 2.2 系统调结构图

二级考试公共基础知识单元软件工程

二级考试公共基础知识单元:软件工程 A005:构成计算机软件的是() A、程序和文档 B、程序和数据 C、程序、数据及相关文档 D、源代码 参考答案:C A006:软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是()A、可行性研究B、测试C、设计D、实现 参考答案:A A007:下面不能作为结构化方法软件需求分析工具的是() A、数据字典(DD) B、判定表 C、数据流程图(DFD图) D、系统结构图 参考答案:D A052(图):软件详细设计产生的图如下: 该图是() A、E-R图 B、PAD图 C、程序流程图 D、N-S图 参考答案:C A056:软件设计中划分模块的一个准则是() A、低内聚低耦合 B、高内聚高耦合 C、低内聚高耦合 D、高内聚低耦合 参考答案:D A057:下列选项中不属于结构化程序设计原则的是() A、模块化 B、可封装 C、逐步求精 D、自顶向下 参考答案:B A097:下列不属于软件开发阶段任务的是() A、实现 B、设计 C、可行性研究 D、测试 参考答案:C A148:面向对象方法中,继承是指() A、各对象之间的共同性质 B、类之间共享属性和操作的机制 C、一个对象具有另一个对象的性质 D、一组对象所具有的相似性质 参考答案:B A149:软件生命周期是指()

A、软件的开发过程 B、软件的运行维护过程 C、软件产品从提出、实现、使用维护到停止使用退役的过程 D、软件从需求分析、设计、实现到测试完成的过程 参考答案:C A150:软件测试的目的是() A、评估软件可靠性 B、改正程序中的错误 C、发现程序中的错误 D、发现并改正程序中的错误参考答案:C A189:下列属于系统软件的是() A、财务管理系统 B、数据库管理系统 C、杀毒软件 D、编辑软件word 参考答案:B A190:程序测试的目的是() A、执行测试用例 B、诊断和改正程序中错误 C、发现并改正程序中错误 D、发现程序中的错误 参考答案:D A228:下面对软件特点描述正确的是() A、软件在使用中存在磨损,老化问题 B、软件是一种逻辑实体,具有抽象性 C、软件复制不涉及知识产权 D、软件具有明显的制作过程 参考答案:B A229:下面属于良好程序设计风格的是() A、随意使用无条件转移语句 B、程序效率第一 C、程序输入输出的随意性 D、源程序文档化 参考答案:D A230:下面对软件测试和软件调试叙述错误的是() A、正确的执行测试用例 B、严格执行测试计划,排除测试的随意性 C、软件测试不需考虑测试成本 D、软件调试的目的是改正软件错误 参考答案:C A268:下面属于软件设计阶段产生的文档是() A、详细设计规格说明书 B、数据流程图和数据字典 C、软件需求规格说明书 D、软件确认测试计划 参考答案:A A269:软件工程包括的要素是() A、算法和工具 B、技术和管理 C、算法和过程 D、方法、工具和过程 参考答案:D A308(图):某系统结构图如下图所示,该系统结构图中最大扇出数是()。

软件工程作业(答案参考)

软件工程第一次作业 1)软件工程适用范围? 答:软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。 2)软件工程如何控制系统开发的复杂性的? 答:可理解性(understandability)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。 3)以你的经验,举例说明一个成熟的软件通常采用什么方法来适应现实世界的变化的?答:以猎豹游览器为例,开始软件投入市场公测,软件自带收集错误报告的程式,当遇到问题软件错误,会将相关信息反馈到接受错误信息的服务器,已方便程序员及时发现问题加以修复,修复完成后提供程序更新,循环此法提供软件运行稳定性,另外还有用户反馈的相关功能,对软件的建议也会收集到服务器,按实用性需求程序员可在原有程序上开发调整更适合用户使用的程序。 4)假设某软件公司,能为同一个用户开发两个不同层次的软件:一个层次的软件功能非常强大,在满足用户所有需求的基础上,还能提供大大超过用户需求的其他更多更强的功能;另一个层次的软件仅仅能满足用户需求,但没有提供其他额外的功能。请问如果你是项目负责人,你会选择为客户开发那个层次的软件? 答:我会选择仅仅满足用户需求的软件。因为太多的功能,相对于非专业的人员,在用户体验上可能会造成困扰,太多的功能会导致难以操作。而且功能强大的软件还会给用户费用上带来不必要的投入,软件是以人为本,方便用户工作,达到提高工作效率的目的。若然日后此用户需要更多功能的时候,我们还是可以向其软件公司提供升级功能解决用户需求。

北京理工大学考研885软件工程专业基础综合

北京理工大学885软件工程专业基础综合 一、考查目标 软件工程专业基础综合涵盖程序设计、数据结构等学科专业基础课程。要求考生系统地掌握上述专业基础课程的概念、基本原理和方法,能够运用基本原理和基本方法分析和解决有关理论问题和实际问题。 二、考试形式和试卷结构 试卷满分及考试时间 本试卷满分为150分,考试时间为180分钟 答题方式 闭卷、笔试 试卷内容结构 程序设计75分 数据结构75分 试卷题型结构 单项选择题20分 程序填空题15分 编程题50分 简答题50分 算法设计题15分 三、考查范围 程序设计部分 1.考试内容 ⑴数据类型:常量、变量、数组、字符串、指针,变量的初始化、变量存储类型; ⑵运算符与表达式:运算符的运算规则和优先级、表达式、类型转换; ⑶程序的控制:程序的三种基本结构、语句、数据的输入输出; ⑷函数:函数的定义、函数的调用、参数传递、带参数的主函数、函数的递归;

⑸结构与联合:构造数据类型的概念、结构的定义与引用、联合的定义与引用、链表; ⑹文件:文件的概念、文件指针、文件的打开、关闭及操作; 2.考试要求 ⑴掌握C程序设计语言的基本语法。 ⑵掌握常见的程序设计方法。 ⑶掌握基本的数值、排序等算法,以及穷举、递推、递归等方法。 3.分值 75分 4.题型 单项选择题10分 程序填空题15分 编程题50分 数据结构部分 1.考试内容 ⑴基本概念:数据结构,数据,数据元素,数据对象,抽象数据类型,算法,算法的时间复杂度和空间复杂度。 ⑵线性表:线性表的逻辑结构和基本操作,顺序和链式存储结构,简单应用与实现。 ⑶栈和队列:栈和队列的基本概念,存储结构,基本操作,简单应用与实现。 ⑷数组和广义表:数组的定义及顺序存储结构,矩阵的压缩存储,数组的简单应用,广义表的定义与基本操作。 ⑸树和二叉树:树的定义和基本操作,二叉树的概念和基本性质,二叉树的存储结构,遍历二叉树和线索二叉树,树和森林与二叉树的关系,哈夫曼树和哈夫曼编码,树的简单应用。 ⑹图:图的基本概念,图的存储结构,图的遍历,图的应用,图的连通性,有向无环图及其应用,最短路径,关键路径。 ⑺查找:顺序表的查找,二叉排序树和平衡二叉树,B-树和B+树,哈希表。

相关文档
最新文档