nabeshinによる
2007年10月26日 11時38分の掲載
翌年分は大丈夫ということは部門より。
翌年分は大丈夫ということは部門より。
seeds 曰く、
なにかと年金問題が取りざたされていますが、asahi.comの『生年月日まるめて記録〜』によると、
プログラムミスによって生年月日をそれぞれ丸めて記録されていたのではないか?
というような話が出てきていますが、これって「プログラムミス」?
COBOLのバグ? というか、受け入れテストしてなかったの?
ワタシ的には(意図的だったら)なんでわざわざそんなことしたの?ですが。
関連ストーリー
米社会保障局が誤った死亡データを入力 37 コメント
この議論は賞味期限が過ぎたので、保存されている。
新たにコメントを書くことはできない。
1日~9日が0日ならミスも考えますけど (スコア:5, すばらしい洞察)
20~29 → 20
30~31 → 30
これは日の1の位を落とすだけなのでプログラムミスもあるかな~と思いますが
1~9→1
に丸まってる時点で『そういうコードがある』としか思えないですねぇ。
何のために?と聞かれると、「阿呆と天才の考えることははかりしれん」としか答えようが無いですが。
# 1~9を0に丸めた後、日付チェックで不正な日付として強制的に1日にしてる(エラー吐けよ)可能性も排除できませんが
Re:1日~9日が0日ならミスも考えますけど (スコア:2, すばらしい洞察)
文字列項目から年・月・日それぞれの数値項目に分解する時、文字の桁数で指定して代入っていうのはよくやることで、これを間違えて日付の十の桁だけが日付として扱われているっていうのはありうるバグだし、それが整形されて 1 日っていうのもありえる。
特別に指定できなきゃいけない日付として「月初」と「月末」っていうのは割と定番で、たぶん 32 を「月末を意味するデータ」とかにして 0 を「月初を意味するデータ」とかにしていたんじゃないかな?
-- Where your reading book is, there will your heart be also 天戸 司郎 (Silo Amato)
親コメント
Re:1日~9日が0日ならミスも考えますけど (スコア:2, 参考になる)
追加で新しいデータも記録することになったのに,レコード長が足らない。
しょうがないので重要性の低い生年月日の日付その他を切り詰めて空きスペースを作り出した。
個人の識別は名前と生年・月があれば十分だから,こりゃグッドアイデアだ!
↑は冗談にしろ,大昔のCOBOLで作ったシステムではまれに似たような話が出てくる。
(実際に製造管理システムの識別コード桁長増・データ追加にからむプログラム全面改修の話が爆発して,
EDPシステムの担当者が激怒・椅子を蹴って立ち上がり会議から出ていこうとしたのを目撃したことがある)
親コメント
言われた通りに実装しただけではないかと (スコア:5, すばらしい洞察)
ここでプログラマーやっているみなさんも、そんな意味不明な仕様を出されても、そのまんま実装しちゃいますか? それとも、仕様作成者につっこみますか? それとも、出したところでつっこみは無視されますか?
Re:言われた通りに実装しただけではないかと (スコア:3, おもしろおかしい)
> それとも、仕様作成者につっこみますか? それとも、出したところでつっこみは無視されますか?
そこで仕様作成者がドロンですよ
# おや? もしかして、YellowTurtle?
親コメント
Re:言われた通りに実装しただけではないかと (スコア:2, おもしろおかしい)
普通はそのまま作るでしょう。言ったとしても軽く突っ込む程度でしょう。で、笑い話の種になる。
> それとも、出したところでつっこみは無視されますか?
普通、無視されるでしょう。仕様としてプログラマにくるまでにここまでバカな仕様が議論されずに仕様になるわけないですから。
親コメント
Re:言われた通りに実装しただけではないかと (スコア:2, すばらしい洞察)
馬鹿は、「馬鹿な仕様」が「馬鹿な仕様」であることを認識できないので、議論しません。
賢者は「馬鹿がお客様の場合は」、そのようなポイントを議論しません。
自分が出す発注物の仕様がこうだった場合のみ、議論します。
結論としては、「発注元に賢者はいなかった」という事が今回露呈したわけです。
fjの教祖様
親コメント
かなり勝手な予想。 (スコア:4, 参考になる)
一回仕事で使いましたが、無駄にややこしい法律です。
(かなり失念気味、間違えていたらご指摘ください。)
要するに4月1日生まれは早生まれというアレです。
誕生日から徴収開始月を求める場合、日まで正しく入力される必要があります。
いい加減に丸めた数字では正しく徴収できないはずです。
仕様書作成に関わった人が全員素人でも無い限りありえないと思うんですけどね。
さて、リソースが超絶少ない頃の業者の思考で進めると誕生日から毎回計算は大変。
徴収の管理が目的なら正しい生年月日ではなく、入力時に丸めてしまえとなるわけです。
例1)19500331生まれの場合は195003
例2)19500401生まれの場合は195003
例3)19500402生まれの場合は195004
計算機側で丸めて保存するのか、入力時に人間が丸めるかはわからないですが、
このデーターだと月差で年齢が出せるので、計算のリソースが少なくて済むよねという訳。
あくまで私の予想なので実際どうなのかはわかりませんけどね。
#あとは2000年問題のときに桁が足りないから恐ろしいことをやって誤魔化したとか。
理由? (スコア:3, おもしろおかしい)
ダメでしょうね
誕生日なんて飾りです (スコア:3, すばらしい洞察)
まるめる? (スコア:3, 興味深い)
一般的な用語だったのでしょうか。
IT系の現場ではごく当たり前のように使われていますが、
世の中的にはどうなのでしょう
Re:まるめる? (スコア:2, 興味深い)
一般的では無いのかも。
そもそも、何で「まるめる」って言葉になったんでしょうね。
英語では、四捨五入することをround〜 といういい方をするようですが、
round → 円形 → まる → まるめる!
というようなあたりが語源なんですかねえ。
以上、オフトピでした。
# おや? もしかして、YellowTurtle?
親コメント
Re:まるめる? (オフトピ) (スコア:3, 興味深い)
とても疑問だったわけですが、後にキャリーフラグ・ボローフラグって言葉を聞いて
ああ、英語からきたんだなと納得したわけですが。
でもなんで、英語でも「借りる」なの…?
# 「その十は返さなくていいんだ!」
親コメント
Re:まるめる? (オフトピ) (スコア:3, おもしろおかしい)
親コメント
Re:まるめる? (スコア:2, 参考になる)
親コメント
Re:まるめる? (スコア:4, おもしろおかしい)
親コメント
どう考えても (スコア:3, すばらしい洞察)
#ゴジラ風に
節約 (スコア:2, おもしろおかしい)
Re:節約 (スコア:3, すばらしい洞察)
親コメント
アサヒって無い? (スコア:2, おもしろおかしい)
まるめただけでデータが宙に浮く要因になるってのも理解できない
(「重複データが多い」とかなら分かるけど)
可能性の一例 (スコア:2, 興味深い)
汎用性を考えるとパックは使ってないと思われるので、1文字1バイトで格納。
すると、例えば1980年12月31日なら、16進で表すと、と、最終桁のみ微妙に違う。
COBOLでは相互の型変換は自動で行われる為に支障はまず起きないが、バッチシステムなどではひとつのプログラムで処理を全て行うことはまれで、単機能のプログラムの処理結果をユーティリティで繋ぐのが一般的。SORTとかね。
そこでパラメータの設定不備があると、符号の含まれた末尾一バイトが飛ぶ。
個々のプログラムがうまく動いてもデータが壊れる例なんてざらだったよ。
結合テスト不備だな。
Re:可能性の一例 (スコア:2, 興味深い)
当然のように元号です。
Copyright (c) 2001-2010 Parsley, All rights reserved.
親コメント
Re:可能性の一例 (スコア:2, 興味深い)
16進のダンプリストを見る時は楽なのですが、これをプログラムで扱おうとすると、非常に面倒です。 そのため、DBから取り出した後はサイン付きパックに変換しています。
で、更にこれを通常の10進数の変数に代入することで、年、月、日を取り出せるようにします。どこかで1桁くらい失われたりとかありそうです。変換と言ってもCOBOLなので、データ定義のREDEFINEを多用したものです。 サインなしパックのケツに'0C'をくっつけて、10で割ってサイン付きパックに代入、というもの。
# まだ私のコードが残っていそうな1960年代生まれの
SEAC親コメント
PIC 90. では (スコア:1, 興味深い)
ぼくの年齢も (スコア:1)
Re:ぼくの年齢も (スコア:3, おもしろおかしい)
親コメント
Re:ぼくの年齢も (スコア:2)
親コメント
妄想してみた (スコア:1)
たとえば、19701223 が 1970122 と保存されてしまった。
これを読む側のプログラマーがあれ?一桁たりねぇぞ?
しょうがねぇから、無いからゼロなんだろ、0日は存在しないから
その場合はたぶん1日だろうな・・・うん。ケテーイ
そしてリリースの日を迎える・・・
逆に考えるんだ (スコア:1)
> 「問題の時期にコンピューターを切り替えており、(正しく入力されたデータをまるめて変換する)プログラムミスがあったのではないか」
* システムを更改して、データ移行をしようとした
* ところが、もとのデータに生年月日の「日」が入っていなかったレコードが存在
* その結果、データ移行に失敗
* 仕方が無いので、「日」の無いレコードは、10, 20, 30の様な適当な数値で補って、とりあえず処理が終わるようにした。
という可能性は?
# よーく探したら、19?0年も不自然に多いかもしれない・・・
簡単じゃないか (スコア:1)
氏名がわからないんじゃ、生年月日がわからなくても不思議はないじゃないか。
Copyright (c) 2001-2010 Parsley, All rights reserved.
誕生日は放置されやすい...のでは? (スコア:1)
各自治体の住民基本台帳で確認(これをやってれば問題は起きない)
ぐらいしか、確認しようがないですからねえ。
Re:昭和100年対応? (スコア:1)
自分が担当者で無くなるぐらい先まで(笑)
------------
惑星ケイロンまであと何マイル?
親コメント
Re:よーわからん (スコア:2, 興味深い)
>63~66年度の4年間に就職や転職をしたり国民年金に加入したりした人のほとんどの生年月日が、そうした形で記録されていたという。
っていうことなのだから、システムを63年と66年に改修した記録があればプログラム側で、そうでなければ指示や通達による可能性があるよね。
その後の記事では
>原因について、蓮舫議員が「問題の時期にコンピューターを切り替えており、(正しく入力されたデータをまるめて変換する)プログラムミスがあったのではないか」と指摘したのに対し、石井部長は「その可能性を含めて調査している」と答えた。
蓮舫議員の調査の裏を取れればプログラム側だと判断できることになるね。
どっちにしろ調査結果待ちってとこでしょう。
親コメント
Re:馬鹿か?本当に馬鹿なのか? (スコア:3, すばらしい洞察)
悪意に満ちた賢者よりも、善意に満ちた愚者を恐れよ。
前者が何をしでかすかは予測できるが、後者は予測できぬ。
fjの教祖様
親コメント
Re:COBOL? (スコア:3, 参考になる)
とのことです。
親コメント
Re:COBOL? (スコア:2)
親コメント
Re:COBOL? (スコア:2, 参考になる)
親コメント
Re:昭和100年対応? (スコア:1)
#大化=0とする元号番号…だと、1バイトでは足りんのかな?南朝もあるしな。
親コメント
Re:馬鹿か?本当に馬鹿なのか? (スコア:1)
つまり、国民から抽選で数人選び出し、プログラムを書かせる、と。
親コメント
Re:みんな純真なんですねぇ (スコア:1, 興味深い)
データ入力のための予算が十分取れなくて、雇えるバイトさんが
少ないと、入力データを一部省略しちゃうことはよくある。
予算が確保できなかったので業務が完了できません、と言えない
ところが役所の悲しいところ。
現場の実態などお構いなしに、雲の上の方で予算が削られるのも
役所の悲しいところ。
システムの変更や入力データの一時的な急増に対して柔軟な予算
措置なんて考えられないからな。
結果、自分の担当の時に問題が生じなければいい、と考える輩が
出てくる。2-3年で異動しちゃうからね。過去の不始末も全て現
在の担当者がかぶる、というのが長く続いてたし。
過去の担当者を処分するようになったのは、ここ数年の話じゃな
いかな。(これは非常にいい傾向だ!!)
私は運が悪いのか、そんな不始末の後処理ばかりしているような
気がするよ。orz
親コメント
監視すべき対象は (スコア:1)
薬害エイズ、C型肝炎、ホワイトカラーエグゼンプション問題、年金問題、グリーンピア等
どれも厚生省キャリアが問題を起こしているわけだし。
どうも国民を大切にしようという意識が無いように思う。
横領した自治体職員の告訴をがんばっているようだけど、本当に追求すべき人間は御咎めな
しになっている事例が多すぎ。問題の論点をそらしているとしか思えない。
特に今回のC型肝炎のリスト隠蔽問題なんて犯罪ではないか?
なぜ、ねずみ男大臣は「厚生労働省の役人は信用ならん」と怒鳴らないんでしょうね。
親コメント
Re:みんな純真なんですねぇ (スコア:1, 興味深い)
親コメント