如何评测软件工程知识技能水平?
如何评测软件工程知识技能水平?
一,软件工程师应当掌握的能力
(1)扎实的基本功:
软件工程与计算机科学各有侧重,但是一个优秀的软件工程师也需要有扎实的计算机科学基础。一个软件工程师至少应当熟练掌握一门编程语言,并且能够简单使用大部分常见编程语言,除此之外,还应该了解或者掌握如算法和数据结构,编译原理,计算机系统和体系结构等计算机科学基础知识。
(2)良好的编码能力与习惯:
一个合格的软件工程师需要具有良好的编码习惯和规范的代码风格,能够熟练使用各种编码工具辅助工作,能够在编码过程中将如面向对象之类的思想贯穿始终,严格执行单元测试。最终形成的代码应该易于理解和维护,并形成规范准确的文档。
(3)熟悉软件开发的相关流程与技能:
了解软件过程和生命周期,熟悉各种基本概念,能够在软件开发的各个阶段准确地完成相应的工作,如能够在需求分析的阶段准确进行需求提取。了解并掌握软件开发中所要使用的技能,如能够准确地使用UML进行开发。
(4)具有团队精神和沟通能力:
软件工程归根结底是一个团队工作,不仅如此,整个软件生命周期内,软件工程师需要与各色人员进行沟通,如客户,测试,产品经理等等,这就要求软件工程师要有团队精神和合作能力,并且能够与各方人员进行沟通交流以确保整个工程流畅顺利地进行。
(5)掌握一定的设计能力和相关领域知识:
一方面,软件工程师不应当是只埋首于代码的码农,另一方面,缺乏对于设计和其他相关领域知识的了解,软件工程师也不可能开发出真正成功的作品。
(6)不断学习的能力和旺盛的好奇心:
软件工程是一个终身学习的领域,也是一个仰之弥高的领域,是一个不断发现问题并不断解决问题的领域,这就要求每一个软件工程师不仅始终保持着旺盛的好奇心和求知欲,主动解决工作中的疑问,跟踪相关领域的最新进展,还要求软件工程师始终具有良好的学习能力,掌握优质的学习资源。
二,软件工程测试题及参考答案
一,单选题(30分)
1.【原创】请判断下面哪种耦合表示的模块间关联紧密度最高?
a、控制耦合
b、数据耦合
c、内容耦合
d、公共耦合
答:c,来源讲义,内容耦合是紧密度最高的耦合。
2.【百度文库】系统定义明确之后,应对系统的可行性进行研究。可行性研究应包括( )
a、软件环境可行性、技术可行性、经济可行性、社会可行性
b、经济可行性、技术可行性、操作可行性
c、经济可行性、社会可行性、系统可行性
d、经济可行性、实用性、社会可行性
答:b,可行性研究的目的是,用最小的代价在尽可能短的时间内确定问题能否解决,从技术、经济和操作三个方面进行可行性研究。
3.【2014年北京交通大学901软件工程考研】结构化方法的基本原则是( )
a、标准化
b、抽象与分解
c、信息隐藏
d、逐步求精
4.【百度文库】UML是软件开发中的一个重要工具,它主要应用于哪种软件开发方法?
a、基于瀑布模型的结构化方法
b、基于需求动态定义的原型化方法
c、基于对象的面向对象的方法
d、基于数据的数据流开发方法
答:c,UML是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。
5.【四川大学软件工程2008】下列( )不是好的编程原则
a、单元编码前先设计单元测试
b、设计代码可视化布局以助于理解
c、使用简短的变量名使得代码紧凑
d、代码的文档化,而不是程序的文档化
答:c,https://blog.csdn.net/ZCF1002797280/article/details/51495229
6.【百度文库】软件工程方法的产生源于软件危机,下列( )是产生软件危机的内在原因。
Ⅰ软件的复杂性;Ⅱ软件维护困难;Ⅲ软件成本太高;Ⅳ软件质量难保证
a、Ⅰ
b、Ⅲ
c、Ⅰ、Ⅳ
d、.Ⅲ、Ⅳ
答:a,软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
7.【四川大学2009】The data flow diagram ( )
a、depicts relationships between data objects
b、depicts functions that transform the data flow
c、indicates how data are transformed by the system
d、both B and C
答:d,数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程。
8.【百度文库】软件测试基本方法中,下列( )不用测试实例。
a、白盒测试
b、动态测试
c、黑盒测试
d、静态测试
答:d,静态测试是指不运行被测程序本身,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
9.【原创】下面哪个不属于需求应当满足的性质?
a、Consistent
b、Unambigious
c、Cohesive
d、Complete
答:c,来源讲义:Characteristics of requirements 包括:Correct,Consistent,Unambigious,Complete,Feasible,Relevent,Testable,Traceable。
10.为适应软硬件环境变化而修改软件的过程是 ( )
a、校正性维护
b、适应性维护
c、完善性维护
d、预防性维护
答:b,https://baike.baidu.com/item/%E9%80%82%E5%BA%94%E6%80%A7%E7%BB%B4%E6%8A%A4/5185704?fr=aladdin
二,判断题(10分)
1.【原创】Liskov替换原则要求子类必须保留父类的所有声明属性( √ )
答:来源讲义。
2.【百度文库】软件生存周期是从软件开始开发到开发结束的整个时期。( × )
答:软件生存周期直到软件报废为止。
3.【百度文库】模块内的高内聚往往意味着模块间的松耦合。( √ )
答:内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。
4.软件测试的目的是为了无一遗漏的找出所有的错误。( × )
答:软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
5.【原创】依赖倒置原则可以通过引入接口来实现。( √ )
答:来源讲义。
三,填空题(20分,一个空2分)
1.【中南大学】状态图描述一个类对象所经历的 各种状态 以及事件发生时状态的 转移条件 。
答:状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。
2.【百度文库】在学校中,一个学生可以选修多门课程,一门课程可以由多个学生选修,那么学生和课程之间是 关联 关系。类A的一个操作调用类B的一个操作,且这两个类之间不存在其他关系,那么类A和类B之间是 依赖 关系。
答:https://www.cnblogs.com/hoojo/p/uml_design.html
3.【原创】需求分析阶段,分析人员要确定对问题的综合需求,其中最主要的是 功能需求 。
答:功能性需求即软件必须完成哪些事,必须实现哪些功能,以及为了向其用户提供有用的功能所需执行的动作。功能性需求是软件需求的主体。
4.【原创】结构化程序设计基本要求要点包括:采用 自顶向下 、逐步求精的程序设计方法 ; 使用 顺序 、 选择 、 循环 三种基本程序控制结构构造程序 ;主程序员组的组织形式。
答:https://wenku.baidu.com/view/d3e628b6dd88d0d233d46a2a.html
5.【百度文库】软件集成测试的方法主要有两种,它们是 渐增式测试 与 非渐增式测试 。
答:https://wenku.baidu.com/view/80dc150ef111f18583d05a9b.html?from=search
四,简答题(40分)
1.【https://wenku.baidu.com/view/d3e628b6dd88d0d233d46a2a.html】什么是软件生命周期模型?请列举出至少四种主要模型:(10分)
答:半开放性问题。软件生命周期模型是跨越整个软件生命周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。常用的软件生命周期模型包括瀑布模型、原型模型、螺旋模型、基于四代技术模型、喷泉模型和增量模型。
2.【中南大学2007年软件工程】某汽车租赁公司打算采用计算机系统来管理汽车租赁业务,其设计方案采用UML类图描述如图4-1所示。图4-1中的类有:Renter(租赁者)、Person(人)、Company(租赁公司)和Automobile(汽车)。租赁公司既可将汽车租给个人,也可将汽车租给其他租赁公司。在设计时暂不考虑未租出去的汽车。请回答以下问题: (15分)
(1)试说明图4-1设计方案存在的问题。(7分)
(2)针对图4-1设计方案中存在的问题,给出改进的设计方案,并用UML类图描述。(8分)

图4-1 汽车租赁业务管理系统设计方案
答:
(1)图4-1设计方案存在的问题如下:1)未能完全反映租赁关系的内容,如租赁日期等;2)公司、被租赁汽车和租赁者三者之间的关系未能描述。
(2)改进后的类图如下图所示。

3.【原创】任选一种设计模式,给出(伪)代码示例:(15分)
答:开放性问题。范例如下。
1 public class ObserverPattern 2 { 3 public static void main(String[] args) 4 { 5 Subject subject=new ConcreteSubject(); 6 Observer obs1=new ConcreteObserver1(); 7 subject.add(obs1); 8 subject.notifyObserver(); 9 } 10 } 11 //抽象目标 12 abstract class Subject 13 { 14 protected List<Observer> observers=new ArrayList<Observer>(); 15 //增加观察者方法 16 public void add(Observer observer) 17 { 18 observers.add(observer); 19 } 20 //删除观察者方法 21 public void remove(Observer observer) 22 { 23 observers.remove(observer); 24 } 25 public abstract void notifyObserver(); //通知观察者方法 26 } 27 //具体目标 28 class ConcreteSubject extends Subject 29 { 30 public void notifyObserver() 31 { 32 for(Object obs:observers) 33 ((Observer)obs).response(); 34 } 35 } 36 //抽象观察者 37 interface Observer 38 { 39 void response(); //反应 40 } 41 //具体观察者 42 class ConcreteObserver1 implements Observer 43 { 44 public void response() 45 { 46 System.out.println("具体观察者作出反应!"); 47 } 48 }

浙公网安备 33010602011771号