2014年3月5日水曜日

プロジェクトが遅延した場合の対処法

プロジェクト管理について珍しく考えていたので少しまとめたい。ここではプロジェクトが遅延した場合の対処法について書いてみる。ただし内容は経験のあるソフトウエア開発のみに特化しているかもしれない。

プロジェクトが遅延する理由


遅延が発生しないプロジェクトは見たことがない。なぜかを少し考えたところ当たり前だと気がついた。もし90%でできるタスクが100個あったとするとすべてうまくいってスケジュール通りに完了する可能性は0.002% (0.9^100*100) になりほぼ0%になる。だから何もしないでスケジュール通りにうまくいくということは嘘をついているか、すべてのタスクがほぼ機械的にできるようなものか、宝くじに当たるぐらい運がよい時になる。

プロジェクトが遅延した場合の対処法


プロジェクトは絶対に遅延が発生するのでもし発生した場合の対処法を考えたが魔法のような方法はなかった。もし遅延が発生した場合の対処で延々と悩むぐらいであればこの方法ぐらいしかないので機械的に対処するぐらいのほうが気が楽になるのではないかと思う。ここでは内部調整と外部調整に分けて記載してみる。

内部調整


現状の人員、納期、品質を変更しない前提での調整内容をここで記載する。

  • 残業する
  • 単純に作業時間を長くする方法である。いきなり残業するだったので落胆の声が聞こえそうだがもっとも簡単な方法で一番とられやすい対処法だと思う。あまりやり過ぎると体調を崩したり見積もりの基準が定まらなくなるので負担にならない程度で労働基準法の範囲内ですることが前提だ。かっこよくいうと稼働を上げるとか、クラッシング(人員の追加の意味も含むがここではその意味を除く)とも言う。

  • 並行作業する
  • すでに実施可能な先行タスクを並行的に行ってしまうことである。この対処法もよくとられるがうまくやらないと後戻りが発生するリスクもある。かっこ良く言うとファストトラッキングとも言う。PMBOKにもあるので真っ当な方法にも思えるが普通に考えると一人でこれをやろうとすると並行作業することになるので残業は不可避のように思う。

  • 平準化する
  • 一部の人に作業が集中している場合に暇な人ができるのであれば手伝ってあげる。ただ中々タスクを分解するのは難しいケースがあったり分解される方は気分はよくないように思うので皆の協力が必要だ。

  • 効率化する
  • 非効率なやり方をしていないかを見直して効率的なやり方があるのであればそれをもとに再見積もりをする。たとえば明らかに重複している作業がないか、自動化できないか考えてみる。


    外部調整


    もし自分の管理の範囲内で調整がつかない場合は QCD(品質、スコープ、コスト、納期)をステークホルダーと調整する。たとえば納期が絶対であればある機能をけずるとか、単純に納期を延ばしてもらうとかの調整になる。

    上記の対処法をうまくやればほとんどのケースは対応可能と考えられる。ただし最後の外部調整がうまくいかない場合は厄介なことになるだろう。正直言うと自分はこういう調整が好きじゃないしできればやりたくないので予防、調整しやすくする、メンバーで勝手にやれる方法を考えたい。

    2013年7月7日日曜日

    OSI参照モデルをまとめる

    ネットワークスペシャリストを次は受けてみようかということで情報処理技術者試験では必ず出てくるOSI参照モデルについてまとめてみました。
    お決まりの関連機器やTCP/IPとの対応付けについても書いているので分からなくなったら見返すことができるかと思います。
    語呂合わせは作りづらいというのが正直なところですね。。

    レイヤOSI参照モデル説明関連する機器TCP/IPモデルTCP/IPプロトコル群PDU
    第7層アプリケーション層データ通信を利用した様々なサービスを人間や他のプログラムに提供する。ゲートウェイアプリケーション層HTTP / SMTP / POP / FTP / TELNET / DNS / DHCP / NTPメッセージ
    第6層プレゼンテーション層第5層から受け取ったデータをユーザが分かりやすい形に変換したり第7層から送られてくるデータを通信に適した形に変換する。
    第5層セッション層通信プログラム同士がデータの送受信を行うための仮想的な経路(コネクション)の確立や解放を行う。
    第4層トランスポート層相手まで確実に効率よくデータを届けるためのデータ圧縮や誤り制御、再送制御などを行う。トランスポート層TCP/UDPセグメント
    第3層ネットワーク層相手までデータを届けるための通信経路の選択や通信経路内のアドレスの管理を行う。ルータインターネット層IP / ARP / RARP / ICMPデータグラム
    第2層データリンク層通信相手との物理的な通信路を確保し通信路を流れるデータのエラー検出などを行う。ブリッジネットワークインターフェイス層PPP / LANボードフレーム
    第1層物理層データを通信回線に送出するための電気的な変換や機械的な作業を受け持つ。リピータ回線 / 各種ケーブルビット

    2013年6月29日土曜日

    Jetty9でWebSocketを使ってみる。

    今、glassfish4でWebSocketのJavaEE7のWebSocket参照実装が出てきていますが、あえてここでJetty9でWebSocketを使って簡単なチャットアプリを作ってみました。 Jetty9.1ではJavaEE7のWebSocket仕様(JSR365)に対応するようですがJettyの仕様ともあまり変わらないので移行はそこまで大変じゃないと予想しています。

    2013年5月26日日曜日

    NetBeans7.3のキーをVim風にする。

    EclipseだとVrapperでキーバインドをVim風にすぐにできたのですがNetBeans 7.3だと少し引っかかったのでメモ。

    1)NetBeansだとVimにするためのプラグインがjViがあるのでダウンロード。
    http://sourceforge.net/projects/jvi/files/jVi-for-NetBeans/NetBeans-7.0/nbvi-1.4.8.zip/download
    2)Tools->PluginsからDawnloadedを選択してAdd Pluginsを選択してからダウンロードをしたnbvi-1.4.8.zipをインストールする。
    3)NetBeansを再起動。

    なぜかTools->Pluginsを選択してAvailable PluginsにあるjViからインストールしてもうまくVi化されないので注意が必要です。

    あとCtrl-CやCtrl-[でノーマルモードに移行するような設定をするにはPreferencesでjVi Configを選択してからCtrl-Key Bindingを選択して有効にしたいCtrlキーバインディングを選択します。
    またデフォルトの動作だと挿入した部分以外はbackspaceが効かなかったので効くようにするにはBuffer Modifications で‘backspace’ を 2 に設定します。

    2013年3月4日月曜日

    herokuのSpring MVC & Tomcat Applicationを読んでみた。

    herokuはeclipseでプロジェクトを作るだけで公開されるのですごいと思います。
    ただ新しい機能が使われており主にSpring関連の設定が逆に訳が分からなかったため確認してみました。

    Spring MVC & Tomcat Applicationのテンプレートを確認しました。
    ほとんどは以下のapplicationContext.xmlで分かりそうです。

    https://github.com/heroku/template-java-spring-hibernate/blob/master/src/main/resources/applicationContext.xml

    ①ローカル環境とデプロイ環境でDBが違うのはどうやっている?

    Spring3.1のBean Definition Profilesの機能を利用しているようです。
    <beans profile="default">と<beans profile="prod">
    でローカル環境とデプロイ環境で読み込むbeanを切り替えているようです。
    Procfileでは-Dspring.profiles.active=prod とオプションが設定されているので
    デプロイ時には<beans profile="prod">が読み込まれるのでしょう。

    ②テーブルを作っていないのにアプリケーションを動作させた際にテーブルができているのはどうやってる?

    Hibernateのアプリケーション起動時に自動でテーブルを作成する機能を利用しているようです。<prop key="hibernate.hbm2ddl.auto">をcreateもしくはupdateとすることでこの機能を有効にしていました。createとupdateの違いは起動時にDBを初期化するかしないかぐらいかなと思います。


    2013年3月3日日曜日

    動的型付け言語と静的型付け言語

    bloggerでテーブルを試してみた。
    お題は最近何故か話題になっている動的型付け言語と静的型付け言語です。
    動的型付け言語静的型付け言語
    型が決まるタイミング型が実行時に決まる。型がコンパイル時に決まる。
    採用している言語perl,python,php,ruby,javascript,LISPC,C++,Java,Haskell,COBOL
    メリット記述が簡潔になる。実行速度が速い。
    デメリット実行速度が低下する。記述が冗長になる。
    使いどころプロトタイプ型の開発を行うシステム大規模で厳密性を求められるシステム

    WebシステムではWeb系だと動的型付け言語、SI系だと静的型付け言語を使うことが多いと思います。メリット、デメリット、使いどころは色々書くと面倒くさい人たちが出てくるので最低限書いています。あまり関係ないけど動画置いときます。

    2013年2月4日月曜日

    スマホから投稿

    bloggerにもアプリがあったので試してみた。なんか普通過ぎる。