软件测试的四个阶段【单元测试、集成测试、系统测试和验收测试】

一、单元测试

单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。又称为模块测试

测试阶段:编码后

测试对象:最小模块

测试人员:白盒测试工程师或开发工程师

测试依据:代码和注释+详细设计文档

测试方法:白盒测试

测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试

比如说在商店买东西时,需要扫码付款,如果使用支付宝付款,那么正常情况下就应该用支付宝去扫描商家的支付宝收钱码进行付款而不是微信收钱码。那么要是出现异常情况的话,比如用支付宝扫了微信收钱码还会弹出支付界面吗,又或者是在无网情况下扫码会出现什么界面呢? ->  进行错误处理测试


总的来说,单元测试是为了验证相关人员所编写的功能模块代码实现了正常情况下该实现的功能,也对其它任何可能出现的缺陷做了相应正确的处理。单元测试完成之后,通常会发现大量bug,然后开发人员对其作出处理,这样可以为后期维护代码降低代价。


二、集成测试

集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。

测试阶段:一般单元测试之后进行

测试对象:模块间的接口

测试人员:白盒测试工程师或开发工程师

测试依据:单元测试的模块+概要设计文档

测试方法:黑盒测试与白盒测试相结合

测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响

比如说逛淘宝后需要买东西,那么在提交订单后一般会弹出确认付款界面让我们付款,我们就需要测试在点击提交订单后是否会出现确认付款界面,如果出现了这个界面,那么是否可以支付成功,这个过程就相当于在测试淘宝提交订单这个接口与付款这个接口是否能够很好地配合工作。

三、系统测试

将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。

测试阶段:集成测试通过之后

测试对象:整个系统(软、硬件)

测试人员:黑盒测试工程师

测试依据:需求规格说明文档

测试方法:黑盒测试

测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等 

还是在淘宝上买东西的例子,如果刚开始是在华为手机上测试通过了,那么换成小米手机或是苹果手机呢?又或者是换成电脑呢?提交订单后还会出现确认付款界面吗,能正常调用支付宝付款接口进行付款吗?在电脑上付款的话是不是会比手机慢呢或者不安全呢?  如果发现不能调用支付宝付款接口进行付款,那么在修复了这个bug之后会不会引进新的bug呢?【比如提交订单后连确认付款的界面都不见了】这些都是系统测试需要做的事情。  

四、验收测试

验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买者展示该软件系统满足原始需求。

测试阶段:系统测试通过之后

测试对象:整个系统(包括软硬件)。

测试人员:主要是最终用户或者需求方。

测试依据:用户需求、验收标准

测试方法:黑盒测试

测试内容:同系统测试(功能...各类文档等)

这个阶段主要是依据用户的需求和验收标准来测的,由用户进行测试,测试所有的功能是否符合他们的预期等等

 

ShardingSphere是一款开源的分布式数据库中间件,可以实现对关系型数据库的分库分表、读写分离、分布式事务等功能。而dynamic-datasource-spring-boot-starter是一个基于Spring Boot的动态数据源组件,可以动态地切换数据源。如果需要将这两个组件整合起来使用,可以按照以下步骤进行操作: 1. 引入依赖 在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding-sphere-version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>${dynamic-datasource-version}</version> </dependency> ``` 其中,${sharding-sphere-version}为ShardingSphere的版本号,${dynamic-datasource-version}为dynamic-datasource-spring-boot-starter的版本号。 2. 配置数据源 在application.yml中配置数据源信息,包括ShardingSphere的分库分表规则动态数据源的配置信息。 ```yaml spring: shardingsphere: datasource: names: ds0,ds1 ds0: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: root ds1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: root sharding: tables: user: actual-data-nodes: ds${0..1}.user_${0..1} table-strategy: inline: sharding-column: id algorithm-expression: user_${id % 2} key-generator: column: id type: SNOWFLAKE ``` 其中,names为数据源名称,actual-data-nodes为ShardingSphere的分库分表规则,table-strategy为分表策略,key-generator为主键生成策略。 3. 配置动态数据源 在DynamicDataSourceAutoConfiguration中配置动态数据源。 ```java @Configuration public class DynamicDataSourceAutoConfiguration { @Bean @ConfigurationProperties(prefix = "spring.datasource.ds0") public DataSource ds0() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSource ds1() { return DataSourceBuilder.create().build(); } @Bean @Primary public DynamicDataSource dataSource(DataSource ds0, DataSource ds1) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("ds0", ds0); targetDataSources.put("ds1", ds1); return new DynamicDataSource(ds0, targetDataSources); } } ``` 其中,ds0ds1分别对应于ShardingSphere中的ds0ds1数据源,DynamicDataSource是动态数据源的实现类。 4. 测试 在测试类中使用@Autowired注解注入DataSource,并使用JdbcTemplate进行数据操作。 ```java @SpringBootTest public class ShardingTest { @Autowired private DataSource dataSource; @Test public void test() { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("insert into user (name, age) values (?, ?)", "张三", 20); jdbcTemplate.update("insert into user (name, age) values (?, ?)", "李四", 30); List<Map<String, Object>> userList = jdbcTemplate.queryForList("select * from user"); System.out.println(userList); } } ``` 运行测试类,可以看到数据成功插入到两个库的两张表中,并且查询结果也正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值