作业地址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2139

一、效能分析(35分)

对【第1次作业】中功能3(仅对“wf -n 数量 -c 文件名”)做效能分析,以https://coding.net/u/Dawnfox/p/First/git/blob/master/wf/war_and_peace.txt作为测试文件,请自行下载测试文war_and_peace.txt。文件名为:war_and_peace.txt;数量:10。
关于单词总量的问题,假定以WORD统计《war_and_peace.txt》568286单词为正确值(实际按照作业要求统计war_and_peace.txt的单词数不一定是568286),你所测得的单词总数可能在这个数值附近,也许你的程序就是正确的。

要求0

git项目名称:wfAnalysis
git地址形式https://git.coding.net/XXX/wfAnalysis.git
项目目录
/wf/wf.exe (此文件名要求必须是wf.exe。java或python代码,请编译为exe。)
/wf/wf.cs (wf源代码,文件名也可能是wf.cpp,wf.c,wf.py,wf.java)
/wf/??? (wf源代码所依赖的其他文件,如果存在的话。)
wf.exe需要由你自己的代码编译得到。wf.cs (或其他语言源代码) 与wf.exe如果不能对应,则此次作业倒扣所有分数。
请注意助教或教师会使用脚本pull每个人的项目,如果你在博客中给出的链接不符合目录要求而导致脚本无法获取你的项目,那么效能分析得分为0分。

要求1(5分)

  • 以war_and_peace.txt作为测试文件,连续三次运行,给出每次消耗时间。
  • 猜测程序的瓶颈,为什么你认为此处会是瓶颈?你认为优化后的程序能得到怎样的效果?
    存在同学无法理解什么叫程序的瓶颈。那么我们在此次作业中,约定“程序瓶颈“为代码中执行效率最差(即耗时长)的部分代码(可能是某个函数、可能是采用错误的数据结构,例如例如用单链表来处理很多数据的查询等)。

要求2(5分)

  • 通过 profile 找出程序的瓶颈,请分析为什么此处为程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图,无截图此题不得分。
  • 如何解决当前的瓶颈?

要求3(5分)

  • 再次profile,给出要求2中最花费时间的3个函数(或代码片断)此时的耗时。要求包括截图,无截图此题不得分。
  • 再次按照要求1,给出程序优化后,以war_and_peace.txt作为测试文件,连续三次运行,每次消耗时间。

要求4(20分)

教师或助教会用脚本遍历所有同学git工作目录下/wf/wf.exe,以war_and_peace.txt作为输入文件,数量为10,每位同学连续测试三次,取最短时间作为排名依据。教师或助教机器版本为Windows10,以附录中提供的ptime.exe作为测速工具。排名分为3个层次,第1档(第1第3)得20分;第2档(第4第13)得10分;第3档(剩下的同学)得5分。功能测试不能通过,得0分。

附录

1.工具

Windows系统请使用 ptime.exe。下载链接:[https://coding.net/u/younggift/p/word_count_demo/git/blob/master/ptime.exe]。
运行方法

ptime wf -n 10 -c war_and_peace.txt

Linux推荐使用 time,用法参见操作记录[https://coding.net/u/younggift/p/word_count_demo/git/blob/master/testcase.log.txt]。

2.效能分析参考资料

博客1:北航刘老师博客,测试工具、测试环境、瓶颈:http://www.cnblogs.com/SivilTaram/p/software_pretraining_cpp.html#part6.%E6%95%88%E8%83%BD%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D
博客2:邹欣老师博客,效能分析:[http://www.cnblogs.com/xinz/archive/2011/11/20/2255809.html]
博客3:白马学软件开发,Python中使用cProfile:http://www.cnblogs.com/xiadw/p/7455513.html
博客4:助教博客,Nunit测试:https://www.cnblogs.com/ranh941/p/7629279.html
博客5:东师往届李学长博客,jvisualvm:http://www.cnblogs.com/liquan/p/5874172.html
博客6:东师往届刘学长博客,C#词频统计:http://www.cnblogs.com/WeSure6/p/5275715.html
参考书籍0:《构建之法》第三版章节2.2,效能分析工具

二、自我评估(15分)

在你一生中身体最健康,精力最旺盛的时候,能在大学学习和研究,是一生中少有的机会。请说明一下,你已经具备的专业知识、技能、能力有哪些?离成为一个合格的 IT专业毕业生,在专业知识、技能、能力上还差距哪些?请看这个技能调查表http://www.cnblogs.com/xinz/p/3852177.html, 从表中抽取 5 - 7 项你认为对你特别重要的技能, 记下你目前的水平, 和你想在课程结束后达到的水平 (必须至少列出 5 项)。

要求0

回答问题言之有物,表达清楚,不敷衍了事(比如一行笼统文字或者有图片而不对图片内容作解释等),以上标准由助教和教师判定。

请注意:我们(本校或外校教师或助教)对于你的作业和项目的任何评价,都不是对你的价值观或道德的评价,而是在我们对软件工程学科的理解基础上,对你的工作的评论。