テスターちゃん【4コマ漫画】

ソフトウェアテストの用語、やり方などを4コマ漫画でわかりやすく説明する(予定の)ブログです。脱線も多いです。



ChatGPTを用いたTDD part.5 (Integration test編)

ChatGPTを用いたTDD part.5 (Integration test編)

ChatGPTを用いたTDD part.4の続きです。

次は、1行1行分かれている文字列データを順次読み取っていって、データを収集させる部分を作ります。

 

 

文章全体のデータを収集して、集めたデータを返す

イメージとしては、ファイルを読み込んだら1行1行に分解して、それをこれから作るメソッドに投げれば、必要なデータが全部取得できる、です。一続きの長い文字列配列を得られることを想定しています。

ファイルの読み込み部分とcsv出力部分は最後に作ります。

今回はMockなしで結合して確認します。

テストデータは以下です。

[

"top - 13:52:54 up 6 min,  0 users,  load average: 0.01, 0.07, 0.03",

"Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie",
"%Cpu(s):  16.2 us,  20.3 sy,  5.0 ni,63.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st",
"KiB Mem : 40979980 total, 37696840 free,  1050480 used,  2232660 buff/cache",
"KiB Swap: 10485760 total, 10485760 free,        0 used. 39463640 avail Mem"

]

期待結果は以下です。

[

"13:52:54","00:06",

"16.2","20.3","5.0",

"2.6\n"

]

テストコードを書く

 

以下のプロンプトを与えました。

pythonで以下を確認するテストコードを書いてください。
・テスト対象のメソッド名 : get_top_all(string)
・期待結果 : ["13:52:54","00:06","16.2","20.3","5.0","2.6\n"]
・テストデータ : 
["top - 13:52:54 up 6 min,  0 users,  load average: 0.01, 0.07, 0.03",
"Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie",
"%Cpu(s):  16.2 us,  20.3 sy,  5.0 ni,63.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st",
"KiB Mem : 40979980 total, 37696840 free,  1050480 used,  2232660 buff/cache",
"KiB Swap: 10485760 total, 10485760 free,        0 used. 39463640 avail Mem"]

イマイチなテストが出てきました。

assertで確認せずにprint文で確認した場合、テストは値が違ったとしてもグリーンを出してしまいます。

もう一度作ってみます。

assertにはなったけど、修正はありそうなのでもう自分で書きます。

ここまで続けてきて、テストは自分で書いたほうがよさそうだと思っています。

書きました。

最短でグリーンになるコードを実装

では次は最短でグリーンになるコードを書きます。

与えたプロンプトは以下です。

任意の文字列を引数として、固定で["13:52:54","00:06","16.2","20.3","5.0","2.6\n"]を返すget_top_all(string)メソッドを書いてください。 classのメソッドなのでselfを入れてください。

コードに追加しました。

テストを実行してみます。

全てテストが通りました。

 

詳細の実装

詳細を実装していきます。

入力したプロンプトは以下です。

ここまで書いてしまうともう日本語でコードを書いているようなものですね。

もう少し抽象化して書いてもいいかもしれません。

以下を満たすget_top_all(文字列配列)を書いてください。
・引数は文字列の配列である
・戻り値は文字列の配列である
・配列を1つずつ順次読み込む
・読み込んだ文字列をget_data(string)に渡す
・get_dataから帰ってきた文字列配列が空ではない場合、保存用の文字列配列にextendする
・すべてを読み込み終わったら保存用の文字列配列を返す

指示しすぎたせいか、思った通りのコードで出てきました。

先ほどのグリーンにするだけのコードを書き換えます。

テスト実行をしてみます。

テストが通りました。

 

テストを変更する

空白行が存在したときの挙動が気になります。

なのでテストデータに空白のデータを混ぜておきます。

空白行は無視されるので、期待結果は変わらないはずです。

空白のテストデータを挿入しました。

テストを実行します。

オールグリーンです。

 

get_top_allメソッドのテストはMockを使っていないので、これまで書いたメソッドもすべて通っています。

 

ChatGPTを用いたTDD part.6

に続きます。

 

testerchan.hatenadiary.com