パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

東証の派生売買システムで障害、4時間取引停止」記事へのコメント

  • ちょっと違う (スコア:4, 参考になる)

    by Anonymous Coward on 2008年07月23日 11時38分 (#1388897)
    >データ容量の上限を 2万銘柄とすべきところ、88銘柄に設定していた
    データ容量のサイズが28000銘柄分のはずが88銘柄分しか確保できてなかった。

    http://itpro.nikkeibp.co.jp/article/NEWS/20080722/311271/
    • Re:ちょっと違う (スコア:5, 参考になる)

      by hylom (27448) on 2008年07月23日 11時47分 (#1388907) ホームページ 日記
      なるほど。データのサイズを誤っていたのですね。しかし、1280バイトのはずのデータを、4バイトに間違えるってどんなミスだよ……。

      板情報を配信するプログラムは本来、1銘柄当たり1280バイトの作業用メモリー領域を2万8000銘柄分、合計3万5000Kバイト確保するよう記述しなければならない。だが、1銘柄当たりのメモリー領域を誤って4バイトとしてしまったため、プログラムは本来の320分の1の109.375Kバイトしか確保しなかった。結果として89銘柄以上の板情報の問い合わせが同時に発生すると、作業用メモリーが足りなくなり、情報配信システムがダウンした。
      東証のシステム障害、設定ミスをテストでも見抜けず:ITpro [nikkeibp.co.jp]より)
      親コメント
      • by x-rebuttal (33869) on 2008年07月23日 12時06分 (#1388925)
        sizeof(HogeHogeObj)を間違えてsizeof(HogeHogeObj*)にしたとかでは?
        親コメント
        • by Anonymous Coward on 2008年07月23日 12時34分 (#1388961)
          なんだかおなじような回答がわずかな時間差でいくつも投稿されてるてことは・・・
          皆さん現役の方ですよね。世の中にはこの手のバグを飼ってるソフトが多数出荷されてるってことになりますか。
          親コメント
          • by Anonymous Coward on 2008年07月23日 13時07分 (#1389028)
            ふつうに 4byte というサイズになる原因として、ポインタのサイズが連想しやすいからだと思います……思いたいです。
            同時に、東証のシステムが 64bit 化されていない事も推測できる、と w
            親コメント
          • by Anonymous Coward
            1388897だけど、同じようなこと書こうとしたけどACなんで時間制限が。

            プログラマも人間なんで、間違いはいくらでもやります。
            でも、特に大きなシステムの場合、ソースコードを複数人で確認するはずで、
            確認していればこういう記述ミスレベルのものは、大抵発見できるですよ。
            もちろんその前後にテストだってやるし。
            作りこむことは多数あっても、出荷する前に見つかって直ってます。

            ええ、大抵は。

            #「データ容量のサイズ」という変な表現を直したかった。
            • Re:ちょっと違う (スコア:1, おもしろおかしい)

              by Anonymous Coward on 2008年07月23日 13時56分 (#1389098)
              >でも、特に大きなシステムの場合、ソースコードを複数人で確認するはずで、

              そんなプロジェクトありません(笑)

              #笑っちゃいけないところだけど。
              親コメント
              • by C0FFEE (36377) on 2008年07月23日 16時09分 (#1389226) 日記
                >>でも、特に大きなシステムの場合、ソースコードを複数人で確認するはずで、

                >そんなプロジェクトありません(笑)

                一度に複数人で確認する事は無いけど、3ヶ月ごとに別の人がメンテする案件というのはありがち。

                まあ、今回に限って言えば、いかにコーディングを正確に行ったかよりも、
                境界値・例外値・適正値の検証不足が原因でしょう。
                人の数より、質の問題。
                一見コードは正しいけど、運用でコケるって類のミスを防ぐには、
                PGが複数人居て見ても気がつきにくい、なぜなら業務のプロでないから。
                いわゆるユーザー系SIであれば、業務にも通じている人間が常時いるけど、
                大規模アプリの全モジュールをチェックできる人数抱えていない罠。

                #88銘柄にしろ28000銘柄にしろ、上限値を超えた時の例外処理にも問題があるように思える。
                親コメント
          • by Anonymous Coward
            調査人が他の方の言うようにC言語的ミスを現象から想像してつじつまも合うし、とりあえずの報告が発表されたんじゃないかな?

            だが、富士通から納入されている売買システムはCOBOLだから今回の先物システムもCOBOLじゃないの?
            COBOLでヌルポやポインタ記述ミスは起こらない。

            そこで他の方が書かれているようにストレステストじゃなくてエラー処理検証用に最大数を88(適当な数字)にして
            エラーシーケンスのテスト後戻し忘れじゃないの?
            これは受け入れ検査時だと思うので東証側のシステム担当者が悪い? 保身の為にメーカに責任を負わせると次のシステムも
            富士通に決定。

            原因不明と言うよりも、”ヌルポ! ガッ!”って言っとくほうが恥ずかしいバグですが誰もが納得して修正後は根治されたと納得できる。
        • by Anonymous Coward
          もしそうなら技術力の無いプログラマが日本金融の心臓部を作っていると
          いうことで…。物凄い寒気がするんですが。
          • by ksiroi (24990) on 2008年07月23日 12時42分 (#1388985) 日記
            技術力が物凄く高い奴が作ると故意の罠とか仕掛けられてそうで
            それはそれで怖いですな。小説のネタっぽいですが。

            あぁそうそう、そうですよだから僕は三流プログラマなんですよ!
            決して怠惰で勉強してないわけじゃないんですよ!

            親コメント
            • by Anonymous Coward
              ちょっと前にここでも、UNIXのログインに巧妙に仕組まれた罠が話題になってたような。
      • > 1280バイトのはずのデータを、4バイトに間違える

        sizeof(DataType) のつもりが sizeof(DataType*) になってたとか?

        …っていうのは、やっちゃったことあります。マクロ化してて、引数の型を間違えたりとか…
        #define alloc(type,count) malloc(sizeof(type)*(count))
        DataType *p = alloc(p, count);
        ってな感じのコードだったかな。
        親コメント
        • Re:ちょっと違う (スコア:1, 参考になる)

          by Anonymous Coward on 2008年07月23日 17時33分 (#1389286)
          そのマクロ定義だと、たしかに起きがちですね。
          そういう間違いを防ぐため、以下のようなマクロを使うことにしてます。

          #define MALLOC1(p) ((p) = malloc(sizeof(*(p))))
          #define MALLOCN(p,n) ((p) = malloc_array((n), sizeof(*(p))))

          なお関数 malloc_array() 内では、整数オーバーフローのチェックが必要です。
          親記事の alloc() マクロは、その点でも問題がありますね。
          親コメント
      • Re:ちょっと違う (スコア:1, すばらしい洞察)

        by Anonymous Coward on 2008年07月23日 12時11分 (#1388931)
        設定ミスってより、テストや品証のミスといいたくなるなあ。
        これって最大値のチェックが抜けていたって事でしょ?
        原因は確かに設定ミスだけど、この程度なら、ちゃんとテストすれば発見出来る障害だと思うんだけど。
        親コメント
        • by tarosuke (2403) <webmaster@tarosuke.net> on 2008年07月23日 12時30分 (#1388956) 日記
          というか受け入れ試験はどこ行った?と。
          受け入れ試験に「通って」て、悪意のある挙動でもないのに損害賠償ってのはなぁ...。
          #「設定」だからオペミスの可能性もあるけどな。
          親コメント
          • by Anonymous Coward
            いい加減な要求仕様を突き付けられて、要求仕様のミスはタダで直させられるのに、
            こういうとこでは金を取られる、なんて世界じゃSI屋さんもやってられないでしょ。
            こんなの。

            #東証のシステムの要求仕様がいい加減だったかどうかは知りません。

            ウチが受けた仕事(もちろん東証とは関係ない組込みの仕事)でも要求仕様には機能
            の内容すらロクに書いてないのに、いざ納品したら「画面が違う」(そもそも仕様
            書のどこにも画面デザインなんて書いてないよ~~)とか、「HTTPプロトコルでの
            通信」って書いてあるのに、「動かないのがわかってから仕様書が登場したRFCと
            はかなり違うその会社独自のHTTPプロトコル」だったりしたりして、えらい目に
            あった。
            (そんな状況でこっちが金欲しいくらいなのに「納期遅れだ、機会損失を補償しろ」
            とかほざくし)
        • by Anonymous Coward
          テストは本来、ミスをみつけるためのものじゃないし。
          とくにこの程度の、ロジックすら絡んでない話だと、レビューなりなんなりで見つからないとねえ。
      • by strict_ansi (2886) on 2008年07月23日 12時13分 (#1388936)
        > しかし、1280バイトのはずのデータを、4バイトに間違えるってどんなミスだよ……。

        構造体実体のサイズを使うべき所で、構造体へのポインタのサイズを使ってしまったのでは…。

        typedef struct _Hoge   Hoge;
        typedef struct _Hoge * HogeP;
        struct _Hoge {
          char something[1280];
        };
        上記のような定義があって、
        sizeof (Hoge) * 28000」とすべきところを、
        sizeof (HogeP) * 28000」としてしまった…、に1票。
        親コメント
      • by Anonymous Coward
        証券コードが4バイトだから、間違えてその分しか記述してなかったとか。
        にしたって、信じられないミスではありますね。
      • by Anonymous Coward
        >なるほど。データのサイズを誤っていたのですね。しかし、1280バイトのはずのデータを、4バイトに間違えるってどんなミスだよ……。
        4バイトって事はポインタなんじゃない?
        例えばこんな感じ↓にしちゃったとか。

        typedef struct {

        ・・・

        } meigara;

        // meigara *meigaraBuf = new meigara[28000]; //正
        meigara *meigaraBuf = new meigara*[28000]; //誤

      • by Anonymous Coward
        「3万5000Kバイト」って表現はどうなんだ。

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

処理中...