《软件工程》individual project开发小记(一)
今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c++和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一放去看看邹老师以前的软工博客以及学长学姐们的经验,现在这里稍微总结一下.
1) Before you implement this project, Record your estimate about the time you WILL spend in each component of your program.
做这个项目之前,因为之前从没有系统的进行过从需求分析到编码到性能分析的开发过程,所以对各项工作所预计的时间估计不足
需求分析
这项工作主要用来分析整个项目到底要做什么,每项工作的大致实现方式,预计是用半个小时左右的时间
编写代码
预计用3个小时左右的时间
性能分析
预计用1个小时左右的时间
2) After you had implemented this project, record the ACTUAL time you spent in each component of your program.
目前为止,需求分析和编码工作已经基本完成,然后所用的时间已经远远超出想象
现在是周五下午3:40分,我昨天晚上将代码完善了一下,采用了hash表的方法来存储word,对于每一个word利用大素数求一个hash值,对于hash值相同的word我用一个链表来存,为了实现word按照频度排序,最后将链表中的word都提取出来放入一个数组中进行关键字排序就好.这样时间复杂度接近O(1);我从花园上下了一个133M左右的英文txt小说合集作为测试样本,发现程序总是崩掉,后来终于发现是我的大素数不够大,存储空间太小,我将大素数改为50W以内的最大素数后顺利解决了这个问题
需求分析
前期的需求分析明显不足,导致许多工作在编码过程中需要补充,加上在整个编码过程中零零散散的一些时间,这项工作实际大概运行了90分钟左右
编写代码
编码中遇到的一个最大的问题是从dev c++上移植到vs2012,由于vs2012的代码安全性检查较为严格,而本次项目要求不出现warning,因此在许多地方都需要改用最新建议使用的函数,这里就花费了大量的时间查找函数说明;由于对vs2012的不够熟悉也花费了一些时间;还有一点就是对于word的存储,由于每当读入一个新的word时需要判重,我最初考虑是用map来实现,但代码编写过程中发现不会使用map对string和int两个关键字进行双关键字排序...这里牺牲了代码的效率最后改用了sort编写cmp函数,这个地方留到性能分析的时候考虑用更快的方法来实现.整个编码过程实际用时在270分钟左右.
以上是昨天总结的
昨晚我又对addword函数进行了重写,采用hash的方法,大概用了两个小时的时间;今天上课的时候在思考出错的原因,下午调试了一个小时左右
性能分析
预计用1个小时左右的时间
3) Describe how much time you spent on improving the performance of your program, and show a performance analysis graph (generated by VS2012 perf analysis tool), if possible, please show the most costly function in your program.
开始时我用遍历数组的方法判重,这样每次读入一个单词都需要O(n)的时间去查找显然不行,昨天晚上我想到了用hash的方法,编码+今天的调试大概用了5个小时的时间.
以下是我的performance analysis graph:
最占时间的应该就是Input函数了,它负责从目录中识别目的文件并读取,不过说实话这个性能分析自己还不太会用。。。好多dll文件怎么冒出来的还不太明白是什么东西..
今天是9月15日,我搜索了一下“无法查找或打开 PDB 文件”的解决方法之后得到如下性能分析图,感觉比以前慢了好多。。。难道是因为加载那些什么.dll文件么...不太懂.
深入分析函数性能
读文件夹还算不太占时间
最耗时的是读字符和将word加入的判重工作
就是这样。。
6:14分左右的时候。。。又跑了一遍。。。速度更快了。。分析原因是这样。。样本文件没有变,但由于之前的样本是放在深层的文件夹中,递归花了一些时间(这么有影响么。。)。。这次只有12S左右,nice .
4) Share your 10 test cases, and how did you make sure your program can produce the correct result. (programs with incorrect result will get 0 points, regardless of speed)
测试用例我自己设计了五组,test1用来测试各种文件类型,test2用来测试空文件夹,test3用来测试空文件,test4用来测试100M+的文件夹,test5模拟实际的文件夹结构+100M+文件夹,其他五组测试用例我决定使用其他同学的用例,通过与其他同学的代码结果对拍,我认为我的代码能够正确且比较高效的完成项目需求.
5) Describe what you had learned in this exercise.
1.学到的第一点就是递归遍历指定目录下的所有文件.以前只会单纯的用文件指针或者输入输出重定向来访问单个文件,而在这个项目中学到了在windows和unix下利用一些api来实现递归遍历指定目录下的所有文件.
2.学到了一些由于指针安全性而引发的vs2012的安全性检查,并了解了诸如strcpy,fopen等函数的替代函数
3.vs2012中一些问题的解决方法,例如:http://blog.csdn.net/chw1989/article/details/7482205
4.字符串哈希,尤其是学会了链地址法.
5.初步了解了vs2012进行preformance analysis.
PS:需求改了要提前说啊。。。今天刚刚看到需求又改了。。。
《软件工程》individual project开发小记(一)的更多相关文章
- 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]
软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题] 首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度 ...
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]
软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...
- NodeJS+Express+MySQL开发小记(2):服务器部署
http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过 ...
- Note: SE Class's Individual Project
虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...
- 带农历日历的DatePicker控件!Xamarin控件开发小记
原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePi ...
- 软件工程个人项目作业 Individual Project
利用Junit4进行程序模块的测试,回归测试 源码 https://github.com/dpch16303/test/blob/master/%E5%9B%9E%E5%BD%92%E6%B5%8B% ...
- 微软颜龄Windows Phone版开发小记
随着微软颜龄中文网cn.how-old.net的上线,她也顺势来到了3大移动平台. 用户在微软颜龄这一应用中选择一张包含若干人脸的照片,就可以通过云计算得到他们的性别和年龄. 今天我们就和大家分享一下 ...
- Individual Project Records
At the midnight of September 20, I finished my individual projcet -- a word frequency program. You c ...
随机推荐
- JSON生成c#类代码小工具(转)
原文地址: http://www.cnblogs.com/tianqiq/archive/2015/03/02/4309791.html
- jquery通过ajax方法获取json数据不执行success
1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...
- LaTeX测试
首先输出个\(\LaTeX\ \),看上去非常高端! 然后上论文,测试以后发现不行QAQQQ 貌似只能插入一个公式来着...比如:$\theta(\vec{u},\ \vec{v}) = arccos ...
- oracle表分区【转】
摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用. 在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十 ...
- / etc / init.d / iptables: line 268: restorecon: command not found
When I tried to restart iptables from vps , I got the following error. Iptables encountered such a p ...
- eclipse 连接 mysql
1.下载驱动. 2.eclipse->add extend jars -> 添加驱动. 3.测试: 在mysql 建立数据库和表,在eclipse 里对数据库进行操作. 代码: mysql ...
- Entity Framework系列
这个系列主要记录学习EF的过程和碰到的问题以及解决问题的方法. EF中的那些批量操作 EF的Model First
- ajax使用jquery的实现方式
1.jquery的ajax方法. $("#ajaxbtn").click(function(){ $.ajax({ url:"json.do", beforeS ...
- 伪命题:PHP识别url重写请求
手上有一个网站,然后启用了伪静态,因为一些设置上的原因,一段时间后,发现收录的都是.php的文件,而启用的伪静态地址则收录很少,在更改设置后,想尽快去掉.php的收录,然后想将.php的地址转向.ht ...
- MySQL使用随笔
001 查看版本 mysql --version mysql > select version(); mysql > status; 002 新建MySQL用户.授权 insert int ...