WordCountPro小程序

基本任务

1.githu地址

https://github.com/JarrySmith/WordCountPro

2.psp2.1表

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 5  5

· Estimate

· 估计这个任务需要多少时间

 5  5

Development

开发

150  120

· Analysis

· 需求分析 (包括学习新技术)

 10  5

· Design Spec

· 生成设计文档

 5  5

· Design Review

· 设计复审 (和同事审核设计文档)

 5  5

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 5  5

· Design

· 具体设计

 5  5

· Coding

· 具体编码

 90  80

· Code Review

· 代码复审

 10  5

· Test

· 测试(自我测试,修改代码,提交修改)

 20  10

Reporting

报告

 30  15

· Test Report

· 测试报告

 10  0

· Size Measurement

· 计算工作量

 10  5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 10  10
 

合计

 185  140

3.接口实现

我在这里负责开发的是核心处理模块,该模块的功能为读取出文本中的内容后对文本中单词分割,并统计它们的词频。具体接口设计如下:

Class WordCount
方法:
1.public Map<String,Integer> wordCount(String path)
{
String context=readFilecontent(path);
processString(context);
//外界调用这个方法,最后返回一个map容器,里面装了单词和相应的词频
} 2.public Map<String,Integer> processString(String context)
{
//遍历char Of Context进行处理
} 3.public String readFilecontent(String path)
{
//一次性读取出path指向的txt文件的所有内容,并以String形式返回  
}

我所负责的模块中有三个函数,当需要用到核心模块的功能时,外界会直接调用里面的wordCount函数,得到一个装有单词和词频的map容器实例。wordCount函数会先调用readFilecontent函数,传递文件的路径进入函数,然后来读取文件中所有的字符,装入一个String变量中返回。再将这个变量的内容作为参数传递给processString来处理这些字符。processString函数会一个个读入String里面的内容,然后分析是否是单词,当是单词时记录,并存进map中,如果map中已经有相应的单词了,则对应的词频加一,最后返回这个map容器。

具体代码请见github内

4.设计测试用例

20个测试用例如下:

在进行设计用例测试时,首先设计时可以看到wordCount函数只有两句调用,属于简单代码,没有太大必要进行单元测试,所以单元测试的重点在于另外两个函数的测试。

对于readFilecontent函数,首先要对这个函数功能进行测试的话,先进行了传入正确的绝对路径和相对路径读取的测试,之后进行异常值的测试,输入空的或者错误的路径时,会抛出FileNotFoundExcetion,捕获异常后对其查看来判断是否通过单元测试。

对于processString函数,进行了较多的14个测试,会读取出14个不同文本的内容,测试这14个文本进行单词计数时结果是否正确。会进行-在单词的前后中时是否计数,数字是否进行计数,常用符号是否计入,异常符号是否计入,单词缩写时的单词计数,用tab、空格、换行符分隔时单词的计入等14个情况。基本覆盖了作者所能找出的所有正确、异常值的测试。

5.单元测试结果

最后编写好了测试用例后,采用Junit框架来实现单元测试,具体测试代码请见github内,测试结果如下:

测试结果评价:

测试的用例基本覆盖了可能出现的输入情况,但是在对processString函数进行单元测试时,有部分测试用例对一些输入情况进行了重复测试,具有一定的测试冗余。被测代码通过所有的测试用例,测试情况较好,被测代码符合预期要求。

6.小组贡献分

经过讨论,本人在小组中的小组贡献分为:0.23

扩展任务

1.开发规范

由于我们小组使用了java进行开发,所以采用的是《阿里巴巴java开发手册》中的开发规范,理解如下:

《阿里巴巴Java开发手册》中指出:【推荐】如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。 说明:为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。

个人体验:在对变量名进行命名时,如果使用简单的a、b、c之类的变量名命名,在使用时会出现使用不明确的情况。在进行测试和重构时候更是如此,有时需要花费额外的大量时间来重新理解代码内容。

2.交叉分析

我对学号U201517088的同小组成员的代码进行了代码规范的分析,分析的标准参考的是《阿里巴巴java开发手册》。

该成员进行的是输出模块的代码开发工作,对其类outputProcess分析后发现:

一、其覆写的方法compare()没有进行覆写的@override注释编写

二、使用了尾行注释。

三、String类型在扩展时,应使用Stringbuilder的append方式扩展

使用静态工具分析结果如下:

该成员其他代码部分基本符合开发规范,全部代码约40行,简洁易懂,采用覆写方法也便于理解不同情况下对compare方法的调用。

3.静态分析

因为我们采用的是《阿里巴巴java开发手册》中的开发规范,所以使用了Alibaba Java Coding Guidelines这一工具对自己的代码进行静态分析,经过分析后的结果如下:

4.改进代码

经过和小组成员的讨论后,对之前发现的问题进行了改进,发现的问题和改进方法如下:

一、else后面有地方没加大括号,这里应该将单行的代码也用大括号括起来。

二、使用了未定义的常量,这里用一个定义final常量再对常量进行使用。

三、未添加作者信息,之后应在.java文件前加上作者信息。

四、使用了尾行注释,应另起一行。

五、在判断语句中输入了复杂的条件,这里应在前面定义一个boolean型变量,将boolean变量放入判断条件中。

六、HashMap没有指定初始化大小,这里分析了我们进行测试的用例,取了一个满足较多用例的中间值作为初始化大小。

改进后的代码使用Alibaba Java Coding Guidelines进行静态检查后结果如下:

可以发现,此时代码已经通过了静态检查。

5.小组代码评价

组内成员代码在静态分析上都或多或少的找到了一些文件,比较通有的问题是写了尾行注释和缺少对代码描述的注释,使得在阅读代码时候没有那么清晰。

高级任务

1.测试数据集

程序主要花费的时间的地方就是进行对文本统计判断,为了进行压力测试,统计文本的txt文件应足够大,采用了一个12.5MB的txt文件来进行测试。

2.优化前程序性能指标

性能指标为:在对txt文件进行测试时应在5s内完成统计。

3.同行评审过程

由全体组员参与,组员徐江南主持,所有人一同评审小组的全部代码。

经过讨论,一致认定

1.在循环内定义变量会增加额外开销,建议将变量提出。

2.删去输入类中方法内对非法字符的判断不影响程序功能,而且能增强性能。

4.优化设计思路

在对认定的问题进行处理后,即将变量提出循环,删除合法字符检测后,程序效率大约提升了20%,与同行评审的结论一致。

5.作业小结

从基础功能到拓展功能到高级功能,可以说软件测试贯穿了软件开发的整个流程,同时软件测试也抱着了软件质量能达到基本要求。如果没有进行基础功能时候的单元测试,或许在进行接下来的开发时会发现一个一个原先认为的功能不完善,导致WordCountPro的质量变差,而且增加了开发的时间周期。可以说软件开发、软件测试、软件质量是互相联系的。想要做好软件开发,就要做好测试。想要达到好的软件质量,就要在开发时进行优化、测试。同时软件测试后不对软件进行维护、或者继续开发的行为,软件质量也无法保证。

WordCountPro小程序的更多相关文章

  1. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  2. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  3. 微信应用号(小程序)开发IDE配置(第一篇)

    2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...

  4. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  5. TODO:即将开发的第一个小程序

    TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...

  6. 微信小程序体验(2):驴妈妈景区门票即买即游

    驴妈妈因为出色的运营能力,被腾讯选为首批小程序内测单位.驴妈妈的技术开发团队在很短的时间内完成了开发任务,并积极参与到张小龙团队的内测问题反馈.驴妈妈认为,移动互联网时代,微信是巨大的流量入口,也是旅 ...

  7. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  8. 微信小程序(微信应用号)组件讲解

    这篇文章主要讲解微信小程序的组件. 首先,讲解新建项目.现在有句话:招聘三天以上微信小程序开发,这个估计只能去挖微信的工程师了.技术新,既然讲解,那我们就从开始建项目讲解. 打开微信web开发者工具, ...

  9. 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新

    微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...

随机推荐

  1. UVA - 11324 The Largest Clique (强连通缩点+dp)

    题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...

  2. CodeForces - 900D: Unusual Sequences (容斥&莫比乌斯&组合数学)

    Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers such ...

  3. HDU2665Kth number (主席树+离散)

    Give you a sequence and ask you the kth big number of a inteval. InputThe first line is the number o ...

  4. HihoCoder1366 逆序单词(字典树)

    逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...

  5. 【2】HashMap

    http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html 一:java的数据结构 在Java编程语言中,最基本的结构就是两种,一 ...

  6. 学习动态性能表(8)--v$lock&v$locked_object

    学习动态性能表 第八篇-(1)-V$LOCK  2007.5.31 这个视图列出Oracle 服务器当前拥有的锁以及未完成的锁或栓锁请求.如果你觉着session在等待等待事件队列那你应该检查本视图. ...

  7. 洛谷【P2629】好消息,坏消息

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P2629 ...

  8. 简谈Tomcat调优

    一.Tomcat和apache的比较 共同点:apache和tomcat都是属于web服务器. 不同点:他们是两个不同的容器,承载的东西不一样,tomcat属于一种java应用的服务 器,只针对jav ...

  9. Django 多条件多表查询实例问题

    当时想做一个多条件查询,但是对于要查询的信息,是分布在不同的表里,这就涉及到了多表查询问题. DjangoBook里提到了一些查询的方式,但是不够全面,就去百度搜了下. 当去网上百度搜多表查询,或多条 ...

  10. appium_python 怎样实现参数化自动生成用例

    1.对于一种对同一个页面同一点 要用不同数据测试形成多条测试用例,如果复制的话 会让代码很冗长,并且并不好维护,现在用封装的方法把 不变的代码 和 变化的参数 分别封装,形成动态 生成测试用例 ,主要 ...