デブサミ2011( #devsumi )2日目参加メモ

デブサミ2011の二日目へ参加した際のメモです.

■日時:2011/02/17(木) - 18(金) 09:30-18:15
■場所:目黒雅叙園
■参考:http://codezine.jp/devsumi/2011/
■参加者数:のべ1000名以上

■参加したセッション
□和田さん -プログラマが知るべき,たったひとつの大事な事柄-
□西山さん,高石さん -第三者作成ソースコードに埋もれている不具合を暴け!-
□吉田さん -システムアーキテクチャ構築の実践手法-
□及川さん -クラウド時代のソフトウェア開発-
□野村さん,市谷さん -未来の為に私たちの帆を立てよう-


■資料

■感想
前日のLT大会や和田さんや野村さんのセッションなど,デブサミは感情へ働きかけるセッションが多いように感じます.
その意味でも二日間の最後に野村さんのセッションがあったのは,今後に向けての意識づけとして良かったと思いました.
自分が少しでも何かできたらと思う2日間でした.


■メモ

  • コンテンツ委員:和田さん
    • 今日からが3割くらい
    • 去年も参加者5割くらい
    • 強いテーマを出したくて,"創発"だった.
    • このトラックのテーマは"定着しつつあるアジャイル"に関して

□和田さん-プログラマが知るべき,たったひとつの大事な事柄-

  • #97prog_ja
  • 大事だなと思うことを話す.
    • ここでは,「自分」の話をする.ここまでの道のりをはなす
  • 最も大事なきのこ.
    • No.18の学び続ける姿勢
  • 読む,書く,話す時代について話す
  • 原メソッド
  • 1996年にアメリカではじめてコンピュータに触れた
  • ホームステイ先の子供と仲良くなるために,やってみせた.
    • 無限ワンナップ
    • →人の心をつかむためにはやってみせることが大事だと学んだ.
  • 2000年にOOにどはまり.厨二級.
    • 完全主義の呪いにかかった
  • 2002年にまさーるさん(石井勝)会った.
    • JUnitやテストに関して学んだ.
  • 写経
    • 技術書の写経の方法.でググルと出てくる.
  • 深夜バスのなかでTDDを写経してた,
    • ケントベックのTDDドラフトを写経
  • ひたすら本,WEBを読んでいた.
    • 身につけたい技術は写経していた
  • 完璧主義から,まさーるさんとTDDが救ってくれた.
  • 2004/7/1にチーム角谷にコーチとして参加した.
    • 全開でXPやってくれ.
  • 2004/7/1にはてなにアウトプットし始めた
    • No.J02.ロールプレイングゲームをやりはじめた.
    • No.54 見える化
    • No.80 1人より2人
    • No.65 バーション管理システム
    • No.79 テストのないソフトウェア開発はありえない
    • No.51 プロジェクト自身にしゃべらせる
      • 今なら,Jenkinsなどで回して,赤ランプ
  • 常に自分よりレベルの高い人と仕事をするようにする.
  • 自分の良い師匠が増えた
  • 自分が学びたいことを人に教えたりするようになった.
  • 2005/4/25に福知山線の事故でまさーるさんが亡くなった.
    • それをきっかけに書くだけでなく,話すようになった.
    • 人に対して伝えないとと始めた.
  • テストの再分類するモデルを作り始めた.
  • コードの4象限(動作する,きれいなコード)を作った.
    • TDDと黄金の回転
  • アウトプットするとインプットが増える
    • そのアウトプットがどんどんアウトプットを増やす.
      • その結果WEB+DBへTDD特集
      • TDDを動画で解説
  • これらによりTDDのブランディングができた.
  • 自分の得意分野ができた.
  • 2008/02/14にデブサミに初めて登壇
    • デベロッパーテスティング・ライブ
    • やってみせることが重要であること再認識した.
  • java-jaに出会う
    • ライブ再び
  • Twitterが生き生きしてきたことを感じた
  • 渦を作る:Influence:インフルーエンス
  • TDD Boot Campをはじめた(東京→北陸→名古屋→札幌,今後,九州→四国,大阪,横浜)
    • 下記のものを伝えたくてはじめた
      • 現実に立ち向かう術
      • ペアプロの楽しさを学んでほしい
      • プロとしての嗜み
    • 会場内で20名くらい参加者
    • 渦を作ることができたかなと思ってる
  • 学び続けるコツ
    • 身の回りをプログラミングする
      • 今回のプレゼンシステムも自作(グーグルのものをベースにこちょこちょした)
    • 毎年新しい言語を学ぶ(達人プログラマ)
      • 自分のメイン言語への良い反応もある
      • 写経している
    • 若い人から学ぶ
      • Danさん:一生プログラマでいられるかは言い換えれば,年下から学べるか否か.
    • 毎年初心者に戻るような意識が大事なこと
    • リセットするのではなく,「らせん」となる.
      • Hadoopを分散バッチといってしまったら思考停止
  • なぜアジャイルでなくTDDなのか
    • アジャイルは周りの人の変化が必要
    • TDDなら自分1人でも始められる.
    • TDDはスキル.才能ではない.
      • 量は質に転化する
      • 写経することから始めよう.


□日本Rubyの会

  • 写経するならどんな本?


□西山さん,高石さん -第三者作成ソースコードに埋もれている不具合を暴け!-

  • コベリティ
    • 従業員165名->年度末に200名位
    • 10万名くらいの開発者に使ってもらってる
    • 組み込み製品内の静的解析ツールとしてはNo.1
      • 34.5%で2位を大きく引き離している
    • 見つかる不具合
      • 並列処理の問題
      • パフォーマンスの低下
      • クラッシュの問題
      • プログラムの不正な動作
      • セキュリティ上の脆弱性
      • APIの不適切な使用
  • 課題
    • 複雑になるコードの管理
    • 肥大化する開発コスト
    • 不具合が与えるビジネスへの影響
    • 開発スケジュールの遅延
    • ソフトウェアサプライチェーンにおける品質の担保
  • 出荷後の修正コストは開発時の30倍くらい
    • Forrester, Jan. 2009 より
  • 納期どおりに間に合っていないケースが49%位
    • balaco 〜 より
  • 世界中の開発者や部品を利用することが増えている.
    • Gartner調べで,2012年62%のOSSのOS利用となる
  • Android
    • 150種類以上の端末
    • 昨年より10倍位の伸び
    • HTCが公開しているソースを解析
      • ソース75万行,バグは359発見.
        • 平均的には1000行に1バグなので,優秀,
    • Android固有の部分がLinuxより2倍のバグ密度
    • 再テストをおこなった.USで結果が出ている.
  • トライアル提供中
  • OSSを使っている場合,それの品質を知りたい場合はWEB参照
  • 高石さん:アンドロイド解析デモ
    • 別ファイルの参照もインラインで表示する

□吉田さん:-システムアーキテクチャ構築の実践手法-

  • 機能ベースの開発方法論は多いが,非機能要件を満たすような開発方法論はあまりない.
  • "システムアーキテクチャ構築の実践手法"の本の深読みのために.
  • 流れ
  • アーキテクチャとは構造である.
    • 詳細は,IEEE Std. 1471-2000参照
    • 構造=構成要素(ハードウェア,ソフトウェアなど)とその間の動的・静的な関係を定義した物
    • インタフェースを明確に持っている.
    • 入れ子構造
    • 範囲(システム・コンテクスト)が重要
      • 問題領域がどこなのかが大事.
  • システム構造と構成要素と責務を明らかにしなければコストを算出できない.
  • アーキテクチャの特徴
    • 見えない構造の可視化であり,一義的でなければならない.
    • 設計・実装上の判断のよりどころとなる.指針となる.
    • アーキテクチャは設計され,実装され,アセット化され再利用される.
  • システム(ソフトウェア)構造の判断は開発の初期になされる.
    • アーキテクチャ上の判断
    • 開発対象の特定のため
    • 役割や作業の分担のため
    • ここにアジャイルの有効性が言われている.
      • 作ったものを叩いていける
      • エンドユーザーのやりたいことが明確になっていく
  • その時点では実際のシステム(ソフトウェア)は存在しない
    • 十分な情報が揃った上で検討がなされることは少ない
  • アーキテクチャ上の判断
    • 開発上のリスクを踏まえて,システム設計の方向づけを行う必要がある
    • 仮定も明確にする必要がある.
    • ところどころで評価することで,最悪その時点まで戻ればいいようにする.チェックポイント.
  • ステークホルダ
    • システムに関して興味または肝心ごとを有する個人,チーム,組織
      • IEEE Std. 1471-2000
    • ステークホルダとして,要求者,取得者,コンサルタント,アーキテクト,開発者,運用者
    • これらの人とコミュニケーションする必要がある
  • アーキテクチャの表現
    • 構造を一義的に解釈することができるのか.
    • そもそも,対象の本質をひとつの視点からのみで表現できない
    • そもそも,同一の理解に達することはできない
    • 本質を表現し,理解するための複数の適切な視点が必要
      • ステークホルダとのコミュニケーションにとって大切
      • ステークホルダの関心ごとに応じた視点の採用が必要
        • 4+1Viewなど
    • ビューを作成するためのテンプレートとしてビューポイントがある.
  • 機能ビューポイントと配置ビューポイント
  • 基本及び横断的なビューポイント
    • 基本:要求ビューポイント,機能ビューポイント,配置ビューポイント,妥当性確認ビューポイント
    • 横断的:パフォーマンスビューポイント,セキュリティビューポイント
  • ビューポイントと成果物
    • 各ビューポイントからステークホルダに提供する成果物が明確になる
  • アーキテクチャ記述
    • 対象システムの特徴により重点は異なる
    • メリハリをつけたアプローチが重要
    • これらのことがあるので,アーキテクトは常に技術に目を光らせておかねばならない
  • アーキテクトの主要ワークプロダクトと責任ロール
    • アーキテクトのロールがビジネスアナリストの領域に広がっている.
  • 手法の概念とその関係
    • フェーズ,局面などはプロセス
    • 最小単位のタスクがどういうロールを実行し,ロールがどういう成果を残すのかをいって,はじめて手法と言える
    • OpenUp
    • タスクの記述も定義する必要がある.
      • 目的,実行するロール,入出力,ステップ,アーキテクトのロール


□及川さん-クラウド時代のソフトウェア開発-

  • リリースマネージメントに関して話して欲しいという依頼を受けたが,やっていないので過去の経験を含め話す
  • 大規模ソフトウェアが前提.
  • (一般的な)大規模ソフトウェア開発
  • 大規模ソフトウェアは失敗が許されない点が共通概念
  • 失敗が許されないが故に堅いアプローチを取る
    • plan, design, implementation, stabilization, release, plan を繰り返す
  • 人・開発物のコントロールが重要になってくる.
  • windows2000(NT5.0)はコードができたはリリースできるか不明になった,その時に,開発マネージャーを入れ替えた.
    • "Brian Valentine" "Ian Mcdonald"
    • リズムを作り出した.
  • 大規模ソフトウェア開発では統制下に置かれる.
    • フェーズアプローチとなる.
  • 各フェーズごとにやることを明確に決める.
  • フェーズ終了条件を始まる前に決める.
  • 大きなプログラムを分割して,権限委譲していくことで,アジャイルを使ったりすることができるようになる.
    • 分割しない場合は,WFモデルしか使いようがない.
  • 分割・権限委譲をする際に,テーマが重要になる.
    • 何も考えないとばらばらになってしまう.
  • まず,テーマをしっかり決めておくことがとっても大事.
  • google chromeではシンプル,スピード(速い),セキュリティ,の3Sがテーマ
    • きちんときめておかないと,判断がしにくいし,ぼけてしまう.
    • テーマを決める際には,わかりやすくしておくことをオススメする.
      • シンプルかつ全員が覚えておける
  • まったく新しい場合にはテーマが実現できないとき時がある
    • その際には,次のバージョンで実現する.
    • はずれないようにするためのテーマ
  • ブランチのまとめのために,厳密なcheck in window
  • 毎日定時に開始されるビルド
    • ゴールが明確なときはもっと厳密なチェックインコントロールを行う
  • テストは各フェーズでおこなわれる
    • 一定のテスト期間を確保して,全員参加型の"bug bash","find it"を行う
    • バグのインアウトをきちっと計測して,可視化して傾向をつかむ
    • バグのクライテリアをつけて,直さないというジャッジもとりうる
  • リリースは高い完成度が求められる
    • 大規模ソフトウェアはリリース(デプロイ)がとんでもないコストがかかるので高い完成度が求められる
  • クラウドの特徴
  • クラウド=いつでもどこでも使える.ネット上にデータがそこにある
    • デプロイのコストが安い
  • そのため,品質の考え方が変わる
    • 従来のであればリリースすることで開発終了だったが,クラウドはリリースしてからが本番.
    • 従来のであればリコールをさけることだったが,クラウドはサービスダウン.
  • googleでは,サービスダウンしないこととレイテンシーが落ちることが許されない
    • bound's leader
  • クラウドでは開発において,迅速さが求められる
    • ローンチ&イテレート
    • グーグルではマーケットリサーチなどあまり参考にしていない
    • 市場が存在しないときは正しい解はない.
    • WEBはユーザの使われ方がわかるので,それを最大限に活かす.
      • これらができるのはデプロイコストが安いから.
  • クラウドではバージョンの考え方がない
    • 絶え間なく成長していくから.
    • リニアに進化していく
  • リニアに進化させていく際には,スケールすることが大事
    • 5000以上の開発者
    • 2000プロジェクト
    • 毎月50%のソース変更
    • 人による管理は無理.なので,自動&スケール.
  • chromeは常に最新版を入れる仕掛けをいれている
    • デプロイコストを最小に.
    • 許諾もらえた人の操作をあげてもらっている
  • クラウドでの開発と同じ考え方をクライアントにも徹底していれている
  • 従来13週ごとのリリースだったが,今は6週ごと
    • オーバーラップする部分を削除
  • グーグルではオープンにしないことが問われる
    • 得られるメリットのほうが大きい
      • フィードバックが得られる
  • クロミアムとwebkitではコードレビューする
    • 小さく細かくレビュー
    • IRC
    • その人が抱えているバグを少しでも減らす
  • buildbotがこけていたら,コミッターが直している
  • 日本語入力
    • テーマ;ストレスフリー,素早い入力,WEB時代に即した
      • ベースにセキュリティ,プラットフォーム&アプリケーション互換性
  • build orb,アルパカなど楽しく
  • クラウド時代のソフト開発
    • 短いリリースサイクル
    • スケール手法の採用
    • 可視化にこだわる


□OpenJam

  • XP祭り企画会議
    • ホワイトボードに下記のもの書いた
      • 今回のデブサミの良かったところ
      • やりたい,あってほしいこと
      • 誰の話を聞いてみたいか

□野村さん,市谷さん-未来の為に私たちの帆を立てよう-

  • 野村さん背景
    • 富士ゼロックスの第3の事業とするべく,15年前位からナレッジに関する事業開始.
      • ナレッジ・サービス事業KDI (Knowledge Dynamics Initiative)
      • 著書として,“裏方ほどおいしい仕事はない!”,“サラサラの組織”
  • 市谷さん
    • 対話するには勇気が必要.その勇気をこのセッションで持てたら.
  • 会社に帆を立てるにはどうしたらよいか.
  • フューチャーセンタが広まってきている
    • 問題が複雑になってきているため
      • 解がない問題
  • フューチャーセンタ
    • 各事業部からの問題を社内外のステークホルダで解決する
    • 市谷さn:Devloveっぽい
  • 革新生産性モデル
    • 革新のスピード
      • ローカルな革新
      • 連携した革新
      • 全社的な革新
    • やろうとしたことにすぐ組織が動く=サラサラの組織
    • 効率追求がどろどろ感を生んでいる
  • クリエイティブ・モードを作るには.
    • 内を見ていると現状の延長しかない.外や世界を見ていかないと広がらない.
    • 仲間と約束する.
      • 他人の#4tateを見て参考に.
      • 思ったときに各.帆を立てる.
  • 暇だと休み,忙しいとピークな働き方を変えるには.
    • 川口さん:忙しいことにはあらがわず,やりたいことなどをメモしておく.暇になったら,メモを見て忙しくなることに備える.
    • 岩切さん:やりたいことをメモしておく.
  • コンサルティング業は時給を上げる
    • ぶらぶら50%
    • 客の知らないことを知る.経験したことのないことを経験する.
  • 気づいてもらうためにずっとやる
  • 問題解決と少しの感動
  • 仕事の本質
    • 野村さん:自分がやりたいことを求める客を捜すゲーム
    • 岩切さん:世界を変えるために,開発者を支援しよう
    • 市谷さん:誰かと何かを作る.二人で新しい価値を提供できる.
  • 負のスパイラル
    • 目標→仕事をリスト化し分配→一人の目標を決める→達成レベル管理→達成しない場合には罰→目標
  • 正のスパイラル
    • 目標←他人を助けたことをほめる←助け合う行為を見える化する←一人一人の不安感を共有する←目標達成したときのイメージ共有←目標
    • これにより,クリエイティブ・モードを作れる.
  • -