1.My Github

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
· Planning · 计划 30 40
· Estimate · 估计这个任务需要多少时间 180 240
· Development · 开发 200 180
· Analysis · 需求分析 (包括学习新技术) 200 300
· Design Spec · 生成设计文档 160 200
· Design Review · 设计复审 20 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)
· Design · 具体设计
· Coding · 具体编码
· Code Review · 代码复审
· Test · 测试(自我测试,修改代码,提交修改)
· Reporting · 报告 40 60
· Test Repor · 测试报告
· Size Measurement · 计算工作量 12 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 20
· 合计 862 1085

3.设计

  • 难度分级;
  • 提取Name And Tel得到预处理地址
  • 处理剩下的预处理地址
    • 由于没有搜到准确的全国乡镇街道级数据集,故各级地址一律调用高德API进行提取
    • 鉴于前两级难度(可为空情况)的题目,以提取的地址数据与预处理地址进行比对

4.实现

  • nameProcessing()方法:提取Name And Tel;
  • addressGetting()方法:通过高德API地理编码与与逆地理编码进行提取;
  • simpleProcessing()方法:通过数据对比解决前两级难度题目;
  • 调用fastjson.jar进行json数据格式输出;

5.性能分析

  • 使用Eclipse官方插件MAT(Memory Analyzer):该插件主要用于内存分析–分析heap dump是否存在内存泄漏
  • MAT工具分析了heap dump后在界面上非常直观的展示了一个饼图,该图深色区域被怀疑有内存泄漏,可以发现整个heap才4.5M内存,深色区域仅占了26.7%。接下来明确指出system class loader加载的”java.lang.Thread”实例有内存聚集,并建议用关键字”java.lang.Thread”进行检查。
    对于这个问题我看了很多文章,我发现java新手所作的程序很容易引起”java.lang.Thread”实例有内存聚集,具体的原因很可能是有些类实现该Object.finalize()方法。重写此方法的对象需要由后台线程调用终结器调用,并且在这种情况发生之前无法清理它们。如果这些任务很短,而且不会丢弃其中的许多,那么这一切都会很好。但是,如果要创建大量这些对象和/或它们的终结器需要很长时间,则需要完成对象的队列。主要原因还是学习经验不足,代码设计时未进行完善的内存分析,而在调用一些javaLib时不清楚该方法需要人为关闭,导致调用该方法已经结束,而该方法随着main一直运行并占用一定内存。果然三脚猫功夫的问题还是很多!基础应该够扎实才能开始深入。说白了就是太菜了还不够强,希望大家多多提点!

6.单元测试

  • 测试样例:
    <font color=#E9967A size=3face=”微软雅黑”>1!苗朽蕾,13884441418湖北省孝感市云梦县方庙村村委会.
    1!晏孔,重庆巫山13097181946县大昌镇洋溪村便民超市.
    1!荆麻,13282875332天津市北淮淀镇乐善庄村乐善庄小学.
    1!诸葛宁盛,河南省15613629652焦作市山阳区定和街道塔南路287号新兴日化.
    1!冯昔唉,安徽省合肥市庐江县郭河镇G3京台高18835354291速合肥市庐江县广寒桥街道.
    1!百里屏闷,广西壮族自治区桂林市灵川县潭13315249688下镇004乡道灵川县潭下镇大义村民委员会.
    1!徐扼负,天津市河北区月牙河街道大江里58号楼13289199578.
    2!凤干挨,辽15559696768宁抚顺市新抚区新抚街道福民路41号双桥社区北区.
    2!詹鸵,天津市南开区万兴街道白堤路164号风荷15224524195东园5号楼.
    3!蔺脚贺,湖南省娄底市冷水江市石槽村三尖镇15581828223人民政府.

  • 测试代码:

import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;

public class MainTest {
	File file2 = new File("input.txt");
	Scanner input = new Scanner(file2);
	@Before
	
	public void setUp() throws Exception {
	}

	

	@Test
	public void testNameProcessing() {
			while (input.hasNext()) {
				String string = input.next();
				Main.nameProcessing(input);
			}
		fail("Not yet implemented");
	}

	@Test
	public void testAddressGetting() throws Exception {
			while (input.hasNext()) {
				String string = input.next();
				String address = Main.nameProcessing(input);
				address = Main.locationProcessing(address);
				Main.addressGetting(address);
			}
		fail("Not yet implemented");
	}

	@Test
	public void testLocationProcessing() throws Exception {
			while (input.hasNext()) {
				String string = input.next();
				String address = Main.nameProcessing(input);
				address = Main.locationProcessing(address);
			}
	}
}
  • 测试结果:
    <font color=#E9967A size=3face=”微软雅黑”>{
    “地址”:[
    “湖北省”,
    “孝感市”,
    “云梦县”,
    “”,
    “方庙村村委会”
    ],
    “姓名”:”苗朽蕾”,
    “手机”:”13884441418″
    },{
    “地址”:[
    “重庆”,
    “重庆市”,
    “巫山县”,
    “大昌镇”,
    “洋溪村便民超市”
    ],
    “姓名”:”晏孔”,
    “手机”:”13097181946″
    },{
    “地址”:[
    “天津”,
    “天津市”,
    “”,
    “北淮淀镇”,
    “乐善庄村乐善庄小学”
    ],
    “姓名”:”荆麻”,
    “手机”:”13282875332″
    },{
    “地址”:[
    “河南省”,
    “焦作市”,
    “山阳区”,
    “定和街道”,
    “塔南路287号新兴日化”
    ],
    “姓名”:”诸葛宁盛”,
    “手机”:”15613629652″
    },{
    “地址”:[
    “安徽省”,
    “合肥市”,
    “庐江县”,
    “郭河镇”,
    “G3京台高速合肥市庐江县广寒桥街道”
    ],
    “姓名”:”冯昔唉”,
    “手机”:”18835354291″
    },{
    “地址”:[
    “广西壮族自治区”,
    “桂林市”,
    “灵川县”,
    “潭下镇”,
    “004乡道灵川县潭下镇大义村民委员会”
    ],
    “姓名”:”百里屏闷”,
    “手机”:”13315249688″
    },{
    “地址”:[
    “天津”,
    “天津市”,
    “河北区”,
    “月牙河街道”,
    “58号大江里楼”
    ],
    “姓名”:”徐扼负”,
    “手机”:”13289199578″
    },{
    “地址”:[
    “辽宁省”,
    “抚顺市”,
    “新抚区”,
    “新抚街道”,
    “福民路”,
    “41号”,
    “双桥社区北区”
    ],
    “姓名”:”凤干挨”,
    “手机”:”15559696768″
    },{
    “地址”:[
    “天津”,
    “天津市”,
    “南开区”,
    “万兴街道”,
    “白堤路”,
    “164号”,
    “风荷东园5号楼”
    ],
    “姓名”:”詹鸵”,
    “手机”:”15224524195″
    },{
    “地址”:[
    “湖南省”,
    “娄底市”,
    “冷水江市”,
    “三尖镇”,
    “”,
    “”,
    “石槽村人民政府”
    ],
    “姓名”:”蔺脚贺”,
    “手机”:”15581828223″
    }
  • 代码覆盖率
    利用Eclipse自带的Coverage测出

    结果发现,未覆盖及少量覆盖代码行均为抛异常

注:为减少页面长度有一些常规方法如extractRegular():正则提取地点规范方法。此类修整方法均未在代码段展出。

7.异常处理

  • 1
	if(matcher.find())
	{
		tel = matcher.group();
	}else System.out.println("手机号码丢失");
	//手机缺失
  • 2
switch(input) {
	default:System.out.println("难度缺失");
}
//难度缺失

版权声明:本文为hsdlr原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hsdlr/p/11608947.html