C#でテスト駆動開発 PR

C#でテスト駆動開発をするために私が参考にした書籍ランキング!!

記事内に商品プロモーションを含む場合があります

このブログでもよく言っていますが,プログラミングをする上で,テストコードというのは非常に大切です。

アンダーソン
アンダーソン
ほかの記事を読んでくださっている方ならもうわかってますよね?

なぜテストコードが必要なのかを簡単に紹介すると次のような5つの理由になります。

なぜテストコードが必要なのか?

保守性を高める

まず,何といっても保守性が高まります。保守性というのは,プログラムを修正とか追加実装したときに,どれくらい改造しやすいか?ということです。保守性が高ければ,「こんな機能を追加したい!」と思ったときに,プログラムのどの部分を修正すればよいかが簡単にわかるようになります。そして,改造した後の動作検証にかかる時間が劇的に変わってきます。保守性が高いコードは改造による影響範囲が容易にわかるため,どこをテストすれば問題なく製品をリリースできるかがわかります。保守性が低ければどこかを修正するたびに影響範囲がよくわからず,アプリケーションを隅々までテストしないと怖くてリリースできないプログラムになります。

アンダーソン
アンダーソン
そんな恐ろしいプログラムをあなたも見たことがあるでしょう?10年以上前に作ったプログラムはだいたいそんな感じです

使う側と使われる側を考えたプログラミングになる

ドメイン駆動開発の記事の中でも触れていますが,プログラムには大きく分けて2種類の特性があります。「使う側」と「使われる側」です。
プログラムというのは,誰でも使える共通部品として公開される「使われる側」のコードと,それを使って処理を書く「使う側」のコードに変われます。

テストコードを書くと,おのずとテストコードには「使う側」のコードがかかれ,本番コードに「使われる側」のコードが位置します。テストコードを書くことによって,あらかじめ使われることを意識した「使われるコード」を書くことになるので,非常に使いやすい共通部品が出来上がります。

疎結合になる

疎結合とは,プログラム同士の結びつきが弱い(少ない)事を言います。
プログラミングの世界では,その結びつきが弱ければ弱いほどよいとされ,その分保守性は高まります。

例えば銀行のATMのような機械のプログラムを作る場合,実際にATMがないと動かないようなプログラムではテストが大変です。大きな機械を横に置いてつないでないとデバッグでいないようでは,仕事の効率が悪いですし,複数人でプログラミングしている場合は,その人数分機械が必要になります。

テストコードを書くことで,そういった外部に接触する部分をダミーで置き換える作り方でできるので,そういった実装をすることで,ある程度テストができたロジックを作成した上で,実際の機械につないだテストをして,製品リリースをすることができます。

アンダーソン
アンダーソン
テストコードを書くことによって,おのずと疎結合なプログラムが書けるようになります。これってすごいことですよね!

必要最小限のクラス単位で分割される

先ほどの疎結合の話や「使う側と使われる側」の話にも共通しますが,テストコードを書くことで,クラス設計が最適化されるというメリットがあります。テストコードにはテスト駆動開発という,先にテストコードを書いて,コンパイルエラーを取りながら,本番コードを書いていくという手法があります。

そういった手法をとることで,必要最低限のクラス分割と機能となり,結果的に非常に使いやすい,読みやすいコードになります。

ゆっくり眠れるようになる

私のようにメーカーに勤務されているような人はよくわかっていただけると思いますが,一度製品がリリースされたら,今度はお客様のところでバグが発見されて,クレーム対応に終われる事があります。一度クレームが出たら再発防止やらなんやら大変で,心が休まりません。しかし,テストコードを書くことで,常にロジックの正当性が保障されているため,70%程度のロジックが保障され,一部テストコードが書けない部分をしっかりテストしてリリースすることで,不具合が発覚する確立が大分下がります。そうなるとわれわれエンジニアもようやく夜ゆっくり眠れるようになります

アンダーソン
アンダーソン
まだテストコードを書いてないなんていうエンジニアの方がいたら,急いでテスト駆動開発を勉強して早く現場のプログラムコードに適応しましょう。
せめてこれから作るコードは必ずテストコード付で作りましょう!

私がテスト駆動開発を学ぶ上で参考にしたおすすめの書籍を紹介します!

ランキング1位
この本の6章のボーリングのソフトをペアプログラミングをしながらテスト駆動開発をしていく様子を絶対読んでください!
これを読むだけで,いかにテスト駆動開発が強力ですばらしいかが体験できると思います。
この章を読むだけでも十分のこの本を買う価値があります。
しかもリファクタリングやデザインパターン関してもいろいろ書かれているので
成長したい方は必ず読んだほうがいいでしょう。
 
タイトル アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
おすすめ度
ランキング2位
テスト駆動開発の生みの親。
リファクタリングで有名なマーチンファウラーが影響を受けた最強の技術者ではないでしょうか。
オブジェクト指向を現場で使うためにいろいろの手法を考え出された偉人の本は読むだけでわくわくし,仕事にいい影響を与えます。
あなたの先輩がこういった本を読んでいないなら,あなたが読んで,職場に伝える伝道師になりましょう。
 
タイトル テスト駆動開発
おすすめ度
ランキング3位
C#でテスト駆動開発をするなら,実はこの本が一番役に立つかも。いろんな本を読んでる方はわかると思いますが,こういった設計系の本でC#が題材になっているものは
あまりありません。この本ではテスト駆動開発をしながらドメイン駆動開発をしていくので,知らないうちにオブジェクト指向の知識があがって行きます。
.NETFramework2.0時代なのでちょっとコーディングは古めですが,原理は同じです。十分に今でも通用します。
 
タイトル ドメイン駆動 (Programmer’s SELECTION)
おすすめ度

番外編

C実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング

C#で書かれているという意味ではこの本もおすすめ。4章が丸ごとテストに関する記述です。それ以外もオブジェクト指向設計に必要な要素がいっぱい書いています。何より,.NETFrameworkが結構新しいのでコーディング的にも参考になります。

チーム開発の教科書 Cによるモダンな開発を実践しよう!

初心者の方は一番これがおすすめです。 全体を通してC#プログラマーとして勉強する筋道が書かれています。その中でもテストコードについては言及されていて,命名の方法など勉強になります。

テスト駆動開発
Udemyで販売しているC#のコースを 1つプレゼントします!

Warning: Trying to access array offset on value of type bool in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 531

Warning: Trying to access array offset on value of type bool in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 531

Warning: compact(): Undefined variable $operation in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $os in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $items in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $resultMap in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $error_code in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $error_message in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920

Warning: compact(): Undefined variable $error_body in /home/fukudatakuya/anderson02.com/public_html/wp-content/plugins/amazonjs/amazonjs.php on line 920