软件工程寒假作业(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;

性能改进

没有时间改进性能

单元测试

测试部分和截图

大写字母加数字

avatar

运行结果

avatar

中文加数字

avatar

运行结果

avatar

中文加字母

avatar

运行结果

avatar

长英文文章

avatar

运行结果

avatar

近3万字英文文章

avatar

运行结果

avatar

异常处理说明

若没有检测到输入时,结束程序并返回提示信息

  if(!raw_word.size()){
       printf("There is no word in the \"in.txt\" or \"in.txt\" inexistence!\n");
       return 0;
    }

心理历程和收获

心路历程

一开始看到繁杂的任务的时候头很大,拖延症直接犯了,没想到deadline快到的时候手还扭伤了,紧赶慢赶的,总体对自己这次作业不是很满意,很多细节都没好好构思。

收获

这次让我意识到任何事情都不能拖到最后几天,应该合理分配时间去完成任务,才能有多余的时间更加完善自己的项目。

posted @ 2021-03-06 00:35  黄伟为  阅读(110)  评论(9编辑  收藏  举报