1.良好的编码能力
软件人员的一个重要职责是把用户的需求功能用某种计算机语言予以实现。编码能力直接决定了项目开发的效率。这就要求软件工程师至少精通一门编程语言,比如当前国内企业常用的C/C++、VB和国际上最流行的Java语言,熟悉它的基本语法、技术特点和API(应用程序接口)。
2.自觉的规范意识和团队精神
随着软件项目规模越来越大,仅仅依靠个人力量已经无法完成工作,因此,现代软件企业越来越重视团队精神。一般来讲,软件企业中的程序员可以分为两种,一种是程序“游击队员”,他们可能对编程工具很熟,能力很强,把编码编得很简洁高效,但却缺乏规范和合作的观念;另一种程序员编程不一定很快,但是很规范,个人能力不一定很强,但合作意识很好。第二种人更加适合现代软件企业发展的潮流。对于基础软件工程师来说,他们在企业中的角色决定了他们必须具有良好的规范意识和团队精神。
3.认识和运用数据库的能力
信息是以数据为中心的,因此与数据库的交互在所有软件中都是必不可少的,了解数据库操作和编程是软件工程师需要具备的基本素质之一。目前常用的数据库软件有甲骨文公司的Oracle数据库和微软公司的SQL Server等。
4.较强的英语阅读和写作能力
程序世界的主导语言是英文,编写程序开发文档和开发工具帮助文件离不开英文,了解业界的最新动向、阅读技术文章离不开英文,与世界各地编程高手交流、发布帮助请求同样离不开英文。作为基础软件工程师,具有一定的英语基础对于自身的学习和工作极有帮助。
5.具有软件工程的概念
基础软件工程师处于软件企业人才金字塔的底层,是整个人才结构的基础,虽然他们从事的工作相对于系统分析师和高级程序员要单纯一些,但是他们是整个软件工程中重要的一环,因此,基础软件工程师同样要具有软件工程的概念。从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些过程,并能胜任各种环节的具体工作,这样的能力正好符合了当前企业对基础软件工程师的全面要求。
6.求知欲和进取心
软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力和对IT新技术比较敏感,同时,掌握最新的IT实用技术。
软件工程知识技能水平的测试题(来自上课作业、自创以及百度)
一 选择题
1.软件开发和维护过程中出现的一系列严重问题称为(D)
A.软件工程
B.软件开发
C.软件开发
D.软件危机
解析:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
2.在设计测试用例时,(A)是用得最多的一种黑盒测试方法。
A.等价类划分 B.边界值分析
C.因果图 D.判定表
解析:等价类划分是一种典型的黑盒测试方法。等价类划分是指分步骤把海量的测试用例集减得很小但过程同样有效。也就是说,选取足够小测试用例,发现更多软件缺陷
3.下列哪个阶段不属于软件生存周期的三大阶段(C)。
A、计划阶段 B、开发阶段
C、编码阶段 D、维护阶段
解析:软件的生存周期包括:计划阶段、开发阶段、维护阶段。编码是开发阶段的一部分。
4.软件设计中划分模块的一个准则是(C)。
A、 低内聚低耦合 B、 低内聚高耦合 C、 高内聚低耦合 D、 高内聚高耦合
解析:软件设计中划分模块的一个准则是高内聚低耦合。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
5.车与车轮之间的关系是(A)。
A.组合 B.聚合 C.继承 D.关联
解析:UML中定义的关系主要有6种
泛化:
在程序中通过“继承”来实现,也可以认为就是继承; 通过空心三角形+实线来表示,子类指向父类。
实现:
可以理解为类与接口之间的关系; 通过空心三角形+虚线来表示,从实现类指向接口
依赖:
是一种“使用”关系,即一个类(A)的实现需要用到另一个类(B)。 尽量不要使用双向依赖。 一般表现为类A中的方法需要类B的实例作为其参数或变量,但是类A本身并不需要引用类B的实例作为其成员变量。 使用虚线箭头表示,类A指向类B。
关联:
比依赖的关系更强,类A使用类B的实例作为自己本身的一个成员变量。 使用实线箭头表示,类A指向类B。
聚合:
传说中的 has-a关系,类A和类B是整体和部分的关系。但是两个部分的生存周期可以不同,没那么强的约束关系。 是一种更强的关联关系,关联关系的特例。 使用空心菱形+实线来表示,范围小的指向范围大的。
组合:
contains-a关系,类A和类B也是整体和部分关系,但是之间的关联更强,有共同的生命周期,一旦整体不存在,部分也将不存在。 通过实心菱形+实线来表示,范围小的指向范围大的。
二 名词解释
1.观察者模式
一个目标物件管理所有相依于它的观察者物件,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,被用来实现事件处理系统,又被称为“发布——订阅”模式
2.重构
通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性
3.多态
指同一个实体同时具有多种形式,有不同的解释,产生不同的执行结果,是面向对象程序设计的重要特征
4.功能内聚
模块内所有元素共同完成一个功能,缺一不可
5 设计模式
一套被反复使用,多数人知晓,经过分类、代码设计的经验总结
三 简答题
1.简述软件工程的概念
答:软件工程是指导软件开发和维护的一门学科,采用工程的概念、原理、技术和方法来开发和维护软件,把正确的管理和最好的技术结合起来,以经济地开发出高质量的软件并有效地维护。
2.介绍软件生命周期
答:软件生命周期分为7个阶段
(1)问题定义:要解决的问题是什么
(2)可行性研究:确定问题是否值得解,分析技术可行性、经济可行性和操作可行性
(3)需求分析:系统做什么
(4)总体设计:系统如何实现,包括系统设计和结构设计
(5)详细设计:具体实现设计的系统
(6)实现:编码和测试
(7)运行维护:保证软件正常运行
3.什么是白盒测试?什么是黑盒测试?
答:白盒测试又称为结构测试,它的前提条件是可以看成将程序放在一个透明的白盒子中,也就是完全了解了软件系统的结构和整个处理过程。
黑盒测试又称为功能测试,它把程序看成是一个不透明的黑盒子,完全不去考虑程序的内部结构和处理过程。
四 应用题
1.某一新闻管理系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布新闻。任何人可以浏览新闻, 浏览者可以注册成为系统会员, 注册后可对新闻进行评论。管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。请画出该新闻管理系统的用例图