SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
アジャイルソフトウェア開発の奥義 勉強会
4-5章
筑波大学 情報メディア創成学類4年
川口 航平
1
今回の読む範囲
• 4章 テスティング
• P33-P42
• 5章 リファクタリング
• P43-56
2
4章 テスティング
• テスト主導型の開発がプロダクト開発に与える影響について述
べている章である.
• 特にプロダクトのコードを書く前にテストコードを書くメリッ
トについて述べている
3
テストコードを最初に書くメリット
• テストが成功する限り,プログラムの変更を気軽に⾏える
• 呼び出し側の⽴場からコーディングをするので,呼び出しやすい形
式の設計になりやすい
• テストそのものがドキュメントとして機能する
• テスト可能な設計を強いられることにより,ソフトウェアの分離が
促進される
4
テスト主導型ソフトウェア開発の例
• 未実装なテスト対象が存在することを前提としてテストコードを書く⼿
法(Intention programing)がある.
• ⾃分の意図することをコードを書く前にテストコードの中に記述してお
く
• このとき,⾃分の意図を単純かつ明瞭にしておくことによって,良い構
造のプログラムが書ける
5
テストを最初に書くことによって,設計上の判断にふるいをかけられる
具体例
• あるゲームの実装におけるテストコードを考えてみる
• このゲームは下記のような仕様を持つ
• プレイヤーはダンジョンの中を探検する
• ダンジョンには複数の部屋が有る
• 部屋には東⻄南北それぞに1つ以上の通路があり,その通路は他の部屋と繋
がれいてる
6
Intention programmingを用いて書いた
テストコード
7
※ 本書にて記述されているコードに若⼲の修正を加えています
テストコードが重要な問題に光をあてる
• 著者はテストコードを書く際にRoomクラスを⽤意する必要は無いと判断をした
(数値を⽤いて表現できるから)
• Roomクラスを⽤いないことが良い⽅法であることを主張したいわけではない
• 最初にテストコードを書くことによって,⾮常に早い段階で設計上の重要な問
題に光を当てた事ができた
8
テストを最初に書くことによって,設計上の判断にふるいをかけられる
つまり
ソフトウェアに分離を強いる例
• 給料詳細(Payroll)アプリケーション
9
本書のp36から引⽤
テストコードを書く際の問い
• 次のような問いが⽣まれる
• どのDBを⽤いるか?
• どのようなデータを⽤意しておくか?
• どのように正しいデータが登録されているかを調べるか?
10
Mock Objectパターンを⽤いよう!
Mock Objectパターンを適応
11
結果的に周囲のモジュールが分離され設計の質が⾼まった!
• Payrollが抽象に依存するように変更
した
• モックを⽤いたテストが可能となっ
た
本書のp37から引⽤
受け入れテスト
• システム全体の動作確認をするためにはユニットテストだけではな
く,受け⼊れテストが必要
• UIテストなどを⾏う場合は,より⾼度な分離が求められるのでアー
キテクチャに⼤きな影響を与える
• 早期から受け⼊れテストを許容する設計にすることで,分離が促進
される
12
具体例では,XMLにてUIを表現することによりユニットテストを許容するような例があった.→ 設計に影響を与える
4章 まとめ
• テストを書くメリット
• 動作検証,および保証
• ⼀度あるレベルにて実⾏されれば,それ以降はそのレベルを下回ることはない
• コンパイルと実⾏が可能なドキュメントとして機能する.
• コンパイルと実⾏が可能なことにより,信頼できる
• ⾮常に明確な⾔語にて記述されている.
• アーキテクチャや設計に良いインパクトを与える
• テスト可能な状態にするためには,対象を周囲から分離する必要がある.
• テストしやすくすればするほどその分離性が促進される
13
5章 リファクタリング
• リファクタリングの意義とリファクタリングを⾏う過程について⽰
している章である.
• リファクタリングの定義
• ソフトウェアシステムを変えるプロセスとは,そのコードの外部への振る舞
いを全く変えずににその内部構造を改善すること
• 正常に動くコードを改善する必要はあるのか??
14
正常に動作しているコードをリファクタリングする意味は?
モジュールの機能
• モジュールは下記に⽰す3つの(満たすべき)機能がある
• 特定の処理を実⾏する機能
• モジュールの存在理由そのもの
• 変化を許容する機能
• 変化を簡単にするのは開発者の責任
• 変更が⼤変なモジュールは動いたとしても壊れているのと同義(著者⽈く
• 読み⼿にモジュールの意図を伝える機能
• 詳細を知らない⼈であっても無理なく読めるようにする必要がある.
• 意図を伝えられないモジュールは動いたとしても壊れているのと同義(著者⽈く
15
正常に動いていても壊れているからリファクタリングしようねって事だと思う.
リファクタリングをする意義
• リファクタリングの⽬的はコードを⽇々こまめに整理することにあ
る
• システムの拡張や修正は最⼩限の努⼒で済ませたい
• コードが汚ければすべての原則やパターンが全く役に⽴たない
16
正常に動作しているコードをリファクタリングする意味は?
読んだ感想
4章
テストを始めに書く⼿法はテスト駆動開発などから知っていた
⼀⽅で,テストを書くことによって設計が洗礼されるといった視点は無く勉強となった.
5章
リファクタリングの概要については今回学ぶことができたが,具体的にリファクタリングを⾏う
際に⽤いる指標が分からなかった.つまり,どのように既存のコードにメスを⼊れると良いかが
分からなかった.
今後の章からそれらを学ぶことができることを期待する.
17
引用
• ロバート・C・マーチンほか.アジャイルソフトウェア開発の奥義 第
2版 オブジェクト指向開発の神髄と匠の技. SBクリエイティブ, 2008
18

Más contenido relacionado

Similar a アジャイルソフトウェア開発の奥義 勉強会#1

テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1Hiro Yoshioka
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02Hiro Yoshioka
 
pytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメpytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメiRidge, Inc.
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験についてRakuten Group, Inc.
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~Rakuten Group, Inc.
 
How to Develop Experiment-Oriented Programs
How to Develop Experiment-Oriented ProgramsHow to Develop Experiment-Oriented Programs
How to Develop Experiment-Oriented ProgramsKenta Oono
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門陽一 滝川
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライドsuzumurashingo
 
プログラミング手法について調べてみた
プログラミング手法について調べてみたプログラミング手法について調べてみた
プログラミング手法について調べてみたOgataAyaka
 
開発生産性と品質向上を実現する開発基盤の構築
開発生産性と品質向上を実現する開発基盤の構築開発生産性と品質向上を実現する開発基盤の構築
開発生産性と品質向上を実現する開発基盤の構築Katsuhiro Aizawa
 
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点Makoto SAKAI
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のりStudy Group by SciencePark Corp.
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり kyon mm
 

Similar a アジャイルソフトウェア開発の奥義 勉強会#1 (20)

テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
pytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメpytest × TDD テスト駆動開発のススメ
pytest × TDD テスト駆動開発のススメ
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
 
How to Develop Experiment-Oriented Programs
How to Develop Experiment-Oriented ProgramsHow to Develop Experiment-Oriented Programs
How to Develop Experiment-Oriented Programs
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライド
 
Software Test Basic
Software Test BasicSoftware Test Basic
Software Test Basic
 
プログラミング手法について調べてみた
プログラミング手法について調べてみたプログラミング手法について調べてみた
プログラミング手法について調べてみた
 
Caketest
CaketestCaketest
Caketest
 
開発生産性と品質向上を実現する開発基盤の構築
開発生産性と品質向上を実現する開発基盤の構築開発生産性と品質向上を実現する開発基盤の構築
開発生産性と品質向上を実現する開発基盤の構築
 
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
ITS fidel
ITS fidelITS fidel
ITS fidel
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり自社製品のバージョン管理 進化と問題解決の道のり
自社製品のバージョン管理 進化と問題解決の道のり
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 

アジャイルソフトウェア開発の奥義 勉強会#1