ソフトウェア工学

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

7
いつフロートを使用し、いつダブルを使用しますか
多くの場合、プログラミングの経験では、実数にfloatを使用するかdoubleを使用するかを決定する必要があります。フロートに行くこともあれば、ダブルに行くこともありますが、実際にはもっと主観的に感じます。私が自分の決定を守るために直面​​するなら、おそらく正当な理由を述べないでしょう。 いつfloatを使用し、いつdoubleを使用しますか?常にメモリ制約が存在する場合にのみ、doubleを使用しますか?または、精度の要件でdoubleを使用する必要がない限り、常にfloatを使用しますか?floatとdoubleの間に基本的な数理計算の計算の複雑さに関して実質的な違いはありますか?floatまたはdoubleを使用することの長所と短所は何ですか?そして、ロングダブルを使用しましたか?
194 c++  c  floating-point  numbers 

15
ブールパラメータを使用して動作を決定するのは間違っていますか?
私は時々「違和感を感じる」練習を見てきましたが、それについて何が悪いのかを明確に説明することはできません。または多分それはちょうど私の偏見です。ここに行く: 開発者は、パラメータの1つとしてブール値を使用してメソッドを定義し、そのメソッドは別のメソッドを呼び出すなど、最終的にそのブール値は、特定のアクションを実行するかどうかを決定するためだけに使用されます。これは、たとえば、ユーザーが特定の権限を持っている場合、またはテストモード、バッチモード、またはライブモードの場合(またはそうでない場合)にのみアクションを許可するために、またはシステムが特定の状態。 さて、それを行う別の方法が常にあります。(パラメータを渡すのではなく)アクションを実行するときを照会するか、メソッドの複数のバージョン、またはクラスの複数の実装などを使用します。私の質問はこれをどのように改善するかではなく、むしろそれが本当に間違っているかどうか(私が疑うように)、もしそうなら、何が悪いのか。

13
データをディスクに保存するだけでなく、データベースを使用する理由は何ですか?
データベースの代わりに、データをJSONにシリアル化し、必要に応じて保存してディスクにロードします。すべてのデータ管理はプログラム自体で行われ、SQLクエリを使用するよりも速くて簡単です。そのため、なぜデータベースが必要なのか理解できませんでした。 データをディスクに保存するだけでなく、データベースを使用する必要があるのはなぜですか?
193 database  sql  mysql  nosql 

17
常に自動インクリメント整数のプライマリキーを持つことは良い習慣ですか?
私のデータベースでは、id特定の行を一意に検索できるように、作成するすべてのテーブルの名前に整数の主キーを自動的にインクリメントするという習慣になりがちです。 これは悪い考えと考えられますか?この方法で行うことには欠点がありますか?場合によっては、一意の識別子id, profile_id, subscriptionsがどこにあるか、テーブルの外部へのリンクなどの複数のインデックスがあります。idprofile_ididProfile または、そのようなフィールドを追加したくないシナリオはありますか?

20
「ブレーク」と「継続」は悪いプログラミング慣行ですか?
私の上司は、下手なプログラマーがループ内で使用しているbreakとさりげなく言及していcontinueます。 それらが理にかなっているので、私は常にそれらを使用します。インスピレーションをお見せしましょう: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } ここでのポイントは、最初に関数が条件が正しいことを確認してから、実際の機能を実行することです。IMOループにも同じことが適用されます。 while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ... …

5
コマンドライン引数を設計するための良い習慣は何ですか?
アプリケーションの開発中、私は疑問に思い始めました-コマンドライン引数をどのように設計する必要がありますか? プログラムの多くは、このように式を使用しています-argument valueか/argument value。私の頭に浮かんだ解決策はargument:value。空白がないと、値と引数を台無しにする方法がないので、良いと思いました。また、左の:文字から最初の文字列を2つに分割するのは簡単です。 私の質問は: 人気のある-argument value式はargument:value、より読みやすく、書きやすく、バグがなく、専門の開発者が理解しやすいですか? コマンドライン引数を設計する際に従うべき一般的に知られているいくつかのルールはありますか(動作する場合は問題ありません)? 詳細を尋ねられたので提供します。ただし、回答に影響を与えるべきではないと思います。質問は一般的に良い習慣についてです。それらはすべての種類のアプリケーションで同じだと思います。 私たちは、公共の場所(タッチトーテム、テーブル)で使用されるアプリケーションに取り組んでいます。アプリケーションは、Qt Quick 5(C ++、QML、JS)を使用して記述されています。デバイスにはWindows 8.1 / 10がインストールされます。デバイスを管理するためのフロントエンドインターフェイスを提供します。ただし、一部の上級管理者は、自分でアプリケーションを構成することができます。ビジネスの観点からはそれほど重要ではありませんが、Kilian Fothが言ったことに同意するように、自分のアプリケーションがユーザーの苦痛になりたくないのです。私がここで尋ねたものをインターネットで見つけられない。 より高度なStack Exchangeユーザーへ:この質問を一般的なものにしたかった。コミュニティWikiに該当する可能性があります(既存の質問を回答で変換できるかどうかはわかりません)。この質問をオペレーティングシステムとプログラミング言語に依存しないようにしたいので、ここに表示される答えは他の開発者にとって貴重な教訓になります。
190 design  parameters  cli 

8
PHPで<?=タグを使用するのは悪い習慣ですか?
私は&lt;?= ?&gt;最近このPHPタグに出くわし、使用することに消極的です。短いタグを使用するのは悪い習慣で&lt;? ?&gt;あり、&lt;?php ?&gt;代わりに完全なタグを使用する必要があることを知っていますが、これについてはどう&lt;?= ?&gt;ですか? タイピングを節約し、コードを読みやすくするためにはIMOが適しています。したがって、これの代わりに: &lt;input name="someVar" value="&lt;?php echo $someVar; ?&gt;"&gt; このように書くことができます。 &lt;input name="someVar" value="&lt;?= $someVar ?&gt;"&gt; この演算子を使用するのは嫌いですか?
190 php  shortcuts 

19
MVCよりもASP.NET WebFormsを優先する場合
マイクロソフトが言ったことを知っています ASP.NET MVCはWebFormsの代替ではありません。 また、WebFormsはMVCよりも開発が速いと言う開発者もいます。しかし、コーディングの速度はテクノロジーの快適レベルにまで下がると思いますので、そのような答えは必要ありません。 ASP.NET MVCを使用すると、開発者はアプリケーションをより細かく制御できるため、WebFormsが時代遅れと見なされないのはなぜですか?あるいは、新しい開発のためにMVCよりもWebFormを優先すべき場合はいつですか?

12
大きなファイル(10 MB)をデータベースに保存するのは悪い習慣ですか?
現在、ユーザーが1 MB〜10 MBのサイズのファイルを保存および共有できるWebアプリケーションを作成しています。 データベースにファイルを保存すると、データベースアクセスが大幅に遅くなるように思えます。 これは有効な懸念事項ですか?ファイルシステムにファイルを保存し、データベースにファイル名とパスを保存する方が良いでしょうか?データベースを操作する際のファイルの保存に関連するベストプラクティスはありますか? 私はこのプロジェクトでPHPとMySQLを使用していますが、ほとんどの環境(Ruby on Rails、PHP、.NET)およびデータベース(MySQL、PostgreSQL)で同じ問題があります。

2
AGPL-できることとできないこと
AGPLは、GPL-over-networksに移行することを目的としたかなり新しいライセンスです。ただし、弁護士ではなく、実際にライセンス全体を読んでいないため、AGPLを使用して自由にできることとできないことを正確に理解することはできません。 私の不確実性は、MongoDB(AGPL)に関するこの投稿と、さらに以下のコメントによってもたらされます。 コメントに従うと、ライブラリを変更しない限り、クローズドソースの商用サーバーサイドソフトウェアでAGPLライブラリを使用できることがわかります。そうですか?または、AGPLライセンスライブラリを使用する場合、アプリケーション全体を配布する必要がありますか? MongoDBの場合は、クライアントコードにApacheライセンスを使用するため、別の問題が発生します。AGPLソフトウェアを使用しているが、クローズドソースの商用アプリケーションとは別のアプリケーションとして展開するとどうなりますか?たとえば、iTextを使用します。AGPLライブラリです。 それを使用して変更する場合、アプリケーション全体をオープンソース化する必要がありますか、それともiTextの変更のみを再配布する必要がありますか? 使用して変更しない場合、アプリケーション全体をオープンソース化する必要がありますか? iTextを別のプロセスとして起動する別のアプリケーションでラップし、メインアプリケーションから使用する場合、すべてをオープンソース化する必要がありますか、それともラッパーアプリケーションだけですか?(ラッパーアプリケーションは、pdfファイルを取得し、iTextをJSONとして使用した結果を返すHTTPベースのAPIです)。これを使用してAGPLライセンスを回避できますか? 注:質問はAGPLv3に関するものです
188 licensing  agpl 

22
ありそうもないエッジケースに関するコードレビューの不一致をどのように処理しますか?
私はパスカバレッジチームのロボティクススタートアップで働いており、プルリクエストを送信した後、コードがレビューされます。 私のチームメイトは、チームに1年以上在籍しており、必要と思われるよりもはるかに多くの作業を行うことを示唆するコメントをコードに書きました。いいえ、私は怠け者の開発者ではありません。良いコメント、変数名、インデントを持ち、ケースを適切に処理するエレガントなコードが大好きです。しかし、彼は私が同意しない別のタイプの組織を念頭に置いています。 例を示します。 私は、自分が作成した遷移発見アルゴリズムの変更に関するテストケースを書くのに1日を費やしていました。彼は、私が発生する可能性が極めて低い不明瞭なケースを処理することを提案していました。実際、それが発生する可能性すらわからないのです。私が作成したコードは、元のテストケースのすべてと、私が見つけたいくつかの新しいテストケースで既に機能しています。私が作成したコードは、毎晩実行される300以上のシミュレーションに既に合格しています。ただし、このあいまいなケースを処理するには13時間かかり、ロボットのパフォーマンスを改善するために費やすことができます。明確にするために、これまで使用していた以前のアルゴリズムもこの不明瞭なケースを処理せず、生成された4万件のレポートでは一度も発生しませんでした。私たちは新興企業であり、製品を開発する必要があります。 私は以前にコードレビューをしたことがなく、私が議論しすぎているかどうかはわかりません。私はただ静かになって、彼が言うことをするべきですか?時間を有効に活用することに強く反対しているにもかかわらず、頭を下げて変更を加えることにしました。 私は同僚を尊敬し、彼が知的プログラマーであることを認めています。私はある点で彼に異議を唱えているだけで、コードレビューで不一致を処理する方法がわかりません。 私が選んだ答えは、ジュニア開発者がコードレビューで意見の相違をどのように処理できるかを説明するというこの基準を満たしていると感じています。

21
私のコードの大部分には大きな設計上の欠陥があります。終了するか、今すぐ修正しますか?[閉まっている]
私は高校生で、私の友人と一緒にC#プロジェクトに取り組んでいます。私のスキルレベルはほぼ同じです。これまでのところ、100件のコミットで約3,000行のコードと250行のテストコードを記述しました。学校のために、私は数ヶ月プロジェクトを延期し、最近私はそれを再び取り戻すことができました。 バックアップを取得するまでに、レンダラーに過剰なスレッドを含める、エミュレートされたCPU、GPU、ゲームカートリッジ間の相互作用における競合状態の防止が不十分であるなど、記述したコードの設計が不十分であることがわかりました、および単に冗長でわかりにくいコードも同様です。 問題は、プログラムの主要な機能すら完成していないため、真のリファクタリングができないことです。コードの設計に欠陥があることを完全に認識し続けることはできません。同時に、私はプロジェクトを放棄したくありません。かなりの量の進歩があり、作業が無駄になってはいけません。 私はいくつかの選択肢があるように感じます:貧弱なデザインを回避し、すべてが機能したらリファクタリングし、すべてを停止し、残りの機能が完了する前にすべてのもつれを解き、プロジェクトを開始することによって、単に機能を終了するそれがすべて私の心に再び新鮮であるように、または過度のサイズのためにプロジェクトを完全に放棄するように(本質的に「図面に戻る」)。 そのようなプロジェクトにおける他の人の経験に基づいて、自分を正しい軌道に乗せるための手段は何ですか?このサイトの回答から、一般的なコンセンサスは、書き換えは一般的に不要であるが、過剰なコストなしにコードを維持できない場合に利用可能なオプションであるということです。私は本当にこのプロジェクトを追求したいと思っていますが、現状では、私のコードは私が続けるのに十分に設計されておらず、落胆の感覚が私を継続からそらします。

15
プログラムのサイズが大きいのはなぜですか?
古いプログラムNetscape Navigatorまたは初期バージョンのMicrosoft Wordを見ると、これらのプログラムのサイズは50 MB未満でした。google chromeをインストールすると、200 MB、Slackのデスクトップバージョンは300 MBになります。私は、プログラムがどれだけ多くのメモリを使用するかというルールについて読んでいますが、それはなぜですか? 現在のプログラムのサイズが10年または15年前に比べて非常に大きいのはなぜですか?プログラムはそれほど多くの機能を実行しておらず、見た目も大きく異なりません。現在、リソースを独占しているのは何ですか?


20
コードレビューでポジティブなものを見つける方法は?
昨年の深刻な品質問題の後に、私の会社は最近コードレビューを導入しました。コードレビュープロセスは、ガイドラインやチェックリストなしですぐに導入されました。 別の開発者と私は、システムに加えられたすべての変更を、トランクにマージする前に確認することにしました。 また、「テクニカルリード」に選ばれました。つまり、コードの品質には責任がありますが、プロセスの変更を実装したり、開発者を再割り当てしたり、プロジェクトを保留したりする権限はありません。 技術的には、マージを拒否して、開発に戻すことができます。現実には、これはほとんどの場合、上司が期限内に出荷することを要求することで終わります。 私たちのマネージャーは、今後のプロジェクトのスケジュールを作成することに主に関心があるMBAです。彼が試みている間、彼は私たちのソフトウェアがビジネスの観点から何をするのかほとんどわからず、開発者からの説明なしに最も基本的な顧客の要求さえ理解しようと努力しています。 現在、開発はSVNの開発ブランチで行われています。開発者は準備ができたと判断した後、チケットシステムのチケットをマネージャーに再割り当てします。マネージャーはそれを私たちに割り当てます。 コードレビューにより、チーム内でいくつかの緊張が生じています。特に、古いメンバーの一部は、変更に疑問を呈しています(つまり、「常にこのようにしていた」または「メソッドに意味のある名前が必要なのはなぜか、わかりますか?」)。 最初の数週間後、同僚が問題を起こさないように、同僚が物事を滑らせ始めました(バグ報告が顧客によって提出された後、彼女はバグを知っていたが、開発者はそれを指摘することに彼女に腹を立てます)。 一方、私は現在、コミットされたコードの問題を指摘するためのお尻であることで知られています。 私の基準が高すぎるとは思わない。 現時点での私のチェックリストは次のとおりです。 コードがコンパイルされます。 コードが機能する方法は少なくとも1つあります。 コードはほとんどの通常のケースで機能します。 コードはほとんどのエッジケースで動作します。 挿入されたデータが有効でない場合、コードは妥当な例外をスローします。 しかし、私はフィードバックを行う方法の責任を完全に受け入れます。私はすでに、何かを変更する理由を説明するアクション可能なポイントを既に与えています。悪いと思うときは、別の方法で開発していたと指摘します。 私が欠けているのは、「良い」と指摘するものを見つける能力です。悪いニュースを良いニュースに挟もうとするべきだと読みました。 しかし、私は良いものを見つけるのに苦労しています。「今度は、実際にあなたがしたことをすべてコミットした」というのは、すてきで助けになるというよりも、お世辞です。 サンプルコードレビュー こんにちはジョー、 Library \ ACME \ ExtractOrderMailクラスの変更について質問があります。 「TempFilesToDelete」を静的としてマークした理由がわかりませんでしたか?現時点では、「GetMails」への2回目の呼び出しは例外をスローします。これは、ファイルを追加したが、削除した後に削除しないためです。関数は実行ごとに1回だけ呼び出されることを知っていますが、将来的には変更される可能性があります。インスタンス変数にするだけで、複数のオブジェクトを並行して使用できます。 ...(機能しない他のポイント) マイナーポイント: 「GetErrorMailBody」がパラメーターとして例外を受け取るのはなぜですか?私は何か見落としてますか?例外をスローするのではなく、単に例外を渡して「ToString」を呼び出します。何故ですか? SaveAndSendはMethodの適切な名前ではありません。このメソッドは、メールの処理が失敗した場合にエラーメールを送信します。名前を「SendErrorMail」などに変更できますか? 古いコードをコメントするのではなく、完全に削除してください。まだ転覆中です。
184 code-reviews 

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