ソフトウェア工学

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

3
コードを書くとき、コンパイルされたマシンコードについて考える必要がありますか?
たとえば、次のコードがあります。 auto z = [](int x) -> int { if (x > 0) { switch (x) { case 2: return 5; case 3: return 6; default: return 1; } } return 0; }; そして、後でこれを数回呼び出します。asmコードでは、ラムダを使用した外部呼び出しが表示されます。メタプログラミングで勝つかもしれませんが、asmのデバッグとパフォーマンスで負けるのですか?パフォーマンスとデバッグの単純さを確実にするために、最新の言語機能、マクロ、およびその他のメタプログラミングの側面を避ける必要がありますか?

5
エンティティコンポーネントシステムアーキテクチャは、定義上オブジェクト指向ですか?
エンティティコンポーネントシステムアーキテクチャは、定義上、オブジェクト指向ですか?それは私にとってより手続き的または機能的だと思われます。私の意見では、オブジェクト指向言語で実装することを妨げるものではありませんが、堅実なオブジェクト指向の方法で実装することは慣用的ではありません。 ECSはデータ(E&C)を動作(S)から分離しているようです。証拠として: アイデアは、エンティティにゲームメソッドを埋め込まないことです。 そして: コンポーネントは、特定の目的に必要な最小限のデータセットで構成されます。 システムは、特定のコンポーネントを持つエンティティのセットを使用する単一目的の機能です これはオブジェクト指向ではないと思います。オブジェクト指向になることの大部分は、データと振る舞いを組み合わせることだからです。 証拠として: 対照的に、オブジェクト指向のアプローチは、プログラムの残りの部分から直接アクセスできない場所にデータを配置することをプログラマに促します。代わりに、データにバンドルされている一般にメソッドと呼ばれる特別に記述された関数を呼び出すことにより、データにアクセスします。 一方、ECSは、行動からデータを分離することのすべてのようです。

8
ソートされたデータを必要とするバイナリ検索が線形検索よりも優れていると考えられるのはなぜですか?
線形検索は単純なアプローチであり、漸近的な複雑さのために、バイナリ検索はパフォーマンスよりも優れているといつも聞いています。しかし、バイナリ検索の前に並べ替えが必要な場合、線形検索よりも優れている理由を理解できませんでしたか? 線形検索はでO(n)あり、バイナリ検索はO(log n)です。これが、バイナリ検索の方が優れていると言う根拠のようです。ただし、バイナリ検索ではO(n log n)、最適なアルゴリズムのためのソートが必要です。したがって、ソートが必要なため、バイナリ検索は実際には高速になりません。 著者は、単純な線形検索アプローチを使用するよりも挿入ソートで、アイテムを挿入する必要がある場所を見つけるためにバイナリ検索を使用する方が良いと示唆するCLRSを読んでいます。この場合、各ループ反復で、バイナリ検索を適用できるソート済みリストがあるため、これは正当化されているようです。しかし、検索が必要なデータセットについての保証がない一般的なケースでは、ソート要件のために実際にバイナリ検索を使用していないのは線形検索よりも悪いですか? 私が見落としている実用的な考慮事項はありますか?または、ソートに必要な計算時間を考慮せずに、バイナリ検索は線形検索よりも優れていると見なされますか?

3
なぜAngularを使用するのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6か月前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 基本的なAngularチュートリアルからは、APIからJSONを取得して表示するだけです。また、二重結合の魔法があります。 しかし、バックエンドでビューを構築し、すべてを既に配置した状態でユーザーに提供するバックエンドソリューション(Railsなど)の代わりに使用するのはなぜですか?ユースケースは何ですか?
20 javascript 

5
テスターはリリースを承認するべきですか、それともテストについて報告するだけですか?
テスターに​​サインオフ権限を与えることは理にかなっていますか?テストチームが 機能、問題などをテストし、合格/不合格ベースで報告するだけで、それらの結果に基づいて行動することができます。 それらの結果に基づいて、リリース自体を保持する権限がありますか? つまり、テスターは実際にリリースを承認する必要がありますか?私が取り組んでいるテストチームは、彼らがそうしていると感じており、「スコープクリープのテスト」が原因でこれに問題があります。

5
「マンデルバグ」の存在をチームメンバーに納得させる方法
アプリケーションを開発しています。別のコーダーによって開発されたライブラリが含まれ、このライブラリは複数のネットワーク接続を介してサーバーと通信し、これには複数のスレッドが連携して動作する必要があります。サーバー側のコードは非常に複雑であり、ソースコードにはアクセスできません。 最近、時々アプリケーションをクラッシュさせるマンデルバグを発見しました。一度再現してスタックトレースを取得したので、バグレポートを開きました。バグ自体は簡単に修正できます(バックグラウンドスレッドの1つでキャッチされないWeb例外により、CLRはプログラムを終了します)。 問題は、開発者がバグを修正することを拒否していることです。「彼はそれが存在することを確信していない」からです。残念ながら、上司は彼の側にいて、バグの存在を証明するための「堅実なテストケース」を作成し、ユニットテストでそれがなくなったことを確認しない限り、このバグは修正できないと言います。バグの性質上、基本的に不可能なこと。 何かアドバイス?

5
自動フォーマットを使用してEclipseでコードをフォーマットすることは良いアイデアですか?
私はコーディングにEclipseを使用しており、使用する言語はJavaです。自動フォーマッター(CTRL + SHIFT + F)を使用してコードを適切にフォーマットするように誰かから提案された後、このコマンドはコードをフォーマットしますが、時々全体的な外観が奇妙になり、実際には非常に読みにくいと感じます。 これは推奨されることですか?そうでない場合は、Eclipseでコードをフォーマットする方が良いですか?

5
オブジェクトをシャッフルする効率的な方法
クイズソフトウェアのプログラムを書いています。質問、回答、オプション、マーク、ネガティブマークのArrayListを含む質問クラスがあります。このようなもの: class question { private ArrayList<Integer> index_list; private ArrayList<String> question_list; private ArrayList<String> answer_list; private ArrayList<String> opt1_list; private ArrayList<String> opt2_list; } すべての質問をシャッフルしたいのですが、質問をシャッフルするには、すべてのオブジェクトをシャッフルする必要があります。私はこの方法でこの問題に取り組みました。 まず、このデザインを使用せずArrayList<String>、インスタンス変数としてStringではなく型を使用し、Collections.shuffleオブジェクトをシャッフルするメソッドを使用します。しかし、私のチームはこの設計を主張しています。 現在、質問へのエントリが作成されるにつれて、質問クラスには増加するArrayListが含まれています。今すぐ質問をシャッフルする方法は?
20 java  collections 

2
JPEG-2000のソフトウェアサポートの現在の状況は?
元のスキャン画像を記録するための一般的な推奨事項は、「TIFFを使用」でした。しかし、プログラマーは「ソフトウェアの進化」のためにフォーマットの進化を必要とし、TIFFからJP2に変更するためにシステムを進化させる必要があります。 法的および科学的なスキャン資料用の大きな画像ストレージ(テラバイト)があり、オリジナルの記録が必要です。私はいくつかのキャッシングルールを使用しますが、システムは元のデータを表示(Webダウンロード経由)または操作(ImageMagickなど)する必要があります。 TIFFロスレスからJPEG-2000ロスレスへの画像ストレージの移行に関する記事を読みましたが、結論はTIFFのままです。しかし、この記事は2009年のものであり、利用可能なソフトウェアによるJPEG-2000形式のサポートが非常に貧弱であることがわかりました。JPEG-2000への変換は、テストしたソフトウェアで損失があり、画像を使用するために利用可能なソフトウェアは、この形式をうまくサポートしていませんでした。 TIFFからJP2に変更する時ですか?ソフトウェアサポートは2009年と同様にまだ欠陥がありますか?

1
野田時間vsジョーダ時間?
で野田タイム・ユーザーズ・ガイド、根拠セクションの状態: パブリックAPIは、.NETにより慣用的なAPIを提供するとともに、野田タイムチームが「不幸」と見なしているJoda Timeの決定の一部を修正するために、大幅に書き直されました。(これらのいくつかは、単に異なる目標を持っていることが原因です;私が主張する他のものは本当に間違いです。) 異なる/より良いこれらの決定は何ですか?これは、言語の構文だけの違いを数えるものではありませんが、ユーザーがプログラミングエラー(ライブラリの使いやすさ)を起こしにくいようにするために行われることはすべて含まれます。

5
保護されたメモリの前にどのようにセグメンテーションフォールトをデバッグしましたか?
さて、Cのポインターでプログラミングの間違いを犯すと、いいセグメンテーションフォールトが発生し、プログラムがクラッシュし、デバッガーはどこが間違っているのかを教えてくれます。 メモリ保護が利用できなかったとき、彼らはどうやってそれをしましたか?DOSプログラマーが、ミスをしたときにOS全体をいじり、クラッシュさせるのを見ることができます。仮想化は利用できなかったため、再起動して再試行するだけでした。それは本当にそのように行きましたか?

1
Bootstrap 3がcamelCaseをダッシュ​​に変更する理由-読みやすいですか?
すべてのラクダケース名を v3.0でハイフン付きの名前に変更するというBootstrapの決定の背後にある理由は何なのでしょうか。私はグーグルで検索し、数冊の本を調べましたが、私はどちらかの方法しか意見を見つけることができません-確かなデータはありません。 キャメルケースの変数名がダッシュよりも読みやすいことを示唆する研究はありますか、それとも個人的な好みの問題ですか?

8
「パブリックAPIは永遠に存在します。正しく機能するチャンスは1つだけですか?」
OSの本で、「パブリックAPIは永遠に存在します。それを正しく実現するチャンスは1つだけです」と読みました。本当ですか?オペレーティングシステムのAPIまたは他のAPIにも適用できますか?たとえば、これはTasker、Locale、PushoverなどのAndroidアプリケーションのAPIに当てはまりますか?

3
なぜ論理演算子(||、&&など)の複合代入演算子がないのですか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 6年前に移行され ました。 ECMA-262、パート11.13によると、複合割り当て演算子の完全なリストは次のとおりです*= /= %= += -= <<= >>= >>>= &= ^= |=。 パート11.11によると、var c = a || b置くaに値をc場合はToBoolean(a)trueで、入れますbに値をcそれ以外の場合は。そのため、論理ORは合体演算子としてよく使用されます。たとえば、 function (options) { options = options || {}; } 多くの場合、上記のように、合体を使用して変数のデフォルト値を指定しますa = a || b。 複合代入演算子||=は非常に便利で、上記のコードを短く簡潔に書くことができますa ||= b。ただし、そこにはありません(ただし*=、+=および他の複合代入演算子はあります)。 問題は、なぜですか?

6
Javaシリアル化-長所と短所、使用または回避?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 シリアル化は、Javaの永続化に使用されます。シリアル化を使用していくつかのオブジェクトを永続化してもかまいません。ただし、多数のオブジェクトの場合、ORM、データベースなどの方が適している場合があります。シリアル化は、小さなジョブにのみ役立つようです。私は間違っているかもしれません。それでは、非シリアル化方法よりもシリアル化の利点は何ですか?いつそれを使用し、いつそれを避けるべきですか? この質問は、DZoneの記事Is Object Serialization Evil?を見て思い浮かびました。 そして、これらは私の質問を引き起こした行です: Javaとそのセッションオブジェクトを見ると、純粋なオブジェクトのシリアル化が使用されます。アプリケーションセッションの存続期間がかなり短い(最大で数時間)と仮定すると、オブジェクトのシリアル化は単純であり、十分にサポートされ、セッションのJavaコンセプトに組み込まれています。ただし、データの永続性が長期間(場合によっては数日または数週間)にわたり、アプリケーションの新しいリリースを心配する必要がある場合、シリアル化はすぐに悪になります。優れたJava開発者が知っているように、セッションでもオブジェクトをシリアル化する場合は、1Lだけでなく実際のシリアル化ID(serialVersionUID)が必要であり、Serializableインターフェイスを実装する必要があります。ただし、ほとんどの開発者は、Javaの逆シリアル化プロセスの背後にある実際のルールを知りません。オブジェクトが変更された場合、オブジェクトに単純なフィールドを追加するだけでなく、シリアライゼーションIDが変更されていなくても、Javaがオブジェクトを正しくデシリアライズできない可能性があります。突然、データを取得できなくなります。これは本質的に悪いことです。 さて、これを読んでいる開発者は、この問題のあるコードを決して書かないと言うかもしれません。それは本当かもしれませんが、あなたが使用しているライブラリや、あなたの会社に雇用されなくなった他の開発者はどうでしょうか?この問題が発生しないことを保証できますか?それを保証する唯一の方法は、異なるシリアル化方法を使用することです。

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