软工导论知识框架(八)面向对象设计风格

一.面向对象实现

  • 把面向对象设计结果翻译成面向对象程序
  • 测试并调试面向对象的程序

二.程序设计语言

所有语言都可完成面向对象实现,但效果不同。

使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中

1.将来能够占主导地位 ——  产品有生命力

2.可重用性(基本特点和主要优点

3.类库和开发环境

  • 考虑类库中提供有价值类      
  • 开发环境中提供基本软件工具和类库编辑工具及浏览工具

4.其他因素

培训服务;技术支持;开发工具、开发平台、发行平台;对机器性能和内存需求;集成已有软件容易程度

三.程序设计风格(结构化程序设计依然要遵守)

1.提高可重用性

  • 提高方法的内聚: 方法只完成单个功能,涉及多个不相关功能时,需要分解。
  • 减小方法的规模:当方法规模过大,需要分解
  • 保持方法的一致性:功能相似方法有一致名字、参数特征(包括参数个数、类型和次序)、返回值类型、使用条件及出错条件等
  • 把策略与实现分开

策略方法:负责做出决策,提供变元,管理全局资源

实现方法:负责完成具体操作

实现方法相对独立,可在其它系统中重用,将二者分开。

  • 全面覆盖:应针对所有组合写方法、对空值、极限值、界外值做出响应
  • 尽量不用全局信息降低方法与外界耦合程度
  • 利用继承机制:实现共享和提高重用程度的主要途径

(1)调用子过程:把公共代码分离出来,构成一个公用方法。

(2)分解因子

         从不同类相似方法分解出不同的代码, 余下作为公用方法中公共代码。把分解出的因子作为名字相同算法不同的方法,在不同 类中定义。 

(3)使用委托(不存在一般特殊的关系时~)

(4)代码封装在类中:把被重用的代码封装在类中

2.提高可扩充性(从用心一定程度也可以提高可扩充性)

  • 封装实现策略: 应把类的实现策略(包括数据结构、算法等)封装起来,对外提供公有接口。
  • 不要用一个方法遍历多条关联链:一个方法应只包含对象模型中有限内容。否则导致方法过分复杂,不易理解和修改扩充。
  • 避免使用多分支语句: 增添新类时会修改原有的代码,合理利用多态性机制(根据类的性质自动选择行为)
  • 精心确定公有方法:公有方法是向公众公布的接口。

3.提高健壮性(鲁棒性)

  • 预防用户操作错误: 任何输入(错误),给出提示信息,再次接收用户输入。
  • 检查参数合法性(尤其是公有方法)
  • 不预先确定限制条件:使用动态内存分配机制,创建未预先设定限制条件数据结构。
  • 先测试后优化(性能大于优化

四.面向对象测试策略

1.单元测试

单元:封装的类和对象

对程序内部具体单一功能模块测试,如程序用C++实现,主要对类成员函数测试。

传统的测试方法都可使用,等价类划分、边值分析、逻辑覆盖法、基本路径法。

2.集成测试

在面向对象的软件中不存在层次的控制结构,传统的自顶向下或自底向上的集成策略就没有意义了。

 此外,由于构成类的各个成分彼此间存在直接或间接的交互,一次集成一个操作到类中(传统的渐增式集成方法)通常是不现实的

面向对象软件的集成测试主要有下述两种不同的策略:

  • 基于线程的集成测试:把响应系统的一个输入或一个事件所需类集成起来。
  • 基于使用的集成测试:先测独立类,测完后测独立类下一层类(依赖类),到测完。

3.确认测试(黑盒法)

测用户可见动作,可识别系统输出。    

根据动态模型和描述系统行为的脚本设计确认测试用例。

4.测试用例的设计

与传统软件测试(测试用例的设计由软件的输入、处理、输出视图或单个模块的算法细节驱动)不同,面向对象测试关注于设计适当的操作序列以检查类的状态。

(1)测试类的方法

 随机测试

 划分测试(类似等价类划分)

  • 基于状态的划分:设计测试用例,以分别测试改变状态的操作和不改变状态的操作。 
  • 基于属性的划分:根据类操作属性—— 使用该属性,修改属性,不操作该属性。
  • 基于功能的划分

基于故障测试 :错误推测法,如边界或输入输出为零等。

(2)集成测试方法

多类测试:测类间协作,同样可采用随机测试和划分测试。

 

  • 随机测试
  • 划分测试

从动态模型导出测试用例:测试用例涵盖所有状态。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu常用配置

文章目录 1. 安装VMware虚拟机软件2. 下载Ubuntu镜像3. 创建Ubuntu虚拟机4. 设置屏幕分辨率5. 更改系统语言为中文6. 切换中文输入法7. 修改系统时间8. 修改锁屏时间9. 通过系统自带的应用商店安装软件10. 安装JDK11. 安装 IntelliJ IDEA12. 将左侧任务栏自动隐藏13. 安装docke…

用户数据报协议UDP

UDP的格式 载荷存放的是:应用层完整的UDP数据报 报头结构: 源端口号:发出的信息的来源端口目的端口号:信息要到达的目的端口UDP长度:2个字节(16位),即UDP总长度为:2^16bit 2^10bit * 2^6bit 1KB * 64 64KB.所以一个UDP的最大长度为64KBUDP校验和:网络的传输并非稳定传输,…

css3背景渐变

1.线性渐变 <style>.box {width: 200px;height: 200px;border: 1px solid black;float: left;margin-left: 50px;}.box1 {background-image: linear-gradient(green, yellow, red);}/* 右上 */.box2 {background-image: linear-gradient(to right top, green, yellow, re…

SAP MM学习笔记16-在库品目评价

在库品目评价是指评估物料。具体比如物料价格&#xff0c;数量&#xff0c;保管场所等发生变化的时候&#xff0c;判断是否发生了变化&#xff0c;要不要生成 FI票&#xff0c;用哪个FI科目来进行管理等内容就叫在库品目评价。 在库品目评价有很多层级&#xff0c;这里先讲3兄弟…

基于Qlearning强化学习的路径规划算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Q值更新规则 4.2 基于Q-learning的路径规划算法设计 4.3 Q-learning路径规划流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..…

Mybatis三剑客(一)在springboot中自动生成Mybatis【generator】

1、pom.xml中新增plugin <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><overwrite>true</overwrite><…

分布式 - 服务器Nginx:一小时入门系列之动静分离

文章目录 1. 动静分离的好处2. 分离静态文件3. 修改 Nginx 配置文件4. location 命令修饰符优先级 1. 动静分离的好处 Apache Tocmat 严格来说是一款java EE服务器&#xff0c;主要是用来处理 servlet请求。处理css、js、图片这些静态文件的IO性能不够好&#xff0c;因此&…

IDEA关闭项目,但是后台程序没有关闭进程(解决方案)

最近遇到一个很奇怪的问题&#xff0c;idea关闭项目后&#xff0c;系统进程没有杀死进程&#xff0c;再次执行的时候会提示端口占用&#xff0c;并提示Process exited with an error: 1 (Exit value: 1) 错误原因&#xff1a;应用程序关闭后&#xff0c;进程不能同步关闭 解决方…

[vscode]vscode运行cmake时候exe不执行而且前面多一些字符

遇到一个奇怪问题,你单独打开cmd去执行vscode编译过程序没问题&#xff0c;但是你在vscode确不会执行&#xff0c;这是因为vscode没有读取到电脑环境变量导致加载DLL失败&#xff0c;但是在vscode终端不会给你提示少DLL&#xff0c;需要你自己把DLL复制到exe目录即可解决问题。…

关于Cesium的常见需求整理之点位和弹窗(点位弹窗)

一、点位上图 ①在Cesium中&#xff0c;每个自定义的地图元素被视为一个entity对象&#xff0c;如果我们要添加点位到地图上&#xff0c;那就必须先创建一个entity对象。 var entity new Cesium.Entity({position: position, });以上代码我们创建了一个entity对象&#xff0…

Python Opencv实践 - 图像缩放

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg_cat cv.imread("../SampleImages/cat.jpg", cv.IMREAD_COLOR) plt.imshow(img_cat[:,:,::-1])#图像绝对尺寸缩放 #cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) #指定Size大…

CANoe自动化工程的搭建

基于XMLCAPL建立自动化工程 1、导入ini文件2、新建 Test Environment3、报告类型4、代码编写 1、导入ini文件 工程的配置的文件&#xff0c;配置DUT相关信息&#xff0c;具体视工程而编写内容。 2、新建 Test Environment 1、新建XML测试用例环境 2、导入XML测试用例文件 …

关于Neo4j的使用及其基本命令

关于Neo4j的使用 文章目录 关于Neo4j的使用1、启动方式2、创建新节点&#xff0c;节点内有属性3、创建关系4、查询节点5、查询关系6、删除两个节点的关系7、删除节点8、删除某个标签的全部关系9、某个节点添加属性10、删除节点某个属性 1、启动方式 进入bin目录&#xff1a; …

Web 服务器 -【Tomcat】的简单学习

Tomcat1 简介1.1 什么是Web服务器 2 基本使用2.1 下载2.2 安装2.3 卸载2.4 启动2.5 关闭2.6 配置2.7 部署 3 Maven创建Web项目3.1 Web项目结构3.2 创建Maven Web项目 4 IDEA使用Tomcat4.1 集成本地Tomcat4.2 Tomcat Maven插件 Tomcat 1 简介 1.1 什么是Web服务器 Web服务器是…

Neo4j笔记-数据迁移(导出/导入)

这里先说明以下几点&#xff1a; Neo4j在4.0下版本默认的库名是&#xff1a;graph.db Neo4j在4.0上版本默认的库名是&#xff1a;neo4j.db 不管是Neo4j&#xff0c;还是Neo4j Desktop&#xff0c;都会在bin目录下有neo4j、neo4j-admin软件。在conf目录下&#xff0c;有neo4j.…

unity实现角色体力功能【体力条+体力计算】

导读&#xff1a;实现功能 1、角色体力计算 2、角色疲劳动画 3、体力条制作、跟随 默认做好角色的idle/run/walk动画、切换和玩家输入&#xff0c;我使用的是新输入系统&#xff0c;动画时单变量混合树&#xff0c;参数Sports。 【每一部分功能根据自己需求观看哦】 1、角色体…

科研论文中SCI,SSCI ,CSSCI是什么

目录 1 SCI 2 SSCI 3 CSSCI 什么是SCI&#xff0c;SSCI &#xff0c;CSSCI 目前&#xff0c;在国际科学界&#xff0c;如何正确评价基础科学研究成果已引起越来越广泛的关注。而被SCI、SSCI收录的科技论文的多寡则被看作衡量一个国家的基础科学研究水平、科技实力和科技论文…

HarmonyOS SDK开放能力,服务鸿蒙生态建设,打造优质应用体验

华为开发者大会2023&#xff08;HDC.Together&#xff09;于8月4日至6日在东莞松山湖举行&#xff0c;在HarmonyOS端云开放能力技术分论坛上&#xff0c;华为为广大开发者们介绍了HarmonyOS SDK开放能力在基础开发架构、功能特性等方面的变化之处&#xff0c;通过将常见的通用能…

市面上最好用的4款免费ETL工具推荐

一、ETL介绍 ETL流程是数据仓库建设的核心环节&#xff0c;它涉及从各种数据源中抽取数据&#xff0c;经过清洗、转换和整合&#xff0c;最终加载到数据仓库中以供分析和决策。在数据仓库国产化的背景下&#xff0c;ETL流程扮演着重要的角色&#xff0c;今天我们就来讲讲ETL流…