码迷,mamicode.com
首页 > 其他好文 > 详细

WordCountOptimized

时间:2018-04-08 21:15:06      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:地方   \n   文件中   字母   hub   表格   top   count()   utf-8   


基础任务


一、https://github.com/SuperScholar-Z/WordCountOptimized


二、PSP表格


技术分享图片


三、单词计数模块的主要代码如下:

    public void Count() throws IOException //统计单词数
    {
        String line;   //读取的一行文本
        while ((line = input.readLine()) != null)
        {
            //单词分割
            ArrayList<String> wordST = new ArrayList<>();
            WordSplit.split(line, wordST);    //单词分割
            if(wordST == null)
                continue;
            for(String m_strWord : wordST) //提取出分割的单词
            {
                Word m_word = new Word(m_strWord);  //逐个单词读入
                int indexOfWord = wordArr.indexOf(m_word);    //单词在容器中的位置
                if (m_word.getStrWord().length() == 0)   //跳过空字符串
                    continue;
                if (indexOfWord == -1)   //单词第一次出现则放进容器
                    wordArr.add(m_word);
                else    //单词重复出现则计数器+1
                    wordArr.get(indexOfWord).incNum();
            }



?? 在这次小组的作业中,我负责的是单词计数的模块,实现起来并不难。
?? 首先会读取目标文件,然后调用单词分割模块,将分割好的单词放在数组里。
?? 然后就进行计数了,如果是一个新的单词,那么就将它加入容器,如果是已经计数过的单词,就将那个单词的数量加一。


四、单元测试设计


??本次测试主要采用白盒测试,并参考黑盒测试方法。其中,白盒测试主要为语句覆盖和条件覆盖。
?? 首先,这个模块并不难,主要的代码也不多,即使是语句覆盖,也不够二十个,因此,在考虑测试用例时会理所当然的想到排列组合。
??由于各组员所负责模块不同,测试时只测试本模块正确性,所以本次测试默认单词分割和输入输出模块正确,并在测试中去除了排序模块。
??所以,本模块从条件上划分:1、是否为空文件
???? ?? 2、分割过后所读到的字符串是否为空字符串
???? ?? 3、是否已经读到过(string已在容器中)
?? 因此按照条件和语句的划分,本次采用了20个用例。


技术分享图片

五、单元测试结果
运行截图如下:


技术分享图片


??对于此次测试来说,结果较为理想。
??此模块的内容不多,但是用例却有很多,因此测试的覆盖范围较广,但是却显得20个用例有些冗余了。


扩展任务


一、参考规范“现代软件工程讲义 3 代码规范与代码复审”


http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html


个人理解:代码规范分为代码风格规范和代码设计规范。
??代码风格规范:文字上的规定,我认为这个的最重要的目的是为了方便阅读,方便他人方便自己,方便代码重写重用。
?? 平时我自己做的比较好的有:缩进、行宽、括号、断行、分行等。
??而平时所做的不够好的地方就是命名和注释:
?? 命名:我自己一般是命名比较随意的ijk或者什么单词的甚至为拼音的命名,而这么做是不对的。
?? 现在比较常见为匈牙利命名法,在变量前加上前缀,可以一眼看出变量的类型和相应的语义。
?? 注释:我的注释要不然是忘了写,要不就是想起来然后写很多。
?? 但是,实际上应该将注释精简,并且将其中复杂的注释放在函数头。
?? 代码设计规范:宏观上各部分的通用原则。我认为这里很重要的我平时用的到但我处理的不够好的是异常处理。
?? 异常处理:我认为这个异常处理并不是像输入输出的时候一个简单的try和catch,而是代码的方方面面。
?? 比如说各种边界值之类,在对容器文件等操作前判断是否为空,各类值是否会溢出越界等等等等。


二、小组组员部分代码分析


??17105同学的部分代码(输出文件函数)

 private static void ResultOutput(ArrayList<Word> wordArr) throws IOException    //输出统计结果
    {
        File outputFile = new File("result.txt"); //打开存储文件
        BufferedWriter output = new BufferedWriter(new FileWriter(outputFile)); //输出缓冲区
        for(Word word : wordArr)    //将统计结果写入缓冲区
            output.write(word.getStrWord() + "\t" + word.getNum() + "\r\n");
        output.flush(); //把缓存区内容写入磁盘文件中
        output.close(); //关闭文件
    }

?? 我认为他的代码就是我们所有人的楷模,从风格到设计,都很符合规范:比如说缩进、空行、注释以及异常处理,还有文件的关闭收尾工作。


三、使用findbugs工具。


下载地址:http://findbugs.sourceforge.net/


四、对本次代码进行扫描,结果如下图:


技术分享图片


??没有出现bug
??但是有着编程方面的坏习惯,命名问题:Count函数开头应为小写字母;字符串比较应用.equal()方法
??还有一个问题是对于输出格式的问题,没有指定格式。
??解决方法:加一句FileOutputStream(outputFile),"UTF-8")));
????以指定文件的输出编码格式为"utf-8"。


五、小组讨论


??整个小组存在问题基本相同,没什么大问题,命名上有点小问题,注释非英文,其他的都还好,因为扩展任务的都是调试过的,没有设计问题。


高级任务


一、测试集选用了乔布斯传,具体参数信息如下:


技术分享图片


二、优化前性能指标


技术分享图片

??测试了十次结果分别为:
????程序运行时间:2315ms
????程序运行时间:2276ms
????程序运行时间:2277ms
????程序运行时间:2191ms
????程序运行时间:2200ms
????程序运行时间:2287ms
????程序运行时间:2389ms
????程序运行时间:2338ms
????程序运行时间:2294ms
????程序运行时间:2336ms
??平均运行时间:2290.3ms


三、同行评审


??本次评审所担任角色为:
????作者:钟芳郅、胡天池、黄一桐、刘弋。
????讲解员:钟芳郅、胡天池、黄一桐、刘弋。
????评审员:胡天池、刘弋。
????主持人:钟芳郅。
????记录员:黄一桐。
??评审过程:由主持人主持,各小组成员讲解自己所负责的模块的代码,评审员提出评审意见,记录员负责记录,最终讨论得出评审结论。
?? 评审意见和结论:本程序效率主要受核心功能即单词分割、统计计数、排序影响。


四、性能分析


??通过测试,我们发现制约程序性能指标的主要因素是单词分割、计数、排序方面,即和同行评审结果相似。


五、性能优化


?? 1、统计计数,由于要在数组中查找该单词是重复出现的单词还是新出现的单词,因此此时使用Map容器会比ArrayList容器更为快捷,因此Map容器基于二叉树,按值查找的效率较快。
?? 2、排序时使用较高效的算法,如归并排序,可以加快排序的效率。


六、总结


??软件开发、软件测试、软件质量这三者是密不可分的。其中,软件开发属于前期工作,软件测试为后期工作,但是,在软件的开发过程中也会进行许许多多的测试,去保证程序的正确性,找出程序的错误,但是这个阶段测试的方法可能不太规范。而在软件测试阶段,我们需要以更缜密的思维,并使用规范科学的方法去设计测试用例,并使之保证无误。而在之后的静态测试,结果还算理想。我是第一次知道并且使用工具对代码进行测试,知道了还可以使用工具找出程序中的问题及规范性,再今后还是可以借鉴的。最后的性能测试则是另一重点,这与软件质量是息息相关的,一个好的程序离不开优化,对程序的优化可以使性能大大提升。


七、小组贡献率


??0.23

WordCountOptimized

标签:地方   \n   文件中   字母   hub   表格   top   count()   utf-8   

原文地址:https://www.cnblogs.com/h-t-c/p/8734607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!