SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
よしおかひろたか
           TDDBC@大阪


楽天株式会社 DU,開発アーキテクチャ部 よしおかひろたか |June 2nd, 2012	
   1
よしおか	
   本日のメッセージ


開発者の皆さん、
テストを書こう
テストを書く=テストコード+入力データ+期待する出力データ
Excelでテストケースを作ることではない。




                                2
アジェンダ

•  大規模ソフトウェア開発におけるディリー
   ビルド&リグレッションテスト
 –  民族誌的なソフトウェア開発経験のお話




                         3
自己紹介

•  楽天、開発部、開発アーキテクチャ部、技術理事
   よしおかひろたか
•  2009年8月入社
•  カーネル読書会の主宰者、DEBUG HACKS共著
  ISBN978-4-87311-404-0
•  twitter @hyoshiok http://d.hatena.ne.jp/hyoshiok
   http://someday-join-us.blogspot.jp/




                                                      4
わたしの経験から

•  大規模ソフトウェア開発の現場の経験をお話す
   る。
  –  ソフトウェア製品開発は受託開発とは相当異なる。
•  事例:
  –  Oracle8の開発現場
  –  DEC Rdbの日本語化、国際化
  –  日本語COBOL
  –  Samba3.0国際化対応(オープンソースの場合)




                                 5
Oracleの場合

•    開発環境
•    開発プロセス
•    プログラマの日常
•    リズム
•    チェックアウト、チェックイン
•    ディリービルド
•    リグレッションテスト
•    学んだこと


                         6
Oracle 8の場合

•    わたしが参加した時期、1995年~2000年
•    Oracle8/8iあたりのころ
•    開発環境:Sun Workstation、SunOSからSolaris
•    Clearcaseベースの開発環境。
     –  ファイルの仮想化。一人で複数のブランチを同時に
        持てる。
       •  例えば、Oracle 7.3用、Oracle 8用、Oracle 8.1用。バグ修正、
          機能ごと、ちょっとした確認用などなど
       •  check-outしたものはcheck-inするまで他の人には見えない。




                                                        7
開発プロセス(Oracleの場合)

•  要求仕様作り(開発者)
   –  外部API、UIなどを決定する。
       •  例:SQLのシンタックス、セマンティックスを定義する。
   –  リファレンスマニュアルのベースになる。
•  設計(開発者)
   –  APIなどを決定したら、設計&実装になる。
•  実装(開発者)
   –  コードを書く、テストを書く、テストをする
•  ディリービルド&リグレッションテスト(自動)
   –  チェックインされた最新のコードをスクラッチからビルドして、リ
      グレッションテストを実行。
       •  チェックインしたコードの概要と、テスト結果の概要が日々
          担当者にメールで送られる
       •  常に動くコードが毎日ある。
•  安定化プロセス
   –  フィーチャーフリーズ(機能追加を凍結する)
   –  コードフリーズ(重大なバグフィックス以外のチェックインを認め
      ない)                               8
ソフトウェア製品開発のプログラマ

•  設計者が実装者でテストも書く
•  一つの機能については、すべて知ってい
   る。
•  コーダーという人がいるわけではない。




                        9
プログラマの一日

•  朝会社に来る。
•  コーヒーでも飲みながら、メールをチェックする。
    –  担当のテストを確認する。
         •  自分が昨日チェックインしたコードがリグレッションテストを
            壊していないか。
         •  他の人のチェックインが、担当テストを壊していないか。
         •  壊れている場合は、調査する。あるいは調査を依頼する。
•  仕掛の作業を行う。
    –  コードを書いたり、テストを流したり、あれやこれや。
    –  全テストを流すと時間がかかるので、サブセットを流す
    –  コードが安定したら当該ブランチの最新版にマージする
•  自分の環境で動作確認ができたら、
    –  同僚にレビュー依頼をして、コメントをもらう。特に問題がなさそ
       うの場合、リリースマネージャーにチェックインの許可をもらう。
•  許可が出たら、チェックインする。
    –  次の日はどきどきしながらリグレッションテストの結果を見る
•  休暇の前に確認しないでチェックインをするな、という不文律
    –  http://d.hatena.ne.jp/hyoshiok/20040516#p1   10
リズム

•  チェックアウトして
•  コードをいじって、テストを書いて、
•  テストを実行して、OKになるまで繰り返し
   て、
•  同僚にレビューしてもらって、
•  リリースマネージャに許可をもらって、
•  チェックイン


                          11
チェックアウト、チェックイン

•  複数のブランチを同時にいじっている
•  バージョンがいくつか
•  それぞれについて、バグフィックス、機能
   変更、機能追加、機能ごとに別々のブラ
   ンチを切っておく。
•  最新のバージョンでバグフィックスしたも
   のを昔のバージョンに適用することもある。
   (バックポート)


                          12
ディリービルド

•  毎日大量のチェックインがある。数十~
•  最新のソースからビルドする。
 –  コンパイルエラーが出るチェックインは無条
    件にロールバックされる。
 –  複数のビルドマシンで分散ビルド
•  安定性に差こそあれ常に動くものがある。
 –  Oracle8の最初のビルドは前バージョン
    (Oracle 7.3)と同一。ここから始まる。



                               13
リグレッションテスト

•  ディリービルドされた最新の実行イメージでリグ
   レッションテスト(数千)を実行する
 –  10数台(?)のサーバーマシンで何時間もかかる。
 –  テストコード、入力データを与えて、期待する出力と
    実際の出力の差分を見る
 –  diff(差分)が出たらそれを目視確認する。期待する
    結果なのか、いなか。
 –  新機能追加、バグフィックスの場合は対応するテスト
    の追加、修正などを行う。
 –  リグレッションテストがあるので、既存の機能の予期
    しない影響がすぐにわかる。リグレッションの発見。




                                 14
安定化プロセス

•  あるクライテリアで、安定化プロセスに入る。
 –  新機能の追加を凍結する(feature freeze)期間に入
    る
 –  バグ修正だけを行う
 –  リグレッションテストのdiffの数を減少させる
 –  テストの追加、実行だけをやって、製品の安定化を
    図る。
 –  あるクライテリアで、重大なバグ修正以外は一切変
    更を認めない(code freeze)期間に入る。
 –  バグ(不具合)はリリースノート等に記載し出荷する



                                      15
学んだこと

•  ディリービルドによって、常に動作が確認されているも
   のがある。
   –  どの機能が実装されていて、どの機能が実装されていないか
      が一目でわかる
   –  実装すべき機能のプライオリティが変更になったとしても、すぐ
      に対処可能
   –  スケジュールが遅延した場合、どの機能を落とすかの判断が
      容易に可能。(どれが動いているかいないかを把握できている
      ので)
   –  Oracle 8開発開始時には、オブジェクトリレーショナル機能が目
      玉とされていたが、競合が競争力がなくなって行ったので、そ
      の機能の多くは次バージョンへ。
•  大規模ソフトウェア開発において俊敏性を高めるベスト
   プラクティスで、ソフトウェア製品開発では広く利用され
   ている。(例:マイクロソフトのOS開発など)
•  闘うプログラマー http://books.rakuten.co.jp/rb/6130084/

                                                     16
DEC Rdbの日本語化、国際化

•    ソフトウェアの日本語化プロセス
•    ビルド環境って
•    インターネット以前のソフトウェア開発
•    学んだこと




                           17
DEC Rdbの場合

•  ソフトウェアの日本語化プロセス
 –  米国本社で開発されたソフトウェアを日本で日本語
    化した。(別のバイナリーになる)
   •  1980年代後半のころ
   •  参加人員:日本側開発者3名~。US側は100名前後
   •  開発環境の入手
     –  ソースコードの入手
     –  ビルドスクリプト
     –  テスト環境
   •  開発環境構築
     –  VAX/VMS、OSの違い、コンパイラの違い、その他ツールの違いな
        どなどで一筋縄では行かない場合も
   •  実際の開発
     –  ビルド&リグレッションテスト




                                            18
ビルド環境

•  開発環境を日米で完璧に一致させることは難し
   い
 –  もちろん仮想化環境などはない。ツール、コンパイラ、
    OSのバージョン
•  社内ネットワークはあったが回線が細い
 –  100MBをコピーするのに足掛け3日とか
•  リグレッションテストの結果を確認するのが難し
   い。(開発環境が微妙に異なるので)
 –  安定化させるのに2~3ヶ月かかることも。



                                19
インターネット以前のソフトウェア開発

•  大規模分散開発だったのだけど、
  –  社内ネットワークの帯域は細かった
  –  コミュニケーションは、メール、電子掲示板(VAX Notes)
•  最終的には、本社に乗り込んで、ソースコードをマージ
   した(1990年ごろ)
•  DECはOS(VMS)、ハードウェア(VAX)、ミドルウェア
   (Rdb)、コンパイラ、ツール、その他すべて内製品。垂直
   統合型企業
•  SQA (Software Quality Assurance)という部隊があった。
  –  OS/HW/ミドル:各レイヤーの互換性をリグレッションテストで確
     認




                                                20
学んだこと

•  米国本社のエンジニアと一緒に働いた
•  すごいエンジニアがいっぱいいた
•  ソフトウェア国際化のあるべき姿について
   とことん議論できた
•  大規模広域分散ソフトウェア開発のイ
   メージが持てた




                         21
日本語COBOLの場合

•  非力なマシンでのソフトウェア開発
•  コード管理システム、モジュール管理シス
   テム、テスト管理システムなどのお話
•  バグ管理
•  エンジニアのイロハを教えてもらった
•  学んだこと



                         22
プロジェクト概要

•  日本語COBOLの開発
 –  1984年~
 –  3人(自分は新卒プログラマ)
 –  開発環境、VAX/VMS
 –  言語:BLISS、SCAN(独自の言語)
•  コード管理システム、モジュール管理シス
   テム、コンパイラ、テスト管理システム、バ
   グ管理システム、すべて自社製


                           23
•  夜中の0時に、ビルドのバッチが動き出し、その
   後テストを実行する。
 –  チェックインしたファイルのdiffをメールするようにし
    た。
 –  見よう見まねで、makeファイルを書いた。
 –  テストスクリプトもテスト管理システムを利用して書
    いた。テスト結果もメールした。
•  チェックインの数、発見したバグの数、修正した
   バグの数などをグラフにすると、週単位での進
   捗が見えた。(手書きw)



                                  24
バグ管理

•  テストプログラムは、自分以外が実装した
   分について書いた。(他人のコードをテス
   トする)
•  発見したすべてのバグはバグデータベー
   ス(自作)に登録した。
 –  110件くらいバグを発見したと思う。
 –  バグの分析などもした。3割くらいが未実装。



                            25
新人のしつけ(自分のこと)

•  コードを書くとは?
 –  「プログラム書きましたよ」
 –  「あれー、どこにある?チェックインした?」
 –  「チェックインしました」
 –  「あれコンパイルできないぞ」
 –  「コンパイルエラーとりました」
 –  「ところでテストした?」
 –  「していません(てへ)。」
 –  「…(怒)」

                            26
エンジニアのイロハを教えてもらった

•    マニュアルを読むこと
•    テストを書くこと
•    デバッグの仕方
•    質問の仕方




                          27
学んだこと

•    社内にはすごい人がいっぱいいる
•    自分もそうなりたい
•    ソフトウェア開発プロセスのイロハ
•    大規模分散開発のイメージ(未来像)
•    ソフトウェア国際化のイメージ(未来像)




                           28
Samba3.0国際化対応の場合

•    オープンソースとコミュニティの対応
•    新参者がコミュニティに入るには
•    プロジェクトの流れ
•    オープンソースの都市伝説
•    プログラマの日常
•    リズム
•    学んだこと


                           29
Samba3.0国際化

•  プロジェクト概要
 –  Samba2.xは日本人コミュニティが開発した日本語
    パッチがあったが、Samba3.0になって、内部コードが
    Unicodeになったため当該パッチが利用できなくなり
    ShiftJIS関連の問題が発生した。
 –  Unicode対応、テストの追加など
 –  2003年ごろ
 –  http://www.miraclelinux.com/technet/samba30/
    index.html
 –  http://d.hatena.ne.jp/hyoshiok/20041022




                                                   30
オープンソースとコミュニティ

•  高い技術力とdisciplineを持ったハッカーによっ
   て構成されている
 –  企業の開発者は企業の利益拡大
 –  企業の開発者とコミュニティのハッカーの利害が一
    致するとは限らない。しばしば相反する。
•  パッチを送ったからといって受け入れられると
   は限らない。
 –  技術的な問題というより、しばしばコミュニケーション
    の問題だったりする



                                 31
新参者がコミュニティに受け入れられるには

•  何の実績もない人が受け入れられるには
   –  技術の問題ではなくコミュニケーションの問題と認識した
       •  Samba-jp(日本のコミュニティ)とSambaのコミュニティ
          の関係。両方に受け入れられる必要がある。
   –  テストをどんどん作って、発見した問題をバグデータ
      ベースにどんどん登録した。チームのメンバーは個人名
      で登録。
   –  ついでにパッチなども投稿した。個人名で投稿。
   –  直接会って話したり、メール、チャット、電話会議などで、
      プロジェクトの紹介などを行った。
   –  コミュニティにデビューするには、自分たちの技術力を
      理解してもらう必要がある。バグフィックスは最初の一歩。
   –  大きなパッチをいきなり送るのではなく、小さいバグ
      フィックスの積み重ねで、徐々に信頼を得ていく。
                                             32
プロジェクトの流れ

•  ディリービルド、リグレッションテストの開発環境
   を準備した。
•  Sambaのテストフレームワークを利用し
    –  テストケースの作成
    –  テストコードの作成
    –  テストの実施
    –  不具合をbugzillaに登録
    –  修正パッチを投稿
•  機能追加、修正などのパッチを適宜投稿。本家
   にマージしてもらう。
•  英語のホームページ、ドキュメントなども用意し
   た
•  フェースツーフェースの会議、メール、チャット、   33	

   電話など様々な方法をとった
オープンソースの都市伝説

•  ハッカーは無法者?
 –  極めて高い技術力とdiscipline(規律)を持つ
 –  コミュニティの価値を大切にする
 –  プロフェッショナルである




                                 34
プログラマの日常

•    やることリストの確認
•    Bugzillaのチェック
•    テストの追加
•    パッチの作成
     –  リグレッションが起こっていないことを確認
     –  新機能が実装されていることを確認
•  コミュニティへ投稿
     –  メーリングリスト、電話、チャット、などなど


                                35
リズム

•  作成したテスト数が見える
•  バグの数が既知
 –  最初にテストがあるので、そのテストで発見
    した数が初期値になる
 –  Samba3.0は今ここにあるが国際化の機能が
    ない。(バグの数=実装すべき機能)
•  バグの数を減らしていくのがリズム



                              36
学んだこと

•  OSSもテストファーストできた
•  何をやりたいかをテストで表現した
   WHAT
•  テストを作ることによってオリジナル製品
   の挙動を深く理解した
•  プロジェクトマネージャーとして、プロジェ
   クトの進捗が、テストの進捗、残バグ数に
   よって見える化されているので、安心。


                          37
ちょっとした思い

•  プロフェッショナルって
•  変化を許容すること
•  プログラマに必要な3つのチカラ




                     38
プロフェッショナルについて

•  ソフトウェアは人が作る
 –  自分がプロフェッショナルになるしかない…
 –  アスリートが毎日トレーニングしているように
    われわれはトレーニングをしているだろうか




                            39
変化を許容することについて

•  環境は変化する
•  自分は変化しているだろうか
•  成長しているだろうか




                    40
プログラマに必要な3つのチカラ

•  ソースコードリーディング
•  テスト
•  デバッグ



•  ワークショップや勉強会を開催していきた
   い~~~


                         41
経験則

•  テストを書かない
   プロフェッショナルはいない
   (プログラマ的な意味で)
•  テストのないコードは
   レガシーコードだ。
•  読書会しましょう~

レガシーコード改善ガイド
  保守開発のためのリファクタリング、翔泳社
http://books.rakuten.co.jp/rb/6121689/

                                         42
•  公理1:すべてのプログラムは
   テストをしなければいけない。
•  では、どうテストをするか
 –  A:人がやる
 –  B:テストコードを書いて、それを実行する
 –  正解:B
 –  証明:自明。



                           43
テストを作ると

•  システムの振る舞い(WHAT)を
   記したことになる
 –  テストを作ることによって、システムの深い理
    解を得られる
 –  安心感を得られる(心の平静を保てる)




                            44
テストがあると

•  変更の影響が即座にわかる
 –  影響範囲がわからなくて、
    塩漬けではなく、
    どんどん積極的に変更できる
    >変更容易性、アジリティ向上
 –  安心である。(心の平静が保てる)




                       45
テストがあると

•  機能を確実に実装したことを
   確認できる。
 –  手作業による確認は、もれやミスが発生する。
    コストが高いし、なにより楽しくない。
 –  機械が実行してくれるので、楽である。
 –  安心である。 (心の平静が保てる)




                            46
テストがあると

•  変更容易性があがり、
   運用コストが下がる
 –  OSやHWなどシステムを変更したときも、そ
    の影響がすぐにわかる
 –  安心である。 (心の平静が保てる)




                            47
開発者の皆さん、
テストを書こう
テストを書いてプロフェッショナルになろう
世界へ行こう
              ご参加
             おまちしてます

                       48
49

Más contenido relacionado

Similar a TDDBC osaka 2012/06/02

大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験についてRakuten Group, Inc.
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to JapanAndy Singleton
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaShigeru Hanada
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02takepu
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~Rakuten Group, Inc.
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCDaisuke Nishino
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 
CodingTips+ 基礎編
CodingTips+ 基礎編CodingTips+ 基礎編
CodingTips+ 基礎編Yusuke Ito
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2Ryohei Kamiya
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門VirtualTech Japan Inc.
 
博士論文公聴会
博士論文公聴会博士論文公聴会
博士論文公聴会Makoto SAKAI
 

Similar a TDDBC osaka 2012/06/02 (20)

大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to Japan
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
CodingTips+ 基礎編
CodingTips+ 基礎編CodingTips+ 基礎編
CodingTips+ 基礎編
 
今さら聞けない人のためのDevOps超入門 ODC2023編
今さら聞けない人のためのDevOps超入門 ODC2023編今さら聞けない人のためのDevOps超入門 ODC2023編
今さら聞けない人のためのDevOps超入門 ODC2023編
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
博士論文公聴会
博士論文公聴会博士論文公聴会
博士論文公聴会
 

Más de Hiro Yoshioka

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Hiro Yoshioka
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Hiro Yoshioka
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにかHiro Yoshioka
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方Hiro Yoshioka
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活Hiro Yoshioka
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Hiro Yoshioka
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性があるHiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7Hiro Yoshioka
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演Hiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】Hiro Yoshioka
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_studyHiro Yoshioka
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Hiro Yoshioka
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56Hiro Yoshioka
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術Hiro Yoshioka
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Hiro Yoshioka
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirlsHiro Yoshioka
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるHiro Yoshioka
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureHiro Yoshioka
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaSHiro Yoshioka
 

Más de Hiro Yoshioka (20)

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirls
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考える
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker culture
 
Be Hacker
Be HackerBe Hacker
Be Hacker
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 

TDDBC osaka 2012/06/02

  • 1. よしおかひろたか TDDBC@大阪 楽天株式会社 DU,開発アーキテクチャ部 よしおかひろたか |June 2nd, 2012 1
  • 2. よしおか 本日のメッセージ 開発者の皆さん、 テストを書こう テストを書く=テストコード+入力データ+期待する出力データ Excelでテストケースを作ることではない。 2
  • 3. アジェンダ •  大規模ソフトウェア開発におけるディリー ビルド&リグレッションテスト –  民族誌的なソフトウェア開発経験のお話 3
  • 4. 自己紹介 •  楽天、開発部、開発アーキテクチャ部、技術理事 よしおかひろたか •  2009年8月入社 •  カーネル読書会の主宰者、DEBUG HACKS共著 ISBN978-4-87311-404-0 •  twitter @hyoshiok http://d.hatena.ne.jp/hyoshiok http://someday-join-us.blogspot.jp/ 4
  • 5. わたしの経験から •  大規模ソフトウェア開発の現場の経験をお話す る。 –  ソフトウェア製品開発は受託開発とは相当異なる。 •  事例: –  Oracle8の開発現場 –  DEC Rdbの日本語化、国際化 –  日本語COBOL –  Samba3.0国際化対応(オープンソースの場合) 5
  • 6. Oracleの場合 •  開発環境 •  開発プロセス •  プログラマの日常 •  リズム •  チェックアウト、チェックイン •  ディリービルド •  リグレッションテスト •  学んだこと 6
  • 7. Oracle 8の場合 •  わたしが参加した時期、1995年~2000年 •  Oracle8/8iあたりのころ •  開発環境:Sun Workstation、SunOSからSolaris •  Clearcaseベースの開発環境。 –  ファイルの仮想化。一人で複数のブランチを同時に 持てる。 •  例えば、Oracle 7.3用、Oracle 8用、Oracle 8.1用。バグ修正、 機能ごと、ちょっとした確認用などなど •  check-outしたものはcheck-inするまで他の人には見えない。 7
  • 8. 開発プロセス(Oracleの場合) •  要求仕様作り(開発者) –  外部API、UIなどを決定する。 •  例:SQLのシンタックス、セマンティックスを定義する。 –  リファレンスマニュアルのベースになる。 •  設計(開発者) –  APIなどを決定したら、設計&実装になる。 •  実装(開発者) –  コードを書く、テストを書く、テストをする •  ディリービルド&リグレッションテスト(自動) –  チェックインされた最新のコードをスクラッチからビルドして、リ グレッションテストを実行。 •  チェックインしたコードの概要と、テスト結果の概要が日々 担当者にメールで送られる •  常に動くコードが毎日ある。 •  安定化プロセス –  フィーチャーフリーズ(機能追加を凍結する) –  コードフリーズ(重大なバグフィックス以外のチェックインを認め ない) 8
  • 10. プログラマの一日 •  朝会社に来る。 •  コーヒーでも飲みながら、メールをチェックする。 –  担当のテストを確認する。 •  自分が昨日チェックインしたコードがリグレッションテストを 壊していないか。 •  他の人のチェックインが、担当テストを壊していないか。 •  壊れている場合は、調査する。あるいは調査を依頼する。 •  仕掛の作業を行う。 –  コードを書いたり、テストを流したり、あれやこれや。 –  全テストを流すと時間がかかるので、サブセットを流す –  コードが安定したら当該ブランチの最新版にマージする •  自分の環境で動作確認ができたら、 –  同僚にレビュー依頼をして、コメントをもらう。特に問題がなさそ うの場合、リリースマネージャーにチェックインの許可をもらう。 •  許可が出たら、チェックインする。 –  次の日はどきどきしながらリグレッションテストの結果を見る •  休暇の前に確認しないでチェックインをするな、という不文律 –  http://d.hatena.ne.jp/hyoshiok/20040516#p1 10
  • 11. リズム •  チェックアウトして •  コードをいじって、テストを書いて、 •  テストを実行して、OKになるまで繰り返し て、 •  同僚にレビューしてもらって、 •  リリースマネージャに許可をもらって、 •  チェックイン 11
  • 12. チェックアウト、チェックイン •  複数のブランチを同時にいじっている •  バージョンがいくつか •  それぞれについて、バグフィックス、機能 変更、機能追加、機能ごとに別々のブラ ンチを切っておく。 •  最新のバージョンでバグフィックスしたも のを昔のバージョンに適用することもある。 (バックポート) 12
  • 13. ディリービルド •  毎日大量のチェックインがある。数十~ •  最新のソースからビルドする。 –  コンパイルエラーが出るチェックインは無条 件にロールバックされる。 –  複数のビルドマシンで分散ビルド •  安定性に差こそあれ常に動くものがある。 –  Oracle8の最初のビルドは前バージョン (Oracle 7.3)と同一。ここから始まる。 13
  • 14. リグレッションテスト •  ディリービルドされた最新の実行イメージでリグ レッションテスト(数千)を実行する –  10数台(?)のサーバーマシンで何時間もかかる。 –  テストコード、入力データを与えて、期待する出力と 実際の出力の差分を見る –  diff(差分)が出たらそれを目視確認する。期待する 結果なのか、いなか。 –  新機能追加、バグフィックスの場合は対応するテスト の追加、修正などを行う。 –  リグレッションテストがあるので、既存の機能の予期 しない影響がすぐにわかる。リグレッションの発見。 14
  • 15. 安定化プロセス •  あるクライテリアで、安定化プロセスに入る。 –  新機能の追加を凍結する(feature freeze)期間に入 る –  バグ修正だけを行う –  リグレッションテストのdiffの数を減少させる –  テストの追加、実行だけをやって、製品の安定化を 図る。 –  あるクライテリアで、重大なバグ修正以外は一切変 更を認めない(code freeze)期間に入る。 –  バグ(不具合)はリリースノート等に記載し出荷する 15
  • 16. 学んだこと •  ディリービルドによって、常に動作が確認されているも のがある。 –  どの機能が実装されていて、どの機能が実装されていないか が一目でわかる –  実装すべき機能のプライオリティが変更になったとしても、すぐ に対処可能 –  スケジュールが遅延した場合、どの機能を落とすかの判断が 容易に可能。(どれが動いているかいないかを把握できている ので) –  Oracle 8開発開始時には、オブジェクトリレーショナル機能が目 玉とされていたが、競合が競争力がなくなって行ったので、そ の機能の多くは次バージョンへ。 •  大規模ソフトウェア開発において俊敏性を高めるベスト プラクティスで、ソフトウェア製品開発では広く利用され ている。(例:マイクロソフトのOS開発など) •  闘うプログラマー http://books.rakuten.co.jp/rb/6130084/ 16
  • 17. DEC Rdbの日本語化、国際化 •  ソフトウェアの日本語化プロセス •  ビルド環境って •  インターネット以前のソフトウェア開発 •  学んだこと 17
  • 18. DEC Rdbの場合 •  ソフトウェアの日本語化プロセス –  米国本社で開発されたソフトウェアを日本で日本語 化した。(別のバイナリーになる) •  1980年代後半のころ •  参加人員:日本側開発者3名~。US側は100名前後 •  開発環境の入手 –  ソースコードの入手 –  ビルドスクリプト –  テスト環境 •  開発環境構築 –  VAX/VMS、OSの違い、コンパイラの違い、その他ツールの違いな どなどで一筋縄では行かない場合も •  実際の開発 –  ビルド&リグレッションテスト 18
  • 19. ビルド環境 •  開発環境を日米で完璧に一致させることは難し い –  もちろん仮想化環境などはない。ツール、コンパイラ、 OSのバージョン •  社内ネットワークはあったが回線が細い –  100MBをコピーするのに足掛け3日とか •  リグレッションテストの結果を確認するのが難し い。(開発環境が微妙に異なるので) –  安定化させるのに2~3ヶ月かかることも。 19
  • 20. インターネット以前のソフトウェア開発 •  大規模分散開発だったのだけど、 –  社内ネットワークの帯域は細かった –  コミュニケーションは、メール、電子掲示板(VAX Notes) •  最終的には、本社に乗り込んで、ソースコードをマージ した(1990年ごろ) •  DECはOS(VMS)、ハードウェア(VAX)、ミドルウェア (Rdb)、コンパイラ、ツール、その他すべて内製品。垂直 統合型企業 •  SQA (Software Quality Assurance)という部隊があった。 –  OS/HW/ミドル:各レイヤーの互換性をリグレッションテストで確 認 20
  • 21. 学んだこと •  米国本社のエンジニアと一緒に働いた •  すごいエンジニアがいっぱいいた •  ソフトウェア国際化のあるべき姿について とことん議論できた •  大規模広域分散ソフトウェア開発のイ メージが持てた 21
  • 22. 日本語COBOLの場合 •  非力なマシンでのソフトウェア開発 •  コード管理システム、モジュール管理シス テム、テスト管理システムなどのお話 •  バグ管理 •  エンジニアのイロハを教えてもらった •  学んだこと 22
  • 23. プロジェクト概要 •  日本語COBOLの開発 –  1984年~ –  3人(自分は新卒プログラマ) –  開発環境、VAX/VMS –  言語:BLISS、SCAN(独自の言語) •  コード管理システム、モジュール管理シス テム、コンパイラ、テスト管理システム、バ グ管理システム、すべて自社製 23
  • 24. •  夜中の0時に、ビルドのバッチが動き出し、その 後テストを実行する。 –  チェックインしたファイルのdiffをメールするようにし た。 –  見よう見まねで、makeファイルを書いた。 –  テストスクリプトもテスト管理システムを利用して書 いた。テスト結果もメールした。 •  チェックインの数、発見したバグの数、修正した バグの数などをグラフにすると、週単位での進 捗が見えた。(手書きw) 24
  • 25. バグ管理 •  テストプログラムは、自分以外が実装した 分について書いた。(他人のコードをテス トする) •  発見したすべてのバグはバグデータベー ス(自作)に登録した。 –  110件くらいバグを発見したと思う。 –  バグの分析などもした。3割くらいが未実装。 25
  • 26. 新人のしつけ(自分のこと) •  コードを書くとは? –  「プログラム書きましたよ」 –  「あれー、どこにある?チェックインした?」 –  「チェックインしました」 –  「あれコンパイルできないぞ」 –  「コンパイルエラーとりました」 –  「ところでテストした?」 –  「していません(てへ)。」 –  「…(怒)」 26
  • 27. エンジニアのイロハを教えてもらった •  マニュアルを読むこと •  テストを書くこと •  デバッグの仕方 •  質問の仕方 27
  • 28. 学んだこと •  社内にはすごい人がいっぱいいる •  自分もそうなりたい •  ソフトウェア開発プロセスのイロハ •  大規模分散開発のイメージ(未来像) •  ソフトウェア国際化のイメージ(未来像) 28
  • 29. Samba3.0国際化対応の場合 •  オープンソースとコミュニティの対応 •  新参者がコミュニティに入るには •  プロジェクトの流れ •  オープンソースの都市伝説 •  プログラマの日常 •  リズム •  学んだこと 29
  • 30. Samba3.0国際化 •  プロジェクト概要 –  Samba2.xは日本人コミュニティが開発した日本語 パッチがあったが、Samba3.0になって、内部コードが Unicodeになったため当該パッチが利用できなくなり ShiftJIS関連の問題が発生した。 –  Unicode対応、テストの追加など –  2003年ごろ –  http://www.miraclelinux.com/technet/samba30/ index.html –  http://d.hatena.ne.jp/hyoshiok/20041022 30
  • 31. オープンソースとコミュニティ •  高い技術力とdisciplineを持ったハッカーによっ て構成されている –  企業の開発者は企業の利益拡大 –  企業の開発者とコミュニティのハッカーの利害が一 致するとは限らない。しばしば相反する。 •  パッチを送ったからといって受け入れられると は限らない。 –  技術的な問題というより、しばしばコミュニケーション の問題だったりする 31
  • 32. 新参者がコミュニティに受け入れられるには •  何の実績もない人が受け入れられるには –  技術の問題ではなくコミュニケーションの問題と認識した •  Samba-jp(日本のコミュニティ)とSambaのコミュニティ の関係。両方に受け入れられる必要がある。 –  テストをどんどん作って、発見した問題をバグデータ ベースにどんどん登録した。チームのメンバーは個人名 で登録。 –  ついでにパッチなども投稿した。個人名で投稿。 –  直接会って話したり、メール、チャット、電話会議などで、 プロジェクトの紹介などを行った。 –  コミュニティにデビューするには、自分たちの技術力を 理解してもらう必要がある。バグフィックスは最初の一歩。 –  大きなパッチをいきなり送るのではなく、小さいバグ フィックスの積み重ねで、徐々に信頼を得ていく。 32
  • 33. プロジェクトの流れ •  ディリービルド、リグレッションテストの開発環境 を準備した。 •  Sambaのテストフレームワークを利用し –  テストケースの作成 –  テストコードの作成 –  テストの実施 –  不具合をbugzillaに登録 –  修正パッチを投稿 •  機能追加、修正などのパッチを適宜投稿。本家 にマージしてもらう。 •  英語のホームページ、ドキュメントなども用意し た •  フェースツーフェースの会議、メール、チャット、 33 電話など様々な方法をとった
  • 34. オープンソースの都市伝説 •  ハッカーは無法者? –  極めて高い技術力とdiscipline(規律)を持つ –  コミュニティの価値を大切にする –  プロフェッショナルである 34
  • 35. プログラマの日常 •  やることリストの確認 •  Bugzillaのチェック •  テストの追加 •  パッチの作成 –  リグレッションが起こっていないことを確認 –  新機能が実装されていることを確認 •  コミュニティへ投稿 –  メーリングリスト、電話、チャット、などなど 35
  • 36. リズム •  作成したテスト数が見える •  バグの数が既知 –  最初にテストがあるので、そのテストで発見 した数が初期値になる –  Samba3.0は今ここにあるが国際化の機能が ない。(バグの数=実装すべき機能) •  バグの数を減らしていくのがリズム 36
  • 37. 学んだこと •  OSSもテストファーストできた •  何をやりたいかをテストで表現した WHAT •  テストを作ることによってオリジナル製品 の挙動を深く理解した •  プロジェクトマネージャーとして、プロジェ クトの進捗が、テストの進捗、残バグ数に よって見える化されているので、安心。 37
  • 39. プロフェッショナルについて •  ソフトウェアは人が作る –  自分がプロフェッショナルになるしかない… –  アスリートが毎日トレーニングしているように われわれはトレーニングをしているだろうか 39
  • 41. プログラマに必要な3つのチカラ •  ソースコードリーディング •  テスト •  デバッグ •  ワークショップや勉強会を開催していきた い~~~ 41
  • 42. 経験則 •  テストを書かない プロフェッショナルはいない (プログラマ的な意味で) •  テストのないコードは レガシーコードだ。 •  読書会しましょう~ レガシーコード改善ガイド 保守開発のためのリファクタリング、翔泳社 http://books.rakuten.co.jp/rb/6121689/ 42
  • 43. •  公理1:すべてのプログラムは テストをしなければいけない。 •  では、どうテストをするか –  A:人がやる –  B:テストコードを書いて、それを実行する –  正解:B –  証明:自明。 43
  • 44. テストを作ると •  システムの振る舞い(WHAT)を 記したことになる –  テストを作ることによって、システムの深い理 解を得られる –  安心感を得られる(心の平静を保てる) 44
  • 45. テストがあると •  変更の影響が即座にわかる –  影響範囲がわからなくて、 塩漬けではなく、 どんどん積極的に変更できる >変更容易性、アジリティ向上 –  安心である。(心の平静が保てる) 45
  • 46. テストがあると •  機能を確実に実装したことを 確認できる。 –  手作業による確認は、もれやミスが発生する。 コストが高いし、なにより楽しくない。 –  機械が実行してくれるので、楽である。 –  安心である。 (心の平静が保てる) 46
  • 47. テストがあると •  変更容易性があがり、 運用コストが下がる –  OSやHWなどシステムを変更したときも、そ の影響がすぐにわかる –  安心である。 (心の平静が保てる) 47
  • 49. 49