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

woxmh 2019-12-31

一、软件工程师的软件工程知识技能水平高低主要体现在哪些方面总结

1、软件工程师

  软件工程师英文是Software Engineer,是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。软件工程师是从事软件开发相关工作的人员的统称。软件工程师包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。软件工程师的技术要求是比较全面的,除了最基础的编程语言(C/C++/JAVA等)、数据库(SQL/ORACLE/DB2等)等,还有诸多如AJAX、SPRING等前沿技术。此外,关于网络工程和软件测试的其他技术也要有所涉猎。
 
2、知识技能水平高低主要体现
  软件工程知识技能包含三大类基础知识,计算机基础、数学基础和工程基础,下面是总结的一些点。

第一:具有扎实的计算机专业知识:此外精通高等数学、离散数学、电子学、编程语言、数据结构等课程。(1)基础编程语言,编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言,比如Web开发熟练掌握ASP,NET等编程语言,而大数据可能会使用Scala等语言,而物联网开发可能会使用到C、C++等编程语言。通常来说,软件工程师往往需要掌握多门编程语言。(2)算法。算法是软件工程师的重点知识技能,算法的掌握情况往往能够决定软件工程师的成长高度。(3)数据库。信息是以数据为中心的,因此与数据库的交互在所有软件中都是必不可少的,了解数据库操作和编程是软件工程师需要具备的基本素质之一。目前常用的数据库软件有Oracle数据库和SQL Server等。(4)程序员的基本功。打字 输?速度、快捷键使用等 ;代码规范和?格,如缩进、命名、注释等;能够熟练操作的?具集 如VSCode/Vim、正则表达式等。

第二:累积软件开发相关的知识,提高技术技能(如对具体技术的掌握,动手能力)。例如对Java、C/C++、C#的掌握,诊断和提高效能的技术,对设备驱动程序、内核调试器的掌握,对某一开发平台的掌握。

第三:积累问题领域的知识和经验(例如对医疗和金融行业的了解)。随着经验的增长,应该掌握更广泛、更深入的技术和问题领域的知识。

第四:掌握前沿技术。不同开发领域需要掌握不同的知识结构,比如大数据软件工程师往往需要掌握Hadoop、Spark平台的使用,而Web开发工程师往往还需要掌握前后端开发技术,包括一系列Web开发框架的使用等等。

第五:对通用的软件设计思想和软件工程思想的理解。例如,IBM 提出了软件开发思想的4项要点——迭代开发、以系统架构为中心、持续的质量保证以及管理变更和资产。理解统一过程、敏捷开发、使用统一建模语言等。

第六:提升职业技能。包括自我管理能力,表达和交流的能力,与人合作的能力,安质按量完成任务的执行力。文档编写。熟练的技术文档编写能力,熟练使用Rose,Power Design,Visio等建模软件,有一定的架构设计能力;语言表达能力和沟通能力、工程经济分析能力以及心理素质。

二、考试的题目包括了软件工程、数据库、数据结构和系统建模等基础课程,还有编程语言应用基础题和心理健康题。

(1)耦合是对软件不同模块之间互连程度的度量。各种耦合按从强到弱排列如下:  (C) (了解耦合)

A)   内容耦合,控制耦合,数据耦合,公共环境耦合。

B)   内容耦合,控制耦合,公共环境耦合,数据耦合。  

C)   内容耦合,公共环境耦合,控制耦合,数据耦合。 

D)   控制耦合,内容耦合,数据耦合,公共环境耦合。

(2)Please give out 3 pieces of recommendations regarding language-independent good programming practice. (良好的编程实践的建议)

程序中的命名
良好的注释
使用参数
代码编排
尽量减少嵌套if语句的使用

(3)Do you agree with the following statement? And why? Please explain or discuss. The objective of testing is to show the presence of bugs. So the highest level of testing is that no bug is discovered in the software product.( 测试)

不同意。

测试贯穿于整个软件工程的始终,它对各个阶段的软件制品进行了测试;
测试分成验证和确认。验证是指确定某个工作流是否正确完成的过程,确认是指对产品进行细致的评定,以确定整个产品是否满足规格说明。
测试在方式上分为执行测试和非执行测试。
测试的目的在于尽可能多地发现软件制品的错误。
测试可以证明软件制品存在错误,但并不能证明软件是没有错误的。

(4)(ABCD)可以制作用户故事 

  A. 整个团队  B. 用户 C. 客户  D. 相关的他人

(5)说一说三个范式。(数据库知识)

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在”A → B → C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y

(6)猫大叫一声,所有老鼠都开始逃跑,主人被惊醒。问可能用到什么设计模式?画出类图(考察设计模式和UML)
    观察者模式,老鼠和主人的行为是被动的。

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

(7)简述快速排序过程(数据结构)

1)选择一个基准元素,通常选择第一个元素或者最后一个元素,

2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。

3)此时基准元素在其排好序后的正确位置

4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。

(8)12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

卡特兰数问题, C(2n,n) - C(2n,n-1)
 如果直接第一排排列,第二排排序,那么就是分两堆的问题,现在要求的是第二排还要比前面高。那么这样可以把12个人看成是二进制数  0101010101, 每个1表示占第二排,需要保证1前面的0的个数不能比1少。
(9)输入一个5位数,判断它是不是回文,如12321即是回文数。(代码编写能力)

#include "stdio.h"

main( )

{

  long ge,shi,qian,wan,x;

  scanf("%ld",&x);

  wan=x/10000;

  qian=x%10000/1000;

  shi=x%100/10;

  ge=x%10;

  if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

    printf("this number is a huiwen\n");

  else

    printf("this number is not a huiwen\n");

}

 

(10)适配器模式分为类的适配器、对象的适配器两种实现。其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。  (设计模式)  

(11)A的扇出为2,B的扇出为1,C的扇出为3(了解扇入扇出)

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

 (12)网上选课系统的功能需求包括以下内容:

      系统管理员负责系统的管理维护工作,维护工作包括对课程信息和学生信息进行管理,包括对课程的添加、删除和修改,以及对学生基本信息的添加、修改、查询和删除,其中查询又分为精准查询和模糊查询,并且系统管理员登录后才能对信息进行维护,忘记密码可以通过忘记密码这个功能找回。学生通过输入自己的学号和密码进入选课界面,在这里学生可以进行查询已选课程、选择课程以及对自己的基本信息进行查询。要求画出系统管理员和学生的用例图

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

(13)下列关于敏捷方法的叙述中,错误的是(B) 

  A.与传统方法相比,敏捷方法比较适合需求变化大或者开发前期对需求不是很清晰的项目  B.敏捷方法尤其适合于开发团队比较庞大的项目 

  C.敏捷方法的思想是适应性,而不是预设性   D.敏捷方法以原型开发思想为基础,采用迭代式增量开发

  (14)设计原则六个方面:模块化、接口、信息隐蔽、增量开发、抽象、通用性

(15)名词解释:统一过程是用例 驱动架构为中心,增量迭代的过程。

(16)对于敏捷开发什么是最重要的?

 可交付给客户的产品以及帮助客户实现最大的价值

(17)敏捷宣言强调的敏捷软件开发的四个核心价值是:

  • 个体和交互 胜过 过程和工具
  • 可以工作的软件 胜过 面面俱到的文档
  • 客户合作 胜过 合同谈判
  • 响应变化 胜过 遵循计划 

相关推荐