第二周个人作业
软件质量测试wordCount说明
项目github地址wordCount
PSP表格
PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 90 |
· Estimate | · 估计这个任务需要多少时间 | 90 | 90 |
Development | 开发 | 10 | 10 |
· Analysis | · 需求分析 (包括学习新技术) | 10 | 10 |
· Design Spec | · 生成设计文档 | 0 | 0 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 10 |
· Design | · 具体设计 | 5 | 5 |
· Coding | · 具体编码 | 10 | 10 |
· Code Review | · 代码复审 | 10 | 10 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 50 | 60 |
· Test Report | · 测试报告 | 50 | 90 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 350 | 500 |
//作业实在太多了吧
解题思路
拿到题目以后我不想用java因为不熟悉,想早点做完,因为还有很多场面试要准备。
于是用我熟悉的JavaScript来做,可惜了,最后nodejs的打包工具始终编译不成,所以我就直接给了node的命令行
这个程序本身是非常简单的,完全不用面向对象,也完全没有画流程图
使用说明
请安装node v8.0以上,安装node的方法在这里
将命令中所有的exe改成node,如下
//my.exe -c file.c改成
node -c file.c
程序设计实现
四个分步函数:
//计算行数
function countLines(data){
var lines = data.split('\n');
console.log(`${filename},'行数: '${lines.length} `);
}
//计算单词数
function countWords(data){
var words = data.split(/\s/);
// console.log(words);
console.log(`${filename},'单词数: '${words.length} `);
return words.length;
}
//计算字符数
function countLetters(data){
var letters = data.split('');
console.log(`${filename},字符数: ${letters.length} `);
return letters.length;
}
//写文件
function writeData(data){
var wd = new Promise((resolve,reject)=>{
fs.writeFile(outname,data,function(err){
if(err){
console.log(err);
reject(err);
}else{
resolve();
}
})
})
wd.then(()=>{
console.log('data has been writen in '+outname);
})
}
一个异步获取数据函数
function processFunc(fn){
getData().then((data)=>{
// console.log(data);
// console.log(countLines(data));
// console.log(countWords(data));
// console.log(countLetters(data));
// writeData(data);
// console.log(fn(data));
fn(data);
}).catch(err=>{
console.log(err);
})
}
一个主函数
function main(){
switch(choice){
case '-c':
processFunc(countLetters);
break;
case '-w':
processFunc(countWords);
break;
case '-l':
processFunc(countLetters);
break;
case '-o':
processFunc(writeData);
break;
}
}
测试样例设计过程
测试原理
根据白盒测试原理:
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
- 语句覆盖每条语句至少执行一次。
- 判定覆盖每个判定的每个分支至少执行一次。
- 条件覆盖每个判定的每个条件应取到各种可能的值。
- 判定/条件覆盖同时满足判定覆盖条件覆盖。
- 条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
- 路径覆盖使程序中每一条可能的路径至少执行一次。
具体样例
test1.txt
仅设计一个单词
hello
test2.txt
设计一个单词加上一个空格和换行
hello
test3.txt
设计一个单词一个空格和一个换行
hello
test4.txt
设计多个单词多行
helo $
jkjk %
jkdkl
test5.js
换一种文件类型
var a = 'string';
b = a;
test6.cpp
换一种文件类型
int a = 10;
std::cout <<a<<std::cend;
test7.html
换一种文件类型
<div>test</div>
<script></script>
test8.css
换一种文件类型
.div{
position:absolute;
}
test9.c
换一种数据类型
int a = 4;
print_s(a);
test10.xml
换一种数据类型
<json></json>
参考链接:没有参考