评测软件工程师的软件工程知识技术水平的标准
(一)什么是软件工程(SoftwareEngineering)?
1、百度百科上对软件工程这一学科的解释是:软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
2、我的理解:随着计算机技术的日益发展,软件的规模越来越大,软件的结构越来越复杂,软件开发与维护的难度也越来越高,软件开发人员迫切需要有一种科学的方法来指导软件的开发与维护工作,从而使软件开发过程趋于规模化、流程化,同时也便于后期的回溯与维护。而软件工程就是这样一种指导软件开发和维护的学科。
(二)什么是软件工程师(SoftwareEngineer)?
(三)软件工程师的分级及要求
1、软件工程师评级
一般分为4级,分别是:(1)软件技术员(2)助理软件工程师(3)软件工程师
(4)高级软件工程师
2、软件工程师要求
总的来说,对软件工程师的技术要求是比较全面的。
(1)首先最基础的是要掌握一门编程语言(C/C++/Java/Python等);
(4)其他关于网络工程和软件的技术也要有所了解。
(四)如何评测一个软件工程师的软件工程知识技能水平高低?
1、因素
(1)软件开发流程、文档资料留存
(2)编程思维、代码风格及代码优化能力
(3)责任心、抗压能力、沟通能力等软实力。
2、衡量标准
可通过计算机技术与软件专业技术资格(水平)考试来加以评测。
软件工程知识技能水平测评试题
一、单项选择题(20分=2分×10)
1.软件工程的基本要素包括方法、工具和()。
A.软件系统B.硬件系统C.过程D.人员
正确答案:C
试题解析:本题考查软件工程的基本概念。
软件工程是一种层次化的技术,从底向上分别为质量、过程、方法和工具。任何工程方法必须以有组织的质量承诺为基础。软件工程的基础是过程,过程是将技术结合在一起的凝聚力,使得计算机软件能够被合理地和及时地开发,过程定义了一组关键过程区域,构成了软件项目管理控制的基础;方法提供了建造软件在技术上需要“如何做”’它覆盖了一系列的任务。方法也依赖于一些基本原则,这些原则控制了每一个技术区域而且包含建模活动和其他描述技术;工具对过程和方法提供了自动或半自动的支持,如计算机辅助软件工程(CASE)。软件工程的基本要素包括方法、工具和过程。
2.在()设计阶段选择适当的解决方案,将系统分解为若干个子系统,建立整个系统的体系结构。
A.概要B.详细C.结构化D.面向对象
正确答案:A
软件设计的任务是基于需求分析的结果建立各种设计模型,给出问题的解决方案。从工程管理的角度,可以将软件设计分为两个阶段:概要设计阶段和详细设计阶段。结构化设计方法中,概要设计阶段进行软件体系结构的设计、数据设计和接口设计:详细设计阶段进行数据结构和算法的设计。面向对象设计方法中,概要设计阶段进行体系结构设计、初步的类设计、数据设计、结构设计:详细设计阶段进行构件设计。
结构化设计和面向对象设计是两种不同的设计方法,结构化设计根据系统的数据流图进行设计,模块体现为函数、过程及子程序:面向对象设计基于面向对象的基本概念进行,模块体现为类、对象和构件等。
3.以下关于结构化开发方法的叙述中,不正确的是()。
A.总的指导思想是自顶向下,逐层分解
B.基本原则是功能的分解与抽象
C.与面向对象开发方法相比,更适合于大规模、特别复杂的项目
D.特别适合于数据处理领域的项目
试题解析:本题考查对结构化开发方法、面向对象开发方法的理解。
结构化开发方法是一种面向数据流的开发方法,其基本思想是软件功能的分解和抽象,结构化开发方法又称生命周期法,是迄今为止最传统应用最广泛的一种信息系统开发方法结构化开发方法采用系统工程的思想和工程化的方法,按用户至上的原则。结构化、模块化、自顶向下地对信息系统进行分析与设计。该方法严格按照信息系统开发的阶段性开展设计工作,每个阶段都产生一定的设计成果,通过评估后再进入下一阶段开发工作。因此,结构化开发方法具有以下优点:
●开发工作的顺序性、阶段性适合初学者参与软件的开发
●开发工作的阶段性评估可以减少开发工作重复性和提高开发的成功率
●该方法有利于提高系统开发的正确性、可靠性和可维护性。具有完整的开发质量保正措施
结构化开发方法存在的不足主要是开发周明太长,个性化开发阶段的文档编写工作量过大或过于倾琐无法发挥开发人员的个性化开发能力。一般来说,结构化开发方法主要适用于组织规模较大,组织结构相对稳定的企业,这些大型企业往往业务处理过程规范,信息系统数据需求非常明确,在一定时期内需求变化不大。
4.类()之间存在着一般和特殊的关系。
A.汽车与轮船
B.交通工具与飞机
C.轮船与飞机
D.汽车与飞机
正确答案:B
飞机属于交通工具的一种。
5.以下关于软件维护和可维护性的叙述中,不正确的是()。
A.软件维护要解决软件产品交付用户之后运行中发生的各种问题
B.软件的维护期通常比开发期长得多,其投入也大得多
C.进行质量保证审查可以提高软件产品的可维护性
D.提高可维护性是在软件维护阶段考虑的问题
正确答案:D
在软件开发的各个阶段都需考虑软件的可维护性。
6.某项目为了修正一个错误而进行了修改。错误修改后,还需要进行()以发现这一修改是否引起原本正确运行的代码出错。
A.单元测试B.接收测试C.安装测试D.回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
(7)设计模式允许一个对象在其状态改变时,通知依赖它的所有对象。该设计模式的类图如下图,其中,(8)在其状态发生改变时,向它的各个观察者发出通知。
7.A.命令(Command)B.责任链(ChainofResponsibility)C.观察者(Observer)D.迭代器(Iterator)
8.A.SubjectB.ConcreteSubjectC.ObserverD.ConcreteObserver
正确答案:7-8:CB
试题解析:本题考查设计模式的基本知识。
命令(Command)模式通过将请求封装为一个对象,可将不同的请求对客户进行参数化。责任链(ChainofResponsibility)模式将多个对象的请求连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止,避免请求的发送者和接收者之间的耦合关系。观察者(Observer)模式定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
在上述观察者模式的类图中,Subject(目标)知道其观察者,可以有任意多个观察者观察同一个目标,提供注册和删除观察者对象的接口。Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。ConcreteSubject(具体目标)将有关状态存入各ConcreteObserver对象,当它的状态发生改变时,向它的各个观察者发出通知。ConcreteObserver(具体观察者)维护一个指向ConcreteSubject对象的引用,存储有关状态,实现Observer的更新接口以使自身状态与目标的状态保持一致。
活动编号
工期(周)
直接前驱
A
3
-
B
5
C
1
D
E
F
4
C,E
G
H
F,G
9.A.16B.17C.18D.19
10.A.AB.BC.DD.F
正确答案:9-10:DB
试题解析:本题考查软件项目管理的基础知识。
从上图可以看出,关键路径为:A-D-E-F-H,其长度为19,关键路径上的活动均为关键活动。
二、完型填空题(10分=2分×5)
软件测试是软件质量保证的主要手段之一,测试的费用已超过(A)的30%以上。因此,提高测试的有效性十分重要。“高产”的测试是指(B)。根据国家标准GB8566-88《计算机软件开发规范》的规定,软件的开发和维护划分为8个阶段,其中,单元测试是在(C)阶段完成的,集成测试的计划是在(D)阶段制定的,确认测试的计划是在(E)阶段制定的。
【供选择的答案】
A:
①软件开发费用②软件维护费用
③软件开发和维护费用④软件研制费用
⑤软件生存期全部
B:
①用适量的测试用例运行程序,证明被测程序正确无误
②用适量的测试用例运行程序,证明被测程序符合相应的要求
③用少量的测试用例运行程序,发现被测程序尽可能多的错误
④用少量的测试用例运行程序,纠正被测程序尽可能多的错误
C-E:
①可行性研究和计划②需求分析
③概要设计④详细设计
⑤实现⑥集成测试
⑦确认测试⑧使用和维护
正确答案:A-E:①③⑤③②
目前,在大中型软件开发项目中,测试都占据着重要地位,同时,测试也是在将软件交付给客户之前所必须完成的步骤。测试所花费用已超过软件开发费用的30%以上。如何组织好测试,特别是如何选择测试用例,对保障软件质量,降低测试费用有着重要的意义。一个高效的测试,是指通过对所设计的少量测试用例进行测试,从而发现被测试程序中尽可能多的问题,并完成修改。测试按照被测试的内容可分为3种:单元测试(对程序单元或模块单独进行测试)、组装测试(把已通过单元测试的模块连接起来,测试模块间的接口及软件设计中的问题,常用功能测试办法)和确认测试(对软件系统作全面测试,以确认开发的软件是否符合验收标准)。根据国家标准GB8566-88计算机软件开发规范的规定,软件开发和维护分为8个阶段,分别为可行性研究和计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试和使用维护。GB8566-88规定单元测试在实现阶段完成;组装测试在组装测试阶段完成,但组装测试的计划应该在概要设计阶段制定,而确认测试的计划则在需求分析阶段就应该制定好。
三、判断题(10分=2分×5)
正确答案:1√2√3×4×5√
四、名词解释(25分=5分×5)
1.软件危机
是指在计算机软件的开发和维护过程中所遇到的一系列严重问题
2.耦合
是一个软件结构内不同模块间相互程度的度量
3.内聚
标志着一个模块内各个元素彼此结合的紧密程度
4.信息隐藏
使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的
5.模块化
把程序划分成独立命名且可独立访问的模块,每一个模块完成一个功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
五、代码阅读及流程图、N-S图转换(20分)
下面是一段用赛德尔迭代法求解线性方程组的程序。其中A[n,n]是方程组的系数矩阵,B[n]是方程组的右端项,X[n]是方程组的解向量。eps是控制迭代精度的较小实数。imax是控制迭代的最大次数。flag是标志,=0,表示迭代不收敛;=1,表示迭代收敛。
fork:=1tondoX[k]:=0.0;X[n]:=1.0;fori:=1toimaxdobeginflag:=1;forj:=1tontobegins:=B[j];fork:=1tondobeginifj=kthens:=s+X[k];s:=s-A[j,k]*X[k]end;ifabs(X[j]-s)>(abs(s)+1.0)*epsthenflag:=0;X[j]:=s;end;ifflag=1thengotoL1;end;L1:
(1)试画出它的结构化的程序流程图。
(2)将它改为N-S图。
(3)计算它的McCabe环路复杂性。
正确答案:
(1)a.使用goto语句:b.不使用goto语句:
(2)a.使用goto语句:b.不使用goto语句:
(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目,在程序结构图中,判定结点P一定有7个,所以环路复杂性为8。