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

我认为一名合格的软件工程师需要具备如下技能:

  1. 熟练掌握至少两门编程语言,这里的熟练是指掌握该语言的一切特性并使用该语言开发过中大型的项目。
  2. 熟练掌握IDE的使用,能够快速的定位BUG并解决。
  3. 由于计算机学科是一门快速变化的学科,因此要求软件工程师具有优秀的学习能力,能够跟得上快速变化的技术。
  4. 沟通与协作的能力。真正的编程绝不是单打独斗,而是一群人为了一个目标相互合作,因此就需要具有良好的沟通与协作的能力。
  5. 具有良好的代码风格。软件工程师的代码应该要可读性好,模块化高,该注释的地方给上注释。便于他人的更新与维护。
  6. 具有高度的责任心,对工作负责。
  7. 具有总结能力。在一项项目结束之后,对项目中遇到的困难,走过的弯路进行总结,对项目中做的好的部分也要进行总结,以供自己之后参考。

软件工程期末测试题:

一、概念解释
1. 敏捷开发方法 与 Scrum 方法
2. 基于计划-文档开发方法(Plan-and-Document based Development)
3. DRY (Don’t Repeat Yourself) 无重复代码
4. MVC(软件作为服务的开发框架)
5. SMART 用户故事
6. TDD and 红-绿-重构
7. FIRST 测试原则
8. 代码味道及类内方法 SOFA 原则
(说明 S、O、F、A 分别代表什么?违法该原则的代码的不好特征、重构和修复的方法)
9. 类间关系的 SOLID 原则(说明每个原则的意义、违法该原则的代码的不好特征、重构和修
复的方法)
(1)单一责任原则
(2)开闭原则
(3)里氏替换原则
(4)依赖注入原则
(5)迪米特法则
10. 持续集成及开发
11. 文档对象模型(DOM)和 jQuery
12. JavaScript 函数特点
13. HTML
14. ruby 面向对象
15. ruby 访问控制 public、private 和 protected
16. CSS 规则构成
17. ruby 中的数组
18. Ruby 哈希(Hash)
19. Ruby 迭代器:each 和 collect
20. Git 工作流程二、选择题
2.1工具/语言
1.
下面哪个 git 命令用来帮助跟踪谁修改了什么文件和什么时候修改的?
A. git list
B. git manage
C. git push
D. git blame
2. 如何比较两个文件或当前文件和以前版本的修订?
A. git diff
B. git compare
C. git clone
D. git checkout
3. 如果提示提交内容为空、不能提交,则最为合适的处理方式是:_____
a) 执行 git status 查看状态,再执行 git add 命令选择要提交的文件,然后提交。
b) 执行 git commit --allow-empty ,允许空提交。
c) 执行 git commit -a ,提交所有改动。
d) 执行 git commit --amend 进行修补提交。
4. 如果把项目中文件 hello.c 的内容破坏了,如何使其还原至原始版本? _____
a) git reset -- hello.c
b) git checkout HEAD -- hello.c
c) git revert hello.c
d) git update hello.c
5. 修改的文档 meeting.doc 尚未提交,因为错误地执行了 git reset --hard 导致数据丢
失。丢失的数据能找回么? _____
a) 不能。执行硬重置使工作区文件被覆盖,导致数据丢失无法找回。
b) 能。可以通过 git checkout HEAD@{1} -- meeting.doc 找回。
c) 不确定。如果在重置前执行了 git add 命令将 meeting.doc 加入了暂存区,则可
以在对象库中处于悬空状态的文件中找到。
d) 不能。因为未提交所以无法找回。
6. 仅将工作区中修改的文件添加到暂存区(新增文件不添加),以备提交,用什么命令标记
最快? _____a) git add -A
b) git add -p
c) git add -i
d) git add -u
7. 下面哪一个命令不会改变提交历史? _____
a) git reset --hard HEAD~1
b) git checkout HEAD^^ .
c) git rebase -i HEAD^^
d) git commit --amend
8. 下面的描述中不属于 Ruby 特性的是__________。
A.Ruby 是一种功能强大的面向对象的脚本语言。
B.Ruby 遵守 GPL 协议并且是免费的。
C.Ruby 具有自动内存管理机制。
D.Ruby 是基于 MVC 架构的。
9. 下面的描述中不属于 Rails 特性的是__________。
A.Rails 是一个使用 Ruby 语言写的开源网络应用框架。
B.Rails 具有强大的反射机制与后设编程。
C.“不要重复自己”和“约定胜于配置”是 Rails 的设计原则。
D.Rails 具有实时映射技术和模板编程技术。
10.Ruby 提供了多种字符串的表示方法,下面哪一种是错误的?__________
A.str=['在线学习乐园']
B.str="\n{www.itzcn.com}"
C.str=%/\t 免费教学和视频\n/
D.str="窗内网"
11.在命令控制台要查看 Ruby 的版本应该使用命令__________。
A.ruby –v
B.ruby –version
C.ruby –h
D.ruby /?
12.下列不属于 RubyGems 提供命令的是__________。
A.gem list B.gem install rails
C.gem –v
D.gem –update rails
13.下面关于 Ruby 编译器的使用方法,错误的是__________。
A.ruby hi.rb
B.ruby –e 'print "hi" '
C.ruby –h hi.rb
D.ruby –c hi.rb
14. 调用__________方法可以去除用户输入的换行符。
A.chomp
B.trim
C.to_s
D.to_i
2.2 需求分析
15. 下面哪些用户故事描述是满足的 SMART 原则要求的?
A. 用户能用影片名查找电影信息。
B. 作为一个用户,我想看前 10 个按价格从低到高排序的影片列表,以便我买到最便
宜的电影票。
C. Rotten Potatoes APP 应该有好的用户界面。
D. Rotten Potatoes APP 应该有好的用户界面和快的响应时间。
16. 下面哪个是对,就用户故事而言?
(i)
它们应该描述该应软件是如何使用的。
(ii)
它们应该有业务价值。
(iii)
它们不必要是可以测试的。
(iv)
它们应该在敏捷软件开发生命周期的各阶段都能实施或实现。
 
A. i only
B. i and ii
C. i and iv
D. i, iii, and iv
17. 相对强调过程的场景描述而言,声明性场景描述特点是:
A. 有更复杂语句和步骤。
B. 不是 DRY。
C. 更段、易理解和维护。
D. 关注在低层步骤上,这些步骤需要初始化设置和执行测试。18. 对隐性和显性需求而言,下面哪些说法是对的?
A. 无论隐性和显性需求,你都不能写用户故事。
B. 隐性需求更简洁,而显性需求更啰嗦。
C. 隐性需求是显性需求的逻辑结果,通常对应于综合性测试。
D. 显性需求通常可以用场景化过程性语言描述,而隐性需求通常用声明性语言描述。
19. 为什么很多软件项目失败?
(i)
软件不是用户所要的。
(ii)
延迟交付。
(iii)
软件超出预算。
(iv)
软件演化后容易维护和升级
A. i and ii
B. iii and iv
C. i, ii, and iii
D. i, ii, iii, and iv
20. 下面哪些是表达了 BDD 的不足。
i.
与客户交互沟通的成本。
ii.
客户满意不等于该软件有一个好的架构。
iii.
编写功能代码前,先写测试代码。
iv.
缺乏相关工具。
A. i and ii
B. iii and iv
C. ii and iii
D. i, ii, iii, and iv
21. 需求分析最终结果是产生()
A. 项目开发计划
B. 可行性分析报告
C. 需求规格说明书
D. 设计说明书
22. 需求分析中,开发人员要从用户那里解决的最重要的问题是()
A. 让软件做什么
B. 要给软件供哪些信息
C. 需求软件工作效率怎样
D. 让软件具有何种结构
23. 需求规格说明书的内容不应包括对()的描述。
A. 主要功能B. 算法的详細过程
C. 用户界面的运行环境
D. 软件性能
24. 软件需求分析阶段的工作,可以分成 4 个方面:需求获取,需求分析,编写需求规格说
明书以及()
A. 用户
B. 需求评审
C. 总结
D. 都不正确
25. 在原型法中,开发人员根据()的需求不断修改原型,直到满足客户要求为止
A. 用户
B. 开发人员
C. 系统分析员
D. 程序员
26. 需求验证应该从下述几个方面进行验证:
A. 可靠性、可用性、易用性、重用性
B. 可维护性、可移植性、可重用性、可丬则试性
C. 一致性、现实性、完整性、有效性
D. 功能性、非功能性
2.2设计
27. 敏捷开发者崇尚的价值点是
 
A. 过程和工具胜于个人与团队交流
 
B. 可工作的软件系统胜于全面的文档
 
C. 合同谈判胜于与客户协作
D. 遵循计划胜于响应需求变化
28. 瀑布软件开模型与螺旋软件开发模型的区别?
 
A. 瀑布模型包括了大量的计划文档和时间跨度大的可工作软件版本,而螺旋模型小量
的计划文档和时间跨度小的可工作软件版本。
 
B. 瀑布模型从开始就写全所有的需求文档,而螺旋模型按迭代阶段写需求文档。
C. 瀑布模型有教长的迭代周期,而螺旋模型有较短和快的迭代周期。
 
D. 瀑布模型的在每个阶段完成后进行保障测试,最后验证阶段包括了验收测试;而螺
旋模型的保障测试在每 2 个月内进行。
29. 哪种类型的代码是最坏的?
A. 遗留代码(legacy code)
B. 静态代码(static code)
 
C. 与期望不一致的短命代码(unexpectedly short-lived code)
 
D. 优美代码(beautiful code)
30. “系统中的每一个知识(功能或特性)必须有单一的、无二义和明确的表示。”是对下
面的哪条原则的表达?
 
A. REST
 
B. SAAS
C. SOA
D. DRY
31. 如果一个项目延期后,为什么说增加人手不是一个好主意。因为:
 
A. 程序员太贵
B. 不能用大团队来承建 SaaS 软件
 
C. 交流成本会下降
D. 让新程序员上手需要较多时间
32. Model-View-Controller (MVC) 架构/设计模式有什么好处?
 
A. 支持多用户存取和更新模型数据,对每个用户提供各自的视图。
 
B. 确保模型与视图有一对一的映射。
 
C. 为了调试目的,提供模型和控制器的调试窗口。
 
D. 像其他设计模式一样,遵循这类架构可以得到更简洁的代码。
33. 下面哪一种提高软件生产效率的方法比较能体现面向服务架构的软件?
 
A. 通过简洁达到清晰(Clarity via conciseness)
 
B. 代码合成(Synthesis)
 
C. 可重用(Reuse)
D. 自动化和工具(Automation and Tools)
34. 一个服务直接访问另外一个服务的数据时可能出现不稳定的情况一般是以下哪一种情况
的特点之一:
 
A. Rails 应用框架
 
B. 面向服务的架构
 
C. 面向对象编程
D. 敏捷开发过程
35. 假设有两个 HTTP 请求的 URI 是一样,但调用的方法(GET 与 POST)不同。对于 Rails 路
由而言,下面哪个说法是对的。
 
A. 两个请求可以对应不同控制器的方法,但不是必须的。
B. 两个请求必须对应不同控制器的方法。
 
C. 两个请求必须对应相同控制器的方法。
D. Rails 将给该请求抛出一个错误信息
36. 下面的例子中哪个是属于表示层?
 
A. Apache HTTP 服务器, Ruby and Rails, MySQL 数据库
 
B. Ruby and Rails, Django, Symfony, Catalyst
C. MySQL、PostgreSQL 、Oracle 数据库
D. Microsoft IIS, Apache HTTP 服务器, lighttpd 服务器
37. 假设一个 Web APP 网站要开发一个移动 APP 版软件,若原有网站的架构设计采用了 MVC
架构,改版工作量大的地方是:
 
A. models
 
B. views
 
C. controllers
D. schema
38. 假设影评网站 RottenPotatoes.com 要增加'filming location' 属性值到 movie 模型中。修
改 MVC 哪个部分的工作量大?
 
A. Movie 模型
 
B. 显示影片信息的 view 页面
 
C. 在控制器中增加新的 movie 实例
 
D. 以上所有都不是
39. 一个 HTTP 请求必须都包含哪两项
 
A. CRUD 操作, 数据库
 
B. header, cookie
 
C. URL, wildcard (e.g. :id)
D. URI, HTTP 请求方法
40. 下面哪个说法是对的(根据 Ruby 语法要求)?
i. 局部变量以 $开头
ii. 实例变量以 @开头
iii. 类变量以 @@开头
A. i & iii
 
B. ii & iii
 
C. i & ii
 
D. i, ii & iii41. 15. 如果执行下面代码的结果是什么?
a = SavingsAccount.new(100)
b = SavingsAccount.new(50)
c = SavingsAccount.new(75)
[a,b,c].sort
A. 工作, 因为存款余额是数字,可以比较。
B. 不工作,但传入比较方法后也许可以。
C. 不工作,但如果在 SavingsAccount 定义了<=>方法后也许可以。
D. 不工作, SavingsAccount 不是 Ruby 基本类型不可以比较。
42. 当 Ruby 表达式 foo + bar 求值执行时,下面哪个说法对?
 
A. bar 作为一个参数传给 foo 的方法 + 。
 
B. foo 作为一个参数传给 bar 的方法 + 。
 
C. 出错,因为'+' 只定义在字符串和数字对象上。
 
D. foo 和 bar 相加。
43. 下面的哪个场景不应该用 HTTP GET 来实现。
A. 在一个相片分享的网站上,用户点击一个指定的相册。
B. 用户点击提交按钮发送一封邮件。
C. 用户在下拉框中选择搜索查询条件。
D. 用户在影评网 RottenPotatoes 上查看修改个人信息。
44. 下面代码中第 4 行做什么?
1 class PostsController < ActionController::Base
2 def add_post
3 # ...code to create new blog post...
4 flash[:notice] = "Post added successfully"
5 redirect_to posts_url
6 end
7 end
(i) 写消息到日志文件。
(ii) 这个方法执行后在 view 中提示。
(iii) 保存信息直到下一个请到来。
A. (ii) only
B. (iii) only
C. (i) and (iii)
D. (ii) and (iii)45. 如果在 controller 方法中设置了一个实例变量,该值可以被什么模块读取。
A. views 不能读取。
B. Views 可以用它,但仅限于这次请求处理。
C. Views 可以用它,仅限于这次请求和下次请求。
D. Views 可以用它,包括这次请求以后的所有请求。
46. 请阅读理解下面的代码
 
下面哪个方式可以正确地把一个用户的信息加入到数据库中?
 
A. (i) and (ii)
 
B. (i) and (iii)
 
C. (ii) and (iii)
 
D. (i), (ii), and (iii)
47. 在课程管理系统中增加一个查询条件。除了按原有的 credit 列排序外,还增加一个域:
search terms 在勾选框里。目的是让相应的 controller 的方法在 params[:search_terms]
里读到这个选择。参数格式为:
params = {:credit => 3, :search_terms => "software_engineering" }
请问下面哪种方式可以实现这样的效果?
A.<input type="text" params="search_terms"/>
B. <input type="text” name="search_terms"/>
C.<input type="text" id="search_terms"/>
D.<input type="text" name="params[search_terms]"/>
48. RESTful 路由:假设 index 方法接收到带有上一个请求中显示的参数哈希值的表单提交,
那么下列哪种方法将被视为处理返回的文本搜索过的电影列表结果的最简单方法?
A. 不渲染任何视图;而重定向到 movies index 页面,URI 如下
/index?search_terms=world&rating[PG]=1B. 渲染当前的 movies index 页,使用匹配 “world”的结果, 过滤条件为 release date
和 rating "PG", 但仍然使用统一个 URI /index
C. 建立新的 controller 方法 MoviesController#search, 建立新的 route match
'/search/:ratings/:search_terms', 'MoviesController#search' 然后重定向到
/search/PG/world
D. 渲染 XML 响应表示 movies 匹配了“world” 而且 ratings 过滤, “G”, “PG”, and
“PG­13”
49. 下面哪个说法是错误的?
A. 使用更多设计模式的软件不一定性能更好.
B. 精心设计的软件可以发展到模式成为反模式的程度。
C. 过早地尝试应用设计模式可能与应用它们太晚一样糟糕。
D. 大多数设计模式特定于编程语言的特定子集。
50. 关于 P&D 维护的哪一项声明(如果有的话)是假的?
A. 维护成本通常超过 P&D 的开发成本
B. 与 P&D 变更请求相当的 Agile 是用户故事; 等价的变更请求成本估算是积分; P
&D 版本就像迭代一样
C. Agile 生命周期类似于 P&D 维护生命周期:增强工作软件产品,与客户合作与合
同谈判,不断响应变化
D. 以上所有都属实
51. 软件项目可能过度超出预算或延迟计划的最佳预测因素是:
A. 项目的范围或规模非常大
B. 项目使用 P&D 方法而不是 Agile
C. 项目使用 Agile 方法而不是 P&D
D. 项目的测试/ QA 由一个单独的团队而不是开发人员完成
52. 鉴于小型软件项目与课堂上提供的大型软件项目的成功率,我们所涵盖的哪些技术将为我
们提供从许多小型项目构建大型项目的最佳机会?
A. 在计划和文档生命周期的设计阶段开发的软件体系结构
B. 模型 - 视图 - 控制器设计模式
C. 外墙设计模式
D. 遵循面向服务的体系结构
53. 关于类遵守单一责任原则(SRP)说法正确的是?
A. 一般而言,我们预计会看到不良凝聚力得分与差的 SOFA 指标之间的相关性
B. 低内聚是分离类的可能指标
C. 如果一个类尊重 SRP,它的方法可能会尊重 SOFAD. 如果一个类的方法尊重 SOFA,那么该类可能会尊重 SRP
54. OmniAuth 定义了一些应用程序必须提供的 RESTful 端点,以处理与各种第三方的身份验
证。 要添加新的身份验证提供程序,请创建与该提供程序一起使用的 gem。 关于
OmniAuth,以下说法错误的是?
A. OmniAuth 本身符合 OCP
B. 使用 OmniAuth 帮助您的应用程序遵循 OCP(关于第三方身份验证)
C. OmniAuth 是模板模式的一个例子
D. OmniAuth 是 Strategy pattern 的一个例子
55. 不恰当的亲密设计气味,有时在单元测试中表现为 Mock Trainwreck,通常表示违反以下
哪种 SOLID 原则:
A. Single Responsibility
B. Open/Closed
C. Liskov Substitution
D. Injection of Dependencies
E. Demeter
56. 您希望创建相关对象的族,以便可以互换地配置应用程序。 哪种设计模式最适合使用?
A. 抽象工厂模式
B. 组合模式
C. 观察者模式
D. 模板方法模式
57. 根据开闭原则, 应该为 开放但是 时应该关闭.
A. class; extension; modification
B. method; modification; polymorphism
C. class; delegation; polymorphism
D. method; stubbing; overriding
58. 下面关于 JavaScript 中函数的说法正确的是(多选)
A. 它可以是匿名的
B. 它是该语言中的一级对象
C. 它可以与其他功能同时执行
D. 它可以是 JavaScript 对象中属性的值
E. 当没有参数调用时,括号是可选的(与 Ruby 函数一样)
59. 什么情况下可以只在客户端验证全部输入信息(而在服务端不做)(单选)A. 确认浏览器 javascript 启用
B. 确认浏览器 javascript 启用,且表单通过安全链接提交
C. 服务器必须总是执行验证,即使客户端有 javascript 验证。
60. 执行后台请求并根据响应更新适当位置的 html 页面的能力依靠的是(单选):
A. 浏览器内置 javascript 翻译器
B. 浏览器使 DOM 对 Javascript 可用
C. 一个对 XmlHttpRequest 的 Javascript 绑定
D. 浏览器中对 XML 的解析
E. 浏览器对 JSON 的解析
2.4 测试
61. 最终莎莉意识到, 她的网站的用户可能希望创建一个黑名单。 用户不希望和他们的
黑名单人员匹配。 然而, 她意识到此功能不是很重要, 于是决定在几个月的后面
实现它。 最后她写了功能测试。 莎莉显然没有遵循 FIRST 原则的哪一个?
A.快
B.独立
C.可重复
D.自我检查
E.及时
62. 莎莉希望她的网站在每个月的第一个星期二有一个特别的布局,她有以下的控制器和测
试代码:
明显没有遵循的 FIRST 原则是什么?
A. Fast
B. Independent
C. Repeatable
D. Self-checking
E. Timely
63. 以下哪一项保证你有详尽的单元测试一段代码?
A. 100% C0 (statement) 覆盖率
B. 100% C1 (branch) 覆盖率
C. 100% C2 (path) 覆盖率
D. 以上都不是
64. 为了测试在代码中引入了故意错误,以查看测试是否中断。这是哪种测试?
突变试验
A. 突变试验
B. DU 测试
C. 黑盒测试
D. 模糊测试
65. 请按测试的代码量和复杂程度有低到高排序?
A. 单元测试,功能或模块测试,集成测试
B. 集成测试,功能或模块测试,单元测试
C. 单元测试,集成测试,功能或模块测试
D. 功能或模块测试,单元测试,集成测试
66. 关于 TDD 哪一项是错误的?
A.
视图无法使用 TDD 进行测试
B.
在编写要测试的代码之前编写测试用例
C.
可以将 TDD 与 BDD 结合使用
D.
TDD 可以使代码更加可测试,模块化和可读性
67. 当探索一段遗留代码时,下列那些技术有可能会有帮助?
i.
创建一个应用的草稿分支
ii. 观看用户如何使用该软件
iii. 运行测试集合(如果有的话)
iv. 检查非正式的设计文档(例如 wikis,提交日志等)
A. (iii) and (iv) only
B. (i) and (ii) only
C. (i), (ii), and (iv) onlyD. (i), (ii), (iii), and (iv)
68. 在对遗留代码进行高级别的探索时,下列哪个表现你可以认为是正确的?
A. 探索指的是在合理的期限内去修正代码中一些小的不够“漂亮的”问题
B. 当你发现了类之间重要的集合时,你将能轻松地为它们建立桩。
C. 你应该创建说明现在应用是如何工作的测试,即使这些测试是用于测试 bug 和一
些丑陋的特性。
D. 如果设计文档是可获得的,你可以用他们来建立当前代码工作的“基准情况”。
69. 关于鉴定测试,下列哪个说法是正确的?
A. 因为你还并不能理解类或方法级别的逻辑,所以你只能在集成测试的级别
上创建它。
B. 你可以通过写你明知会失败的测试,然后根据观察到的应用的行为来代替测试中
的预期结果。
C. 因为你可以观察一个用户与该应用的交互,这个用户应该写代表他们交互的测试。
D. 你只能在开发模式中运行鉴定测试。
70. 下列哪个不是准备修正遗留代码的挑战?
A. 它可能能够在生成环境中运行,但是在开发环境中难以运行
B. 在测试集合中,可能有失败或过时的测试。
C. 用户可能并不清楚什么样的改进是最重要的。
D. 可能存在没有被用户用例引发或者测试覆盖的bug
71. 对比下面相同代码的两个版本,下面陈述正确的是:
A. 版本 1 有更高的圈复杂度。
B. 版本 1 有更多的测试接缝。(通过所谓的接缝(Seam),可以将具有逻辑的部分与承
上启下的代码分离开,然后将单元测试注入到接缝中,形成对有逻辑代码的保护
网)
C. 版本 1 有更低的 ABC 得分
D. 版本 1 不能通过 100% C2 覆盖测试。72. 关于重构,下面哪个陈述是正确的?
A. 重构提高测试覆盖率
B. 在重构期间,永远不应该有失败的测试
C. 改进代码结构是基本目标
D. 重构总是减少代码量
73. 关于方法级的重构,_____代码味道是可能存在的在其他三个代码都存在的情况下.
A. 长方法
B. 方法做了不止一件事
C. 方法有很多参数
D. 方法在抽象层次间来回跳跃
74. 关于设计评审和会议的哪种表述是错误的?
A. 旨在利用与会者的智慧来改进软件产品的质量
B. 他们提供技术信息交流,对年轻人有很高的教育价值
C. 设计评审对演讲者和参与者都是有益的
D. 会议成功的关键是 Serving food like Samosas

猜你喜欢

转载自www.cnblogs.com/darz/p/12132368.html