五、测试-六、优化方案

五、测试

1.单元测试

  单元测试的方式是黑盒测试,即通过每个环节的输入输出情况进行测试。程序由四个类组成,对应生成四个测试类,使用Junit5对其中的主要方法进行测试。测试的大致思路是预先设计较为简单的数独用例,生成新的对象,运行方法,并将阶段性的结果与预先计算的结果相比较。

  有些方法具有返回值,便于设计测试类,例如对 Main::isNumber()进行测试:

//Main::isNumber    public static boolean isNumber(String str){        String reg = "^[0-9]+?$";        return str.matches(reg);        }//MainTest::testIsNumber    @Test    final void testIsNumber() {        Assert.assertEquals(true, Main.isNumber("100"));        Assert.assertEquals(true, Main.isNumber("10a"));        Assert.assertEquals(true, Main.isNumber("4.5"));    }

  对于更多没有返回值的方法,采取验证阶段结果的方法,预测方法执行后对象属性的变化并加以验证。例如对SudokuGenerator::creatFirstBlock()方法的测试,该方法执行后生成数独的第一小宫。测试类中将第一小宫所有值求和验证是否完成。

    @Test    final void testCreateFirstBlock() {        SudokuGenerator gen=new SudokuGenerator(1);//只生成一个终局,目的是让测试更容易进行        gen.createFirstBlock();        //阶段执行到被测方法后,不继续执行后续方法,开始验证当前成果        boolean status = true;        int numCrit = 0;        Sudoku su = gen.getSudoku();        for(int i=0;i<3;i++) {            for(int j=0;j<3;j++) {                numCrit+=su.get(i, j);            }        }        //完成的一小宫求和应为45        if(numCrit!=45 || su.get(0, 0)!=2) status = false;        Assert.assertEquals(true, status);

    }?

  所有测试类及运行结果:

  (其中failure是对被测方法进行了错误输入的验证)

2.系统测试

  本环节主要测试不同输入指令的运行结果。对指令输入的可能情况进行等价类划分后得到测试用例表如下:

  (空白部分表示输入为合法输入,程序正常运行)

3.覆盖率测试

  结合系统测试的用例与单元测试,使用eclipse的插件检测覆盖率。在项目上右键 -> Coverage As -> 2 JUnit Test,就可以在控制台窗口看见覆盖率结果。

4.性能测试

  下载并安装JProfile 11.1试用版, 需要注意的是,当执行插件安装时,需要关闭Eclipse。 在安装向导处选择IDE(eclipse 4.8),点击“Integrate”选择IDE的安装路径。完成后,使用“-clean”参数在命令行窗口打开eclipse,在Window -> Perspective -> Customize Perspective -> Action Set Availability, 找到Profile并选中。之后就可以在main类窗口右键 -> Profile As运行JProfile。需要注意的是,因为项目需要输入参数,所以选择“Profile Configurations...”填写指令在运行。

  在JProfile中,我们主要看的是CPU的占用情况。因此我查看了call tree和hot pot的图表。

  从图表中可以看出与文件写入有关的FileWrite与BufferedWriter明显占用了很大资源,导致整体程序运行较慢。

六、优化方案

  从性能分析中不难看出,由于算法采取单个写入,写入过程给整个程序造成较大拖累,是用时最长的环节。因此下一步优化提速的思路就是将单个写入转换成整体写入,将所有终局数独保存在同一个BufferedWriter中来提升效率。例如,按照一定的格式,开一个较大的int数组。String类由于操作涉及多次new,尽量都替代为StringBuffer的操作来节省空间。此外,本次算法中使用位运算标记数独中数字的使用情况,在判断的逻辑上已经比较简明,今后可以再思考如何从回溯的算法方面继续提高效率。

  由于时间问题没有对程序进行具体的优化,谨记录进一步的想法。

原文地址:https://www.cnblogs.com/FounDerSquare/p/12233687.html

时间: 2024-11-08 22:58:41

五、测试-六、优化方案的相关文章

设计模式第六讲:单例模式(附优化方案)

单例模式 一:模式定义 一个类有且仅有一个实例,并且自行实例化向整个系统提供. 二:模式特点 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源. 三:使用场景 希望在系统中某个类的对象只能存在一个. 四:具体实现 单例模式有两种写法: 1.懒汉式 2.饿汉式 懒汉式实现: public class Single { private static Single instance; private Singleton (){} public

Redmine性能优化方案

近来公司redmine服务器表现很糟糕,在16核,64GRAM的机器上,压测结果竟然只有每秒5~7个请求,部分页面一个都出不来. 以下是我对Redmine性能优化方案: redmine服务器性能问题排查与优化建议: 以下建议的方案是基于redmine运行期的log文件中的render耗时.activerecord耗时,linux系统性能指标采样与 mysql 性能指标采样分析,以及redmine在不同web server下的benchmark而得:   一. 问题排查与定量分析 通过分析redm

mysql 性能优化方案 (转)

网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一

分享详细网站SEO优化方案

下面分享详细网站SEO优化方案: 一.网站上线前准备阶段 1.域名选择 2.服务器及空间选择 3.网站类型选择:内容资讯型.商铺型.论坛型.文档分享下载型. 4.竞争对手调研分析 5.网站针对用户分析 6.程序选择 二.网站上线后SEO运营阶段 站内结构优化 合理规划站点结构(1.扁平化结构 2.辅助导航.面包屑导航.次导航) 内容页结构设置(最新文章.推荐文章.热门文章.增加相关性.方便自助根据链接抓取更多内容) 较快的加载速度 简洁的页面结构 1.站内SEO优化 ①关键词分析选择 ②网站框架

Tomcat 配置详解/优化方案

 转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性: className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类. Port:Tomcat

Adapter优化方案的探索

概要:使用Adapter的注意事项与优化方案本文的例子都可以在结尾处的示例代码连接中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request.本文的示例代码主要是基于CommonAdapter这个库编写的,若你有其他的技巧和方法可以参与进来一起完善这篇文章.固定连接:https://github.com/tianzhijiexian/Android-Best-Practices/blob/master/2015.10/adapter/ad

web前端9大性能优化方案汇总

网页的性能问题是产品开发过程中的一个重要的环节,在产品成功地把功能实现后,性能能好与坏就直接影响了用户体验,以至于影响了产品的成败! 作为web前端开发者,对前端部分进行性能上的优化,是责无旁贷,刻不容缓的工作.下面简介一下9种性能优化方案. 一.罪魁祸首是http请求 一般网页,80%的响应时间花在下载网页内容(images, stylesheets, javascripts, scripts, flash等).减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较

(转)Web性能优化方案

第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我们的登录页面,如下图所示 从上图我们可以分析知道,HTML文档只占了总响应时间的20%,其它80%响应时间用来下载JS.CSS.图片等组件.所以WEB前端有很大的优化空间,我们将从WEB的前端优化.后端优化两方面综合考虑给出WEB的性能优化方案. 第二章 WEB前台的优化规则 一.尽量减少 HTTP

Tomcat 优化方案 和 配置详解

Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素: 是整个配置文件的根元素.表示整个Catalina容器. 属性: className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer下载类. Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须) Shutdown:发送到端口上用于关闭Tomcat服务器的命令