评价一个软件工程师我认为应该从以下几个方面考量
1.专业技能
作为一个软件工程师,专业技能当然必不可少,最基础的编程语言(Python/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)等,还有诸多如JAVASCRIPT、AJAX、HIBERNATE、SPRING等前沿技术。此外,关于网络工程和软件测试的其他技术也要有所涉猎。
比如对Java软件工程师来说:需要对面向对象有良好理解、熟悉Struts、Hibernate、Spring等主流技术框架、熟悉Ajax、XML解析、熟悉ssh三大框架的使用等。
2.良好的工作习惯
代码规范,注重细节,程序设计严谨,测试充分,不放过任何一个异常,不抱有侥幸心理,主动提交程序对应的流程图、说明文档、测试文档等。
3.与队友协作共事的能力
在软件开发这项工作来说,是非常能够体现团队合作精神的,想要成为一名优秀的工程师就必须要学会、要懂得如何与伙伴共事,当一个工程师缺乏团队意识、技巧时,那么后果不仅是对团队发展不利,而且自己也会越来越孤立。充分了解自己的工作职责和伙伴们的职责;不要怀疑自己伙伴的能力;帮助伙伴快速进步;和团队伙伴成为朋友。
4.良好的沟通能力
在软件开发过程中,不仅是程序员之间要进行交流合作,程序员也可能要与产品人员,测试人员,运维人员,销售人员等其他各个部门的人沟通交流。测试工程师更强调人际沟通能力,因为项目测试过程中经常要与测试经理,开发人员和项目经理进行沟通,这样可以更好的发现问题。同时要不乏幽默感,能和开发小组很好的沟通是关键,让开发人员感觉和你一起工作来改进软件质量是件很幸福的事情。
5.学习新技能的能力
当今社会,互联网是一个飞速发展的行业,而身为工程师,我们就要不断的学习新技能,才能更好的与时俱进。保持对技术的热情,兴趣是最好的老师,对待任何工作只有充满兴趣,才会投入更多的精力和时间,智慧+汗水=成功!软件人才的求知欲和进取心非常重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力以及对新技术的敏感性。
6.总结工作的能力
无论做任何事情,都要善始善终,淡然工程师更不用说了,作为优秀的工程师是绝对不会草草了结自己每天的工作的,一定会有这样的流程:总结—反省—变优秀。
试题
选择题
1.下列四个软件可靠性定义中正确的是(D)。
A、软件可靠性是指软件在给定的时间隔内,按用户工求成功运行的概率
B、软件可靠性是指软件在给定的时间间隔内,按设计要求成功运行的概率
C、软件可靠性是指软件在正式投入运行内,按规定说明书的规定成功运行的概率
D、软件可靠性是指软件在给定时间间隔内,按规格说明书的规定成功运行的概率
2.在软件生命期中,占工作量比例最大的是(D)。
A、可行性研究 B、建立系统的结构 C、编写程序 D、维护
3.用于概要设计所采用的描述手段是(B)。
A、DFD B、SC图(系统结构图) C、框图 D、数据结构图
4.数据库设计全过程中的关键是(B)。
A、分析用户要求 B、建立概念性数据模型
C、逻辑设计 D、物理设计
5.面向对象设计时,对象信息的隐藏主要是通过(A)实现的。
A、对象的封装性 B、子类的继承性
C、系统模块化 D、模块的可重用
名词解释
功能内聚
功能内聚是内聚度最高的一种模块类型。如果模块仅完成一个单一的功能,且该模块的所有部分是实现这一功能所必须的,没有多余的语句,则该模块为功能内聚。功能内聚模块的结构紧凑、界面清晰,易于理解和维护,因而可靠性强;又由于其功能单一,故复用率高。所以它是模块划分时应注意追求的一种模块类型。
设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
模块化
在结构化方法中,模块是一个功能单位,因此模块可大可小。它可以被理解为所建软件系 统中的一个子程序系统,也可以是子程序系统内一个涉及多项任务的功能程序块,并可以是功 能程序块内的一个程序单元,例如函数、过程。也就是说,模块实际上体现出了系统所具有的 功能层次结构。 模块可以使软件系统按照其功能组成进行分解,而通过对软件系统进行分解,则可以使一 些大的复杂的软件问题分解成诸多小的简单的软件问题。从软件开发的角度来看,这必然有利于软件问题的有效解决。
观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
重构(Refactoring)
对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。常见的重构现象为重复代码。
简答题
1.软件开发的各阶段的任务是什么?
定义阶段:问题定义--任务:关于规模和目标的报告书;可行性研究--任务:系统的高层逻辑模型:数据流图,成本/效益分析;需求分析--任务:系统的逻辑模型:数据流图,数据字典,算法描述。
开发阶段:总体设计--任务:系统流程图,成本/效益分析,推荐的系统结构:层次图/结构图;详细设计--任务:HIPO图或PDL图;编码和单元测试--任务:源程序清单,单元测试方案和结果;综合测试--任务:综合测试方案,结果集成测试,验收测试,完整一致的软件配置。
维护阶段:软件维护--任务:维护记录以及改正性维护,适应性维护,完整性维护和预防性维护
2.瀑布模型与原型模型分别适用于开发哪些软件?
瀑布模型与原型模型分别适用于开发哪些软件瀑布模型适合于需求稳定,而且可以预先指定的大型系统工程项目。
原型模型适合于需求模糊或者随时间变化的中小型项目。
3.白盒测试与黑盒测试分别有哪些测试方法?如何对具体问题测试?
白盒测试对程序模块的所有的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假” 白盒测试的两种情况都至少测试一次;白盒测试也叫逻辑覆盖法包括:语句覆盖,判定覆盖,条件覆盖。
黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据, 来检查程序是否都能产生正确的输出。黑盒测试有等价类法和边界值分析法。