タグ別アーカイブ: トラブル

解:必死のバグつぶし、バグは直っていくが・・・

解(solution)
危険の予兆

  1. 何を作るか開発を始める段階でわかっていない
    そもそもわかっていなければ開発に着手してはいけないはずです、見積もりもできないし、PJの終了が見えません。これは大きな損をするに決まっています。契約段階で前提条件を付けて、その前提が崩れたら契約を見直すか、責任を切り離す必要があります。
    仕様がわかっていない段階で、条件のない受注は絶対にしない!!
    _
  2. 仕様が決まっておらずあとから機能が追加
    納期を間に合わせるために行き当たりばったりで追加しない。PMとしては仕様変更は契約変更して納期を伸ばすしてもらうべき。それができない場合な受注しない。
    「そんなこと言ったら仕事がなくなるわ」とおっしゃる場合は、そのリスクを許容する選択をしたという意味になります。たとえ億を超える赤字も甘んじて受忍すべきとなります。リスクを受容する場合は、リスク分析をして、最悪いくらの赤字になるかを計算し、受注すべきか経営判断を仰ぐ必要があります。
    機能追加をする場合は、正しく、工程を後戻りさせ、設計を見直して、やり直し、製造に入ることをします。そうしなければスパゲッティーは必至です。
    _
  3. 設計がされていない。
    設計はしてください。「アジャイルなど設計しないじゃないか」といわれるかもしれませんが、「NaOHのアジャイル考」(たいしたものではない)からすると、アジャイル開発におけるサイクルは、設計プロセスであって、設計成果物を利用して、製造を効率化できるに過ぎないと考えています。つまり、サイクルにおける成果物と、レビュー議事録(意見要望等)を合わせて設計書なのであって、サイクルで機能要件設計が完了した後、サイジング設計、性能設計、その実装、運用含めた総合試験を経てSIN可能となるわけです。
    なので記録に残す設計は必ずすること。絶対です。
    _
  4. バグの出方がテストの進みに対して多い、すぐに直る
    経験よりバグが多い、あるいは少ない、中身の質が違うと感じた場合は詳細な検証をしてください。いつもと違う現象には必ず理由があって、原因があります。この原因が問題のないものであればよいですが、致命的なことの予兆である場合がほとんどです。
    バグの報告書を見る、設計を見直す、開発者にヒアリングをする、ソースを見る、バグの分析を見るなどを自らします。人にかませてはいけません。自分の経験を生かして心の目で見るのです。
    バグの不収束曲線_
    一瞬通常の収束曲線に近いように見えます
    PJの規模や性質によってこれらの出方や期間数は違いますが通常が下にある図だとすると
    バグが多すぎます。時間がたっていてもいまだにバグが出続けています。修正が追いつきそうで追いついていません
    バグの出方が減ってきているが、期間がたっているので、みんな疲れている(バグが出し切れていない)だけかも・・・

統計手法による発見の方法もあります。
バグの種類が決まっていて、それを除くと、バグ数が統計に近似する場合、特定箇所の問題が影響していることが推測され、そこに詳細な調査をすべきことがわかります。これは長くなるので後程

バグの収束曲線

マネージャの仕事としては事前に仕様をきちんと決めてもらう、お客様から必要な費用をもらう、場合によってすべてがだめにならないように期限を延ばしてもらう交渉をお客様とする。
お客様を含めた全員のために、お客様に対して困難な交渉をするのが仕事です。逃げずに立ち向かいましょう。

例:必死のバグつぶし、バグは直っていくが・・・2/2

あるPJでバグは日々たくさん出るが直る数も多く、頑張ればバグはなくなるように見えました。
ここでほんの少しSINを遅らせるだけで収束するように見えます。
「あと二週間徹夜すれば!!」本当にそうか?

このときの収束曲線

バグの不収束曲線

開発を経験しているのであれば、バグが日々出ていることに着目して、「この時期にこんなにバグって出るもんだっけ?」と疑います。さらにバグの中身を見ます。単純な表示上の問題や計算の問題に見えるものが多いです。数十の画面で表示されるべきものが表示されなかったり、別のものが表示されたり。ここで「あれ?」と感じる人も多いでしょう。「バグの数が多すぎます。別のものが表示とは?表示されなかったり?数からいう1画面あたり1回以上?」どういう作りをするとそんなことに?
実態は、あまりにもバラバラに正規化されたテーブルを集めてデータにするところを一か所に集めてルーチン化したのですが、パターンが増えるごとにそこに手を加えていって、ものすごい巨大な関数がいつの間にか出来上がっていたのでした。なので問題があると、そこだけ直せば直るのですが、影響調査がしきれず、ほかのところに影響が出て、新たなバグになり・・・・バグの収束の速さとバグが出る量が多いことはそこが原因でした。「典型的スパゲッティー・・・」
それをほぐすには!とすぐに期間の見積もりを指示しますが、1月2月ではとてもやりきれないほどめちゃめちゃに・・・仕様の整理も十分にされていないようです。たとえバグをつぶしていって機能要件を満たしたとしても、性能要件での問題が起きそうです。
これは死亡プロジェクトの例です。行きつく先は契約解除と損害賠償です。(実例かどうかはノーコメント)
仕様がはっきりしない段階から開発をはじめ、仕様が明確になるにしたがって、機能を追加していった結果のコードでした。(最初に単機能のものを作り、あとから追加された機能をその機能に追加しました。あとから予想もしない機能がどんどん言われて、それも追加していくうちに、後戻りできず、現場はさらに追加し続けてしまった)現場のプログラマに開発を任せ、ウオーターフォールを無視して、設計レビューをせずにものの完成のみを追っていったために起きたのでした。アプリケーションアーキテクチャを機能全体を見て設計していたら避けられた事態です。
サービスイン直前まで数字のみを追って、現場の報告をうのみにしてきたためにそうなってしまったのです。開発経験をしたことがある人は何となくわかると思いますが、中身を見るPMであればもっと前から問題点に気が付いたであろう、予兆が見えたと思います。
上記例では技術上がりの管理者としては火を噴いた後から「たーすーけーてー」という声を受けて支援に入ったところで事態がわかるということになるかと思います。もっと早くから事態がわかっていれば打てた対策もあるかもしれません。

本来の収束曲線

バグの収束曲線

どうするか!「解(solution)」に書きます

例:必死のバグつぶし、バグは直っていくが・・・1/2

サービスイン真近のプロジェクトがあり総合試験も後半なのですが、バグが多くスケジュールに影響が出そうです。WEBをUIとしたDBのトランザクションシステムです。表示のための計算や表示のさせ方の複雑さはあります。高度に正規化されて、複数のテーブルを統合しないとデータを表示できません。投入履歴をスライスする感じでデータの反映時間をベースとしたリビジョンが作られ、どの段階でも検索により取り出せるように求められています。このようなシステムと仮定します。

ここでPMは判断を迫られます。スケジュール遅延をお客様に話して、SINを遅らせることを交渉するか、内部で無理してでも間に合わせる努力を最後までするか。

通常はスケジュール遅延をお客様に報告しつつ、最大限の努力をしている旨ご理解いただき、最悪、SIN日程が守れないことを報告します。本当にSINに間に合わないことがほぼ確実になった段階では、正直にそのようにいうしかないのですが、精神論で頑張ってしまった場合、お客様がSIN遅延の覚悟ができていないことがあります。

遅く報告した場合、次期によってお客様内部や外部への(接続関係や既存システムの停止撤去の工事日程、既存システムがリース契約であった場合リース延長手続きが間に合うか、延長のための費用が確保できるか?サービス開始を期待しているお客様へのプレスリリースの手配、損害賠償への準備など)様々な調整が間に合わなくなり多大な迷惑をおかけすることがあります。

この判断をするに当たって、この例では始末が悪いことに、「ものができていて、品質が悪いだけ、バグをつぶせれば大丈夫、」かのように見えることです。

すでに大量の人員を投入し、テストチームと開発チームに分かれていて、開発チームはサブシステムごとに方端からバグをつぶしていきます。チームリーダはPMのしんなりする人で構成されており、幾多の修羅場(大量のバグつぶし)をくぐってきた人たちです。

マネージメント層はバグの収束曲線を見ます。

バグの不収束曲線

バグは日々たくさん出るが直る数も多く、頑張ればバグはなくなるように見えます。ここでほんの少しSINを遅らせるだけで収束するように見えます。

「あと二週間徹夜すれば!!」本当にそうか?
続く・・・

実話かはノーコメントです