如何评测软件工程知识技能水平?
(1)具有扎实的计算机专业知识
这是软件工程理由能够从事软件一切工作最基本的前提,是软件工程最基本的素质,这要求软件工程师必须精通高等数学、离散数学、电子学、编程语言、数据结构等课程。
(2)良好的语言表达能力和沟通能力
这是软件工程师应该具备的一个很重要的素质,因为软件工程师是为用户开发软件,常常需要直执着面对用户。
(3)健康的心理素质
开发软件本身就是一项艰苦的脑力和体力劳动,软件工程师开发成功一个软件,要经过反复修改,要花费大量的进间和精力,这些都有要求软件工程师有较好的心理承受能力。
很多学生往往只注重计算机专业知识的培养,而忽视了语言表达能力和沟通能力、工程经济分析能力,以及心理素质的培养。因此,作为一个在校的大学生,除了认真学习软件基础理论课程之外,还需要特别注意以下能力的培养:
(1)正确的定位
大学计算机软件专业学生应该将自己个人今后职业生涯的目标定位在软件工程师或者未来的软件工程、项目管理者,而不是计算机或者软件科学家。
有了一个比较清晰的职业定位后,对自己如何选修一些实践性强,协作性强以及能够接触最新软件技术的课程很多指导作用。
(2)增加语言表达的训练,培养与人沟通的能力。
注重学生个人能力的培养,但是与软件程师的要求还有一定差距,并且,有些活动不是每个学生都能参加,因此应积极参加一些群体活动和实际的软件项目,在语言表达和沟通方面积累经验和知识。
(3)了解一些经济、管理方面的基础知识
软件是一种工具,他最终的目的还是需要为社会生活的各个方面提高效率、节约成本或者是简化管理、提升价值。不了解一些经济于管理方面的基础知识,就很难理解现实生活中千变万化的软件需求,更难以发挥软件的实际价值。
(4)训练过硬的心理素质
软件工程师在实际的软件开发过程中,各种非预料的情况都可能发生:需求来回修改,工期突然发生变更甚至很多个人生活的很多情绪都会参杂进来,因此软件工程师可能需承受巨大心理压力。一个软件工程师如果没有过硬的心理素质,他就很难排除干扰、稳定情绪的按照严格的规范实施一个成功的软件项目。
一、选择题(10*2)(软件工程题库)
(1)软件工程方法学的目的是使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是(C )。(电气信息类试题)
A.硬件环境 B.开发人员的素质
C.软件开发工具和软件开发的环境 D.软件开发的环境
答案解析:软件工程方法得以实施的主要保证是:软件开发中要有良好的软件开发工具和支撑环境,才能支持好的软件开发方法学得以应用,因此方法与工具的结合以及配套的软件和软件开发环境是软件工程方法学得以实施的重要保证。答案为C。
(2)软件开发的瀑布模型,一般都将开发过程划分为:分析、设计、编码和测试等阶段,一般认为可能占用人员最多的阶段是( )。
A.分析阶段 B.设计阶段 C.编码阶段 D.测试阶段
答案解析:在结构化的软件开发中,一般情况下,可能需要占用的人数最多的阶段是在软件编程的阶段,但从工作量上来说,在软件的需求分析、定义及软件的测试和维护阶段需要的工作量更多,用软件开发计划中的40-20-40原则,即可说明这一点,在软件需求分析和定义阶段,虽然工作量比软件编程多,但因为软件的需求分析和定义对开发人员的素质要求比较高,所以占用的人员并不需要太多;同时由于软件维护的周期比较长,所以其耗的工作量比软件编程多,但一般来说它占用的人员并不比软件编程阶段占用的人员多,所以答案为C。
(3)当一个模块直接使用另一个模块的内部数据,这种模块之间的耦合为()
A、数据耦合 B、公共耦合
C、标记耦合 D、内容耦合
答案解析:D
(4)需求分析阶段的任务是确定( )。
A.软件开发方法 B.软件开发工具
C.软件开发费 D.软件系统的功能
答案解析:D
(5)下列的( )不是分析建模的目的。
A.定义可验证的软件需求
B.描述客户需求
C.开发一个简单的问题解决方案
D.建立软件设计的基础
答案解析:C
(6)软件测试方法中,黑盒、白盒测试法是常用的方法,其中白盒测试主要用于测试()。
A、结构合理性
B、软件外部功能
C、程序正确性
D、程序内部逻辑
答案解析:D
(7)下列黑盒测试技术的说法错误的是:()。
A、划分等价类属于黑盒测试技术
B、边界值分析属于黑盒测试技术
C、错误推测法属于黑盒测试技术
D、逻辑覆盖法属于黑盒测试技术
答案解析:D
(8)对象实现了数据和操作的结合,使数据和操作( )于对象的统一体中。
A.结合 B.隐藏
C.封装 D.抽象
答案解析:C
(9)下列选项中,不属于模块间耦合的是()。
A)内容耦合 B)异构耦合
C)控制耦合 D)数据耦合
答案解析:B。耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦合——若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共耦合——若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合——若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。标记耦合——若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。
(10)数据流图是用于表示软件模型的一种图示方法,在下列可采用的绘制方法中,( )是常采用的。
①自顶向下 ②自底向上 ③分层绘制 ④初步求精
A.全是 B.①③和④ C.②③和④ D.①和③
答案解析:B
二、判断题(5*2分)
(1)详细设计阶段的任务是具体地编写程序,必须关注最终的程序代码的质量。(×)
(2)白盒测试方法又称为功能测试。(×)
(3)按照瀑布模型开发软件的一条指导思想是清楚地区分逻辑设计与物理设计,以便尽早开始程序的物理实现。(×)
(4)软件就是程序,编写软件的关键是编写程序。(×)
(5)模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。(√)
三、名词解释题(5*4分)
重构
观察者模式
功能内聚
松散耦合
模块化
四、简答题(6*5分)
1.软件工程的7条原则
答:1.抽象
2.信息隐藏
3.模块化
4.局部化
5.一致性
6.完全性
7.可验证性
2.软件生存周期如何划分
答:可将软件生存周期划分为3个过程共九个阶段
软件定义过程:可行性研究、需求分析2个阶段组成;
软件开发过程:由概要设计、详细设计、实现、组装测试、验收测试5个阶段组成;
软件使用与维护过程:使用与维护、退役2个阶段组成。
3.试从软件的特点出发分析软件危机产生的原因(2018电大期末考试)
答:(1)软件是一种逻辑实体,具有抽象性,无法看到软件本身的形态,必须通过观察,分析,思考和判断才能了解他的功能和性能
(2)软件对硬件和环境有着不同程度的依赖性,导致了软件升级和移植的问题。计算机硬件和支撑环境不断升级,为了适应运行环境的变化,软件也需要不断维护,并且维护的成本通常比开发成本高很多。
(3)软件生产至今尚未摆脱手工方式,软件开发的手工行为造就了一个致命的问题,就是为应用量身定做软件,长期以来,软件给人的感觉是修改几条指令很简单,客户总是强调软件要适应自己的业务需求,因此,软件产品大多数为客户订做,通用性差。
(4)软件设计人类社会的各行各业,常常涉及一些行业知识,对软件工程师提出了很高的要求。
4.活动图与状态图的区别(2018电子科技大学)
答:(1)描述重点不同:活动图描述的是从活动到活动的控制流;状态图描述的是对象的状态及状态之间的转移。
(2)使用场合不同:在分析用例、理解涉及多个用例的工作流、处理多线程应用等情况下,一般使用活动图;在显示一个对象在其生命周期内的行为时,一般使用状态图。
5.什么是结构化分析方法?该方法使用什么描述工具?
//增加一个dress方法 public class Man { public String name; public Man(){ } public Man(String name) { this.name = name; } public void dress() { System.out.println("装扮的" + name); } } //创建一个装饰者类,命名为Finery(服饰): public class Finery extends Man{ protected Man man; public void decorate(Man man){ this.man = man; } public void dress(){ if (man != null){ man.dress(); } } } //创建一堆具体装饰者类,它们继承自Finery: public class TShirt extends Finery { @Override public void dress() { System.out.println("T恤衫"); super.dress(); } } public class SportShoes extends Finery { @Override public void dress() { System.out.println("运动鞋"); super.dress(); } } //...... //实现 public static void main(String[] args) { Man xiaoMing = new Man("小软"); //场合一:运动 Finery sportShoes = new SportShoes(); sportShoes.decorate(xiaoMing); //穿了运动鞋的小软 Finery tShirt = new TShirt(); tShirt.decorate(sportShoes); //穿了运动鞋的小软再穿一件T恤衫 tShirt.dress(); //装扮好了 //场合二:...... }