欢迎来到天天文库
浏览记录
ID:43816002
大小:872.50 KB
页数:23页
时间:2019-10-15
《软件工程导论(第12章)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第12章面向对象实现12.1.1面向对象语言的优点使用面向对象语言时,编译程序可以自动把面向对象概念映射到目标程序中。使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到程序中。选择编程语言的关键因素一致的表示方法:从问题域到OOA,从OOA到OOD,从OOD到OOP,具有不随时间变化的特性可重用性:分析结果、设计结果、代码可维护性:从文档到代码。1980年的smalltalk-80发展了Simula-67的对象和类的概念,并引入了方法、消息、元类及协议等概念,所以有人将smalltalk80称为第一个面向对象语言。但是
2、,使面向对象广泛流行的是C++。12.1.2面向对象语言的技术特点选择面向对象语言时应考虑的技术特点:1.支持类与对象概念的机制2.实现整体-部分(聚集)结构的机制3.实现一般-特殊(泛化)结构的机制4.实现属性和服务的机制5.类型检查6.类库7.效率8.持久保存对象9.参数化类:逻辑功能类似、处理对象(数据)类型不同,这个机制减少冗余和提高重用性。10.开发环境12.1.3选择面向对象语言1.将来能否占主导地位2.可重用性3.类库和开发环境4.其他因素有否提供技术支持?提供开发人员什么开发平台?对机器性能的需求?集成已有软件的容易程度。12
3、.2程序设计风格12.2.1提高可重用性代码重用有两种:1.本项目内的代码重用2.新项目重用旧项目的代码面向对象程序设计准则:提高方法内聚:方法的原子性减少方法的规模:方法数量要适当保持方法的一致性:方法的名称、参数等把策略与实现分开:决策类和操作类分开全面覆盖尽量不使用全局信息利用继承机制12.2.2提高可扩充性封装实现策略不要用一个方法遍历多条关联链避免使用多分支语句精心确定公有方法12.2.3提高健壮性预防用户的操作错误检查参数的合法性不要预先确定限制条件先测试后优化12.3测试策略12.3.1面向对象的单元测试基类:操作A:X子类:操
4、作A1:XA2:XA3:X有必要在每个子类中测试操作X不孤立地测试单个操作(函数),而是把操作作为类的一部分进行测试。12.3.2面向对象的集成测试两种不同的测试策略:1)基于线程的测试(threadbasedtesting)将响应系统的一个输入或一个事件所需要的哪些类集成起来测试。2)基于使用的测试(usebasedtesting)先测试独立类,再测试使用独立类的下一层次的类(依赖类),重复直至完毕。12.3.3面向对象的确认测试主要是根据动态模型和描述系统行为的脚本来设计确认测试用例。12.4设计测试用例12.4.1测试类的方法1.随机测
5、试ATM系统中account(帐户)类的操作有:Open(打开)、Setup(建立)、Deposit(存款)、Withdraw(取款)、Balance(余额)、Summarize(清单)、CreditLimit(透支限额)、Close(关闭)。特殊约定:在应用其他操作之前先打开账户,在完成了全部操作之后才能关闭账户。可以随机地产生一系列不同的操作序列:测试用例1:Open.Setup.Deposit.Balance.Summarize.Withdraw.Close测试用例2:Open.Setup.Withdraw.Deposit.Balanc
6、e.CreditLimit.Close2.划分测试(类似于等价类划分)1)基于状态的划分改变Account类状态的操作:deposit,withdraw;不改变Account类状态的操作:balance,summarize,creditLimit测试用例:1.open.setup.deposit.deposit.withdraw.withdraw.close;2.open.setup.balance.summarize.creditLimit.close;2)基于属性的划分根据类操作使用的属性来划分操作。例,按属性Balance分可三类:使用
7、Balance的操作;不使用Balance的操作;不使用也不修改balance的操作。3)基于功能的划分依据类操作完成的功能来划分类操作。例,初始化操作:open,setup计算操作:deposit,withdraw查询操作:balance,summarize,creditLimit3.基于故障的测试一般依靠经验和直觉,类似于错误推测测试法。12.4.2集成测试方法测试类协作可以使用随机测试方法、划分测试方法、以及基于场景的测试和行为测试来完成。1.多类测试对每个客户类,使用类操作符列表生成一系列随机测试序列。这些操作符向服务器类实例发送消息
8、。对所生成的每个消息,确定协作类和在服务器对象中的对应操作符。对服务器对象中的每个操作符,确定传递的消息。对每个消息,确定下一层被调用的操作符,并把这些操作符结合进
此文档下载收益归作者所有