【说明】下图是某商场购物系统一个类图,图中属性和方法前"+"、"#"和"- " 分别表示公有成员、保护成员和私有成员。其中:

(1) 类Manager重新实现了类Customer方法 calMoney( );(2) 方法calMoney( ),根据每位顾客购买情况(buyNum)、浏览商品情况(scanNum)计算商品热度。(3)类Admin中方法statMoney()中首先调用了该类方法load( ),获取顾客列表,然后调用了类Customer中方法calMoney( )。现拟采用面向对象方法进行测试。 【问题1】(4分)图4-1 所示类图中,类Manager和类Customer之间是什么关系?该关系对测试影响是什么?【问题2】(6分)(1) 类Manager重新实现了类Customer方法calMoney( ),这是面向对象什么机制?是否需要重新测试该方法?(2) 类Manager中方法getMoney ( )继承了其父类 Customer 方法getMoney ( ),是否需要重新测试该方法?
【问题3】(6分)(1)请结合题干中说明描述,给出测试类Customer方法calMoney()时测试序列;(2)请给出类图中各个类测试顺序。【问题4】(4分)从面向对象多态特性考虑,测试方法statMoney( )时应注意什么?
正确答案及解析
正确答案
解析
问题1:答案:(1) 泛化关系;(2) 继承成员函数是否需要测试;对父类测试是否能用到子类上。问题2:答案:(1)、多态机制;需要重新测试,因为在子类中重新进行了定义,所以需要重新测试;(2)、不需要重新测试,因为子类继承了父类方法,只要父类该方法通过测试了即可。问题3:
(1) 测试序列:setBuyNum( )——setScanNum( )——calMoney( ) ——getMoney( ) ;(2)先测试Customer类,然后Manager类,最后测试Admin类。问题4:
只需要在原有测试分析基础上增加对测试用例中输入数据类型考虑即可。先测试基类,然后再分别依据输入数据设计不同测试用例。
【解析】
问题1:解析:
考察类图泛化关系。泛化关系也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间关系,父类又称作基类或超类,子类又称作派生类,泛化关系通常用带空心三角形直线来表示。对泛化关系有三个要求:1、子类与父类应该完全一致,父类所具有属性、操作,子类应该都有;2、子类中除了与父类一致信息以外,还包括额外信息;3、可以使用父类实例地方,也可以使用子类实例;问题2:解析:
该题考察面向对象多态机制和继承机制。多态就是在使用父类引用调用方法时候,不是使用父类中方法,而是父类指向对象方法,这样就实现了多态。继承是指在一个类基础上定义一个新类,原有类叫做父类,新生成类叫子类,继承过程是一个从一般到特殊过程。 问题3:解析:
根据题干提示,方法calMoney( ),根据每位顾客购买情况(buyNum)、浏览商品情况(scanNum)计算商品热度。类之间测试先后关系可以参考各种关系强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖。问题4:解析:
题干描述,方法statMoney()需要调用Customer中calMoney()。而该方法在Customer和Manager中有不同实现,因此需要同时考虑Customer和Manager中calMoney()。





