·github地址:https://github.com/Tsaiyue
·PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | 430 | 450 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 150 |
· Design Spec | · 生成设计文档 | 20 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 20 | 30 |
· Coding | · 具体编码 | 150 | 150 |
· Code Review | · 代码复审 | 30 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 50 |
Reporting | 报告 | 110 | 100 |
· Test Report | · 测试报告 | 30 | 40 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 50 | 40 |
合计 | 570 | 580 |
·解题思路:
·阅读《构建之法》,了解科学开发基本步骤
·分析需求,预估完成时间
·发现难点
·查阅资料解决问题
·开发测试
·总结开发流程
·遇到的困难及解决办法:
·对C语言文件操作函数不熟悉,开发前查阅资料了解了C语言文件操作的库函数;
·第一次接触运用命令行参数运行程序,通过搜索引擎发现可用main()函数的参数argc和args实现;
·技术水平一般且ddl逼近,故舍弃扩展需求和高级需求,努力实现好基本需求;
·对《构建之法》中讲到的利用工具进行单元测试,回归测试不熟悉,不知如何利用插件测试代码覆盖率,学习后效果不佳仍无法解决,故选择最简单的手工测试测试 程序中各函数;
·对github不熟悉,不清楚如何利用github进行代码管理,因此花了不分时间学习使用github,但学习效果一般;
·代码组织
·组成函数
·函数调用关系:main()中调用了其他三个子函数,根据用户输入参数分别实现字符,单词和行数的查询功能
·代码展示
·主函数main():
1 int main(int argc, char *argv[])//主函数 2 { 3 if(argc<2) 4 { 5 printf("you must input args!"); 6 return 0; 7 }//用户无参数输入 8 if(strcmp(argv[1],"help")==0)//help 9 { 10 printf("此程序参数如下:\n"); 11 printf("-c 查询文件字符数。\n"); 12 printf("-w 查询文件词数。\n"); 13 printf("-l 查询文件行数。\n"); 14 printf("exit为退出。"); 15 return 0; 16 } 17 else if(strcmp(argv[1],"-c")==0) 18 { 19 Countcharacter(argv[2]); 20 } 21 else if(strcmp(argv[1],"-w")==0) 22 { 23 Countword(argv[2]); 24 } 25 else if(strcmp(argv[1],"-l")==0) 26 { 27 Countline(argv[2]); 28 } 29 else{printf("参数输入有误"); 30 } 31 return 0; }
·查询字符数函数Countcharacter():
1 void Countcharacter(char File[]) //字符数计算函数 2 { 3 int count=0; 4 char ch=‘ ‘; 5 FILE *f_read=fopen(File,"r"); 6 if(f_read==NULL){ 7 printf("查询文件不存在\n"); 8 return ; 9 } 10 while((ch=fgetc(f_read))!=EOF) 11 { 12 if(isspace(ch)==0) 13 ++count; 14 } 15 fclose(f_read); 16 printf("该文件的字符数为%d\n",count); 17 }
·查询字符数函数Countword():
1 void Countword(char File[]){ 2 int count=0; //英文单词数计数 3 char ch=‘ ‘; 4 FILE *fp=fopen(File,"r"); 5 if(fp==NULL){ 6 printf("查询文件不存在\n"); 7 return ; 8 } 9 while((ch=fgetc(fp))!=EOF) 10 { 11 if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)){ 12 while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)) 13 ch=fgetc(fp); 14 ++count; 15 } 16 } 17 fclose(fp); 18 printf("文件的单词数为%d\n",count); 19 }
·查询文件行数函数Countline():
1 void Countline(char File[]) //查询文件行数 2 { 3 FILE *fp; 4 int file_row = 0, count = 0; 5 char buffer[150]; 6 if((fp = fopen(File, "r")) == NULL) 7 {printf("查询文件不存在\n"); 8 return ; 9 } 10 while(fgets(buffer,150,fp)!=NULL) 11 { 12 count++; 13 } 14 file_row = count; 15 printf("文件的行数为%d\n", file_row); 16 fclose(fp); 17 return ; 18 }
·测试运行
·测试用例如下:
(空文件)
(只有1个字符)
(只有1个单词)
(只有一行的文件)
(行数为95的典型源文件)
·运行结果如下:
·项目小结:
·第一次遵循软件开发的科学流程进行程序开发,尽管技术受限,过程艰辛,但在实践中感受到了软件工程这门学科的特质,软件开发人员不能只会编写代码,而应该掌握从需求分析,到软件构件,软件测试,维护,总结的整套流程;
·在开发过程中应不畏困难,遇到问题后积极寻求解决问题的方法,如上网查询或向他人请教;
·开发软件是一个系统工程,不能走一步看一部,而应该提前制定软件开发流程,预估各阶段所需时间,提前预测开发过程中会遇到什么技术困难,制定好规划后一步步不断推进,才能较好地保证软件开发过程能有条不紊。
原文:https://www.cnblogs.com/Tsaiyue/p/12499557.html