一、 緒論 本章僅就本研究的研究背景、研究動機、研究目標、研 … · 一、 緒論 本章僅就本研究的研究背景、研究動機、研究目標、研究的重要性及本研究的
Net commons3 研究会 2014 0616
-
Upload
takako-miyagawa -
Category
Engineering
-
view
537 -
download
0
description
Transcript of Net commons3 研究会 2014 0616
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コードがある世界
ご清聴ありがとうございました。