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. mysql更改数据文件目录及my.ini位置。

    需求:更改mysql数据数据文件目录及my.ini位置. 步骤: 1.查找my.ini位置,可通过windows服务所对应mysql启动项,查看其对应属性->可执行文件路径,获取my.ini路径 ...

  2. 幸运数字(数位dp)

    个人心得:数位dp处理起来是真的麻烦,本来动态规划就够头疼的了,菜的一批. 来看这个题目吧,题目在下面. 把题目变成可以求得就是求前n个数中1-n*9的情况的总和,所以用dp[i][j],表示前i个数 ...

  3. Dungeon Master (BFS与DFS的应用)

    个人心得:一开始用DFS弄了半天一直输出不了结果,后面发现并没有进行判断:好不容易能够得出答案,结果超时了,才发现原来要用BFS: 对于DFS: 从一个点开始模拟能走的所有步骤,注意边界条件,走到不能 ...

  4. LeetCode Max Consecutive Ones II

    原题链接在这里:https://leetcode.com/problems/max-consecutive-ones-ii/ 题目: Given a binary array, find the ma ...

  5. codevs 2503 失恋28天-缝补礼物

    题目描述 Description 话说上回他给女孩送了n件礼物,由于是廉价的所以全部都坏掉了,女孩很在意这些礼物,所以决定自己缝补,但是人生苦短啊,女孩时间有限,她总共有m分钟能去缝补礼物.由于损坏程 ...

  6. Http请求状态码

    1xx - 信息提示   这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应.    ·0 - 本地响应成功.   · 100 - Continue 初始的请求已 ...

  7. centos下wget: command not found的解决方法

    今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装,这里是C ...

  8. 使用Azure Site Recovery把VM批量搬迁到Azure

    Azure Site Recovery可以提供如下服务: Site Recovery 服务:Site Recovery 可以在站点出现故障时,让应用在其他站点继续可用,从而确保业务连续性. Site ...

  9. CentOS6.5下安装mongodb

    MongoDB是目前最常用的NoSQL-非关系型数据库. 本文将介绍在CentOS下如何通过yum安装MongoDB. 1.首先在CentOS6.5下,编辑Mongo的yum源: 在/etc/yum. ...

  10. Java基础--反射Reflection

    Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...