ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

8
デバッグコードを常に残すか、常にデバッグするか、デバッグ時にのみ追加し、バグが見つかったときに削除する必要がありますか?
1つは、バグを特定するときにデバッグコード(printステートメントなど)を追加するだけです。そして、それを見つけたら、デバッグコードを削除します(そして、そのバグを具体的にテストするテストケースを追加します)。私はそれが実際のコードを乱雑にしているので、デバッグしていない限りそこに場所がないと感じています。 どうやってやるの?デバッグコードをそのまま残しますか、または廃止されたときにデバッグコードを削除しますか?
35 debugging 


2
開発者がプライベートオフィスを持つ必要があるのはなぜですか?
ですから、私はここにいるすべての人がプライベートオフィスであり、実際に何人の開発者がいるのか知っています。私はやや懐疑的です。リード開発者がそれらを持っていると信じることができますが、それは通常あなたの平均的なオフィスでただ一人です。 それで、私は何人の開発者が私的なオフィスを持っているのかと思うようになります。これは実際の質問につながります:なぜ彼らはそれらを持っているべきですか?

30
最も過小評価されているプログラミングツール[終了]
優れたプログラマーのテキストエディター、IDE、デバッガー、バージョン管理システムなど、プログラミングに役立つ多くの優れたツールがあります。一部のツールは、仕事を成し遂げるための多かれ少なかれ必要なツール(コンパイラーなど)です。 。 多くの場合に役立つツールは常に存在しますが、さまざまな理由であまり注目されていません。たとえば、リリースされたとき、時代を先取りしており、今では多かれ少なかれ忘れられています。 プログラミングツールのどのようなタイプであるあなただと思います最も過小評価さ1?答えに動機を与えます。


6
ディスレクシアによるプログラミング[終了]
私は非常に厳しい持っているディスレクシアと一緒にディスノミアや書字障害を。私は子供の頃からそれについて知っていました。私の読み書き能力はかなり不自由ですが、それに対処することを学びました。 しかし、今日のIDEを使用すると、コードを作成するときに集中してゾーンにとどまることが非常に簡単になります。しかし、(この投稿のように)テキストを書くとき、集中し続けるのはずっと難しいと感じます。 一般的に、ディスレクシアは、一般的な読み取りと書き込みに比べてコードの読み取りと書き込みが簡単だと思いますか?ディスレクシアは、通常の読み書きよりもプログラミングをマスターするためにどのようなトリックとツールを使用していますか?

14
Webアプリケーションをバージョン管理する必要がありますか?
最近、Webアプリケーションのバージョン管理について同僚と話し合いました。 私はあなたがそれを全く必要とは思わない、そしてあなたがあなたの最新リリースがライブであることを確認するために健全性チェックが欲しいだけなら、私はおそらく日付(YYMMDD)で十分だと思う。 私は基地を離れていますか?ポイントが足りませんか?Webアプリケーションのバージョン番号を使用する必要がありますか

11
オブジェクト指向プログラミングの利点[終了]
注:この質問は、数か月前に書いたブログ投稿からの編集された抜粋です。Programmers.SEのコメントにブログへのリンクを配置した後、回答できるように、誰かがここに質問を投稿するようにリクエストしました。人々がグーグルに「私はオブジェクト指向プログラミングを得ることはありません」と入力するように見えるので、この投稿は、私の最も人気のある多くのことを。こちら、またはWordpressのコメントでお気軽にお答えください。 オブジェクト指向プログラミングとは何ですか?誰も満足のいく答えをくれませんでした。鼻を空中に置いて「オブジェクト」や「オブジェクト指向」と言って回る人からは、良い定義が得られないと感じています。また、オブジェクト指向プログラミング以外は何もしていない人から良い定義を得ることもできません。手続き型プログラミングとオブジェクト指向プログラミングの両方を理解している人は誰も、オブジェクト指向プログラムが実際に何をするのかについて一貫した考えを私に与えたことはありません。 誰かがオブジェクト指向プログラミングの利点についてのアイデアを教えてください。

14
バグを修正するか、顧客がバグを見つけるのを待ちますか?
他の人はバグを見つけたときに修正しますか、それともクラッシュ/データ損失/人が死ぬまで修正を待つのですか? 例1 Customer customer = null; ... customer.Save(); コードは明らかに間違っており、回避方法はありません。null参照でメソッドを呼び出しています。Saveインスタンスデータにアクセスしないため、クラッシュしません。静的関数を呼び出すようなものです。しかし、どこでも小さな変更があれば、クラッシュしないコードが突然クラッシュする可能性があります:クラッシュを開始します。 しかし、コードを修正することも考えられません: Customer customer = null; ... customer = new Customer(); try ... customer.Save(); ... finally customer.Free(); end; かもしれない紹介クラッシュ。完全に網羅された単体テストと手動ユーザーテストでは発見されなかったもの。 例2 float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2); 物理学を知っている人は、それが分母のR 2であることを認識するでしょう。 コードが間違っている、それは絶対に間違っている。また、速度を過大評価すると、レトロロケットの発射が早すぎて、宇宙船のすべての乗員が死亡します。 しかし、速度を過大評価して別の問題を隠している可能性もあります。シャトルの動きが速すぎるとエアバッグが展開できません。突然コードを修正した場合: float speed = …
35 code-quality  bug 

9
動的型付け言語はすべての批判に値しますか?[閉まっている]
企業でのプログラミング言語の選択に関するインターネット上の記事をいくつか読みました。最近、Ruby、Python、PHP、Erlangなど、多くの動的型付け言語が普及しています。しかし、多くの企業は、C、C ++、C#、Javaなどの静的型付き言語を引き続き使用しています。 そして、はい、静的型付き言語の利点の1つは、プログラミングエラーが実行時ではなくコンパイル時に早く検出されることです。しかし、動的型付け言語には利点もあります。(ウィキペディアの詳細) 企業がErlang、Ruby、Pythonなどの言語を使用し始めない主な理由は、それらが動的に型付けされているという事実のようです。それが、StackOverflowの人々がErlangに反対する決定をする主な理由でもあるようです。Erlangに「反対」と決めた理由をご覧ください。 しかし、企業における動的型付けに強い批判があるように思えるが、それは、なぜ私は本当にそれを取得しないことに強いです。 本当に、なぜ企業では動的型付けに対してそれほど多くの批判があるのですか?それは本当にプロジェクトのコストにそれほど影響しますか、それとも何ですか?しかし、多分私は間違っています。

2
「作曲しない」の意味は何ですか?
多くのテキスト、特に関数型プログラミングテキストは、特定のCSの概念が「構成しない」と主張しています。例は次のとおりです。ロックは作成されません、モナドは作成されません。 私はこのフレーズの意味を正確に追跡するのに苦労してきました。構成について考えるとき、関数構成またはオブジェクト集約のいずれか(「継承よりも優先する構成」など)を考えますが、それはここで人々が使用している意味ではないようです。 上記の2つの例(つまり、ロックとモナド)のような式で使用される場合、誰かがこのフレーズの意味を説明できますか?

2
命名規則DAL、BAL、およびUIレイヤー[非公開]
次のレイヤーを持つ典型的なWebアプリケーションを開発しています UIレイヤー(MVC) ビジネスロジックレイヤー(BAL) データアクセス層(DAL) 各レイヤーには、BALおよびDALを含む独自のDTOオブジェクトがあります。これに関する私の質問は次のとおりです DALによって返されるDTOは、BAL内の対応するDTOに変換され、UIレイヤーに送信されるだけです。場合によっては、DTOオブジェクトの属性と構造の両方が同じです。このようなシナリオでは、中間オブジェクトを含めずに、DALのDTOをUIレイヤーに単純に返すことをお勧めします。 これらのDTOオブジェクトと各レイヤーの他のオブジェクトに名前を付ける最良の方法は何ですか。DTOName、ServiceNameなどのプレフィックスを使用する必要がありますか?プレフィックスを使用するように求めている理由は、ソリューションのクラスがフレームワークの他のクラスと競合していない場合、プレフィックスが各クラスがどこに属しているかを理解しやすいためです?
35 c#  design  naming 

3
クライアント側のHATEOASのポイントは何ですか?
私が現在理解しているように、HATEOASは基本的に、次に何をすべきかについての情報を各応答リンクと共に送信することに関するものです。簡単な例の1つは、インターネット上で簡単に見つかります:銀行システムとアカウントリソース。この例は、アカウントリソースへのGET要求後のこの応答を示しています GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">100.00</balance> <link rel="deposit" href="/account/12345/deposit" /> <link rel="withdraw" href="/account/12345/withdraw" /> <link rel="transfer" href="/account/12345/transfer" /> <link rel="close" href="/account/12345/close" /> </account> データとともに、次に何ができるかを示すリンクがあります。残高がマイナスの場合、 GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">-25.00</balance> <link rel="deposit" href="/account/12345/deposit" /> </account> 入金のみできるように。Fiddlerを使用している場合、またはブラウザーで要求を行っている場合、何ができるかを簡単に確認できます。この種の情報は、APIの機能を発見するのに役立ち、サーバーはクライアントから切り離されます。 ただし、ポイントは、Javascriptを使用したSPAやAndroidアプリなど、クライアントを構築するときに、HATEOASがどのように関連し続けるかを見ることができないということです。つまり、SPAをJavaScriptでコーディングしている場合、コードを記述するためにAPIで何ができるかを知る必要があります。 …

10
「変数を常に初期化する」ことで、重要なバグが隠されることはありませんか?
C ++コアガイドラインには、ES.20:常にオブジェクトを初期化するというルールがあります。 使用前設定エラーとそれに関連する未定義の動作を避けます。複雑な初期化の理解に関する問題を回避します。リファクタリングを簡素化します。 しかし、このルールはバグを見つけるのに役立ちません。バグを隠すだけです。 プログラムに初期化されていない変数を使用する実行パスがあると仮定します。これはバグです。未定義の動作はさておき、それはまた何かがうまくいかなかったことを意味し、プログラムはおそらくその製品要件を満たしていません。本番環境に展開されると、金銭的な損失が発生する可能性があります。 バグをどのように選別しますか?テストを作成します。しかし、テストは実行パスの100%をカバーするわけではなく、テストはプログラム入力の100%をカバーすることはありません。それ以上に、テストでさえ欠陥のある実行パスをカバーします-それはまだパスできます。結局、これは未定義の動作であり、初期化されていない変数はある程度有効な値を持つことができます。 ただし、テストに加えて、0xCDCDCDCDのようなものを初期化されていない変数に書き込むことができるコンパイラーがあります。これにより、テストの検出率がわずかに向上します。 さらに良いことには、初期化されていないメモリバイトのすべての読み取りをキャッチするAddress Sanitizerなどのツールがあります。 最後に、静的アナライザーがあります。これは、プログラムを調べて、その実行パスに事前設定読み取りがあることを伝えることができます。 そのため、多くの強力なツールがありますが、変数を初期化すると、サニタイザーは何も見つかりません。 int bytes_read = 0; my_read(buffer, &bytes_read); // err_t my_read(buffer_t, int*); // bytes_read is not changed on read error. // It's a bug of "my_read", but detection is suppressed by initialization. buffer.shrink(bytes_read); // Uninitialized bytes_read could be detected here. // …
35 c++  c 

6
値を別の表現に変換し、それを元の場所に変換するコードは悪いですが、どのように?[閉まっている]
私は悪いプログラミング習慣に関する記事を読んでいました。 言及した- 値を別の表現に変換してから元の位置に戻す「ヨーヨーコード」(例:小数を文字列に変換してから小数に戻す、または文字列をパディングしてからトリミングする) 彼が与えた特定の例がプログラムを書くのに悪い方法である理由を私は理解していません。値を使用できるように状況が必要な場合は、元に戻すことは問題ないようです。 誰でもこれについて説明できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.