最近私はこれを尋ねました 質問 。 numPy開発者のように聞こえる誰かが回答でコメントしたように、この動作は明らかに望ましくありません。投稿された issue はクローズされ、これは予想される動作であり、バグではないことを示しています。さらに、それを修正する計画があります。
予想されるが望まれないバグと動作の違いは何ですか?それらの用語には正確で一貫した定義がありますか?
ばかげた極端な例として、1 + 1を計算するように要求されたときにプログラムが常に3を返す場合、3を返すことは、常にそのように機能していたため、プログラムによって確かに予期される動作ですが、望ましい動作ではないので、バグです。か否か?
最近、哲学を勉強していて、この質問に興味を持ちました。
wart として知られています。
Stack Overflowの元の投稿へのコメントから、
明確に言うと、これは望ましい動作ではありませんが、(歴史的な)正当な理由があります。私たち(numpy devs)は、将来のリリースで廃止する予定であり、予想どおりに機能する機能をより簡単に理解できるようにする予定です。詳細は http://github.com/numpy/numpy/pull/6256 を参照してください。 - ステファン
すべての設計決定はトレードオフどこかです。どこかでより単純なものを作り、どこかで何かがより複雑になるかもしれません。
次のJavaScriptについて考えてみましょう。
>>> '5' + 3 - 3
50
>>> '5' - 3 + 3
5
それはバグですか?いいえ。それは望ましい動作です...ええと...私は人々にそう言いたくありませんそれがそのように機能することを望みますしかし、それはあなたが 'これはどのように決定されたのか+
は機能します。」
またはRuby x?2:3
は構文エラーです(x ?2:3
である必要があります-スペースに注意してください)。理由は?関数が?
とx?2:3
があいまいです-変数と3項式の?
部分の間のスペースで解決されます。
または、PhPで、文字列に対するPerlの auto-increment 機能を模倣することを決定しましたが、パターンの制限がないため、次のようになります。
$foo = "3d8";
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
( ideone )
プリントアウト:
3d8
3d9
3e0
4
そして、それほど難しいことなく、おそらく、意図されていなかった、おそらく望ましくないがそれでも期待された動作。
確かに、それが特定の方法で機能するようにするための設計上の決定は、(確かに)良い歴史的な理由がありました。そして、コードはそのように機能します-それはバグではなく、意図したとおりに機能しています。後知恵の恩恵により、これらの決定は適切ではなく、望ましくない動作につながる可能性がありますが、コードは意図したとおりに機能しています-そこにバグはなく、いぼです。
私がすぐに表示してくすぐることができるいくつかのいぼをリストしましたが、そこには無数のいぼがあります。これ以上例は必要ありません。いぼを含んでいないない言語またはライブラリを見つけたとしたら、率直に言って驚きます。
「バグ」とは、ソフトウェアの欠陥を表す非公式な用語です。これは通常、コードのどこかが間違っていることを示しています。正式な用語を使用する場合は、「エラー」(人間の行動または誤った結果につながる無作為)、「障害」または「欠陥」(誤ったステップ、プロセス、または定義)、および「失敗」(誤った結果)。エラーは、障害として現れる可能性のある障害または欠陥につながります。この dukeofgamingによる回答 (その質問の他の回答とともに)は、欠陥、障害、およびバグの違いをよく説明しています。
これらの用語は、ソースコード以外にも適用できます。たとえば、要件で発生したエラーは、設計の欠陥として現れる可能性があります。ユーザーがこの動作を目にした場合、テストで認識されなくても、ユーザーはそれを失敗と解釈する可能性があります。ソフトウェアコードは、要件の理解を反映している可能性がありますが、その理解は正しくありません。これはあなたの状況で起こったことに非常に似ています-ソフトウェアは開発者が意図したとおりに動作していますが、彼らの意図とユーザーの期待は一致していませんでした。
違いは、「バグ」はソフトウェアが何かをしていることを意味します間違った、そしてそれは現在よりもそのことをよりよく行うことができるはずです。
バグとは思わない最も望ましくない動作は、次のカテゴリのいずれかに分類されます。
あなたがリンクしたnumpy配列のインデックス付けの問題を完全には理解していませんが、それは3番目のカテゴリにあるようです。
バグは、誰かがどこかで間違いを犯したために発生する動作です。開発者に間違った動作を実装するように指示したのはUIデザイナーかもしれませんし、間違いを犯した開発者かもしれませんし、コンパイラかもしれません。
逆に、ボタンのアクションがあまりにも多くのコストと労力のために実装されないと決定された場合、それは確かに望ましくない動作ですが、それは意図的なものであり、バグではありません。
バグは、ユーザーが観察できる動作が文書化された動作と異なる場合です。望ましくない動作とは、ユーザーが観察可能な動作が文書化された動作に正しく対応しているが、別の動作が必要な場合です。