スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

久しぶりの書き込みは愚痴

久しぶりの書き込みです。

まぁ、仕事の愚痴なわけですが。

最近というかここ一ヶ月ちょい程ですが、他人のこさえたプログラムのバグの
調査、できれば修正といったお仕事をしています。

マルチスレッド系のバグではないか?という事で
先方が怪しそうと言った所から始め、色々と問題に連なる波及範囲を考えながら
捜査の手を広げているわけですが…。

そもそも起きない。バグ起きない。
何百回まわしたろう?というか既に1000回を超えているはず。
片方でテストしながら、もう片方ではソースの解析。

マルチスレッド系のバグは、置きやすいものは簡単にデッドロックなり
ふっとびなりを起こしてくれるのでそういう時はいいのですが、
微妙なタイミングの問題とかだとなかなか起きてくれないもの。
再現率がかなり低いものとなる事がある。今回がそれ。

再現率が低すぎる(というかこれだけ回して起きてない)と、
そもそもここと思って手を加えても直ったかどうか分からない。
これが10回に1回、50回に1回とかならまだ根性で回せるけど
流石に1000回でも起きないとか直しようがない。
これを先方さんの更に上の会社は「高頻度で発生する」と言ってるそうだ。
一体どれほどのチェックをした挙句の言葉なのか。
恐らくこの再現率の低さを考えると環境依存系。
だったら環境貸与しろと思うんだが、聞いた所してくれなかったそうだ。
直してもらいたいのか?はたまた「バグがでた」と言いたいだけなのか?
直す気がないなら素直に諦めればいいのに。

ちなみに、性格的に諦められないので、むかついて
ついカっとなって問題のプログラムが通信処理で接続するデバイスの
一部の機能と同じ動作をするダミークライアントを作成してしまった。
それを使ったらふっとばす事に成功したけど、2度程成功したものの
再現率としては幾度もやってなんとか2回なのでやっぱり低く、
しかも飛んだ時は実機ではおき得ない動作をしてる最中だったので
プログラムに問題はあるのは分かったが、実作業の中においての再現性
という意味ではやっぱり起きないというのが現実…。
1000回を超えて怒った挙句の出来事だったけど、いやだわこういう仕事…。
ダミー作るのは楽しかったけどね。



話は変わって。
テストとは別に、上でも書いた通りソースも解析しているのだけど、酷いものだ。
(上で書いたダミークライアントは解析の副産物)
自分のプログラマとしての能力は正直高い方では無いというか、下の方だと思う。
という自分から見ても酷い。

ソースは人によって性格が結構でてくるので、じーっと解析をしていると
色々見えてくるものがあるわけですが…

「こいつ…マルチスレッドプログラムの基本がわかってねぇ…」

そもそもこの人、何本スレッドが走っているか意識できてない。
どのスレッドがどんなリソースを操作してるとか考えてない。
スレッドを使っている意識はあるのは確認できるが、
今その処理をどのスレッドが実行しているかを意識できてない。
タイマーとスレッドを同じく考えている節が見て取れるし
スレッドセーフにしようとした形跡は認められるが、
スレッドが好き勝手に並列に動作するという事が理解できてない。

自分も結構
「実際に使ってとばなければいいじゃない!飛んだら考えようよ!」
というタイプではあるけど、それでも最初の段階で後で吠え面かかないように
最低限のぶっとばない為の努力位はする。
もうそういうレベルの処理すらしてない。
見れば見るほど恐ろしい…

再現がまったくされない原因と思えるものも分かった。
スレッドの増加が外的要因によるので、こちらのテスト環境では
スレッドが増えず、最も確率が低い場合で頑張っていたようだ。
一応杜撰な組木細工のような変数による保護みたいな処理は入ってるので
タイミングの問題ではあるけど、それで防がれていたのだろう。
まったくもって、救われない。

マルチスレッドに対する意識の低さだけならまだいいが、
ソースを見やすくする、直しやすくする、といった配慮もない。
インデントはいい加減。クラスの設計もいい加減。
使ってない関数、変数も放置。
同じ機能は1つにまとめて使いまわす、というのはプログラマの本能
みたいなものだけど、それもない。
マクロ化もせず、ひたすらコピペで同じ計算をばらまいている。

そんなソースなので、無駄に関数1つ1つが肥大化するわ
段組が見通せないわで可読性が酷い酷い…。
これはなんだ、罰ゲームか?嫌がらせか?

ただまぁ、それが原因かはわからないが、
複数のスレッドで同時に触ったらあかんやろっていうリソースが
はっきりと存在していたので、とりあえずはそれをスレッドセーフに。
他にもいくつかそれとは関係ないバグも放置されていたので修正。
実行してみても飛んだりしないが、元々飛ばないので直ったか分からん。
これで飛ばれるとダミークライアントのお陰で場所の目星はついてるものの
場所が分かっても原因がわからんとかなるので、勘弁して欲しいが
多分その状態になった時には自分は契約期間切れになるので、
そこの会社のプログラマにあとは頑張れで終了かな。

ほんと、このプログラム作った奴に言ってやりたい。
ちょっとRegisterClassやCreateWindowからやり直してこいと。
便利な通信クラスなんぞ使わず、WinSock2からやり直してこいと。
タイマー使いたければWM_TIMERから勉強しなおしてこいと。
スレッド使いたければAPIで意識的にスレッド立てる所からやり直してこいと。

まぁ、もうそこの会社辞めちゃってるそうなんで言えないけどさ
他の会社でもこんなプログラムを量産してるのかなとか思うと
結構自分のことでもないのに欝ってくるよなぁ…。
はぁ… まぁ契約期間も残り少ないけど、もちっと頑張りますかねぇ…。
スポンサーサイト

テーマ : 日記
ジャンル : 日記

コメントの投稿

非公開コメント

プロフィール

神琳楓雅

Author:神琳楓雅
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。