个人项目-WC (C语言)
一、Github地址:https://github.com/twistww/weiweijun
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | 540 | 660 |
· Analysis | · 需求分析 | 40 | 60 |
· Design Spec | · 生成设计文档 | 40 | 60 |
· Design Review | · 设计复审 | 40 | 60 |
· Coding Standard | · 代码规范 | 30 | 30 |
· Design | · 具体设计 | 60 | 60 |
· Coding | · 具体编码 | 240 | 300 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 150 | 170 |
· Test Report | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 80 |
合计 | 720 | 890 |
三、解题思路
1.因为自己的粗心,最开始尝试个人项目,已经是题目发布后的一周,所以有点匆忙。因为有大佬已经完成个人项目,他用的是Java,所以一开始我打算用Java进行个人项目。进行需求分析之后,发现运用面对对象的语言对本地文件进行操作有点困难,而且对Java的概念有很多遗忘,在浪费一定时间思考后,还是转向c语言。
2.尝试C语言之后,先完成大致main函数的框架,将实现三个基本功能的函数(字符统计charcount、单词统计wordcount、行数统计linecount)写出来,然后主函数调用三个方法,实现基本功能。由于对c语言的文件操作概念模糊,于是上网查询了文件的文件操作函数,使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,使用fclose()函数关闭文件,函数fgetc() 从 fp 所指向的输入文件中读取一个字符。写“-a”方法时,因为要查询代码函数、空行数以及注释行数,实现三个功能。一开始我打算写三个方法分别实现这三个统计功能,mian函数再调用三个函数实现“-a”的功能,但感觉过于繁琐,于是在网上查询,看到其他人用级联else-if多分支语句实现“-a”的功能,最终将三个方法合并为一个方法。
3.c语言图形界面之前未尝试过,而且时间有点赶,就没有实现图形界面。
四、设计实验过程
wc.exe由一个main主函数以及4个函数方法(字符统计charcount、单词统计wordcount、行数统计linecount、代码行数/ 空行数 / 注释行数统计allcount)构成,当程序开始,main函数运行,用户输入命令,程序判断是否为字符,若字符为‘-c’,则调用charcount函数,统计字符数目,输出,再退出程序;若字符为‘-w’,则调用wordcount函数,统计单词数目,输出,再退出程序;若字符为‘-l’,则调用linecount函数,统计行数目,输出,再退出程序;若字符为‘-a’,则调用allcount函数,统计代码行数/ 空行数 / 注释行数目,输出,再退出程序;若不是这四类字符,则输入字符无效,退出程序。
五、回归测试
1.测试空文件:
2.测试一个字符的文件:
3.测试一个单词的文件:
4.测试行的文件:
5.测试典型的文件:
六、项目总结:
1.本次个人项目,反映出我的动手实践能力偏弱,对C语言掌握的不够熟练,对知识点概念模糊,缺乏动手编程实践。本次项目未运用Java编程,也侧面反映了我对java的知识点的遗忘以及对Java掌握的不牢固。在后面的学习中,要重新温习Java的知识点,多动手编程,熟能生巧。
2.本次个人项目,我对题目的要求并没有看仔细,以至于用c做完程序才发现还要进行图形界面的设计。在之后具体的操作之前,要申清题目,对项目进行仔细的需求分析,整理好自己的解题思路,再进行具体的代码实现,不要想一点写一点,可能会推翻自己之前的构思,会浪费很多时间,等一切准备工作都完成再开始,就能更高效的进行编程。
3.通过本次个人项目,我经历了一次较为完整的个人软件开发过程,第一次使用psp,如此规范的进行软件开发,虽然第一次我的程序并不够完善,还有很多不足的地方,对个人开发软件过程还很生疏,但还是收获了很多关于软件工程的知识。