WordCount稳定版本1.0.0
合作者学号:201631062112,201631062211
gitee仓库地址:https://gitee.com/sebastienf/WordCount
v1.0.0更新日志:
本项目在前一次作业的基础上,优化了代码的执行效率,对代码的错误进行了审查和修改。
上个版本已经实现了作业所要求的所有功能,故这个版本以提升稳定性为主,不另行添加新的功能。
合并搭档的稳定代码进入Master分支。
对搭档提出的问题进行修改。
审查了搭档的代码,帮助修复了部分BUG。
版本号进入稳定版。
主要内容:
1、本次优化主要调整了文件读取策略,加入了参数保护,输入输出文件保护,进行代码审查以规范代码,进行了单元测试以检测隐藏的BUG。
2、优化了性能表现,测试中典型任务下执行速度提升了10毫秒。
对selectTask的调整:
在上一个版本的基础上,对此方法进行修改,调整文件读取的策略,提升效率。同时加入参数保护,避免空文件造成程序崩溃。
下列为涉及变动的相关代码:
1、读取文件的空文件保护以及文件读取策略的调整
bool outPutFlag = false;//特殊输出判断 string outPutFileName = "";//特殊输出文件名 string stoplistFileName = "";//特殊输出文件名 string fileName = "";//文件名 string result = ""; List<FileInfo> fileList = FileGet.getFile(".",".c"); foreach (string item in args) { if(item == "-x") { bool re = countInWindows(); goto END; } } //空文件保护 bool fillBool = false; foreach (string item in args) { if (item.EndsWith(".c")) { fillBool = true; } } if (fillBool == false) { Console.WriteLine("文件不合法或为空"); return false; } //空文件保护结束 foreach (FileInfo file in fileList) { if (!(args.Contains<string>("-s"))) { foreach (string item in args) { if (item.EndsWith(".c")&&item.ToString()==file.ToString()) fileName = item; else flag = false; } } else { fileName = file.ToString(); }
2、停用词表的空文件保护
for (int i = 0; i < args.Length; i++) { if (args[i] == "-e") { //停用词文件保护 if (args.Length - 1 <= i) { Console.WriteLine("停用词文件不存在"); return false; } else if (!(args[i + 1].EndsWith(".txt"))) { Console.WriteLine("停用词文件不正确"); return false; } //停用词文件保护结束 stoplistFileName = args[i + 1].ToString(); } }
3、输出文件的空文件保护
//输出控制 for (int i = 0; i < args.Length; i++) { if (args[i] == "-o") { outPutFlag = true; //输出文件保护 if (args.Length-1<=i) { Console.WriteLine("输出文件为空或不存在(输出txt文件名应跟在-o之后)/n/n如:-o 1.txt"); return false; } else if (!(args[i + 1].EndsWith(".txt"))) { Console.WriteLine("输出文件为空或不存在(输出txt文件名应跟在-o之后)/n/n如:-o 1.txt"); return false; } //输出文件保护结束 outPutFileName = args[i + 1].ToString(); } } if (outPutFlag) { outputLine(result,outPutFileName); } else { outputLine(result); }
加入单元测试项目
运行情况
所有测试通过。
静态代码测试
静态代码测试任务,我选择使用StyleCop.Analyzers进行代码规范检查。
结合https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions所述代码规范,我和搭档一起自定义了一套代码规则,并运用这套规则对代码开始检测。
对出现的问题进行修改。
性能测试
性能测试我选择VS2015自带的测试工具进行测试,结果如下。
典型任务下性能提升10毫秒左右。
个人感受
本次作业是我第一次完整的运用结对编程的方法。结对编程虽然能够提高软件质量,但是在实施的过程中,出现了许多的矛盾冲突。通过不断的验证和讨论,最终才得出一套可行的方案。我感受到多人的协作编程和同一个人的编程的流程是完全不同的。单人编程的时候不需要考虑代码的风格友好性和通用性。在审查同伴的代码中,我也发现了很严重的代码风格的问题,导致代码合并时非常困难,甚至出现了大量重构的情况。多人协作时,这一点就变得很重要。这一次项目也是我第一次运用静态代码分析,认识到代码风格统一的重要性。希望在下一次作业中,能够更为融洽的发挥多人协作编程的优势,能够让1+1大于2。