如何评测软件工程知识技能水平?

一、选择题(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.什么是结构化分析方法?该方法使用什么描述工具?

答:结构化的分析方法是面向数据流的方法,因此,此方法研究的核心是数据的组成和数据流向和对数据的加工处理。结构化分析方法用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直至找到满足功能要求的所有可实现的软件元素为止
描述工具:1系统流程图、2 数据流程图、3数据字典、4 IPO图、 5层次方框图、6实体—关系图、7状态—变迁图
 
6.UML中有哪几类个视图,它们的作用分别是什么?
答:(1)用例视图(Use-Case view)
   用例视图用于描述系统的功能集。它是从系统外部以用户角度,对系统做的抽象表示。用例视图所描述的系统功能依靠于外部用户或另一个系统触发激活,为用户或另一个系统提供服务,实现与用户或另一个系统之间的交互。
用例视图中可以包含若干个用例,用例表示系统能够提供的功能,用例视图是其他视图的核心和基础。其他视图的构造依赖于用例视图中所描述的内容,因为系统的最终目标是实现用例视图中描述的功能,同时附带一些非功能性的特性,因此用例视图影响着所有其他的视图。
  (2)逻辑视图(Logical view)
   如果说用例视图描述系统“做什么”,那么逻辑视图就是描述“怎么做”。系统的静态结构描述类、对象和它们之间的关系,反映的是系统静态特征或结构组成。
  (3)组件视图(Component view)
   组件视图用来描述系统实现的结构和行为特征,反映系统各组成元素之间的关系。组件视图由组件图实现,主要供开发者和管理者使用。
  (4)并发视图(Concurrency View)
   并发视图用来描述系统的动态和行为特征。并发视图将任务划分为进程或线程形式,通过任务划分引入并发机制,可以高效地使用资源、并行执行和处理异步事件。除了划分系统为并发执行的进程或线程外,并发视图还必须处理通信和同步问题。
  (5)配置视图(Deployment View)
   配置视图体现了系统的实现环境,反映系统的物理架构。配置视图还包括一个映射,该映射显示在物理架构中组件是怎样分配的。
 
五、任选一种设计模式,并设计对应的代码示例
答案解析:(以装饰模式为例)
//增加一个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();                  //装扮好了

    //场合二:......
}
 

相关推荐