ドキュメントがほぼない場合のリファクタリングには一般プログラマとは別の技能が必要 155
ストーリー by nagazou
たしかに 部門より
たしかに 部門より
魔女みならいさんの(魔女みならいさんのツイート、Togetter)
仕事先で、「開発したプログラムのコード整理に雇った人が使えない」って話がでてるのだけど、「今は組織にいない人が作った、ドキュメントがほぼないソースコードを読み下して整理する」って、かなり知識が必要だから、普通のプログラマ案件の金額で雇える人に頼むのは無理だと思うんだよなあ。
というツイートが多くの共感を呼んでいる。このツイートに対して、自分では使わない書き方も知ってないと解読できない、これは普通のコーダーには無理と言った意見が出ている。普通にプログラム作るよりもコードを読み取る読解力というか考古学レベルの能力が必要で、プログラムとは別の能力であるとの指摘も出ている。結局は書き直したほうが早いとする意見になることが多いようだ。
これからは考古学者を名乗ります (スコア:5, 興味深い)
今まさに 10 年以上前に作られた MS-Access のプログラムを解析しています。
どうやら、まるっきりの素人が作ったみたいで、かなり難解。
無駄コードや無駄処理が多く、もちろんコメントや仕様書もない。
殆どプロトタイプみたいなもの。
子ボスや中ボスクラスのトラップがあって、さながら RPG のよう。
レベル 20 くらいの HP と「せいどうのつるぎ」「てつのよろい」程度では太刀打ちできない。
やる気を取り戻すために、宿屋やぱふぱふも必要。
ずっと前に、専用ハードで C とアセンブラのコメントなし
(CPU は 68000 で MMU はまともだったが、ペリフェラルとキーボード I/F は独自、おまけにサポート切れのマルチタスクモニタ)
というかなりヘビーな解析と改造、ドキュメント作成 (仕様書の起し) をやったことがあるけど、それよりは少しマシかな。
あの時は、68000 の ICE を使って PC-9801 の MS-DOS と MS-C と MASM でエミュレートという、ヘンテコなことをやっていた。
ぜんぜん見通しが立たないから、打ち切りの声はいつかかるんだろう、などと考えながら。
他人には「考古学みたいなもの」と説明していたが、はたから見てもそうなのか。
仕様書がないから、作り直すことはできない。
(そのための仕様書起し)
> 普通のプログラマ案件の金額で雇える人に頼むのは無理
普通じゃないなら、1.5 倍くらいの金額になるのかな。
自分では見当もつかない。
Re:これからは考古学者を名乗ります (スコア:2, 興味深い)
ちょっと違う気がする。
少なくともソースコードがあって動作しているプログラムの場合は記載されている内容が読めないって事はあまりない。
問題はそこじゃなくて、ぶっちゃけ
「やってる事は判るけど、やろうとしていることの意図が判らない」
部分の解読。
でもそこをすっ飛ばして作り直すと大概が酷い目にあうという…。
なんかね、証拠を追っかけて犯行動機を探るってノリが近い気がする。
よりによって (スコア:3)
元ツイートの案件、よりによってC++らしいから。
もっと手軽な言語をあえて使わなかった理由もありそうで、そんなモノの解析って、かなり難易度高そうな気がする。
Re: (スコア:0)
C++っていっても、++部分の機能をガッツリつかったコードと、
++部分の機能はほとんど使わず、C言語で済むところをC++にしただけみたいなコードがあるからな
Re:よりによって (スコア:1)
両者が混在して地獄のようになったコードだったり…
Re:よりによって (スコア:2)
Re:よりによって (スコア:2)
最適化すると書いて有るとおりの動作しなくなることも有るし
Re:よりによって (スコア:3, おもしろおかしい)
忘れるなC++だぜ
そしてコメントが間違っている可能性も考慮しないと
iが数値ならいいけどクラスだったらインクリメントがオーバーロードされてるかも
しかも後置インクリメントなのが嫌な予感
前置と後置が同じ実装になってますテヘペロなら可愛い方で
値返却用の一時オブジェクトの生成と破棄にやたらコストかかってて、前置に置き換えるだけでパフォーマンス改善する案件かも
と思うのは早計で実はその際の副作用に依存した挙動になってる罠かも
(いろいろトラウマ発動)
Re:よりによって (スコア:1)
じゃあ変数名、メソッド名、クラス名を日本語でつけるようにするね
Re:よりによって (スコア:1)
Re:よりによって (スコア:1)
いや、VC++とANSIのC++は別物と考えた方が作業は捗るぞ
Re:よりによって (スコア:1)
コール・藤原さん (スコア:3)
(Cプログラミング診断室)本文もあります。
¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
10年前の自分 (スコア:3)
ソフトはちゃんと動いているので
10年前の自分に感心してしまう
プログラム書いているときは最高に脳が活性化しているときだから
平常時の自分には追い付けないのかもしれないが
Re:10年前の自分 (スコア:1)
10年前の自分に感心してしまう
ホントホント!!
つい先日、現役バリバリだった20年位前のソース(コメント記載が豊富)を見てて、
「しっかりとしたソースだにゃぁ…誰だろ?…エ!!、コレ、ワタシが書いたの?!」
って思ってビックリしました(>_<)
すっかり根性ナシになった今じゃ、絶対ムリな芸当(勤勉さ)だと思いました。。
# 決して加齢が原因ぢゃないと思ふ!!(T_T)
ヒトよりコト・モノに関心を持ち、反応するように心掛けています♪(^^)v
分野による (スコア:3)
自分の場合でしたら、就職してすぐ研究所勤務で、たまたま複数言語のプログラミングが出来るってことで重宝がられて、物理計算プログラムを引き継ぎ担当させられたんですが、まぁ難しくて洒落になりませんでしたよ。ソース内にコメントがあっても勉強しないと意味が分からないし、簡単に数式で書かれてもプログラムに落とし込むのは物凄く苦労が多いです。教授以下どんどん論文成果出しちゃうのでそれについていかないといけないし、いかに速く計算できるかとかもですが、収束回数や丸め誤差でかなり結果が変わりますし、模型実験結果とシュミレーションプログラムと現実スケールの現状の差違を可能な限り埋めるのは大変です。それにスパコン用、ワークステーション用、パソコン用の3種類対応させてました。あと使用するコンパイラによっても結果が変わったりしてたので、その原因究明とか。当時は計算結果が出るのに長いときはスパコンでも1週間とかだったんで、その空いた時間に模型実験も1ケースあたり細かく条件を変えて500回以上とかですね。大型模型だったのでスケールがでかくて。一度200kg以上ある模型がクレーン移動中に落ちて慌てて一人で支えましたが数人が慌てて駆けつけるまでよく持ったなぁと思います。当時はベンチプレスで110kgを上げれる程度には力があったんですが、火事場の馬鹿力って本当にあるんだなぁとつくづく思いました。研究所内に勝手に筋トレ部屋作ってたけど特に怒られませんでした。昔同じような事をしていた人はいたらしく筋トレ機材があちこちに結構残ってたので。サンドバッグまで吊るしたのは僕だけでしょうけど。いや、話が脱線してしまいました。すんません。
当時はラインプリンタが一般的だったのでプログラム出力して査読とかよくやってましたね。Linuxカーネルソースとかも良く読んで自分のマシン用に修正したりしてました。
#ゲームのセーブデータのパラメータ解析するほうが探偵気分があってマシ(笑)
#人の作ったVBAマクロを改善するのは有難がられるけどツマラナイ。
#単純なデータ入力のお仕事です→地獄。
Re:分野による (スコア:2)
毎度、お疲れさまです!!
ホントミスってましたね。発音するときはシミュレーションって言うのに何でシュミレーションって書いちゃうんだろう?
場合によると思うが (スコア:2)
Undocumented なだけなら別に難しくないケースもあると思うけど、「ドキュメントを残さずに前任者が去っている」という時点でお察しな案件なのだと思う
Re: (スコア:0)
今時作成日が2002年なコードの改修とかどうよ?
でも、オープンソースってそんなもんじゃね? (スコア:1)
「ソースがドキュメントだ」、「仕様書?なにそれおいしいの」の世界だし。
プログラム言語を処理するとき使う脳部位は言語野ではなかった (スコア:0)
関連
https://developers.srad.jp/story/20/12/21/1741255/ [developers.srad.jp]
3か月前の自分は他人 (スコア:0)
自分の書いたコードすらコメントないとほぼ理解できなくなるから、
コード解析能力が0だとバグが発見されてもデバッグすらできず、そもそもプログラマとしてやっていけないのでは。
Re:3か月前の自分は他人 (スコア:2)
3か月??
週末を挟んだ3日前が既に他人ですだよ。
Re: (スコア:0)
そりゃ中にはそういう解析力0のプログラマーも居るかも知れないけどさ
向き不向きの話で極論持ち出しても意味ないよね
Re:3か月前の自分は他人 (スコア:1)
こういうのは向き不向きというより、好き嫌いという話な気もする。
Re: (スコア:0)
めっちゃわかる>3ヶ月前の自分
結局その(ぐちゃぐちゃな部分)をごっそり書き直したりする事も
…そういう事を繰り返す事でわかりやすい綺麗なコードをかけるようになるわけですが
書きっぱなしでバグ修正もメンテも他人に丸投げでいつまで立ってもクソコードを書く奴が好き放題できる職場だと地獄
Re:3か月前の自分は他人 (スコア:1)
>めっちゃわかる>3ヶ月前の自分
>結局その(ぐちゃぐちゃな部分)をごっそり書き直したりする事も
年数回その仕事やってまっす(内緒)
Re: (スコア:0)
> 3か月前の自分は他人
あるある。
どういう意図でこれ書いてんだ俺ってのから、
このプログラムなかなかいいじゃんまで。
Re:3か月前の自分は他人 (スコア:1)
思考パターンが同じだから、コメントがないと同じ轍を踏む。なんでこんなアホな書き方をしたんだと、直したら意図通りに動かなくなり、しばらく考えて書き直すと、元のコードに戻る。時間の無駄でしか無い。
Re:3か月前の自分は他人 (スコア:2, すばらしい洞察)
毎回同じ書き方になるんだったら成長していないってことだが
書き直した方が早い (スコア:0)
仕様なりテストコードなりが完璧にそろってる状態ならねぇ・・
MOTHER2のあれは、ある程度企画書類が外部にあっただろうから言えたことで。
Re:書き直した方が早い (スコア:1)
書き直すための仕様を抽出する作業だよねぇ、これ…。
仕様書に残ってない仕様が大量に含まれてたりするケースだよ。
しかも盲腸みたいに動いてない箇所とかもいっぱいあるやつ。考えるだけで胃が痛くなってきた。
Re: (スコア:0)
> 仕様書に残ってない仕様が大量に含まれてたりするケースだよ。
コメントもない不思議なコードがあるんだけど、実は運用には必要なコードだったりして
勝手にいじって怒られるやつですね
# 仕様よこせ。その通りに作るからそれ以外は知らん。って出来ればいいんだけど
Re: (スコア:0)
ソースを修正してもコメントを修正していない罠もあるのでコメントは読むな!
先にコメント除去フィルターを掛けてから読もう
Re:書き直した方が早い (スコア:1)
Re: (スコア:0)
作り直した方が早いってわりと幻想ですよね
昔はソースコードが無くて逆アセンブルから始まる仕事も結構あった。 (スコア:0)
客の金払いが悪いので保険としてソースコードは渡さない、リビルド出来る環境は渡さない的なのも。
Re:昔はソースコードが無くて逆アセンブルから始まる仕事も結構あった。 (スコア:1)
どうせ依頼主はコードを理解できないし、保険として地雷コードを埋め込んでおくというのはダメですかね。
時限式なら、なおよし、とか・・・。
Re:昔はソースコードが無くて逆アセンブルから始まる仕事も結構あった。 (スコア:1)
ドキュメントがないだけならまだまし (スコア:0)
ひどい場合は、ドキュメントどころかソースコードもなく、
バイナリファイルを逆アセンブル・逆コンパイル・APIやライブラリの利用をトレース等して解析する必要がある
Re:ドキュメントがないだけならまだまし (スコア:1)
これな。
20年前なら「ソースコードが無いプログラムの解読」案件がそこそこあったかもしれないが
今だとソースコードならあるんだ、マジで良かったな
という気持ち。
Re:ドキュメントがないだけならまだまし (スコア:3, 参考になる)
現代でもある上、価格破壊まで起きている。
ソースコードのないPC-9801プログラムの仕様解析、予算10~30万は安い? [developers.srad.jp]
ソースコードのないPC-9801プログラムの仕様解析、その後 [developers.srad.jp]
Re:ドキュメントがないだけならまだまし (スコア:2, おもしろおかしい)
資料が実機の基盤とオールアバウトナムコしか無い案件があったなあ
Re:ドキュメントがないだけならまだまし (スコア:2)
ナムコミュージアムの開発の方ですか?
金にならない (スコア:0)
そういう作業、結構得意でむしろ好きだったりするけど、評価されない給料上がらないになるので黙ってる。
Re: (スコア:0)
> 結構得意でむしろ好きだったりするけど
読んでいて殺意が湧いてくるコードに出会ったことがない君は幸せだ。
Re:金にならない (スコア:2, おもしろおかしい)
むしろ一線越えると笑えてくるよ。
Re: (スコア:0)
自分も結構得意、探偵になった気分で読むと楽しいし
普通に作る案件だとつまらなくて、複数のやり方が浮かぶと選ぶの大変だしw
普通は評価されない特技だけど、トラブル対応で重宝したりすると思うけど
Re:だからといって、支払いが高くなるかというと (スコア:1)
お金を渋り続けた果てにあるモノですからね。
Re:岩田聡の逸話からの教訓 (スコア:1)
こんな特殊なスーパーマンみたいな人の例を教訓と言われましても。
では将軍様、みずほのシステムを全部作り直しますので、岩田氏を屏風の中から出してください。。。