如何评测软件工程知识技能水平?

偶尔善良 提交于 2020-01-06 15:54:49

一、什么是软件开发工程师?

  

  软件工程师是从事软件开发工作人员的统称,包括软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。软件工程师的技术要求是相对较高的,除了最基础的编程语言、数据库技术等,还需要掌握一些前沿技术,对于网络工程和软件测试的其他技术也要有所了解。

  软件工程师分级

  软件工程师一般情况下分为4级:

  1、软件技术员  2、助理软件工程师  3、软件工程师  4、高级软件工程师

二、 软件开发的主要步骤

  软件开发一般分为下述四个步骤需求、设计、编程和测试

  

  需求

  不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据......为了清楚地知道这些需求,你经常要和客户、项目经理等交流。

  设计

  编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会一团糟。

  编程

  如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。

  测试

  目的是让你知道,什么时候算是完成了。如果你聪明,你就应该先写测试,这样可以及时知道你是否真地完成了。否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。
三、 软件工程师应该掌握的技能
  (1)具有扎实的计算机专业知识
    这是软件工程理由能够从事软件一切工作最基本的前提,是软件工程最基本的素质,这要求软件工程师必须精通高等数学、离散数学、电子学、编程语言、数据结构等课程。
  (2)良好的语言表达能力和沟通能力
    这是软件工程师应该具备的一个很重要的素质,因为软件工程师是为用户开发软件,常常需要直执着面对用户。
  (3)良好的编程习惯和编程能力

    作为一名专业的软件工程师,一方面,是否掌握了程序员的基本功:键盘输入速度,快捷键,编译和调试工具等,熟练掌握常用的工具集—VSCode/Vim、正则表达式等;另一方面,应该能够熟练掌握基础编程语言,并且能够深入理解OOP、OOA、OOD            等编程思想。精通一门编程语言能为以后的软件开发打下坚实的基础。

  (4)学习能力

    IT技术可谓是更新换代最快的了,从市面上的电脑和手机就可以看出来。所以,只依靠自己之前学到的知识,很快就会被这个时代所淘汰,软件工程师应具备的技能里很重要的一点就是学习能力。因为只有具备了学习能力,才能在离开学校之后仍然能够独           立地学习最新的技术,同时能够自主的发现现在有什么新技术,市场上流行的技术元素与市场需求的变化。

四、软件工程知识技能水平测试题

  

1.瀑布模型的存在问题是(  )

   A.用户容易参与开发          B.缺乏灵活性

   C.用户与开发者易沟通        D.适用可变需求

解析:瀑布模型各个阶段的划分完全固定、模型是线性的,用户只有等到整个过程的末期才能见到开发成果,不适应需求的变化,缺乏灵活性。

 

2.下列哪个阶段不属于软件生存周期的三大阶段(C )。

   A、计划阶段                      B、开发阶段

   C、编码阶段                      D、维护阶段

解析:软件的生存周期包括:计划阶段、开发阶段、维护阶段。编码是开发阶段的一部分。

3、耦合的强弱取决于(A)。

A. 模块间接口的复杂程度

B. 调用模块的方式

C. 通过接口的信息

D.  模块内部各个元素彼此之间的紧密结合程度

4.需求分析的主要任务是(B)

A.确定系统怎样完成工作

B.确定系统必须完成哪些工作

C.研究系统的软件结构

D.确定软件开发费用

解析:需求分析:开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。主要任务是确定系统必须完成哪些工作

5.在设计测试用例时,(A)是用得最多的一种黑盒测试方法。

A.等价类划分    B.边界值分析    

C.因果图           D.判定表

解析:等价类划分是一种典型的黑盒测试方法。等价类划分是指分步骤把海量的测试用例集减得很小但过程同样有效。也就是说,选取足够小测试用例,发现更多软件缺陷

6.下列哪个图是N-S图(盒图)的构件(C)

A.                             B.

                  

C.                                      D.

        

 

解析:A是PAD图,B是流程图,C是盒图,D是PAD图

 

7.以下哪一项不是面向对象的特征( ).

A.多态性 B.继承性 C.封装性 D.过程调用

参考答案:D

考察点及解析:OOP特征的理解

面向对象的特征有:

(1)对象唯一性。

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

(2)抽象性。

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

(3)继承性。

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承

多重继承,JAVA、VB、NET、Objective-C均仅支持单继承,注意在C++多重继承时,需小心二义性。

软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

(4)多态性(多形性)

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。

多态性增强了软件的灵活性和重用性。

来源:2016年复旦大学期末考试题

 

8.模块内聚度越高,说明模块内各成分彼此结合的程度越( )。

A.松散 B.紧密 C.无法判断 D.相等

参考答案:B

考察点:内聚与耦合的概念理解。

内聚度是前述信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。内聚度按其高低程度可分为7级,内聚度越高越好。

内聚度是前述信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。

设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性

来源:2015北京航空航天大学期末考试题

 

9、 程序的三种基本控制结构是(     B)。

 

A. 过程、子程序和分程序       B. 顺序、选择和循环

 

C. 递归、迭代和回溯              D. 调用、返回和转移

 

解析:

 

程序的三种基本控制结构 :顺序结构、选择结构、循环结构

 

 

简答题

1.什么是软件生命周期? 

答:

一个软件从定义,开发,使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长时期称为生命周期。

 

2.计算机软件的开发经过哪三个大阶段?

答: 三个阶段:定义、开发、维护。

 

3.解释重构与功能内聚?

答:

重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

功能内聚指模块内所有元素共同完成一个功能,缺一不可,因此模块不能再分割。

 

4.软件危机产生的原因是什么?

答:

软件危机的原因:

a)     软件不同与硬件,是逻辑部件;

b)     软件规模庞大,逻辑结构复杂;

c)     软件开发人员和管理人员只重视设计程序而轻视用户的需求分析,导致最后研制出的软件产品无法满足用户的需求;

d)     软件设计技术和管理技术落后,没有统一的软件质量管理规范;

e)     在软件的开发与维护关系问题上存在错误的概念,重视开发,而轻视维护。

解析:

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!