Net commons3 研究会 2014 0616

37
NetCommons3 UnitTestコードのある未来 宮川 貴子

description

PHP NetCommons3 UnitTest

Transcript of Net commons3 研究会 2014 0616

Page 1: Net commons3 研究会 2014 0616

NetCommons3  UnitTestコードのある未来

宮川 貴子

Page 2: Net commons3 研究会 2014 0616

概要

NetCommonsは巨大なアプリケーションです。    

そのアプリケーションのコードを、  どのように保守管理すべきなのか?  メンテナンスするべきなのか?  開発するべきなのか?  UnitTestコードのあるということが、どのような役割を果たすのか  というお話をさせていただきます。

Page 3: Net commons3 研究会 2014 0616

NetCommonsは巨大なシステム

NetCommons2で育まれた機能  h0p://www.netcommons.org/ダウンロード/    最新版より計測  :  NetCommons-­‐2.4.2.0  sloccountを利用した解析結果  

モジュール数  :  49  +    (拡張モジュール5)  

行数  :161,075行 (拡張モジュール含まず)  

SLOC  /  行数 ディレクトリ 言語別行数

89493 webapp   php=89,493

71316 maple   php=71,292,      sh=24

239 htdocs php=239

27 top_dir  php=27

Page 4: Net commons3 研究会 2014 0616

NetCommonsは巨大なシステム

動作を確認すべき詳細機能項目  

3500 項目以上  

※上記データ状態による処理分岐を含みません。  NetCommons3設計調査時の初版資料  

Page 5: Net commons3 研究会 2014 0616

質問

NetCommons2の  

全機能の動作確認  をしたことがある方いらっしゃいますか?

Page 6: Net commons3 研究会 2014 0616

NetCommonsとPHPの10年 

2004年  PHP5.0リリース  2005年  NetCommons1  リリース  2007年  PHP4  サポート終了  2006年  PHP5.2リリース  2008年  NetCommons2  リリース  2010年  PHP5.3  リリース  2012年  PHP5.4リリース  2013年  PHP5.5リリース       PHP5.2  サポート終了  2014年  PHP5.3  サポート終了    

Page 7: Net commons3 研究会 2014 0616

巨大なシステムの保守運用

巨大なシステムが健全に成長するために  

(1)健康状態の確認  (2)環境変化に対するメンテナンス  (3)適切な機能改善・機能追加

Page 8: Net commons3 研究会 2014 0616

巨大なシステムの保守運用

巨大なシステムが健全に成長するために  

(1)健康状態の確認  (2)環境変化に対するメンテナンス  (3)適切な機能改善・機能追加

Page 9: Net commons3 研究会 2014 0616

(1)健康状態の確認  

変化に対応しつづけ、  健やかな状態のシステムであるために  

 状態の確認をいつ実施すべき?  

Page 10: Net commons3 研究会 2014 0616

(1)健康状態の確認  

 

変化が発生した  その後

Page 11: Net commons3 研究会 2014 0616

(1)健康状態の確認  

早ければ早いほど良い  

即時確認  バグ、不具合が育つ前に早期治療。  

風邪もかかりはじめにやっつけるんです!  

Page 12: Net commons3 研究会 2014 0616

UnitTestコード が無い世界

3500項目以上の機能を目視確認しながら、データベースのログから発行されているSQLを確認しながら、画面を見ながら、エクセルにメモした一覧表を見ながら…..  

何が出力されたのか?  何が保存されたのか?  何が削除されたのか?  何が変更されたのか?  

を人が頑張って確認する。  

Page 13: Net commons3 研究会 2014 0616

UnitTestコードがある世界

UnitTestコードを実行するために、  コマンドラインを入力し、実行させます。  実行が終了するのを待ちます。  結果が表示されたら、それを見ます。  結果エラーがでたならば、それはバグなので調査し修正します。  

 何が出力されたのか?  何が保存されたのか?  何が削除されたのか?  何が変更されたのか?  は、UnitTestコードが調べるので、人はその結果を待つだけです。  

(※UnitTestコードを書く時間(コスト)はかかりますよ)  

Page 14: Net commons3 研究会 2014 0616

UnitTestコードがある未来

「状態の確認」にかかる人に依存するコストが非常に小さい    「変化が発生したら即確認する」ことを  

実現することが現実的に  可能です。

Page 15: Net commons3 研究会 2014 0616

巨大なシステムの保守運用

巨大なシステムが健全に成長するために  

(1)健康状態の確認  (2)環境変化に対するメンテナンス  (3)適切な機能改善・機能追加

Page 16: Net commons3 研究会 2014 0616

(2)環境変化に対するメンテナンス

(例)PHP5.4から5.5へバージョンアップしたい!    「PHP5.4で正常に動いている」コードが、  「PHP5.5で正常に動いている」を  

どのように確認しますか?  自信を持って証明できますか?  

 バージョンアップしたら動くのか?  動かないならどこが問題で動かないのか?を確認したいという要求を  どう実現しますか?

 

Page 17: Net commons3 研究会 2014 0616

UnitTestコード が無い世界

3500項目以上の機能を目視確認しながら、データベースのログから発行されているSQLを確認しながら、画面を見ながら、エクセルにメモした一覧表を見ながら…..  

何が出力されたのか?  何が保存されたのか?  何が削除されたのか?  何が変更されたのか?  

を人が頑張って確認する。  

Page 18: Net commons3 研究会 2014 0616

UnitTestコードがある世界

UnitTestコードを実行するために、  コマンドラインを実行させます。  実行が終了するのを待ちます。  結果が表示されたら、それを見ます。  結果エラーがでたならば、それはバグなので調査し修正します。  

そしてその結果は目視できます。    何が出力されたのか?  何が保存されたのか?  何が削除されたのか?  何が変更されたのか?  は、UnitTestコードが調べるので、人はその結果を待つだけです。  

(※UnitTestコードを書く時間(コスト)はかかりますよ)  

Page 19: Net commons3 研究会 2014 0616

(2)環境変化に対するメンテナンス

何の機能改善も  機能追加もないそれのために  膨大なコストを払い続けることは不可能です。    

なぜなら、利用者にメリットがない  利用者にとって機能が追加されるわけでもなく、目に見える成果が無い  

コストをかけるのが難しい....  

Page 20: Net commons3 研究会 2014 0616

巨大なシステムの保守運用

巨大なシステムが健全に成長するために  

(1)健康状態の確認  (2)環境変化に対するメンテナンス  (3)適切な機能改善・機能追加

Page 21: Net commons3 研究会 2014 0616

(3)適切な機能改善・機能追加

Aという機能を変更した結果、  Bという機能が正常動作しなくなる。

 

そんなことが無い改善  が適切な機能改善ですよね?どのように防ぎますか?確認しますか?  

Page 22: Net commons3 研究会 2014 0616

(3)適切な機能改善・機能追加

Cという機能を追加した結果  Bという機能とAという機能が正常動作しなくなる。

 

そんなことが無い機能追加  が適切な機能追加ですよね?どのように防ぎますか?確認しますか?  

Page 23: Net commons3 研究会 2014 0616

(3)適切な機能改善・機能追加

人間のできることには限界が  あります。  

Page 24: Net commons3 研究会 2014 0616

巨大なシステムの保守運用

この3つが実現できてこそ    

(1)健康状態の確認  (2)環境変化に対するメンテナンス  (3)適切な機能改善・機能追加

Page 25: Net commons3 研究会 2014 0616

NC3のUnitTestコードのある未来とは

ブラックじゃない世界です。    

動作確認にかかる時間が少ない世界です。  (画面の表示崩れ等の確認は人の目が必要です。それ以外の事はできる)    

メンテナンスにかかる時間を、  新たなサービスや機能のために  使う事ができる世界です。  

Page 26: Net commons3 研究会 2014 0616

こんな未来は嫌ですよね?

「PHP5.xのサーバにセキュリティホールが発見されました。至急NetCommons3を設置しているサーバのPHPのバージョンを上げる必要が有ります!」    

「いつまでに必要ですか?」    「大至急です、明日午前中までになんとかして!」    「えー?」  .o(数ヶ月かかるんですけど……)

Page 27: Net commons3 研究会 2014 0616

NetCommons3の構造

NetCommons3は  外部で作成されたライブラリ(フレームワーク)  を利用し、構成されています。    

 

外部で作成されたもの  

?  

Page 28: Net commons3 研究会 2014 0616

NetCommons3の構造(図) 

 

動作環境    PHP  Apache  MySQL(Postgres)

Composer  (PHP  依存関係管理システム)

CakePHP2  (PHP  アプリケーション フレームワーク)

NetCommons3  Core (本体)

NetCommons3  Plugin  (モジュール)

JQuery  /  BootStrap    (HTML  +  CSS  +  Javascriptフレームワーク)

AngularJS  (Javascript  フレームワーク)

Page 29: Net commons3 研究会 2014 0616

UnitTestコードの有無と実行状況

名称 UnitTestの有無

Travis-­‐CIの  利用有無

AngularJS ◯ ◯  

BootStrap ◯ ◯

JQuery ◯ ◯

NetCommons3 ◯ ◯

CakePHP2 ◯ ◯

Composer   ◯ ◯

UnitTestコードが用意されています。

Page 30: Net commons3 研究会 2014 0616

たとえばComposer

h0ps://travis-­‐ci.org/composer/composer

Page 31: Net commons3 研究会 2014 0616

たとえばCakePHP

h0ps://travis-­‐ci.org/cakephp/cakephp

Page 32: Net commons3 研究会 2014 0616

たとえばJQuery

h0ps://travis-­‐ci.org/jquery/jquery

Page 33: Net commons3 研究会 2014 0616

たとえばAngularJS

h0ps://travis-­‐ci.org/angular/angular.js

Page 34: Net commons3 研究会 2014 0616

たとえばBootstrap

h0ps://travis-­‐ci.org/twbs/bootstrap

Page 35: Net commons3 研究会 2014 0616

そしてNetCommons3  !

h0ps://travis-­‐ci.org/NetCommons3/NetCommons3

Page 36: Net commons3 研究会 2014 0616

 

世界は既に  UnitTestコードがある世界

Page 37: Net commons3 研究会 2014 0616

 

ご清聴ありがとうございました。