软件工程结对编程:IP GeoLocation Module for Academic Map
概述
这篇报告是对一个结对编程项目的总结。我(林萌)和李亚韬同学共同完成了这个项目。
项目的目标是在用户访问Academic Map的时候通过用户的IP来获得用户的地理位置信息,以重新定位地图,将用户所在的地点设为当前显示的中心。这个功能在许多网络地图上都有,比如Bing Map,Google Map等等。经过长时间的调研我们最终找到了两种解决办法。
Method 1
使用W3C Geolocation API, 这个API是由World Wide Web Consortium (W3C)提供的一个标准接口,用于获得用户的地理位置信息(geographical location information)。这个API被广泛的接受,Firefox从version 3.5版开始支持, Google Chrome, Opera 10.6, Internet Explorer 9.0, and Safari 5也都支持这个API。而且他的使用相对简单,只需要嵌入一段JavaScript就行了。
WBS Construction
Method 2
使用免费的IP-Location数据库。并不是所有的浏览器都支持W3C GeoLocation API, 所以我们希望再增加一套备用方案,当Method 1失败的时候自动启用。我们从MaxMind网站上找到了这么一个免费的IP-Location数据库,实验结果表面数据库精度也还可以,但与W3C的比起来还是有一定差距的。
WBS Construction
Method2 所需要的部件与1基本相同,我们用一个自己写的WCF Service来代替W3C Geolocation API,Silverlight的部分基本可以复用。
Cost
Method 1
这个方法最大的困难在于整合JavaScript 和 Silverlight, Cost列表如下:
Estimate | Actual | |
JavaScript | 0.5 hour of Search |
Just wiki page is OK It took 10 minutes to rewrite something similar to the wiki example. |
Silverlight |
0.5 hour to understand how to work with JS 1 hour for the Buttons and Map |
1 hour about using JS, mysterious bugs 1 hour about Buttons and Map, even a Storyboard showing a fading message when failure. |
Method 2
这个方法的困难在于快速查找IP-Location表格,Cost列表如下:
Estimate Actual IP GeoLocation Service 1 hour to learn how to use service
1 hour to prepare database
1 hour to implement a fast algorithm for database lookup
Fast, WCF service is easy to learn
Half a hour for a binary search in database
Silverlight 0.5 hour to re-use buttons and map controller of Method 1
0.5 hour Failure handler and access to server
nearly all reuse,fast
总的来看,最大的时间开销还是在调研上面,我们花了接近两天的时间来找一个合法的,稳定的,快速的解决方案。
结果
从以下几个方面来分析结果:
1.稳定性
程序运行稳定,明确的处理了异常情况。
2.准确性
W3C Geolocation API的准确性无需质疑。免费的IP-Location数据库准确性难以估计,官方的claim是有97%的准确性。
3.可维护性
对于W3C的接口,代码一旦完成就不需要维护了,数据有远程的服务提供。
免费的IP-Location数据库是静态的,需要更新。
4.效率
W3C标准接口飞快无比,一旦失效将启动静态数据库方案。我们使用的Binary Search可以保证时间和空间消耗的平衡。
运行截图(中间五角星的就是用户的坐标,公司的IP出口在Redmond附近)
工作截图
我对结对编程的看法:
有利有弊。两个人同时工作提高了我们克服困难的勇气。开始的时候苦于找不到合适的IP服务,非常纠结。但后来喝喝茶,扯扯淡突然一下子也就解决了。技术上的困难花点时间都可以解决。不好的地方在于两个人都要挤出时间来,而且中间最好不要插入个人的工作。有个地方亚涛自己加入了代码,我当时不在,结果后来我Merge代码的时候出了些问题,多花了不少时间。
About my partner
工作上的好帮手,和我一起工作到深夜一两点钟,工作刻苦。没什么需要改进的了啊少年。
Thanks,
By 林萌