根据本课程的学习以及自身的知识和经验,您认为一个软件工程师的软件工程知识技能水平高低主要体现在哪些方面?
通常情况下,软件工程师需要具备以下几个方面的知识结构:
1.操作系统知识。操作系统知识是软件工程师必须具备的重要内容,Web开发领域可能会使用到Windows系列操作系统,大数据和物联网方向要使用到Linux系列操作系统,掌握操作系统的体系结构是进行软件研发的重要基础。主要内容包括资源管理、任务调度、并发管理、权限管理、网络管理等内容。
2.编程语言和算法。编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言,比如Web开发可能会使用PHP、Python、Java等语言,而大数据可能会使用Java、R、Scala等语言,而物联网开发可能会使用到C、C++等编程语言。通常来说,软件工程师往往需要掌握多门编程语言,以应对不同的开发环境。算法是软件工程师的重点知识结构,因为软件研发说到底就是个数学问题,所以算法的掌握情况往往能够决定软件工程师的成长高度。当然,对于应用级软件工程师来说,也有可能不会接触到更多的算法。
3.领域知识。不同开发领域需要掌握不同的知识结构,比如大数据软件工程师往往需要掌握Hadoop、Spark平台的使用,而Web开发工程师往往还需要掌握前后端开发技术,包括一系列Web开发框架的使用等等。
能力方面:
- 编程语言能力 作为一名专业的软件工程师,应该能够熟练掌握JAVA语言,并且能够深入理解OOP、OOA、OOD等编程思想。精通一门编程语言能为以后的软件开发打下坚实的基础。
- 编码能力 这里说的编码可不是照着书本敲代码,而是能够独立的运用代码,编写一个程序出来。有很多软件工程师,他们都是随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,缺乏最基本的职责素养。
- 学习能力 IT技术可谓是更新换代最快的了,从市面上的电脑和手机就可以看出来。所以,只依靠自己之前学到的知识,很快就会被这个时代所淘汰,软件工程师应具备的技能里很重要的一点就是学习能力。因为只有具备了学习能力,才能在离开学校之后仍然能够独立地学习最新的技术,同时能够自主的发现现在有什么新技术,市场上流行的技术元素与市场需求的变化
- 设计能力 一个优秀的软件工程师不仅仅具备扎实的专业知识与技能,而且还要具备一定的设计能力。因为只有这样,才能使一个软件或者应用更加完美,更加容易受到人们的欢迎,从而获得更广阔的市场。
- 团队协作能力 软件开发并不是孤军奋战,很多时候一个软件需要几个人一起开发,这个时候就需要大家齐心协力,共同努力了。这时候,作为软件工程师就需要具备一定的团队协作能力了,来保证每个人都负责相应的方向,不能只为了突出自己而不顾整个团队。
软件工程知识技能水平的测评试题:
名词解释题
1.重构:通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
2.观察者模式:观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
3.多态:在面向对象语言中,接口的多种不同的实现方式即为多态。
4.功能内聚:模块内所有元素共同完成一个功能,缺一不可,因此模块不能再分割。
5.可修改性:指系统或软件的能够快速地以较高的性价比对系统进行变更的能力。
6.实现试图:开发视图也称为模块视图,在UML中被称为实现视图,它主要侧重于软件模块的组织和管理。开发视图要考虑软件内部的需求,例如,软件开发的容易性、软件复用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。开发视图通过系统I/O关系的模型图和子系统图来描述。
7.松散耦合:为避免这种情况,需要降低A与B之间的耦合度,目的就在于,无论B的形式如何,只要B仍然能够实现A所需要的功能,A就不需要重写代码,
8.发布订阅的架构风格:发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在
9.模块化:解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。
10.抽象:从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃的思维过程。
11.对象组合:将多个元素作为一个对象来处理,您需要将它们组合。
12.设计模式:软件开发人员在软件开发过程中面临的一般问题的解决方案。
(题出自牛客网以及百度文库)
选择题
1.以下不属于 白盒测试技术 的 (B)
路径覆盖
等值分析测试
语句覆盖
条件覆盖
2.白盒测试是对代码内部的逻辑测试,有逻辑覆盖和路径测试两种方法,逻辑覆盖又包含语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖。
需求分析是 ( A )。
软件开发工作的基础
软件生存周期的开始
由系统分析员单独完成的
由用户自己单独完成的
软件生命周期总共大的方面分为三个阶段:定义,开发,维护。 定义包括:问题定义,可行性研究,需求分析。 开发包括:总体设计,详细设计,编码与测试单元,综合测试。 维护包括:软件维护 (如果不对的话请指出) 所以,软件生命周期的开始应该是问题定义 软件开发的基础是需求分析(基于定义的最后一个时期)
3.软件调试技术包括( B)
边界值分析
演绎法
循环覆盖
集成测试
常用的调试方法有:强行排错、回溯法排错、归纳法排错、演绎法排错。
边界值分析,循环覆盖,集成测试都属于软件测试
4.下列关于B/S架构软件与C/S架构软件的区别描述错误的是?(D)
B/S属于C/S,浏览器只是特殊的客户端;
C/S可以使用任何通信协议,而B/S这个特殊的C/S架构规定必须实现HTTP协议;
C/S架构的劣势还有高昂的维护成本且投资大
C/S架构维护和升级方式简单
B/S只能用HTTP
C/S成本高,维护困难
5.设计模式中,属于结构型模式的有哪些?(BC)
状态模式
装饰模式
代理模式
观察者模式
设计模式分为三种类型,共23种。
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、***模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
6.总体设计的目的是确定整个系统的(D)。
规模
测试方案
费用
功能及模块结构
7.模块的内聚性最高的是(D)。
逻辑内聚
时间内聚
偶然内聚
功能内聚
内聚有如下的种类,它们之间的内聚度由弱到强排列如下: (1) 偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。 (2) 逻辑内聚。这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 (3) 时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。 (4) 过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。 (5) 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。 (6) 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。即一个模块完成多个功能,这些模块又必须顺序执行。 (7) 功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,联系紧密,缺一不可。
8.结构化分析方法是一种预先严格定义需求的方法,它在实施时强调的是分析对象的( B )
控制流
数据流
程序流
指令流
9.结构化分析预先严格定义需求,分析的是数据流
在UML(统一建模语言)提供的图中,(A)用于描述系统与外部系统及用户之间的交互。
用例图
类图
对象图
部署图
10.用例图就是反映用户和系统间的交互关系的
判断下列类之间的相互关系,把相应编号填写在括号中。
汽车发动机 – 汽车车体(D)
整体-部分
一般-特殊
实例联接
都不是
汽车车体,不是汽车本身。
判断题
1.在面向对象程序中,使用继承机制是实现共享和提高重用程度的主要途径。T
2.UML 只能应用于软件系统模型的建立。T
3.软件重用是提高软件开发生产率和目标系统质量的重要途径。T
4.Use-cases can provide useful input into the design of black-box and state-based tests of OO software.T用例可以为面向对象软件的黑盒设计和基于状态的测试提供有用的输入。
5.流图中的区域数等于环形复杂度。T
环形复杂度定量度量程序的逻辑复杂度。描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。
(1)流图中的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
简答题:
1.在需求分析和设计阶段建立原型的好处有哪些?
(1)增进开发人员和用户对系统需求的一致理解,明确软件需求,尤其是功能含糊的需求。
(2)原型提供了一种有力的学习手段,能够使用户尽早接触系统。
(3)原型可以用来识别或化解风险。
(4)原型有的可以原封不动地成为产品,有的略加修改就可以成为最终系统的一个组成部分,这样有 利于建成最终系统。
2.什么是模块的扇入和扇出?
扇入则定义为一个模块被调用(或控制)的模块个数;扇出表示一个模块直接调用(或控制)的其他 模块数目
3.UML的特点是什么?
(1)统一了面向对象方法的有关概念和描述方法;
(2)表达能力强,能对各种并发分布式系统进行建模,且UML还提供了扩展机制;
(3)UML专注于一种标准的建模语言,而不是一个开发过程。
4.层次图和层次方框图有何区别?
层次图主要用来描绘软件的层次结构,矩形框代表一个模块,矩形框之间的连线表示模块之间的调用关系,常与IPO图一起形成HIPO图。层次方框图主要描述系统的组成关系,一般自用域需求分析。
5.软件测试对象应包括哪些内容?
软件测试并不等于程序代码测试,其应该贯穿于软件定义与开发的整个期间。因此,需求分析、概要设计以及程序编码等各阶段所得的文档,包括需求规格说明、概要设计说明、详细设计规格说明以及源程序代码都应成为软件测试的对象。