项目 | 2016级计算机科学与工程学院软件工程(西北师范大学) |
这个作业的要求在哪里 | 实验二 软件工程个人项目 |
课程学习目标 | 尝试按照《构建之法》第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发。 |
本次作业在哪个具体方面帮助我们实现目标 | (1)掌握软件项目个人开发流程。(2)掌握Github上发布软件项目的操作方法。 |
点评信息
点评博客: | 201671010449 杨天超 实验二英文词频统计设计步骤 |
Github链接地址: | https://github.com/369BRabc/simple- |
点评内容: | 通读全文后,感觉报告层次清晰,语言严谨,对于开发当中对于用户的需求做了很深层次的分析,对于设计实现步骤分明,总结当中能够指明在开发过程中所遇到的问题和自身的不足。唯一瑕疵就是文章排版当中存在一点问题,希望继续努力,加油! |
点评心得: | 在自己的博客中还有着很多问题,在通过浏览他的博客时,一部分问题得到解决,对于Java的了解也进一步加深。 |
1、序言
在上一次的作业中,我们提到了使用Java语言去编写词频统计的系统开发,在每一步的开发过程中我们遇到了一系列问题,有一些耽误了我们开发的进度,另一些则导致我们对逻辑产生误解,下面我们会结合实验四的实验要求将问题一一提出并加以解决。
2、结对项目过程
两两结对后对对方实验二的博客进行了分析和评论,并对实验四的任务要求做了分析,在实验二的基础上我们还需要添加以下几点功能:
(1)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(2)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(3)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
(4)附加分功能:统计前10个两个单词组成的词组频率。
3、软件优化过程
核心代码展示
public static void main(String[] args) throws Exception {
try{
File file =new File("e:\test.txt");
if(file.exists()){
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);
int linenumber = 0;
int zifu = 0;
while (lnr.readLine() != null){
linenumber++;
java.util.Scanner sc=new java.util.Scanner(file);
String str=sc.next();
zifu = zifu + str.length();
}
System.out.println("行数 : " + linenumber);
System.out.println("字符:"+ zifu);
lnr.close();
}else{
System.out.println("File does not exists!");
}
}catch(IOException e){
e.printStackTrace();
}
Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //存储单词计数信息,key值为单词,value为单词数
//单词的词频统计
for (String li : lists) {
if(wordsCount.get(li) != null){
wordsCount.put(li,wordsCount.get(li) + 1);
}else{
wordsCount.put(li,1);
}
}
SortMap(wordsCount); //按值进行排序
}
//按value的大小进行排序
public static void SortMap(Map<String,Integer> oldmap){
ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue(); //降序
}
});
4、PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 15 | 40 |
Estimate | 估计这个任务需要多少 时间,并规划大致工作步骤 | 15 | 40 |
Development | 开发 | 40 | 60 |
Analysis | 需求分析 (包括学习新技术) | 10 | 10 |
Design Spec | 生成设计文档 | 15 | 10 |
Design Review | 设计复审 (和同学审核设计文档) | 3 | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 3 | 3 |
Design | 具体设计 | 20 | 25 |
Coding | 具体编码 | 30 | 60 |
Code Review | 代码复审 | 15 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 25 | 20 |
Reporting | 报告 | 25 | 30 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 10 | 10 |
在实验二的过程中:
(1)计划阶段的不同意,在计划阶段我们原本打算花15分钟计划处出一个大致的流程,但因为意见的不统一和自身技术的缺陷而导致花了40分钟。
(2)开发阶段,是让我意识到自己的短板的时期,因为对代码的不熟悉,以及对于整体构造的不完美,导致花了大量的时间编写代码。
(3)需求分析是已知的,但需要整理转换为我们所需要的步骤要求。
5、在GitHub的实际操作过程中所遇到的问题和一些建议
(1)全英文界面对于英语基础低的同学去正确使用有着不小的困难,建议使用Chrome浏览器进行网页翻译。
(2)文件无法上传的问题:
https://www.cnblogs.com/wyl090512/p/9887795.html
6、实验四的完成进度
任务一已经完成,已进行结对,博客互评,对于博文内容,优缺点,博文结构做了详细的分析。从GitHub中克隆了对方源码到本地进行阅读分析,从而弥补自我编写代码的不足。
任务二柱状图没有实现,还需要再进一步的学习。已可以统计文本的字符数以及行数,可以导入任意英文文本。使用HTML制作web交互界面。在本次任务中,我们实现了实验中的互相学习,对于我们基础薄弱的同学有了很大的提升。