2018年3月29日23:59 php
要求html
1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的全部文件)统计字符数、单词数、行数、词频,统计结果以指定格式输出到默认文件中,以及其余扩展功能,并可以快速地处理多个文件。java
2. 使用性能测试工具进行分析,找到性能的瓶颈并改进git
3. 对代码进行质量分析,消除全部警告github
http://msdn.microsoft.com/en-us/library/dd264897.aspx编程
4. 设计10个测试样例用于测试,确保程序正常运行(例如:空文件,只包含一个词的文件,只有一行的文件,典型文件等等)windows
5. 使用Github进行代码管理编程语言
6. 撰写博客 工具
基本功能post
1. 统计文件的字符数(只须要统计Ascii码,汉字不用考虑)
2. 统计文件的单词总数
3. 统计文件的总行数(任何字符构成的行,都须要统计)
4. 统计文件中各单词的出现次数,输出频率最高的10个。
5. 对给定文件夹及其递归子文件夹下的全部文件进行统计
6. 统计两个单词(词组)在一块儿的频率,输出频率最高的前10个。
7. 在Linux系统下,进行性能分析,过程写到blog中(附加题)
注意:
a) 空格,水平制表符,换行符,均算字符
b) 单词的定义:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
英文字母:A-Z,a-z
字母数字符号:A-Z,a-z,0-9
分割符:空格,非字母数字符号
例如:”file123”是一个单词,”123file”不是一个单词。file,File和FILE是同一个单词。
若是两个单词只有最后的数字结尾不一样,则认为是同一个单词,例如,windows,windows95和windows7是同一个单词,iPhone4和IPhone5是同一个单词,可是,windows和windows32a是不一样的单词,由于他们不是仅有数字结尾不一样
输出按字典顺序,例如,windows95,windows98和windows2000同时出现时,输出windows2000
词组的定义:windows95 good, windows2000 good123,能够算是同一种词组。按照词典顺序输出。三词相同的情形,好比good123 good456 good789,根据定义,则是 good123 good123 这个词组出现了两次。
c) 输入文件名以命令行参数传入。须要遍历整个文件夹时,则要输入文件夹的路径。
d) 输出文件result.txt
characters: number
words: number
lines: number
<word>: number
<word>为文件中真实出现的单词大小写格式,例如,若是文件中只出现了File和file,程序不该当输出FILE,且<word>按字典顺序(基于ASCII)排列,上例中程序应该输出File: 2
e) 根据命令行参数判断是否为目录
f) 将全部文件中的词汇,进行统计,最终只输出一个总体的词频统计结果。
项目管理
1. 分析整理需求,完成PSP表格
PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 我的开发流程,或称个体软件过程)。
一个功能完备的程序不是一蹴而就的。经过将词频统计的需求划分为4个部分,可将一个大任务划分为可操做的小任务,同时最好按照任务难度或紧急程度指定各个任务的完成次序。所以,在动手开发以前,要先估计将在程序各模块开发所需耗费的时间,以及完成整个项目所需的时间,将这个[估计值]记录下来,写成PSP 的形式。
PSP的目的是:记录工程师如何实现需求的效率,和咱们使用项目管理工具(例如微软的Project Professional,或者禅道等)进行项目进度规划相似。
有关PSP的更多内容,请自行阅读邹欣老师的博客:
http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
PSP可用teambition工具制做
2. 使用Github进行代码管理
使用PSP作好规划以后,第二步固然是进行编码实现,此时,除了选择合适的编程语言,还须要学会良好的源代码管理。
请阅读邹欣老师的博客:源代码管理,了解源代码管理的10个实践问题。
本次做业要求使用Github进行源代码管理,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
对代码签入的具体要求以下:根据需求划分功能后,每作完一个功能,编译成功后,应至少commit一次。本例中,至少应区分基本功能和扩展功能,即分别针对基本功能、扩展功能,编译成功后,总共至少应commit两次。具体的功能划分,请自行定义,并在撰写博客时体现出来,遵循本身对需求的功能划分来提交代码便可。
对Commit不是很熟悉的话,请阅读阮一峰的博客:Commit message 和 Change log 编写指南,了解更多细节。
3. 设计测试用例,编写单元测试
做为一门测试的课程,测试才是重点。请根据本身以往积累的测试经验,结合本周介绍的测试用例设计方法,在编码完成以后,提交产品以前,设计测试用例,并编写单元测试,对本身的项目进行测试。
首先,至少应采用白盒测试用例设计方法来设计测试用例,其余测试方法不限。其次,要设计至少10个测试用例,确保你的程序可以正确处理各类状况。最后,结合测试评估的要求,对本身的测试设计进行评价,这些测试用例能知足该程序测试的要求吗?
另外一个重要的措施是要把单元测试自动化,这样每一个人都能很容易地运行它,而且可使单元测试天天都运行。每一个人均可以随时在本身的机器上运行。团队通常是在每日构建中运行单元测试的,这样每一个单元测试的错误就能及时被发现并获得修改。
推荐阅读邹欣老师关于单元测试和回归测试的博客:
http://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html
博客要求
1. 需求分析,估计各部分所需时间,给出PSP表格
2. 记录实际完成各部分时间
3. 对代码质量和性能进行分析
4. 测试用例设计和分析过程
5. 描述你在次项目中得到的经验
评分标准
1. 统计文件的字符数(2分)
2. 统计文件的单词总数(2分)
3. 统计文件的总行数(2分)
4. 统计文件中各单词的出现次数(2分)
5. 对给定文件夹及其递归子文件夹下的全部文件进行统计(4分)
6. 统计两个单词(词组)在一块儿的频率,输出频率最高的前10个(4分)
以上六个结果输出错误则对应子任务得-2分,所有输出正确则按运行时间肯定排名(用时按升序前30%得满分16分,30%-70%得15分,后30%得14分)。
7. 博客撰写(代码实现过程,性能分析、优化报告等)(4分)
8. 在Linux系统下,进行性能分析,过程写到blog中(附加题,2分)
代码提交地址:
https://github.com/eudaem/homework1
注意:做业延迟,1周内补交,0分;不交做业-10分。