【评测真题-2017】下午题-试题四---(面向对象测试)

【说明】
图4-1是某企业信息系统的一个类图,图中属性和方法前的"+"、"#"和"- " 分别表示公有成员、保护成员和私有成员。其中:

【评测真题-2017】下午题-试题四---(面向对象测试)

(1)类Manager重新实现了类Employee的方法calSalary( ),类Manager中的方法querySalary( )继承了其父类Employee的方法querySalary( )。
(2)创建类Employee的对象时,给其设置职位(position)、基本工资(basicSalary)等信息。方法calSalary( )根据个人的基本工资、当月工资天数(workDays)和奖金(bonus)等按特定规则计算员工工资。
(3)类Department中的方法statSalary中首先调用了该类的方法load( ),获取本部门员工列表,然后调用了类Employee中的方法calSalary( )。
现拟采用面向对象的方法进行测试。
 
问题:4.1   (5分)
图4-1所示的类图中,类manager和类Employee之间是什么关系?该关系对测试的影响是什么?
 
问题:4.2   (6分)
(1)类Manager重新实现了类Employee的方法calSalary( ),这是面向对象的什么机制?是否需要重新测试该方法?
(2)类Manager中的方法querySalary( )继承了其父类Employee的方法querySalary( ),是否需要重新测试该方法?
 
问题:4.3   (6分)
(1)请结合题干说明中的描述,给出测试类Employee方法calSalary( )时的测试序列。
(2)请给出类图4- 1中各个类的测试顺序。
 
问题:4.4   (3分)
从面向对象多态特性考虑,测试方法statSalary()时应注意什么?


分析

本题考查面向对象测试的基本知识及应用,要求考生掌握面向对象测试的基本内容。

此类题目要求考生认真阅读题目对问题的描述,分析问题并结合面向对象的基本概念来回答。题目给出三个类,类Employee、类Manager、及类Department。

[问题1]

本问题考查面向对象的基本概念。

类和类之间的关系主要有继承、关联和依赖三种关系,其中关联又包括一般关联、聚合和组合三种。其中,继承是指一个类直接使用另一个类的属性和方法,即子类具有父类的属性和方法。类Emoloyee和类Manager之间是继承关系。

继承关系对面向对象测试的影响主要体现在两个方面:若子类的某方法继承了其父类,方法进行了修改,则需要进行测试;继承的方法没有修改,用父类的方法,但是该方法调用了子类修改过的其他方法时,也需要对该方法进行测试。

答:

继承关系。

若子类Manager重新实现父类Employee的方法或者子类的某方法中调用了自己实现的方法,需要重新进行测试。 

[问题2]

(1)在面向对象技术中,不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。多态可以利用类继承的层次关系来支持,即子类重新实现了父类的方法。此时,由于类Manager中的方法calSalary()和其父类Employee中的该方法有了不同的实现,因此需要重新测试。

(2)子类Manager中的方法querySalary()继承了其父类Employee的方法querySalary(),没有重新实现,因此不需要重新测试。

答:

(1)多态;类Manager中的方法calSalary()需要重新测试。

(2)不需要。 

[问题3]

(1)由题干说明,方法calSalary()根据个人的基本工资、当月工资天数(workDays)和奖金(bonus)等按特定规则计算工资,因此测试时需要先生成一个Employee对象,然后计算工作时间calWorkDays()和计算奖金setBonus(),才能计算工资calSalary(),最后查询工资querySalary()以判断计算是否正确。其中,计算工作时间calWorkDays()和计算奖金setBonus()是顺序无关的。因此,测试序列:

new Employee()-calWorkDays()-setBonus()-calSalary()-quuerySalary()。或

new Employee()-setBonus()-calWorkDays()-calSalary()-quuerySalary()。

(2)由类结构图可以容易看出,类Employee最先测试,因为测试类Manager和类Department都需要依赖该类;而测试类Department还需要依赖类Manager,因此类的测试顺序为Employee-Manager-Department。

答:

(1)测试序列:new Employee()-calWorkDays()-setBonus()-calSalary()-quuerySalary()。

(2)测试序列:Employee-Manager-Departmen。

[问题4]

由题干描述,方法statSalary()中需要调用类Employee中的方法calSalary()。而方法calSalary()在父类Employee和子类Manager中有不同的实现,因此在测试方法statSalary()时,要同时考虑类Employee和类Manager和calSalary()。

答:测试方法statSalary()时,要同时考虑类Employee和类Manager的calSalary()。​​​​​​​