软件质量与测试——WordCount编码实现及测试
1.GitHub地址
https://github.com/noblegongzi/WordCount
2.PSP表格
| PSP2.1 | PSP 阶段 | 预估耗时 (分钟) | 实际耗时 (分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 50 |
| · Estimate | · 估计这个任务需要多少时间 | 600 | 840 |
| Development | 开发 | 600 | 840 |
| · Analysis | · 需求分析 | 30 | 40 |
| · Design Spec | · 生成设计文档 | 20 | 30 |
| · Design Review | · 设计复审 | 10 | 20 |
| · Coding Standard | · 代码规范 | 300 | 360 |
| · Design | · 具体设计 | 20 | 90 |
| · Coding | · 具体编码 | 300 | 720 |
| · Code Review | · 代码复审 | 60 | 120 |
| · Test | · 测试 | 20 | 30 |
| Reporting | 报告 | 30 | 60 |
| · Test Report | · 测试报告 | 20 | 20 |
| · Size Measurement | · 计算工作量 | 5 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
| 合计 | 600 | 840 |
3.解题思路
这个项目需要解决的是几大问题,第一是对文档的操作,我在学习编码时对这一块没有上心,所以拿到任务后先自己复习了下C++对文档的操作方法。其次是该问题最重要的部分,即如何将一连串字符串分解成单个单词,并对其计数,这个通过if语句对字符串中的字符进行甄别,看是否是特殊的几个分词符就行了。但是我听同学说可以用正则表达式,代码书写更简单,有机会我会改进。
还有个最难的问题是我在谋划之初没有想到的,就是对输入的命令进行分析,首先要判断输入的命令是否正确,因为有了前面把字符串分成一个一个单词的经验,所以这里我是采取依次甄别每个单词的方法,用编译原理所学的自顶向下的分析方法来判断命令的正确性,顺便得到命令的结果组成,从而轻易判断用户输入的文件名是什么。在确定命令正确之后,进而分析命令的要求。由于确定了命令的正确性,这里对命令的分析就简单些,只要找到命令的关键字眼,就可以判定命令的意图,从而执行相关的操作。这里使用C++中String类的find()函数,查找诸如-c,-w,-l,-o等关键词汇。
4.程序实现过程
首先我先完成对文档的输入输出,通过编译程序写好file.c文件,做好实现程序的准备工作。
其次,我实现了程序的基本功能,即对现有的file.c文件进行字符单词行数计数。
再则,我实现对命令的正确性判断,确保程序的正常运行。
然后,我对命令的内容进行分析,从而根据各项命令完善程序功能,使前后台对接。
最后是对程序输出的排版进行规范,及代码复审。
5.关键代码展示
1)对命令行进行分析确保命令正确,并识别出用户提供的文件名。
if (order1.find("wc.exe")!=string::npos)
{
if (order2.find("-c") != string::npos || order2.find("-w") != string::npos || order2.find("-l") != string::npos )
if (order3.find("-c") != string::npos || order3.find("-w") != string::npos || order3.find("-l") != string::npos )
if (order4.find("-c") != string::npos || order4.find("-w") != string::npos || order4.find("-l") != string::npos)
{
filename = order5;
if (order6.find("-o") != string::npos)
outputfilename = order7;
}
else
{
filename = order4;
if (order5.find("-o") != string::npos)
outputfilename = order6;
}
else
{
filename = order3;
if (order4.find("-o") != string::npos)
outputfilename = order5;
}
else
{
cout << "命令错误,请重新输入:\n";
}
}
else
{
cout << "命令错误,请重新输入:\n";
}//确定命令输入无误。
2)对用户提供的文件进行统计,得到关键数据
fin.open(filename);
cout << "文件中内容如下:"<<endl;
while (fin.get(ch))
{
cout << ch;
charnumber++;
if (ch == ' ' || ch == ',' || ch == '\n' || ch == '\t'&&prech != && prech != ','&&prech != '\n'&&prech != '\t')
{
wordnumber++;
}
if (ch == '\n')
{
linenumber++;
}
prech = ch;
}
cout << endl;
if (charnumber == )
{
wordnumber = ;
linenumber = ;
}
//统计字符数,单词数,行数。 if (ch != ' ' || ch != ',' || ch != '\n' || ch != '\t')
{
wordnumber++;
}
fin.close();
3)对命令进行分析,确定程序具体实行哪些操作
if (order.find("-c") != string::npos)
{
coutchar(filename, charnumber);
}
if (order.find("-w") != string::npos)
{
coutword(filename, wordnumber);
}
if (order.find("-l") != string::npos)
{
coutline(filename, linenumber);
}
fin.open("result.txt");
while (fin.get(ch))
{
cout << ch;
}
fin.close();
if(order.find("-o") != string::npos)
{
output(outputfilename, charnumber, wordnumber, linenumber);
}
//执行命令
6.测试设计过程
测试用例:将所有可能的命令格式输入,分别测试。
1.wc.exe -c file.c

2.wc.exe -w file.c

3.wc.exe -l file.c

4.wc.exe -c -l file.c

5.wc.exe -c -w -l file.c

6.wc.exe -c file.c -o outputfile.txt


7.wc.exe -c -l file.c -o outputfile.txt


8.wc.exe -c -w -l file.c -o outputfile.txt


修改file.c文件内容再次进行测试。
9.wc.exe -c -w -l file.c

10.wc.exe -c -w -l file.c -o outputfile.txt


程序高风险:输入文件名过长会导致string超出范围,程序崩溃。
7.参考文献
《C++ Primer Plus》。
软件质量与测试——WordCount编码实现及测试的更多相关文章
- WordCount编码和测试
WordCount编码和测试 项目地址:https://github.com/handsomesnail/WordCount PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) ...
- WordCount 编码与测试
word count github 项目地址:https://github.com/liuqiang666/wordCount PSP表格 PSP2.1 PSP阶段 预估耗时(小时) 实际耗时( ...
- 编码的UI测试项目——Visual Studio 2013
今天实现了一次编码的UI测试项目,以下是我进行测试的过程: 1.新建测试项目 在visual studio中(我用的版本是2013 update2)点击文件->新建->项目,选择“编码的U ...
- 使用Visual Studio 2013对windows应用商店应用进行编码的UI测试
之前进行了一次实验,实验内容是对windows应用商店应用进行编码的UI测试,下面对实验步骤进行详细说明: 1.为 Windows 应用商店应用创建新编码的 UI 测试项目,选择Visual C##→ ...
- 关于VS2013的编码的UI测试。
1. 打开VS2013,选择文件→新建→项目 2. 弹出的选项左侧选择visual C#中的测试,中间选择框选择编码的UI测试项目,确定后就产生的测试项目. 3. 弹出框选择默认的录制操作巴拉巴 ...
- python函数式编程,性能,测试,编码规范
这篇文章主要是对我收集的一些文章的摘要.因为已经有很多比我有才华的人写出了大量关于如何成为优秀Python程序员的好文章. 我的总结主要集中在四个基本题目上:函数式编程,性能,测试,编码规范.如果一个 ...
- 为Visual Studio添加一个“编码的UI测试生成器”的快捷方式
在添加CodedUI测试用例时,经常需要查看捕获控件的属性.按照常规的方式,只有在添加一个全新的CodedUI编码测试时才能查看捕获控件的属性,这样很不方便. 下面介绍在Visual Studio工具 ...
- Assignment5: 使用Visual Studio 进行可编码的UI测试
一.实验目的: 使用Visual Studio 可编码的UI测试功能创作自动化测试 二.实验原理:黑盒测试 三.实验需求:win8 app.Visual Studio Ultimate 2012/20 ...
- Pytest权威教程11-模块及测试文件中集成doctest测试
目录 模块及测试文件中集成doctest测试 编码 使用doctest选项 输出格式 pytest-specific 特性 返回: Pytest权威教程 模块及测试文件中集成doctest测试 编码 ...
随机推荐
- mex (离散化+线段树)
Time Limit: 3000 ms Memory Limit: 256 MB Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间$[l,r]$设为 ...
- linux查看端口被占用等常用命令
一 根据端口号 查找对应的服务 比如我们查查找端口号8189对应的服务是哪个 1 先根据端口号查找对应对的pid(进程id)为23367 netstat -anp | grep 8189 ...
- 微信Token小识
在调用自定义菜单接口的时候,调用接口 https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN返回: " ...
- Git 版本退回commit
有的时候错误提交了commit,需要版本退回. 先用git log查看一下节点版本号commit_id $ git log 再用git reset退回 $ git reset -soft commit ...
- 一些图像识别初创公司产品及API搜集ing...
一些公司的产品路线可以很好地给我们启示,欢迎看客补充. 一.微软认知服务API 1.年龄.性别检测 2.物体分类.识别 3.识别名人 全新的名人识别模块可以识别20万来自全球各地涉及商界.政界.体育界 ...
- Invalid property 'url' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]
1.错误描述 INFO:2015-05-01 13:13:05[localhost-startStop-1] - Initializing c3p0-0.9.2.1 [built 20-March-2 ...
- live555编译环境
Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编 ...
- Linux显示所有运行中的进程
Linux显示所有运行中的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps aux | less USER PID %CPU %MEM VSZ RSS ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception
1.错误描述 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception:You have an error in your SQL synt ...
- 如何给filter添加自定义接口及调用
本例子是在VirtualCamera的基础上添加的自定义接口用来实现exe控制osd的显示. 1. 接口部分 #ifndef __H_MyFilter__#define __H_MyFilter__# ...