软件工程寒假作业(2/2)
这个作业属于哪个课程 | 2021春软件工程实践S班 |
---|---|
这个作业要求在哪里 | 软件工程寒假作业(2/2) |
这个作业的目标 | 阅读《构建之法》并提问以及完成词频统计个人作业 |
GitHub地址 | Github项目地址 |
其他参考文献 | 无 |
目录
任务一:阅读《构建之法》并提问
任务二:WordCount编程
Github项目地址
PSP表格
解题思路描述
代码规范制定链接
设计与实现过程
性能改进
单元测试
异常处理说明
心路历程与收获
任务一:阅读《构建之法》并提问
问题一:敏捷流程究竟是好是坏
前文也有提到,敏捷流程从理论上看美妙无比,让我不禁想到,实际行动时是不是会遇到很多走捷径般的“敏捷”呢?为了快而快。后文的一些经验教训中写道“敏捷宣言表明的是一些优先级,不必当作圣旨或者教条来争论”。由此我的思考是,就现如今来看,敏捷流程这个模式只要用对方法,就能把敏捷流程的优点做到极致,产品不拖泥带水,能够迅速找到问题并解决。
问题二:要如何做到创新
创新一直是一件很困扰我的事情,我一直觉得好像我能够想到的别人早就已经做到了,编程的时候一些方法可以直接拿前人的用,直接封装就可以了,这样能够做到创新吗?看到这个电话我想到,创新就是要推陈出新,从这个早期的电话来看我们现在的电话设计,一样设计有听筒和话筒一上一下,编程时想要创新就要先学会看懂别人的算法和方法,这样才能引起更多思考,把旧的往好的方向改进,也是一种创新。
问题三:代码量的多少能代表水平吗?
代码量多积累的经验应该也会很多,有如读书破万卷,下笔如有神。但是我觉得如果都是重复在做一样的事,那样堆积起来的代码就像果树B的树叶一样,无用的树叶再多不如甜美的果实,并不能代表什么。所以要多吸收新的知识,让自己更加充沛,才能结出更多香甜可口的果实。
问题四:怎样成为一名合格的PM?
我的理解:PM应要比程序员更加有表达能力和理解能力,能够理解用户,站在用户的角度考虑问题,善于发现一些隐性的需求,要有良好的管理能力,带领团队把抽象的目标转化为可执行的且具体的设计,带领成员形成一致意见,一致的开发理解,确保行动实施。
问题五:初级的软件工程师要如何成长?
我认为要多花时间去积累软件开发相关的知识,提升技术技能。还要多写多练,多遇到问题主动去解决,这样才能积累问题领域的经验和知识,同时也要提升自我管理的能力,不能因为跟不上脚步就自我放弃,这个世界永远有人比你走在前面,那你就要停下了吗?虽然开发过程十分的枯燥,让人多少有些自闭,但是也要多和人交流,沟通,才能把产品真正的做到大部分人满意。
任务二:WordCount编程
Github项目地址
Github项目地址
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时 | 实际耗时 |
---|---|---|---|
Planning | 计划 | 2 h | 3 h |
Estimate | 估计这个任务需要多少时间 | 48 h | 72 h |
Development | 开发 | 24 h | 48 h |
Analysis | 需求分析 (包括学习新技术) | 4 h | 8 h |
Design Spec | 生成设计文档 | 1 h | 1 h |
Design Review | 设计复审 | 1 h | 1 h |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.5 h | 0.5 h |
Design | 具体设计 | 4 h | 8 h |
Coding | 具体编码 | 4 h | 24 h |
Code Review | 代码复审 | 2 h | 4 h |
Test | 测试(自我测试,修改代码,提交修改) | 2 h | 4 h |
Reporting | 报告 | 2 h | 2 h |
Test Repor | 测试报告 | 2 h | 2 h |
Size Measurement | 计算工作量 | 1 h | 1 h |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1 h | 1 h |
合计 | 50.5h | 107.5 |
解题思路描述
需要实现的功能:1、统计英文文本中字符的个数,2、统计英文文本中单词的个数,3、统计英文文本的行数,4、统计出现频率最高的10个单词
我的思路:首先先剔除掉不满足要求的字符,再对单词集合进行统计,同时统计下字符和'\n'出现的次数,最后将结果输出到output中。
代码规范制定链接
代码规范制定地址
设计与实现过程
用一个typedef结构设计单词字符等变量,定义number_of_words来记录单词统计总数,分别用两个vector来缓存input文本中的单词集和总的统计结果集。
关键函数:
虚读取以处理资源文件除大小写字母外的所有汉字及字符
bool skip(){ scanf("%*[^a-z||A-Z]"); return true;}
判断字符是否为字母和数字
bool is_digit(char ch){
return (ch>='0'&&ch<='9');
}
bool is_alpha(char ch){
return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));
}
找出高频词汇并排序
sort(raw_word.begin(),raw_word.end(),cmp_raw_word);
for(last=raw_word.begin(),it=raw_word.begin()+1;it!=raw_word.end();it++){
if(*it!=*last){
w.str=*last;
w.wordcnt=it-last;
word_statistics.push_back(w);
last=it;
}
}
w.str=*last;
w.wordcnt=it-last;
word_statistics.push_back(w);
sort(word_statistics.begin(),word_statistics.end(),cmp_word_statistics);
bool b=false;
性能改进
没有时间改进性能
单元测试
测试部分和截图
大写字母加数字
运行结果
中文加数字
运行结果
中文加字母
运行结果
长英文文章
运行结果
近3万字英文文章
运行结果
异常处理说明
若没有检测到输入时,结束程序并返回提示信息
if(!raw_word.size()){
printf("There is no word in the \"in.txt\" or \"in.txt\" inexistence!\n");
return 0;
}
心理历程和收获
心路历程
一开始看到繁杂的任务的时候头很大,拖延症直接犯了,没想到deadline快到的时候手还扭伤了,紧赶慢赶的,总体对自己这次作业不是很满意,很多细节都没好好构思。
收获
这次让我意识到任何事情都不能拖到最后几天,应该合理分配时间去完成任务,才能有多余的时间更加完善自己的项目。