SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
よしおかひろたか
           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

Weitere ähnliche Inhalte

Was ist angesagt?

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介JustSystems Corporation
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化Satoshi Akama
 
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発Takafumi ONAKA
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門H Iseri
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightkyon mm
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 

Was ist angesagt? (20)

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
 
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornight
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 

Ähnlich wie 大規模ソフトウェア開発とテストの経験について

TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02Hiro Yoshioka
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1Hiro Yoshioka
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく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
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門VirtualTech Japan Inc.
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 
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
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)Developers Summit
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景Koichi ITO
 

Ähnlich wie 大規模ソフトウェア開発とテストの経験について (20)

TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to Japan
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
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
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
DevOps、その前に
DevOps、その前にDevOps、その前に
DevOps、その前に
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
 

Mehr von Rakuten Group, Inc.

コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話Rakuten Group, Inc.
 
楽天における安全な秘匿情報管理への道のり
楽天における安全な秘匿情報管理への道のり楽天における安全な秘匿情報管理への道のり
楽天における安全な秘匿情報管理への道のりRakuten Group, Inc.
 
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...Rakuten Group, Inc.
 
DataSkillCultureを浸透させる楽天の取り組み
DataSkillCultureを浸透させる楽天の取り組みDataSkillCultureを浸透させる楽天の取り組み
DataSkillCultureを浸透させる楽天の取り組みRakuten Group, Inc.
 
大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開Rakuten Group, Inc.
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用楽天における大規模データベースの運用
楽天における大規模データベースの運用Rakuten Group, Inc.
 
楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャーRakuten Group, Inc.
 
楽天の規模とクラウドプラットフォーム統括部の役割
楽天の規模とクラウドプラットフォーム統括部の役割楽天の規模とクラウドプラットフォーム統括部の役割
楽天の規模とクラウドプラットフォーム統括部の役割Rakuten Group, Inc.
 
Rakuten Services and Infrastructure Team.pdf
Rakuten Services and Infrastructure Team.pdfRakuten Services and Infrastructure Team.pdf
Rakuten Services and Infrastructure Team.pdfRakuten Group, Inc.
 
The Data Platform Administration Handling the 100 PB.pdf
The Data Platform Administration Handling the 100 PB.pdfThe Data Platform Administration Handling the 100 PB.pdf
The Data Platform Administration Handling the 100 PB.pdfRakuten Group, Inc.
 
Supporting Internal Customers as Technical Account Managers.pdf
Supporting Internal Customers as Technical Account Managers.pdfSupporting Internal Customers as Technical Account Managers.pdf
Supporting Internal Customers as Technical Account Managers.pdfRakuten Group, Inc.
 
Making Cloud Native CI_CD Services.pdf
Making Cloud Native CI_CD Services.pdfMaking Cloud Native CI_CD Services.pdf
Making Cloud Native CI_CD Services.pdfRakuten Group, Inc.
 
How We Defined Our Own Cloud.pdf
How We Defined Our Own Cloud.pdfHow We Defined Our Own Cloud.pdf
How We Defined Our Own Cloud.pdfRakuten Group, Inc.
 
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoTravel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoRakuten Group, Inc.
 
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoTravel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoRakuten Group, Inc.
 
Introduction of GORA API Group technology
Introduction of GORA API Group technologyIntroduction of GORA API Group technology
Introduction of GORA API Group technologyRakuten Group, Inc.
 
100PBを越えるデータプラットフォームの実情
100PBを越えるデータプラットフォームの実情100PBを越えるデータプラットフォームの実情
100PBを越えるデータプラットフォームの実情Rakuten Group, Inc.
 
社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャー社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャーRakuten Group, Inc.
 

Mehr von Rakuten Group, Inc. (20)

コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
 
楽天における安全な秘匿情報管理への道のり
楽天における安全な秘匿情報管理への道のり楽天における安全な秘匿情報管理への道のり
楽天における安全な秘匿情報管理への道のり
 
What Makes Software Green?
What Makes Software Green?What Makes Software Green?
What Makes Software Green?
 
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...
 
DataSkillCultureを浸透させる楽天の取り組み
DataSkillCultureを浸透させる楽天の取り組みDataSkillCultureを浸透させる楽天の取り組み
DataSkillCultureを浸透させる楽天の取り組み
 
大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用楽天における大規模データベースの運用
楽天における大規模データベースの運用
 
楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー
 
楽天の規模とクラウドプラットフォーム統括部の役割
楽天の規模とクラウドプラットフォーム統括部の役割楽天の規模とクラウドプラットフォーム統括部の役割
楽天の規模とクラウドプラットフォーム統括部の役割
 
Rakuten Services and Infrastructure Team.pdf
Rakuten Services and Infrastructure Team.pdfRakuten Services and Infrastructure Team.pdf
Rakuten Services and Infrastructure Team.pdf
 
The Data Platform Administration Handling the 100 PB.pdf
The Data Platform Administration Handling the 100 PB.pdfThe Data Platform Administration Handling the 100 PB.pdf
The Data Platform Administration Handling the 100 PB.pdf
 
Supporting Internal Customers as Technical Account Managers.pdf
Supporting Internal Customers as Technical Account Managers.pdfSupporting Internal Customers as Technical Account Managers.pdf
Supporting Internal Customers as Technical Account Managers.pdf
 
Making Cloud Native CI_CD Services.pdf
Making Cloud Native CI_CD Services.pdfMaking Cloud Native CI_CD Services.pdf
Making Cloud Native CI_CD Services.pdf
 
How We Defined Our Own Cloud.pdf
How We Defined Our Own Cloud.pdfHow We Defined Our Own Cloud.pdf
How We Defined Our Own Cloud.pdf
 
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoTravel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech info
 
Travel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech infoTravel & Leisure Platform Department's tech info
Travel & Leisure Platform Department's tech info
 
OWASPTop10_Introduction
OWASPTop10_IntroductionOWASPTop10_Introduction
OWASPTop10_Introduction
 
Introduction of GORA API Group technology
Introduction of GORA API Group technologyIntroduction of GORA API Group technology
Introduction of GORA API Group technology
 
100PBを越えるデータプラットフォームの実情
100PBを越えるデータプラットフォームの実情100PBを越えるデータプラットフォームの実情
100PBを越えるデータプラットフォームの実情
 
社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャー社内エンジニアを支えるテクニカルアカウントマネージャー
社内エンジニアを支えるテクニカルアカウントマネージャー
 

大規模ソフトウェア開発とテストの経験について

  • 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