今天周四没有想去上的课,早八点到中午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:需求改了要提前说啊。。。今天刚刚看到需求又改了。。。

转载于:https://www.cnblogs.com/oldoldb/p/3316865.html

《软件工程》individual project开发小记(一)相关推荐

  1. 微信公众号开发小记(二)--服务器验证

    这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...

  2. 微信公众号开发小记——4.两种邀请用户的方式 扫码链接

    描述 假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式,1.直接一个连接,让 ...

  3. 移动端Web开发小记

    之前为公司商旅频道写移动端的页面时遇到不少问题,今特来个总结,希望能为后来者带来一些帮助. 不再考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是IOS和Android系统,so,在开发此 ...

  4. iOS Workspace内多project开发

    前言 hihi,勇敢的小伙伴儿们大家好,好久不见!之前我写过一篇"多target开发"内容的文章,当时是第一次看见同事大哥哥用多target这种方式实现项目多地区的开发,大大地提高 ...

  5. java 横版游戏开发_用MyEclipse的Java Project开发仿DNF横版格斗游戏

    这些天,我正在用MyEclipse的Java Project开发一款仿DNF 横版格斗游戏. http://v.youku.com/v_show/id_XMTI5MTE0NDg4MA==.html 这 ...

  6. 麻雀虽小,五脏俱全——由C语言小程序深入学习软件工程和设计开发规范

    苏思畅 - 原创作品转载请注明出处 - <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 一.课程 ...

  7. 软件工程系列- 软件开发的可行性研究

    软件工程系列 - 软件开发的可行性分析 软件开发过程中的可行性是指,软件开发过程中,在各种软件开发环境下,用最小的代价在尽可能短的时间内确认问题是否能够解决. 软件可行性一般可以从这几个方面进行分析: ...

  8. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  9. Microsoft Project 开发

    一直一来,市面上关于Project开发的中文资料基本没有,本博客从一个Project开发初学者者的角度(当然前提条件是要对Project产品有一点了解,对项目管理理念有一点印象,对C#有一定了解),详 ...

最新文章

  1. Could not find a version that satisfies the requirement pox=0.2.6 (from pathos)
  2. 我们用最详细的方式解析Android消息机制的源码,经典好文
  3. AVL树(一)之 C语言的实现
  4. 神策数据陈宁:前端国际化技术需求及模型实现
  5. 消除左递归c++代码_【每日算法Day 85】图解算法:一行代码解决约瑟夫环的变体...
  6. kettle大于0的转换成1_第一期实训周:基于Python+MySQL+Kettle+R的某网站数据采集分析...
  7. 关于Centos7启动,ens33无IP问题解决
  8. 算法分析之对问题建模
  9. dax powerbi 生成表函数_Power BI应用技巧:如何为DAX建的表添加索引?
  10. Vue组件自定义事件
  11. 【渝粤题库】陕西师范大学800003 中国地理
  12. VNPY思维导图架构
  13. APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法
  14. VS2012安装步骤
  15. 51单片机用C语言实现交通灯(红绿灯)源程序实训QY-KP1
  16. h5分享到微信唤起app功能
  17. 机器学习与分布式机器学习_机器学习-什么是机器学习?
  18. Base16,Base32,Base64编码详细学习
  19. 微信小程序-敏感内容检测 文本过滤 图片检测
  20. No OraCM running

热门文章

  1. Linux中断 - tasklet
  2. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论...
  3. Angularjs 动态添加指令并绑定事件
  4. js 日期控件laydate使用
  5. Android 自定义View以及ValueAnimator学习
  6. 手动添加mysql服务
  7. 如何在Word里面自动生成目录
  8. 【计算机网络】wireshark数据流追踪、图像抓取(转)
  9. python中itsdangerous模块
  10. Python 内置模块之 ConfigParser - 解析 ini 文件