Net commons3 研究会 2014 0616

Preview:

DESCRIPTION

PHP NetCommons3 UnitTest

Citation preview

NetCommons3  UnitTestコードのある未来

宮川 貴子

概要

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

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

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

NetCommonsは巨大なシステム

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

3500 項目以上  

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

質問

NetCommons2の  

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

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  サポート終了    

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

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

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

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

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

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

(1)健康状態の確認  

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

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

(1)健康状態の確認  

 

変化が発生した  その後

(1)健康状態の確認  

早ければ早いほど良い  

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

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

UnitTestコード が無い世界

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

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

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

UnitTestコードがある世界

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

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

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

UnitTestコードがある未来

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

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

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

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

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

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

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

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

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

 

UnitTestコード が無い世界

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

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

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

UnitTestコードがある世界

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

NetCommons3の構造

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

 

外部で作成されたもの  

?  

NetCommons3の構造(図) 

 

動作環境    PHP  Apache  MySQL(Postgres)

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

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

NetCommons3  Core (本体)

NetCommons3  Plugin  (モジュール)

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

AngularJS  (Javascript  フレームワーク)

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

名称 UnitTestの有無

Travis-­‐CIの  利用有無

AngularJS ◯ ◯  

BootStrap ◯ ◯

JQuery ◯ ◯

NetCommons3 ◯ ◯

CakePHP2 ◯ ◯

Composer   ◯ ◯

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

たとえばComposer

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

たとえばCakePHP

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

たとえばJQuery

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

たとえばAngularJS

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

たとえばBootstrap

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

そしてNetCommons3  !

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

 

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

 

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

Recommended