« 2018年1月 | トップページ

2018年2月

2018/02/21

Redmineのアンチパターンは2種類に区別できるのではないか

以前、Twitterで、日付カスタムフィールドに関するRedmineのアンチパターンが議論されていた。
その議論を読みながら、Redmineのアンチパターンには、プロジェクト管理の要件のブレかフィットギャップ分析の甘さの2種類に区別されるのではないか、と考えた。
ラフなメモ書き。

【問題の発端】
nekosanzさんのツイート: "難問。1つのプロジェクトではなく、1つのチケットにマイルストーンがほしい。こんなこと言われたの初めてだ"

門屋 浩文さんのツイート: "チケット割るか説明に書く!… "

nekosanzさんのツイート: "結論が日付カスタムフィールドを10個ぐらい追加してほしいという炎上物件… "

【問題の真因を突いている議論】
neta@筋肉 筋肉???さんのツイート: "Redmine の日付カスタムフィールドはあかん。ウチも『期日』という名称が気に入らなかったらしく、『希望納期』という残念なカスタムフィールドを作ってしまった。ガントには出ねーわ、リマインダーは効かないはマイッタマイッタ。今は反省している… https://t.co/MSqH2RmwwQ"

門屋 浩文さんのツイート: "日付のカスタムフィールドはあまり良くない 標準のガント使わなくなったのが実績日が出てこないからという理由なので… "

【アンチパターンに関する感想】
akipiiさんのツイート: "久しぶりにRedmine のアンチパターンを集めたいですなぁ笑… "

nekosanzさんのツイート: "みなさんおっしゃる通り。コミュニケーションツール不在の会社にRedmine 導入するとアンチパターンの温床になりえますね。… "

akipiiさんのツイート: "アンチパターンの種類にも、プロジェクト管理の要件を詰めきれてないことと、Redmine の機能を理解しておらずフィットギャップ分析が甘いこと、があるから区別したいな。… "

【1】チケットにマイルストーンが欲しい、という要望を元に、Redmineに日付カスタムフィールドを10個も追加してしまった、という事例。

おそらく、障害管理票、課題管理票のような類の帳票をチケット化した時、数多くの異なる日付を入力する必要になったのでは、と勝手に推測する。

しかし、上記の指摘の通り、Redmineチケットの「期日」を使わなくなると、ガントチャートに表示されないし、リマインダーのメール通知機能も使えなくなる。
よって、本来は、チームの要望にある「日付」の概念をRedmineの「期日」に合うように修正すべきだったのだろう。
あるいは、ja.ymlにある「期日」の文言をチームの組織文化に合った文言、たとえば「納期日」などへ修正しても良かっただろう。

【2】そういう話をふりかえると、Redmineのアンチパターンには、2つの観点で綺麗に分類できるのではないか、と思う。

【2-1】一つは、プロジェクト管理や開発プロセスの本来の設計思想に関する理解が浅いために、プロジェクト管理の要件を詰め切れていないこと。

よくある例は、WBSは工程単位に作るべきなのか、機能単位に作るべきなのか、どちらがいいのですか、という質問が相当するだろう。
この質問に関しては、下記の記事で明確に回答が述べられている。

WBSはプロジェクト組織を規定する : タイム・コンサルタントの日誌から

WBSはコスト見積の基準を規定する : タイム・コンサルタントの日誌から

WBSの作り方はプロジェクト型組織の構造を決めるという考え方はRedmineチケット管理にも通じる: プログラマの思索

また、「チケット無しの作業不可」の運用ルールの理解が浅いために、作業履歴やレビュー履歴をチケットに残してナレッジを蓄積し、最終的にはプロセス資産になる、という思想まで考えが及ばない、という話もあるだろう。
その他にも、チケットの棚卸し、トレーサビリティなどの話も同じ論点ではないか、と思う。

つまり、Redmineのようなチケット管理ツールとは無関係な観点で、プロジェクト管理や開発プロセスの理解が甘いために、RedmineやJiraであろうが、どのチケット管理ツールも使いこなせていない、という結果になるのだろう。

すなわち、この観点のアンチパターンは、ツールとは無関係な一般論に近いレベルまで昇華できるだろう、と思う。

【2-2】もう一つは、チームの開発プロセスの要件とRedmineの機能について、フィットギャップ分析が甘いこと。
これは、今回の日付カスタムフィールドの話に相当するだろう。

他に、親子チケットの作り方、ロードマップの使い方などもあげられるのではないか。

【事前公開】【第16回Redmine大阪】RedmineのFAQとアンチパターン~親子チケットの功罪: プログラマの思索

Redmineの親子チケットの功罪: プログラマの思索

最近よく聞くRedmineのFAQ~Excel添付のチケットから野良Redmineまで: プログラマの思索

最近なら、デブサミ2018のRedmine利用事例の講演でも、アンチパターンに関する話があった。
その中で、@g_maedaさんの下記の話は、Redmineにおけるトラッカーを使いこなせていないアンチパターンがある事実を示唆している。

MAEDA, Goさんのツイート: "最近は、トラッカーの追加とは入力フォームを設計して追加することだと説明するようにしています。… "

つまり、Redmineに埋め込まれた本来のチケット管理の機能要件を理解できていないために、Redmineの優れた機能を発揮できない結果に陥る、という結果があるだろう。

すなわち、この観点のアンチパターンは、Redmineの設計思想とユーザが利用したい要件に関して、Remdineのフィットギャップ分析が甘い点に原因があるだろう、と思う。

【3】では、Redmineのアンチパターンを「プロジェクト管理や開発プロセスの一般論」と「Redmineのフィットギャップ分析」で分類したら、どんな面白い内容が出てくるだろうか?

【3-1】まず、僕は、「プロジェクト管理や開発プロセスの一般論」のアンチパターンは、Redmineが機能豊富になるにつれて、最終的にはどんどん難易度が高くなるのではないか、と思う。
一般論の話は、実際にチケット管理して経験して、失敗したり、成功してみたら、すぐに理解できて解決できる。

よって、Redmineに上手く当てはまれば解決できるアンチパターンは、Redmineが誕生して10年経った今、知見やノウハウとして、普通の経験者は理解できているだろう。
そして、じきに、本来のユーザ利用要件をRedmineに当てはめられなくなった、というレベルまでたどり着いて、改めて考えなくてはならない、という方向に落ち着くだろう。

つまり、一般論の話で解決できないアンチパターンは、ソフトウェア開発やソフトウェア工学に関する本質的な問題まで辿り着くのではないか、と思う。

たとえば、チケットの粒度に関する議論は、ソフトウェア工学における「ソフトウェアの本質的な複雑性」に由来するがゆえに、そう簡単に解決できる話ではない、と思っている。

チケット駆動の罠~複雑さはチケットの粒度に関連している: プログラマの思索

【3-2】一方、「Redmineのフィットギャップ分析」のアンチパターンでは、Redmineの標準機能で解決できる事例はどんどん公開されてしまい、最終的には、Redmineをカスタマイズすることでしか解決できないアンチパターンが多数出てくるだろう、と思う。

たとえば、最近よく聞くRedmineのFAQ~Excel添付のチケットから野良Redmineまで: プログラマの思索でもあげたが、ロードマップ画面におけるチケットの並び順をドラッグ・アンド・ドロップで制御する機能パッチは、アジャイル開発におけるプロダクトバックログ管理に相当する機能なのに、未だに実現されていない。
つまり、先進的なアジャイル開発のプラクティスをRemdineで運用したい、と思っても、Redmineの標準機能では不足しているのだ。

他に、MSProjectみたいにRedmineのガントチャートを使いたい、とか、色んな要望が出てくるだろう。

つまり、「Redmineのフィットギャップ分析」のアンチパターンを完全に解決するには、Redmineにプラグインを導入したり、Redmineそのものをカスタマイズする、という方向性が必要になる事例が数多く残ってくるのではないか、と思う。

【4】個人的には、Redmineのアンチパターンを上記の2種類の観点で区別した時に、下記のテーマがあると思う。

(1)既によく知られているアンチパターンは、上記2種類のどちらに分類されるか?

(2)未解決のアンチパターンの原因は、上記の考え方で合っているか?
そして、解決の方向性も、上記の考え方で進められるか?

この辺りも色々考えてみたい。

| | コメント (0)

2018/02/04

第18回Redmine大阪の感想 #RedmineOsaka

第18回Redmine大阪の感想をメモ。
疲れているので、ラフなメモ書き。
書きかけなので、また後で書く。

【参考】
第66回 SEA関西プロセス分科会&第18回 Redmine大阪 - connpass

2018/2/3 第66回 SEA関西プロセス分科会&第18回 Redmine大阪 - Togetter

第18回Redmine大阪のまとめ | MadosanPlace 新しい風をプラス!

【1】気象庁のRedmine利用事例の話は、本当に面白かった。
JAXAのRedmine運用とは、また別の観点の思想を持って運用されている。

第65回 SEA関西プロセス分科会&RxTStudy #15 「チケット管理システムによるプロセス支援と今後の課題」の感想: プログラマの思索

第13回東京Redmine勉強会の感想~『Redmineの今と未来』 #redmineT: プログラマの思索

気象庁内のシステムには、天気の予測シミュレーション、PM2.5やら色んな気象データのデータ収集と分析、シミュレーションなどがある。
それらのシステムは、全て内製化されている。
つまり、気象庁の研究者がプログラマとなり、実際に開発している。
この点は、JAXAなど他の官公庁とは全く違う。

だから、気象庁では、数値予報官という役職だけでなく、「プログラマ」という名前の役職も公式に存在する。
この点も他と大きく異なるのだろう。

【1-1】気象庁内では、Fortran、シェル、Rubyが一般的なプログラミング言語。
数値予測などの科学計算は過去の開発資産があるので、Fortranが使われている。
一方、仮想サーバー構築、バッチ処理、インフラ構築などは、シェルとRubyがよく使われている。

【1-2】気象庁では、部署もあるが、開発はシステムごとに、各部署を横断してプログラマや研究者が集まって担当する。
そのシステムに携わる集団を開発コミュニティと呼ぶらしい。
僕の理解では、マトリクス型組織のように思えた。
つまり、研究者やプログラマは部署に所属するが、天気予報、シミュレーション、共通基盤などの各システムの開発に携わるので、クロスファンクショナルなチーム構成になる。

但し、プログラマはどこか一つのコミュニティに属する運用になっているので、複数のコミュニティに所属することはほとんどない。
つまり、各開発コミュニティは縦割り組織に似たような雰囲気になっているみたい。

【1-3】最近は、欧米の気象庁ではPythonを使って数値予測プログラムを書く事例が多くなってきたので、彼らから、なぜまだFortranを使っているの、Pythonなら他言語のライブラリや資産も簡単に呼び出して使えるので、Pythonがいいよ、と言われているため、Pythonをこっそり試し始めている、とのこと。

この辺りの話を聞くと、海外の研究動向にも追随しながら、最先端の技術を導入しようという雰囲気が既にあるのだろう。

【2】気象庁では、各開発コミュニティごとに「あえて」Redmineインスタンスを複数個立ち上げた意図

バージョン管理は、2000年代からCVS、Subversion、Gitへ移行してきた。
2008年頃から、各コミュニティが独自にTracやRedmineを使い始めた。
原さんが海外の動向を踏まえて、各開発コミュニティがバラバラな開発基盤を持つのではなく、共通の開発基盤で運用すべきだ、と提案して、2014年頃から、RedmineとSubversion、Gitを共通の開発基盤として各コミュニティに提供する運用になったらしい。

その時、1台の物理サーバーに1個のRedmineインスタンスで運用する案も考えられたが、一つのRedmineの運用ルールに縛ることを目的とすると、各開発コミュニティから反発が起きるかもしれないことと、各開発コミュニティの組織文化を尊重することも考慮して、複数個のRedmineインスタンスを各開発コミュニティごとに立ち上げることになったらしい。

【3】2段階コードレビューの意図

【3-0】Redmineを導入した動機

そもそも、RedmineやSVNを開発基盤として導入しようという契機になったのは、コードレビューをしっかりやるべきだ、という考え方が、原さんだけでなく、各開発コミュニティでもそのような気運が盛り上がっていたから。

たとえば、天気予報の数値予測シミュレーションのようなプログラム開発では、理論物理や流体力学など科学理論から導かれる機能要件から、それに基づくプログラム実装が行われる。
しかし、かつてはバージョン管理すらなかった時代では、なぜそのような機能が実装されたのか、なぜそんなソースコードになったのか、記録が残っていない。
しかも、科学理論の発展やソフト・ハードの進化に伴うプログラム修正の履歴やその変更理由も残されていない。
だから、システムのリリース後に障害が発生して、トラブルが起きることがあったから。

【3-1】2段階コードレビューの意図

Redmineではコードレビューのプロセスはワークフローの一部として運用されている。

興味深い点は、気象庁のコードレビューでは、2段階レビューが踏まれていること。
まず、サイエンティフィック・レビューでは、科学者の観点で、数値シミュレーションが物理法則や物理の理論に基いた要件でコードが実装されているか、レビューされる。
おそらく、研究者同士の議論に近い雰囲気なのかもしれない。

次に、ソースコードがプログラミングの観点できちんと書かれているか、という立場でコードレビューされる。
Fortranのコーディング規則に従っているか、エラー処理、とか、この部分は我々のコードレビューと同じだろう。
また、物理法則の要件に従って実装されたプログラムを、実際に膨大な気象データに基いてシミュレーションするテストも行う。
このテストには、半日で終わることもあれば、数週間かかることもあるらしい。

たとえば、そこで性能が出なかったりすることが分かれば、その要件の実装はソフトウェア的に実現可能性が低いので、別の代替案を考える、などのフィードバックがコードレビューで行われる。

つまり、単なるコーディング規約のチェックだけでなく、たとえば性能要件を満たすかテストしてみた結果をフィードバックする、などの作業も行われている。

この辺りは、アーキテクチャのフィージビリティ・スタディ、つまり、アーキテクチャ実装のコスト・品質・納期のトレードオフを評価しているのと同じように思える。

これら2段階レビューは、既に欧米の気象庁では行われているので、日本でもやるべきだ、という提案があり、徐々に浸透しているらしい。
そういう内容を聞くと、Redmineチケットにコードレビューの結果を記録し蓄積していくことは非常に有意義な作業であることが理解できる。

【3-2】そして、git-flowによる並行開発とコードレビューが組み合わされて、上手く運用されるようになっているらしい。
つまり、ある要件を開発する場合、trunkからブランチを派生し、そのブランチ上で修正して、コードレビューが完了になれば、trunkにマージされる。
そのブランチはRedmineチケットと対応付けられて、Redmineチケットに要件や仕様、コードレビューの結果などが全て記録される。

【3-3】気象庁のRedmineでは、チケットのカスタムフィールドは使わないし、複雑なワークフローも設定されていないし、プラグインもほぼない。
Redmineのチケットに、コードレビューの指摘、結果、対応の記録を残すことに注力している。
そのおかげで、海外派遣で2年間、気象庁から離れた研究者も、帰国した後、Redmineのチケットを検索するだけで、すぐにプログラム開発の仕事に復帰できた、と言っていたらしい。

つまり、気象庁のRedmineは、進捗管理用のRedmineではなく、ナレッジ資産の為のRedmineなのだ。

【4】複数個のRedmineインスタンスで運用されるデメリットは、原さんによれば特に感じていない、と言われていた。
もし、他コミュニティのRedmineを参照したい場合、RedmineにはRSS機能があるので、RSSをフィードすれば、リアルタイムにチケット更新の状況を把握できる。

【4-1】また、Redmineという開発基盤が普及した後、Redmineの副次効果がいくつかあったらしい。
たとえば、あるコミュニティで、コードレビューはプログラム実装後に行うのではなく、プログラム実装前に関係者が集まって事前に内容を協議する運用を始めた所、他コミュニティでも、その運用はもっともだ、という意見があり、他コミュニティにも徐々に反映されたらしい。

つまり、あるコミュニティのRedmineのベストプラクティスが他コミュニティにも自然に横展開された、という事実を示唆している。

また、気象庁がいくら先進的な官公庁であっても、やはり役所なので縦割り組織の雰囲気がある部分はある。
しかし、Redmineを利用することで、コミュニティ内では、チケット経由のやり取りによって、研究者の知見やソース修正の履歴が記録されて、メンバー間の情報共有がスムーズになったらしい。

【4-2】さらに、データ処理など共通の処理を行う基盤担当のコミュニティがあり、そのコミュニティは気象庁の各コミュニティと関係するが、そのコミュニティのメンバーは、各コミュニティのRedmineにログインできる。
すると、各コミュニティでRedmineやコードレビューの運用ルールが微妙に違うので、同じように運用したい、という声が上がっているらしい。

つまり、現状はあえてコミュニティ単位の複数Redmineインスタンスで運用しているけれど、現場から、ボトムアップでRedmineの標準化を図るべきだ、という声が上がっているわけだ。
将来は分からないけれど、いつか、単一の標準Redmineにサーバー統合される可能性があるかもしれない。

【4-3】この点に関して、参加者からは、Redmineではトラッカーやカスタムフィールドがグローバル変数のような性質のために、使いづらくなっている。
Redmineにも、サイトのような機能を持たせて、各プロジェクトごとのトラッカーやワークフローを定義できるようにすれば、一つのRedmineインスタンスで、各プロジェクトごとにトラッカーやワークフローの自由裁量の権限を与えて運用できるのではないか、という指摘があった。
この意見は全くその通り。

以前も、東京Redmineでも似たような議論があった。

Redmineのワークフロー設定を拡張する機能提案~Redmineは汎用的なBPMツールになりうるか: プログラマの思索

【4】個人的には、Redmineは単一インスタンスの運用だけでなく、複数インスタンスの運用もベストプラクティスの一つになりうる、という発見があって、改めて深く考えさせられた。
この点はまたまとめる。

akipiiさんのツイート: "#RedmineOsaka #seakansai 気象庁の事例ではRedmineをナレッジ基盤として使う運用を目的としたら、色んな副次的効果も出てきた。単一の標準Redmineがベストの先入観があったけど、Redmine の複数インスタンスでも成功事例があるのは改めて衝撃を受けた。奥が深いね。"

【追記】
今回のRedmine大阪で、気象庁における開発管理の取り組みの公開資料に基いて、Redmineのチケット管理やGitによるブランチ管理やコードレビューについて数多く質問したのだが、「テストハーネスを用いたテスト自動化」の内容は聞き漏らしてしまった。
おそらく、Fortranプログラムをシェルからバッチで起動して、入力データと出力データを差分比較するようなテストを自動化する仕組みを取り入れていると思われる。
この部分のノウハウも聞きたかった。

気象庁における開発管理の取り組みの公開資料のP.52で下記の引用がある。

(引用開始)
asuca については、トランクへの変更がなかった場合も含めて、テストハーネスと呼ばれる仕組みを毎日自動で実行している。
これは
・ 理想実験
・ 石田ほか (2014) で述べられている、2 次元定常山岳波、周期境界条件における重力波、暖気塊のテスト、重力流、St-MIP
・ 静止大気実験
・ 2 次元スカラー移流
・ 3 次元モデル 3 による狭領域実データ実験
・ 局地解析
・ 接線形モデルチェック
・ 随伴モデルチェック
・ 局地予報
・ メソ予報
といった様々なケースについての実験 4 が、最新のトランクを用いて行われる。
入力データは毎日同じものを用いるため、入出力システムの変更等、予報結果を本質的に変える変更でない場合には、結果はビットレベルで一致する。
自動実行されたテストハーネスの結果は毎日メールで報告され、結果が前日とビットレベルで合わない場合にはそのようなメッセージが付加され、開発者が覚知することができる。
このため、トランクへのマージを行う改変については、テストの段階で開発者が自らテストハーネスを実行し、その結果についてもチケットに記録する。
また、変更の前後で結果が一致しない場合には、その理由や差の妥当性(分布図で見た場合の評価等)も含めて、記録を行う。
(引用終了)

| | コメント (0)

« 2018年1月 | トップページ