ここから本文です

プログラマって、どの程度予期せぬ自体を想定し、実装するもの?

mom********さん

2017/6/1122:36:29

プログラマって、どの程度予期せぬ自体を想定し、実装するもの?

VLCは、昔からある動画プレイヤーです。

でも、再生をリピートにし、動画Aを再生する。
通常なら、動画Aが終われば、また動画Aを再生する。
これを繰り返す。

しかし、動画Aを削除すると、再生しようとしている動画がないために、エラー画面を出す。
どうも、動画Aを再生しようとするが、動画Aがないので、再度動画Aを再生しようとする。
でも、動画Aがないのでエラーを吐き出す。

という無限ループによって、フリーズするようだ。

バグとまでは言えないけど、たまにやっちゃうし、想定できないともとも思えない。

これはあくまで喩え話だけど、プログラマって、どの程度予期せぬ自体を想定し、実装するものですか?

補足優先順位や能力や予算によるってのもわからんでもないけど。

VLCは、もう10年以上ある動画プレイヤーですよね?
今でもヴァージョンアップもなされています。

それでも素人から見て凡ミスとも思えるものが残り続けているのかなー?と。

特に海外産のは、意外と改善されないなと思うものも多いような気がします。

閲覧数:
120
回答数:
9
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

yam********さん

2017/6/1216:05:30

優秀な技術者の条件は、優れた「創造力」と「創造力」だ。

>予期せぬ自体

そのすべての「事態」が予測できるのがいいエンジニア。

「予想外」とばかり言ってるのがダメなエンジニア。

予想した上で、予算の都合上処理を省略することはある。

いわゆる「仕様」。

とはいえ、放置するのは忍びないので、一括してエラー処理してしまう。

リカバリは面倒くさい=金と時間が掛かるからね。

まあ、その後呼び出されたときのために、秘密でログを取っておくとか、隠しエラーコードとか用意してはおくけど。

  • yam********さん

    2017/6/1218:41:06

    >優れた「創造力」と「創造力」だ。

    何言ってるか分かんねえな。

    優れた「創造力」と「想像力」だ、だ。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜5件/8件中

並び替え:回答日時の
新しい順
|古い順

lin********さん

2017/6/1510:35:32

VLCの例で言うと、VLCは動画ファイルを読み込んで再生するだけですから、プログラマは特に注意しないと思います。無いファイルを読み込めないのは、VLCが影響を受けている側だから。影響をなにかに与える危険では無い。

もし、プログラムが何かに影響を与える危険があるなら、そこを重点的に考えます。

bjf********さん

2017/6/1510:30:03

>プログラマって、どの程度予期せぬ自体を想定し、実装するもの?
>しかし、動画Aを削除すると、再生しようとしている動画がないために、エラー画面を出す。

削除した時点で再生を止めるね

削除後に動画Aのファイル名が表示されたままの状態を仮定すると
再生ボタンを押すごとにファイルが存在するかのチェックを入れるね

よって、削除した動画Aを再生しようとすると
”ファイルが存在しません”と表示させる

bus********さん

編集あり2017/6/1505:11:21

GUI、サーバー(DBなど含む)やOSが何かにもよります。
WindowsのクライアントOS上のGUIで、c/c++なんかで、ポインタ異常が起きる状況なら、即座にabortで自らGUIをハングさせる事がベストと考えるし、
サーバーなどの簡単に再起動などが許されない常駐ソフトなら、極力こけない様にエラー処理を入れますが、根本的な作りをこける事が前提で全体を設計します。
複数の処理を1exeの複数のスレッドで処理もできますが、これをスレッド分割せずに複数のexeで処理する様に設計します。何かエラーが発生すると、最悪そのexeだけが止まり、影響範囲はそのexeの担当範囲に収まりますからね。exeで小分けすると、エラー後にリカバリーさせる事も簡単になりますので。

言われているVLCの問題は、VLCの問題ではなく、操作ミスですよね。

piy********さん

2017/6/1217:37:06

プロジェクトによりますね。
基本的には落ちないシステムを構築する必要があります。

然しながら、24時間稼働した場合、WindowsUpdateなどによるOSのメモリ不足などは、なかなか対応できません。
定期的に情報を取得するのはマシンのリソースも使うので、どこまで対応するかは、お客さんとの話し合いですね。
例えリソースを使ったとしても、医療系のシステムの場合は、途中で落ちられたら困るレベルではないので、対応が必要となります。
通常の事務などのシステムであれば、マシンが不安定に陥った場合、再起動するという手がありますので、基本的なエラー処理を入れておけば大きな問題には発展しません。

最低限、プログラムのどこでエラーが発生しても、それをきちんと制御するロジックを組むのが一般的ですね。

khu********さん

2017/6/1208:23:36

まず、「予期せぬ事態」そのものが起きないように、予算と日数に応じて、動作仕様の範囲を限定します。

具体的に言えば、システムの入り口で、妥当でない入力を全て拒絶し、妥当な入力のみを処理するようにします。
また、システムの出口で、妥当でない出力になったら当該システムを停止し、システムの外部にエラーを出力し、必要ならば当該システムを再動作させます。
(「システム」の規模、大小問わず…「小さな関数1つ」のレベルから徹底する)

そもそも原則論として、システムは、「有限のモノを処理するから『正しい結果』が出せる」のです。 入力を何でもかんでも受け付けるようなシステムは、その結果を検証できません。

次に、「予期せぬ事態」を、予算と日数に応じて、可能な限り拡大して考えます。
物理障害や電源喪失、人為的ミス、自然災害、犯罪、戦争に至るまで、コストの許す範囲で想定し、備えます。
これは、システムが社会や人間に対して、どれだけ責任を負えるか、という話につながります。 無限に責任が負えるわけではありませんから、たとえ原発や銀行のような重要システムであっても、どこかで「責任の足切り」をせざるを得ません。

・・・・・・・・・・

VLC の例で言うと、VLC というシステムの設計時点において、「自プロセスが関わっているインスタンス・ハンドルの実体が消された」という事を、「検知も考慮もしない」ことになっているのだと思います。
おそらくこれは、「予期しない事態」と言うより、「わざとそうしている」のではないかと思います。

OS を含めてどう設計するのか、という話でもあるのですが、
仮に、VLC が「自プロセスが関わったインスタンス・ハンドルを『掴みっぱなし』にする」という設計だったとしたら、VLC が起動している間、その動画ファイルは削除も移動もリネームもできないでしょう。
それが利用者にとって不便である、と VLC 設計者が考えたなら、そのハンドルは「再生が終わったら手離す」、つまり「検知も考慮もしない」という設計が妥当だということになります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる