列表

详情


阅读下列问题,回答问题1到问题4,将解答写在答题纸的对应栏内。
【说明】
图4-1 是某企业信息系统的一个类图,图中属性和方法前的"+"、"#"和"- " 分别表示公有成员、保护成员和私有成员。其中:
图4-1 类图

(1)类Manager重新实现了类 Employee的方法 calSalary(),类Manager中的方法querySalary()继承了其父类Employee的方法querySalary()。
(2)创建类 Employee的对象时,给其设置职位(position)、基本工资(basicSalary)等信息。方法calSalary()根据个人的基本工资、当月工资天数(workDays)和奖金(bonus)等按特定规则计算员工工资。
(3)类Department中的方法statSalary中首先调用了该类的方法load(),获取本部门员工列表,然后调用了类 Employee中的方法calSalary()。
现拟采用面向对象的方法进行测试。

【问题1】
图4-1 所示的类图中,类manager 和类Employee之间是什么关系?该关系对测试的影响是什么?
【问题2】
(1)类Manager重新实现了类 Employee的方法calSalary(),这是面向对象的什么机制?是否需要重新测试该方法?
(2)类Manager中的方法querySalary()继承了其父类 Employee 的方法querySalary(),是否需要重新测试该方法?
【问题3】
(1)请结合题干说明中的描述,给出测试类Employee 方法calSalary( )时的测试序列。
(2)请给出类图4- 1 中各个类的测试顺序。
【问题4】
从面向对象多态特性考虑,测试方法statSalary()时应注意什么?

参考答案:

【问题1】(5分)
泛化关系;(继承关系)
继承的成员函数是否需要测试;对父类的测试是否能搬到子类上
【问题2】(6分)
多态
需要重新测试,在子类中重新进行了定义,需要重新测试
不需要重新测试
【问题3】(6分)
测试序列:Employee-calWorkdays()-setBonus()-calSalary()-querySalary()
测试顺序:Employee-Manager-Department
【问题4】(3分)
只需要在原有的测试分析基础上增加对测试用例中输入数据的类型的考虑。

详细解析:

【问题1】
继承(UML图中对应泛化关系)是指一个类直接使用另一个类的属性和方法,即子类具有父类的属性和方法。
类Employee和类Manager之间是继承关系
继承关系对面向对象测试的影响主要体现在两个方面:若子类某些方法继承了其父类,方法进行了修改,则需要进行测试;继承的方法没有修改,用父类的方法,但该方法调用了子类修改过的其他方法时,也需要对该方法进行测试。
【问题2】
在面向对象技术中,不同的对象收到同一消息产生完全不同的结果,称为多态;
多态可以利用类继承层次来支持,本题中由于类Manager中的方法calSalary()和其父类Employee中的该方法有了不同的实现,因此需要重新测试
子类Manager中的方法querySalary()继承了其父类Employee的方法querySalary(),没有重新实现,因此不需要重新测试
【问题3】
题干说明,方法擦了Salary()根据个人的基本工资,当月工资天数和奖金等按特定规则计算,因此需要先计算天数、奖金,才能计算工资,最后才能查询工资。
由类结构可以分析出,Employee应该先测,而Department依赖于Manager,因此,Manager应先于Department测试式
【问题4】
题干描述,方法stat Salary()需要调用Employee中的calSalary()。而该方法在Employee和Manager中有不同的实现,因此需要同时考虑Employee和Manager中的calSalary()

上一题