WordCount実装とテスト
11805 ワード
WordCount実装とテスト
一、githubアドレス
https://github.com/TCZdudu/WCProject
二、PSP表
PSP2.1
PSPステージ
推定所要時間(分)
じつじかん
Planning
けいかく
20
15
· Estimate
・このタスクにどれくらいの時間がかかるか見積もる
20
20
Development
かいはつ
700
840
· Analysis
・需要分析(新技術の習得を含む)
100
120
· Design Spec
・設計文書の生成
20
20
· Design Review
・設計再審(同僚と設計文書の審査)
10
10
· Coding Standard
・コード仕様(現在の開発に適切な仕様を制定)
20
30
· Design
・具体的な設計
100
150
· Coding
・具体的な符号化
200
240
· Code Review
・コード再審
100
120
· Test
・テスト(自己テスト、コード修正、修正提出)
150
150
Reporting
レポート作成
180
200
· Test Report
・テストレポート
100
120
· Size Measurement
・ワークロードの計算
20
20
· Postmortem & ProcessImprovement Plan
・事後総括、プロセス改善計画の提出
60
60
合計
920
1075
三、問題を解く構想
四、プログラム設計実現過程
//
と/**/
、//
良い判断、本行があればコード行、/**/
の間のコードもコード行として計算するので、先頭があれば末尾があり、先頭の位置を覚えてから、末尾の位置を見つけて総行数を判断することができます.空行も簡単で、記録が/**/
内にない空行や{
}
・、前に記録した総行数でこの空行と注釈行を減じてコード行を得る.停用語は停用語の個数を統計して、減らします.五、コード説明
いくつかの主要な関数の実現を紹介します
次に、停用語を取得する関数である、入力
-e
のときに呼び出すstoplistを先に取得する.txtの中の語は1つのlistの中で保存して、それから中の語の回数を統計しますpublic static List get_stop(String args[])throws IOException{
// “-e” , stoplist
List input_args = Arrays.asList(args);
List stop_words = new ArrayList();
if (input_args.contains("-e")) {
int index = input_args.indexOf("-e");
String stopFile = input_args.get(index + 1);
BufferedReader buffer = null;
buffer = new BufferedReader(new FileReader(stopFile));
stop_words = getStopList(buffer);
}
return stop_words;
}
public static int get_stop_num(String filename,List stop_list)throws IOException{
//
FileReader f_obj = new FileReader(filename);
BufferedReader b_obj = new BufferedReader(f_obj);
String str;
int num_stop=0;
while ((str = b_obj.readLine()) != null) {
for (String s : str.split(" ")) {
for (String s1 : s.split(",")) {
if (s1.length() > 0 && stop_list.contains(s1)) {
num_stop++;
}
}
}
}
return num_stop;
}
コード行、空白行、コメント行の数を判断します.先に注釈以外の空行を統計してから、
//
と/**/
クラスのコード行を統計して、最後の総数目から空行と注釈行を減算してコード行を得るpublic static String get_line_info(String filename)throws IOException{
// 、 、
int blank_line_num =0,code_line_num = 0,note_line_num = 0;
FileReader f_obj = new FileReader(filename);
String result;
BufferedReader b_obj = new BufferedReader(f_obj);
int line_num = 0;
String str_line = null;
while ((str_line = b_obj.readLine()) != null) {
if (str_line.length() == 0 || str_line.equals("{" )|| str_line.equals("}")) {
blank_line_num++; //
} else {
for (int i = 0; i < str_line.length()-1; i++) {
boolean flag2=true;
while (str_line.charAt(i) != ' ' && str_line.charAt(i) != '\t' && flag2) {
if (str_line.charAt(i) == '/' && str_line.charAt(i + 1) == '/') {
note_line_num++; // //
i = str_line.length();
break;
} else if (str_line.charAt(i) == '/' && str_line.charAt(i + 1) == '*') {
boolean flag=true;// /**/
for (int t = str_line.length()-1; t >= 0; t--) {
while (str_line.charAt(t) != ' ' && str_line.charAt(t) != '\t'&& t>=1) {
if (str_line.charAt(t) == '/' && str_line.charAt(t - 1) == '*') {
t = -1; // 1
flag =false;
flag2=false;
break;
}
else break;
}
}
note_line_num +=1;
while (flag) { //
if((str_line = b_obj.readLine()) != null) {
note_line_num++;
line_num++;
for (int j = str_line.length() - 1; j >= 0; j--) {
while (str_line.charAt(j) != ' ' && str_line.charAt(j) != '\t' && j >= 1) {
if(str_line.charAt(0) == '*' && str_line.charAt(j - 1) == '/' && str_line.length() > 2) {
note_line_num -= 1;
j = -1;
flag = false;
break;
}
else if (str_line.charAt(j) == '/' && str_line.charAt(j - 1) == '*') {
j = -1;
flag = false;
break;
}
else break;
}
}
}
}
}
else {
break;
}
}
}
}
line_num++; //
}
code_line_num = line_num - note_line_num -blank_line_num; // = - -
result = filename +", / / :"+ code_line_num +"/" + blank_line_num + "/" +note_line_num + "\r
";
return result;
}
入力されたコマンドを判断し、異なる機能を実現
public static void out_result(String filename,BufferedWriter file_writer,String args[],int args_len )throws IOException{
String character_num= "",line_num="",line_info="", word_num = ""; //
int word_numb = -1;
String arg;
for (int i=0; i stop_list = get_stop(args);
int num_stop = get_stop_num(filename,stop_list);
word_numb -= num_stop;
}
}
if(word_numb >=0){
word_num = filename + ", :"+ word_numb +"\r
";
}
get_result(file_writer,character_num);
get_result(file_writer,word_num);
get_result(file_writer,line_num);
get_result(file_writer,line_info);
}
六、設計プロセスのテスト
無効な単語数のコードテストを取得するには、次の手順に従います。
String str;
int num_stop=0;
while ((str = b_obj.readLine()) != null) {
for (String s : str.split(" ")) {
for (String s1 : s.split(",")) {
if (s1.length() > 0 && stop_list.contains(s1)) {
num_stop++;
}
}
}
}
return num_stop;
フローチャートは次のとおりです.
テストは次のとおりです.
テスト
入力
予想出力
じつしゅつりょく
ABF
EOF
ABCF
1
0
0
ABCDF
1
0
0
ABCDEF
1
1
1
結果コードテストの取得:
String character_num= "",line_num="",line_info="", word_num = ""; //
int word_numb = -1;
String arg;
for (int i=0; i stop_list = get_stop(args);
int num_stop = get_stop_num(filename,stop_list);
word_numb -= num_stop;
}
}
フローチャートは次のとおりです.
テストは次のとおりです.
テスト
入力
予想出力
じつしゅつりょく
ABF
0
ABCG
1
1
1
ABDG
1
1
1
ABEG
1
1
1
ABFG
1
1
1
単語数を取得するコードテスト:
int flag;
int word_num = 0;
boolean first_count = true;
while((flag = b_obj.read()) != -1){
if (first_count){
if(flag != ',' && flag != ' ' && flag != '
' && flag !='\r' && flag != '\t')
word_num += 1;
first_count = false;
}
if (flag == ',' || flag == ' ' || flag == '
'||flag =='\r' || flag == '\t' ){
first_count = false;
while((flag = b_obj.read()) != -1 ){
if (flag != ',' && flag != ' '&& flag != '
' && flag !='\r' && flag != '\t'){
word_num ++;
break;
}
}
}
}
return word_num;
フローチャートは次のとおりです.
テストは次のとおりです.
テスト
入力
予想出力
じつしゅつりょく
ABH
0
ABCDH
1
1
1
ABCFH
1
0
0
ABCFEGH
1
0
0
ABCDCFEGH
1
1
1
参考文献
転載先:https://www.cnblogs.com/tangcz/p/8612122.html