软件工程导论课件之第12章面向对象实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程导论课件之第12章面向对象 实现
9. 参数化类 n 所谓参数化类,就是使用一个或多个类型去参
数化一个类的机制,有了这种机制,程序员就 可以先定义一个参数化的类模板,然后把数据 类型作为参数传递进来,从而把这个类模板应 用在不同的应用程序中,或用在同一应用程序 的不同部分。 10. 开发环境 n 面向对象语言所提供的软件工具或开发环境尤 其重要。至少应该包括下列一些最基本的软件 工具:编辑程序,编译程序或解释程序,浏览 工具,调试器等。
n 传统的黑盒测试方法也可用于设计确认测试用 例,但是,对于面向对象的软件来说,主要还 是根据动态模型和描述系统行为的脚本来设计 确认测试用例。
软件工程4 设计测试用例 12.4.1 测试类的方法
1. 随机测试 n 随机地产生一系列不同的操作序列,执行这些
测试用例,可以测试类实例的不同生存历史。 2. 划分测试 n 首先,把输入和输出分类,然后设计测试用例
息是降低耦合度的一项主要措施。 7. 利用继承机制 n 调用子过程。 n 分解因子。 n 使用委托。 n 把代码封装在类中。
软件工程导论课件之第12章面向对象 实现
12.2.2 提高可扩充性
n 封装实现策略 n 不要用一个方法遍历多条关联链 n 避免使用多分支语句 n 精心确定公有方法
软件工程导论课件之第12章面向对象 实现
n 集群测试(cluster testing)是面向对象软件 集成测试的一个步骤,检查一群相互协作的类, 力图发现协作错误。
软件工程导论课件之第12章面向对象 实现
12.3.3 面向对象的确认测试
n 在确认测试或系统测试层次,不再考虑类之间 相互连接的细节。
n 和传统的确认测试一样,面向对象软件的确认 测试也集中检查用户可见的动作和用户可识别 的输出。
一个方法中,应该把算法的核心部分放在一个单独的 具体实现方法中。
软件工程导论课件之第12章面向对象 实现
5. 全面覆盖 n 针对输入条件的所有组合写出方法。 n 对空值、极限值及界外值等异常情况也应该能够作出
有意义的响应。 6. 尽量不使用全局信息 n 应该尽量降低方法与外界的耦合程度,不使用全局信
软件工程导论课件之第12章面向对象 实现
3. 保持方法的一致性 n 一般说来,功能相似的方法应该有一致的名字、参数
特征、返回值类型、使用条件及出错条件等。 4. 把策略与实现分开 n 策略方法:负责做出决策,提供变元,并且管理全局
资源。 n 实现方法:负责完成具体的操作,但却并不做出是否
执行这个操作的决定,也不知道为什么执行这个操作。 n 为提高可重用性,在编程时不要把策略和实现放在同
软件工程导论课件之第12章面向对象 实现
6. 类库 n 大多数面向对象语言都提供一个实用的类库。
存在类库,许多软构件就不必由程序员重头编 写了,这为实现软件重用带来很大方便。 7. 效率 n 使用拥有完整类库的面向对象语言,有时能比 使用非面向对象语言得到运行更快的代码。 n 绝大多数面向对象语言都优化了查找继承树的 过程,从而实现了高效率查找。
4. 实现属性和服务的机制 n 对于实现属性的机制应该着重考虑以下几个方面:支
持实例连接的机制;属性的可见性控制;对属性值的 约束。 n 对于服务来说主要应该考虑下列因素:支持消息连接 的机制;控制服务可见性的机制;动态联编。 5. 类型检查 n 如果语言仅要求每个变量或属性隶属于一个对象,则 是弱类型的,如Smalltalk; n 如果语法规定每个变量或属性必须准确地属于某个特 定的类,则这样的语言是强类型的,如C++。
统一的概念,也有利于维护人员理解软件的各种配置 成分。 2. 可重用性 n 为了能带来可观的商业利益,必须在更广泛的范围中 运用重用机制。 3. 可维护性 n 一般说来,应该尽量选用面向对象语言来实现面向对 象分析、设计的结果。
软件工程导论课件之第12章面向对象 实现
12.1.2 面向对象语言的技术特点
12.2.3 提高健壮性
n 预防用户的操作错误 n 检查参数的合法性 n 不要预先确定限制条件 n 先测试后优化
软件工程导论课件之第12章面向对象 实现
12.3 测试策略
n 测试软件的经典策略是:从单元测试开始,逐 步进入集成测试,最后进行确认测试和系统测 试。
n 测试面向对象软件的策略与上述策略基本相同, 但也有许多新特点。
软件工程导论课件之第 12章面向对象实现
2020/12/19
软件工程导论课件之第12章面向对象 实现
n 面向对象实现主要包括两项工作:
q 把面向对象设计结果翻译成用某种程序语言书写的 面向对象程序;
q 测试并调试面向对象的程序。
n 面向对象程序的质量基本上由面向对象设计的 质量决定,所采用的程序语言的特点和程序设 计风格也将对程序的可靠性、可重用性及可维 护性产生深远影响。
软件工程导论课件之第12章面向对象 实现
12.4.2 集成测试方法
n 在这个测试阶段,必须对类间协作进行测试。 n 和测试单个类相似,测试类协作可以使用随机
测试方法和划分测试方法,以及基于情景的测 试和行为测试来完成。
软件工程导论课件之第12章面向对象 实现
1. 多类测试 n 生成多个类的随机测试用例的步骤:
以测试划分出的每个类别。
q 基于状态的划分 q 基于属性的划分 q 基于功能的划分
软件工程导论课件之第12章面向对象 实现
3. 基于故障的测试 n 基于故障的测试(fault based testing)与传
统的错误推测法类似,也是首先推测软件中可 能有的错误,然后设计出最可能发现这些错误 的测试用例。 n 为了推测出软件中可能有的错误,应该仔细研 究分析模型和设计模型,而且在很大程度上要 依靠测试人员的经验和直觉。
1. 支持类与对象概念的机制 n 所有面向对象语言都允许用户动态创建对象,
并且可以用指针引用动态创建的对象。 2. 实现整体-部分(即聚集)结构的机制 n 分别使用指针和独立的关联对象实现整体-部
分结构。 3. 实现一般-特殊(即泛化)结构的机制 n 既包括实现继承的机制也包括解决名字冲突的
机制。
软件工程导论课件之第12章面向对象 实现
软件工程导论课件之第12章面向对象 实现
12.3.2 面向对象的集成测试
n 在面向对象的软件中不存在层次的控制结构, 传统的自顶向下或自底向上的集成策略就没有 意义了。
n 面向对象软件的集成测试主要有下述两种不同 的策略。
q 基于线程的测试(thread based testing) q 基于使用的测试(use based testing)
软件工程导论课件之第12章面向对象 实现
3rew
演讲完毕,谢谢听讲!
再见,see you again
2020/12/19
软件工程导论课件之第12章面向对象 实现
软件工程导论课件之第12章面向对象 实现
12.1.3 选择面向对象语言
1. 将来能否占主导地位 n 为了使自己的产品在若干年后仍然具有很强的生命力,
可能希望采用将来占主导地位的语言编程。 2. 可重用性 n 应该优先选用能够最完整、最准确地表达问题域语义
的面向对象语言。 3. 类库和开发环境 n 考虑类库的时候,还应该考虑类库中提供了哪些有价
n 软件测试仍然是保证软件可靠性的主要措施。 但是,面向对象程序中特有的封装、继承和多 态等机制,也给面向对象测试带来一些新特点, 增加了测试和调试的难度。
软件工程导论课件之第12章面向对象 实现
12.1 程序设计语言 12.1.1 面向对象语言的优点
1. 一致的表示方法 n 一致的表示方法既有利于在软件开发过程中始终使用
软件工程导论课件之第12章面向对象 实现
12.3.1 面向对象的单元测试
n 最小的可测试单元是封装起来的类和对象。 n 一个类可以包含一组不同的操作,而一个特定
的操作也可能存在于一组不同的类中。因此, 对于面向对象的软件来说,单元测试的含义发 生了很大变化。 n 测试面向对象软件时,不能再孤立地测试单个 操作,而应该把操作作为类的一部分来测试。
q 对每个客户类,使用类操作符列表来生成一系列随 机测试序列。这些操作符向服务器类实例发送消息。
q 对所生成的每个消息,确定协作类和在服务器对象 中的对应操作符。
q 对服务器对象中的每个操作符(已经被来自客户对 象的消息调用),确定传递的消息。
q 对每个消息,确定下一层被调用的操作符,并把这 些操作符结合进测试序列中。
值的类。 n 在开发环境中,还应该提供使用方便的类库编辑工具
和浏览工具。 4. 其他因素
软件工程导论课件之第12章面向对象 实现
12.2 程序设计风格 12.2.1 提高可重用性
1. 提高方法的内聚 n 一个方法(即服务)应该只完成单个功能。如果
某个方法涉及两个或多个不相关的功能,则应 该把它分解成几个更小的方法。 2. 减小方法的规模 n 应该减小方法的规模,如果某个方法规模过大, 则应该把它分解成几个更小的方法。
软件工程导论课件之第12章面向对象 实现
8. 持久保存对象 n 一些面向对象语言,没有提供直接存储对象的
机制。这些语言的用户必须自己管理对象的输 入输出,或者购买面向对象的数据库管理系统。 n 另外一些面向对象语言(例如,Smalltalk),把 当前的执行状态完整地保存在磁盘上。 n 还有一些面向对象语言,提供了访问磁盘对象 的输入输出操作。
9. 参数化类 n 所谓参数化类,就是使用一个或多个类型去参
数化一个类的机制,有了这种机制,程序员就 可以先定义一个参数化的类模板,然后把数据 类型作为参数传递进来,从而把这个类模板应 用在不同的应用程序中,或用在同一应用程序 的不同部分。 10. 开发环境 n 面向对象语言所提供的软件工具或开发环境尤 其重要。至少应该包括下列一些最基本的软件 工具:编辑程序,编译程序或解释程序,浏览 工具,调试器等。
n 传统的黑盒测试方法也可用于设计确认测试用 例,但是,对于面向对象的软件来说,主要还 是根据动态模型和描述系统行为的脚本来设计 确认测试用例。
软件工程4 设计测试用例 12.4.1 测试类的方法
1. 随机测试 n 随机地产生一系列不同的操作序列,执行这些
测试用例,可以测试类实例的不同生存历史。 2. 划分测试 n 首先,把输入和输出分类,然后设计测试用例
息是降低耦合度的一项主要措施。 7. 利用继承机制 n 调用子过程。 n 分解因子。 n 使用委托。 n 把代码封装在类中。
软件工程导论课件之第12章面向对象 实现
12.2.2 提高可扩充性
n 封装实现策略 n 不要用一个方法遍历多条关联链 n 避免使用多分支语句 n 精心确定公有方法
软件工程导论课件之第12章面向对象 实现
n 集群测试(cluster testing)是面向对象软件 集成测试的一个步骤,检查一群相互协作的类, 力图发现协作错误。
软件工程导论课件之第12章面向对象 实现
12.3.3 面向对象的确认测试
n 在确认测试或系统测试层次,不再考虑类之间 相互连接的细节。
n 和传统的确认测试一样,面向对象软件的确认 测试也集中检查用户可见的动作和用户可识别 的输出。
一个方法中,应该把算法的核心部分放在一个单独的 具体实现方法中。
软件工程导论课件之第12章面向对象 实现
5. 全面覆盖 n 针对输入条件的所有组合写出方法。 n 对空值、极限值及界外值等异常情况也应该能够作出
有意义的响应。 6. 尽量不使用全局信息 n 应该尽量降低方法与外界的耦合程度,不使用全局信
软件工程导论课件之第12章面向对象 实现
3. 保持方法的一致性 n 一般说来,功能相似的方法应该有一致的名字、参数
特征、返回值类型、使用条件及出错条件等。 4. 把策略与实现分开 n 策略方法:负责做出决策,提供变元,并且管理全局
资源。 n 实现方法:负责完成具体的操作,但却并不做出是否
执行这个操作的决定,也不知道为什么执行这个操作。 n 为提高可重用性,在编程时不要把策略和实现放在同
软件工程导论课件之第12章面向对象 实现
6. 类库 n 大多数面向对象语言都提供一个实用的类库。
存在类库,许多软构件就不必由程序员重头编 写了,这为实现软件重用带来很大方便。 7. 效率 n 使用拥有完整类库的面向对象语言,有时能比 使用非面向对象语言得到运行更快的代码。 n 绝大多数面向对象语言都优化了查找继承树的 过程,从而实现了高效率查找。
4. 实现属性和服务的机制 n 对于实现属性的机制应该着重考虑以下几个方面:支
持实例连接的机制;属性的可见性控制;对属性值的 约束。 n 对于服务来说主要应该考虑下列因素:支持消息连接 的机制;控制服务可见性的机制;动态联编。 5. 类型检查 n 如果语言仅要求每个变量或属性隶属于一个对象,则 是弱类型的,如Smalltalk; n 如果语法规定每个变量或属性必须准确地属于某个特 定的类,则这样的语言是强类型的,如C++。
统一的概念,也有利于维护人员理解软件的各种配置 成分。 2. 可重用性 n 为了能带来可观的商业利益,必须在更广泛的范围中 运用重用机制。 3. 可维护性 n 一般说来,应该尽量选用面向对象语言来实现面向对 象分析、设计的结果。
软件工程导论课件之第12章面向对象 实现
12.1.2 面向对象语言的技术特点
12.2.3 提高健壮性
n 预防用户的操作错误 n 检查参数的合法性 n 不要预先确定限制条件 n 先测试后优化
软件工程导论课件之第12章面向对象 实现
12.3 测试策略
n 测试软件的经典策略是:从单元测试开始,逐 步进入集成测试,最后进行确认测试和系统测 试。
n 测试面向对象软件的策略与上述策略基本相同, 但也有许多新特点。
软件工程导论课件之第 12章面向对象实现
2020/12/19
软件工程导论课件之第12章面向对象 实现
n 面向对象实现主要包括两项工作:
q 把面向对象设计结果翻译成用某种程序语言书写的 面向对象程序;
q 测试并调试面向对象的程序。
n 面向对象程序的质量基本上由面向对象设计的 质量决定,所采用的程序语言的特点和程序设 计风格也将对程序的可靠性、可重用性及可维 护性产生深远影响。
软件工程导论课件之第12章面向对象 实现
12.4.2 集成测试方法
n 在这个测试阶段,必须对类间协作进行测试。 n 和测试单个类相似,测试类协作可以使用随机
测试方法和划分测试方法,以及基于情景的测 试和行为测试来完成。
软件工程导论课件之第12章面向对象 实现
1. 多类测试 n 生成多个类的随机测试用例的步骤:
以测试划分出的每个类别。
q 基于状态的划分 q 基于属性的划分 q 基于功能的划分
软件工程导论课件之第12章面向对象 实现
3. 基于故障的测试 n 基于故障的测试(fault based testing)与传
统的错误推测法类似,也是首先推测软件中可 能有的错误,然后设计出最可能发现这些错误 的测试用例。 n 为了推测出软件中可能有的错误,应该仔细研 究分析模型和设计模型,而且在很大程度上要 依靠测试人员的经验和直觉。
1. 支持类与对象概念的机制 n 所有面向对象语言都允许用户动态创建对象,
并且可以用指针引用动态创建的对象。 2. 实现整体-部分(即聚集)结构的机制 n 分别使用指针和独立的关联对象实现整体-部
分结构。 3. 实现一般-特殊(即泛化)结构的机制 n 既包括实现继承的机制也包括解决名字冲突的
机制。
软件工程导论课件之第12章面向对象 实现
软件工程导论课件之第12章面向对象 实现
12.3.2 面向对象的集成测试
n 在面向对象的软件中不存在层次的控制结构, 传统的自顶向下或自底向上的集成策略就没有 意义了。
n 面向对象软件的集成测试主要有下述两种不同 的策略。
q 基于线程的测试(thread based testing) q 基于使用的测试(use based testing)
软件工程导论课件之第12章面向对象 实现
3rew
演讲完毕,谢谢听讲!
再见,see you again
2020/12/19
软件工程导论课件之第12章面向对象 实现
软件工程导论课件之第12章面向对象 实现
12.1.3 选择面向对象语言
1. 将来能否占主导地位 n 为了使自己的产品在若干年后仍然具有很强的生命力,
可能希望采用将来占主导地位的语言编程。 2. 可重用性 n 应该优先选用能够最完整、最准确地表达问题域语义
的面向对象语言。 3. 类库和开发环境 n 考虑类库的时候,还应该考虑类库中提供了哪些有价
n 软件测试仍然是保证软件可靠性的主要措施。 但是,面向对象程序中特有的封装、继承和多 态等机制,也给面向对象测试带来一些新特点, 增加了测试和调试的难度。
软件工程导论课件之第12章面向对象 实现
12.1 程序设计语言 12.1.1 面向对象语言的优点
1. 一致的表示方法 n 一致的表示方法既有利于在软件开发过程中始终使用
软件工程导论课件之第12章面向对象 实现
12.3.1 面向对象的单元测试
n 最小的可测试单元是封装起来的类和对象。 n 一个类可以包含一组不同的操作,而一个特定
的操作也可能存在于一组不同的类中。因此, 对于面向对象的软件来说,单元测试的含义发 生了很大变化。 n 测试面向对象软件时,不能再孤立地测试单个 操作,而应该把操作作为类的一部分来测试。
q 对每个客户类,使用类操作符列表来生成一系列随 机测试序列。这些操作符向服务器类实例发送消息。
q 对所生成的每个消息,确定协作类和在服务器对象 中的对应操作符。
q 对服务器对象中的每个操作符(已经被来自客户对 象的消息调用),确定传递的消息。
q 对每个消息,确定下一层被调用的操作符,并把这 些操作符结合进测试序列中。
值的类。 n 在开发环境中,还应该提供使用方便的类库编辑工具
和浏览工具。 4. 其他因素
软件工程导论课件之第12章面向对象 实现
12.2 程序设计风格 12.2.1 提高可重用性
1. 提高方法的内聚 n 一个方法(即服务)应该只完成单个功能。如果
某个方法涉及两个或多个不相关的功能,则应 该把它分解成几个更小的方法。 2. 减小方法的规模 n 应该减小方法的规模,如果某个方法规模过大, 则应该把它分解成几个更小的方法。
软件工程导论课件之第12章面向对象 实现
8. 持久保存对象 n 一些面向对象语言,没有提供直接存储对象的
机制。这些语言的用户必须自己管理对象的输 入输出,或者购买面向对象的数据库管理系统。 n 另外一些面向对象语言(例如,Smalltalk),把 当前的执行状态完整地保存在磁盘上。 n 还有一些面向对象语言,提供了访问磁盘对象 的输入输出操作。