第四周任务:wordCountPro
Github地址:
https://github.com/YuQiao0303/WordCountPro
项目需求:
http://www.cnblogs.com/ningjing-zhiyuan/p/8654132.html
psp2.1 |
psp阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
10 |
7 |
·Estimate |
·估计这个任务需要多少时间 |
2 |
4 |
Development |
开发 |
810 |
709 |
·Analysis |
·需求分析 |
30 |
26 |
·Design Spec |
·生成设计文档 |
30 |
31 |
·Design Review |
·设计复审 |
60 |
31 |
·Coding Standard |
·代码规范 |
30 |
38 |
·Design |
·具体设计 |
40 |
31 |
·Coding |
·具体编码 |
200 |
236 |
·Code Review |
·代码复审 |
120 |
55 |
·Test |
·测试 |
300 |
259 |
Reporting |
报告 |
345 |
310 |
·Test Report |
·测试报告 |
300 |
51 |
·Size Measurement |
·计算工作量 |
5 |
27 |
·Postmortem & Process Inprovement Plan |
·事后总结,并提出过程改进计划 |
40 |
232 |
合计 |
1167 |
1030 |
对接口的实现
在本次项目中,我负责输出接口的实现,整个实现过程非常的简单,只需按照一定顺序取出treemap中的数据,再写入文件即可。
输出到文件:
try {File writefile= new File("result.txt");if(!writefile.exists()){writefile.createNewFile();}BufferedWriter out = new BufferedWriter(new FileWriter(writefile));int flag = 0;for (Entry<String, Integer> e: list) { System.out.println(e.getKey()+":"+e.getValue()); out.write(e.getKey() + " " + e.getValue()+ "\r\n");flag++;if(flag>=100)break;}
树排序:
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(Info.entrySet());Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ //降序排序 public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2){ return o2.getValue().compareTo(o1.getValue()); } });
其中info是全局变量,由负责核心功能的组员写入,然后由我负责排序。
测试用例设计:
在小组开会时,我们一致认同把info设计为全局变量,这就导致我的接口没有入口,为了完成测试设计,只好重写一个函数compareFile作为测试函数
compareFile:
static boolean comparefile(TreeMap<String,Integer> Info,String path) {wordcount.Info = Info;wordcount.output();//比较“result.txt”与“path”内容是否相等try {File result = new File("result.txt");File trueRes = new File(path);List Rlist = new ArrayList();List Tlist = new ArrayList();BufferedReader Rbr = new BufferedReader(new FileReader(result));BufferedReader Tbr = new BufferedReader(new FileReader(trueRes));String lineTxt = null;while((lineTxt = Rbr.readLine()) != null) {Rlist.add(lineTxt);}while((lineTxt = Tbr.readLine()) != null) {Tlist.add(lineTxt);}for(int i=0;i<Rlist.size();i++) {if(!(Rlist.get(i)).equals(Tlist.get(i))){System.out.println("不相同的是=="+Rlist.get(i));return false;}}}catch(Exception e) {System.out.println("读取文件内容出错");}System.out.println("Success");return true;}
Comparefile的作用就是逐行比较两个文件,当某两行不相同时,输出result中不相同行,返回false。
任务要求设计20例测试用例,分为白盒测试和黑盒测试
白盒测试:
由流程图可知,白盒测试需要4个测试用例
用例一:是否能正常输出
//普通的树
TreeMap<String,Integer> tree1 = new TreeMap<String,Integer>();tree1.put("miao", 1);tree1.put("mao", 2);tree1.put("mi", 3);tree1.put("mie", 4);tree1.put("mei", 5);tree1.put("666", 6);用例二:是否能正常排序://乱序的valueTreeMap<String,Integer> tree2 = new TreeMap<String,Integer>();tree2.put("beta", 1);tree2.put("gama", 2);tree2.put("sum", 3);tree2.put("sin", 4);tree2.put("mega", 5);tree2.put("mishi", 7);tree2.put("mibb", 115);tree2.put("sugar", 77);tree2.put("babe", 136);tree2.put("miew", 55);
用例三:在value相同时是否能按照首字母排序:
//value相同单词首字母乱序TreeMap<String,Integer> tree3 = new TreeMap<String,Integer>();tree3.put("bbduibuqi" ,1);tree3.put("bbbushiren",1);tree3.put("bbwocuole" ,1);tree3.put("baba",1);tree3.put("baby",1);tree3.put("babe",1);tree3.put("beta",1);tree3.put("bisides",1);tree3.put("actually",1);tree3.put("acfun",1);tree3.put("bilibili",1);
用例四:当树有100个以上节点时的正确输出:
//100个以上的测试TreeMap<String,Integer> tree4 = new TreeMap<String,Integer>();tree4.put("a1",101);tree4.put("a2",100);tree4.put("a3",99);tree4.put("a4",98);tree4.put("a5",97);tree4.put("a6",96);tree4.put("a7",95);tree4.put("a8",94);tree4.put("a9",93);tree4.put("b1",92);tree4.put("b2",91);tree4.put("b3",90);tree4.put("b4",89);tree4.put("b5",88);tree4.put("b6",87);tree4.put("b7",86);tree4.put("b8",85);tree4.put("b9",84);tree4.put("c1",83);tree4.put("c2",82);tree4.put("c3",81);tree4.put("c4",80);tree4.put("c5",79);tree4.put("c6",78);tree4.put("c7",77);tree4.put("c8",76);tree4.put("c9",75);tree4.put("d1",74);tree4.put("d2",73);tree4.put("d3",72);tree4.put("d4",71);tree4.put("d5",70);tree4.put("d6",69);tree4.put("d7",68);tree4.put("d8",67);tree4.put("d9",66);tree4.put("e1",65);tree4.put("e2",64);tree4.put("e3",63);tree4.put("e4",62);tree4.put("e5",61);tree4.put("e6",60);tree4.put("e7",59);tree4.put("e8",58);tree4.put("e9",57);tree4.put("f1",56);tree4.put("f2",55);tree4.put("f3",54);tree4.put("f4",53);tree4.put("f5",52);tree4.put("f6",51);tree4.put("f7",50);tree4.put("f8",49);tree4.put("f9",48);tree4.put("g1",47);tree4.put("g2",46);tree4.put("g3",45);tree4.put("g4",44);tree4.put("g5",43);tree4.put("g6",42);tree4.put("g7",41);tree4.put("g8",40);tree4.put("g9",39);tree4.put("h1",38);tree4.put("h2",37);tree4.put("h3",36);tree4.put("h4",35);tree4.put("h5",34);tree4.put("h6",33);tree4.put("h7",32);tree4.put("h8",31);tree4.put("h9",30);tree4.put("i1",29);tree4.put("i2",28);tree4.put("i3",27);tree4.put("i4",26);tree4.put("i5",25);tree4.put("i6",24);tree4.put("i7",23);tree4.put("i8",22);tree4.put("i9",21);tree4.put("j1",20);tree4.put("j2",19);tree4.put("j3",18);tree4.put("j4",17);tree4.put("j5",16);tree4.put("j6",15);tree4.put("j7",14);tree4.put("j8",13);tree4.put("j9",12);tree4.put("k1",11);tree4.put("k2",10);tree4.put("k3",9);tree4.put("k4",8);tree4.put("k5",7);tree4.put("k6",6);tree4.put("k7",5);tree4.put("k8",4);tree4.put("k9",3);tree4.put("l1",2);tree4.put("l2",1);tree4.put("m",1);tree4.put("s",1);tree4.put("z",1);
黑盒测试:
在白盒测试结束后,我设计了大量的黑盒测试测试用例来检查程序的稳定性和可靠性,按黑盒测试用例来划分其实都是同一个等效类里的测试用例,在此就不列举了。
单元测试运行截图:
整个测试运行的很快,在测试中我测试了边界值,异常情况,正常情况和稳定性,结果显示很好。
小组贡献评分
我负责的部分是输出,不算复杂也不水,在小组讨论后确定我的得分是0.24。
扩展任务:静态测试
规范选择
我们选择了《阿里巴巴Java开发手册》中的一部分规范,并依照以下规范对组员17158,17163的代码进行了分析
编程规约
(1)命名规范:
①【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO 等。
②【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从 驼峰形式。
③【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。
(2)常量定义
①【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
(3)代码格式
① 【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果 是非空代码块则: 1) 左大括号前不换行。 2) 左大括号后换行。 3) 右大括号前换行。 4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
②【强制】任何二目、三目运算符的左右两边都需要加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。
③ 【强制】注释的双斜线与注释内容之间有且仅有一个空格。
④【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。
(4)OOP规约
①【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可。
②【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无 内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。
代码分析:
余乔17158和雷佳谕17163的代码有多处不符合规定的地方
- 左大括号换行不正确
2.注释的双斜线后没有空格
3.if…else语句else换行不正确
同时,该代码良好的遵循了驼峰形式,语言简洁无bug。
检查工具:
Java代码检测IDE插件,Eclipse下的下载地址为:
https://p3c.alibaba.com/plugin/eclipse/update
安装教程:
https://blog.csdn.net/qq_37552993/article/details/79202267
运行截图:
从运行截图看,本程序违反了多条编码规则,我们选择的改进方法是一条条的查源代码并修改wordcountpro中报错的地方,修改后:
小组整体问题:
命名规范,全局变量info并不符合规范
换行规范,所有的换行都随心所欲任意妄为,左大括号前换行,右大括号后瞎换行,多余空行影响阅读和记录错误行。
注释规范,所有注释的双斜杠后都没有一个空格符。
参考资料:
https://blog.csdn.net/keseliugeizuori/article/details/52858304
https://blog.csdn.net/guyuealian/article/details/51934301
转载于:https://www.cnblogs.com/lililililici/p/8735325.html
第四周任务:wordCountPro相关推荐
- 第四周作业WordCountPro
WordCountPro 分组: 组长:余乔 组员:商莹.雷佳谕.蒋雨晨 GitHub地址:https://github.com/YuQiao0303/WordCountPro 1.需求说明 参见武老 ...
- seek bar 放手_这些设计趋势决定了2010年代放手的时间
seek bar 放手 重点 (Top highlight) By Lilly Smith 礼来·史密斯(Lilly Smith) The end of a decade is a time for ...
- 20169212 2016-2017-2 《网络攻防实践》第四周学习总结
20169212 2016-2017-2 <网络攻防实践>第四周学习总结 教材学习中的问题和解决过程 wireshark学习 主机:Kali ip:192.168.1.117 目标:www ...
- pve rust 能拆家吗_RUST:2020年9月第四周:向上向上再向上!
九月第四周,马上就要迎来中秋国庆八天假!昨天被什么秋天第一杯奶茶的梗弄得一愣一愣的今天刚缓过劲来本期内容依旧是围绕了下个月即将上线的电梯展开更多消息被公布,让我们进来看个痛快!RUST:2020年9月 ...
- 不忘初心,砥砺前行——写在数据院成立四周年之际
[编者按] 在一个寒冬的下午,我来到位于清华紫荆门附近的双清大厦,数据科学研究院就坐落在此.那是我加入数据院的第一天,印象尤为深刻.深刻的并非是某件事情,而是一个令我有些措手不及的小任务:在数据院成立 ...
- K项目小记 - 项目已开工整整四周!
K项目小记 - 项目已开工整整四周! 至今天,K项目已经推进到了第四周.这四周时间里,我们项目组全体成员经历了一段刻骨铭心的战斗时光.我们每天开会,谈流程,展示全球模板,找GAP.K项目是以客户总部的 ...
- #51CTO学院四周年#让学习成为习惯
1.名称的由来 2015年,在51CTO论坛安家,因为对linux有很高的兴趣,所有,注册了账号:Shell_2015,想好好学习linux.但,实际上,可能shell技术只是打酱油的水平吧.. 2. ...
- 2017-2018-1 20155328 《信息安全系统设计基础》第十四周学习总结
2017-2018-1 20155328 <信息安全系统设计基础>第十四周学习总结 本周学习任务是找出自己本学期学得最差的一章,重新学,总结新的收获.我认为自己学得最差的一章是教材第七章& ...
- 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
对专业设计人士来说,性能强劲的硬件配置固然重要,然而有一台能够准确表达自己想法的显示器才能事半功倍,如虎添翼.为此,飞利浦面向商用企业用户特别推出了飞利浦256P1FR显示器,采用QHD 2K AH- ...
- 2019年春季学期第四周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...
最新文章
- 【Network Security!】Ubuntu18.04切换到root权限和sudo
- 释疑のABAP内表的比较
- 玩转Linux压缩及归档
- 腾讯视频下载安装_如何上传视频到腾讯视频平台
- 硬核评测:企业上云的极速存储挑战,华为云全新极速IO云硬盘性能评测
- vue组件库(一):前期准备工作
- ## CSP 201609-2 火车购票购买,C语言版(90分版)
- solaris系统中的’format’程序
- 走自己的路,记得回头看看
- python可以做哪些小工具_用Python写过哪些「脑洞大开」的小工具?
- hdu 6129	 Just do it
- Java高并发程序设计学习笔记(十):并发调试和JDK8新特性
- mysql 数据备份 crontab
- 5.1索引压缩-词项的统计特性(Heaps定律、Zipf定律)
- Ubuntu(Linux) 磁盘分区方案
- 根据时间经纬度高程计算天顶角
- C++编码规范与指导
- Mac 软件和学习经验分享
- CoreOS在儿童节发布了自己的分布式存储Torus
- 【UE】Unreal Engine虚幻引擎自己的入门记录