ソフトウェア工学

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

6
自分の技術(プログラミング)を深く理解するために習得すべきプログラミング概念は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 重要な順序で、そうすることが可能であり、そうでない場合、プログラム方法を知るための最も重要な基礎は何ですか。アルゴリズム、反復、再帰など? 私がどこに置くかなどは私の質問のあるところです。私は最近、10人のプログラマーのうち9人がプログラムをあえぎできないと言っているインターネットの投稿を読みました! http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html プログラミングの際に実際に達成しようとしていることについて深い知識と、自由に使える基本的なツールの徹底的な理解が必要です。基本的に私は風のすべての色でペイントできるようにしたい。

4
否定を強調する
かなり長いプロパティ名でifステートメントを書いていたところ、この問題に遭遇しました。 次のようなifステートメントがあるとします。 if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue && !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant) { //Do something } 2番目のプロパティはブール型であり、次のようなステートメントを持つことは意味がありません if(boleanValue == true) 否定を強調するより良い方法はあり!ますか?私には、コードを読み取るときにこれが簡単に監視され、デバッグで問題が発生する可能性があるようです

3
ユニットテストを使用してストーリーを伝えるのは良い考えですか?
だから、私は少し前に書いた認証モジュールを持っています。今、私は自分のやり方のエラーを見、それのための単体テストを書いています。単体テストを書いている間、私は良い名前とテストする良い領域を思いつくのに苦労しています。例えば、私は次のようなものを持っています RequiresLogin_should_redirect_when_not_logged_in RequiresLogin_should_pass_through_when_logged_in Login_should_work_when_given_proper_credentials 個人的には、「適切」に見えても、少しthoughいと思います。また、テストをスキャンするだけでテストを区別するのに苦労しています(失敗したものを知るには、メソッド名を少なくとも2回読む必要があります) だから、機能を純粋にテストするテストを書く代わりに、シナリオをカバーするテストのセットを書くかもしれないと思った。 たとえば、これは私が思いついたテストスタブです: public class Authentication_Bill { public void Bill_has_no_account() { //assert username "bill" not in UserStore } public void Bill_attempts_to_post_comment_but_is_redirected_to_login() { //Calls RequiredLogin and should redirect to login page } public void Bill_creates_account() { //pretend the login page doubled as registration and he made an …

2
「機能クリープ」という用語はどこから来たのですか?
「Feature Creep」に関するまともなウィキペディアの記事がありますが、それは起源を述べていません。A Googleの検索にのみリードをいくつかの漠然とした記事「アールリッチ」という用語を造語主張しますが、そこに多くのバックアップではないという主張のためには。2001年の主題についてのディルバートのコミックがありますが、そのトーンはこの用語がすでに存在していたことを暗示しているようです。Googleが2000年以前の結果を持っているという事実によって、多かれ少なかれ確認されました。ただし、正確な起源証明を見つけることは困難です。 それで、もし誰か誰かが「機能クリープ」という用語を作り出したのは誰ですか?それはどこから来たのですか?

4
データベース履歴表/追跡表
現在、次のように追跡/履歴テーブルを構造化します。 PrimaryKey-ID OtherTableId-fk fieldName-追跡するフィールドの名前 OldValue NewValue ユーザー名 CreateDateTime したがって、基本的には、別のテーブル履歴を追跡し、変更されたフィールドの列名を新しい値と古い値で保存するテーブルが必要です。私の質問は、誰でもこれに穴を開けることができますか?また、その追跡がテーブルの列名のみがfieldName列に入力されるようにする最も簡単な方法は何ですか?現在、私のオプションは、作成中のサービスに列挙を含めるか、別のステータステーブルを作成してfieldNameをfkにすることです。より良いアイデアはありますか? 目標の編集:現在、追跡する必要があるフィールドは2つだけです。1つのフィールドはWebページに表示され、履歴が表示されます。もう1つのフィールドには1つの部門のみがアクセスし、クエリ可能なデータベースのビューにアクセスできます。彼らは、この1つのフィールドだけを照会して、フィールドを変更したユーザーと何に関する情報を取得します。これが、テーブルレコード履歴の正確なコピーではなく、データベースフィールドがテーブル列を定義する場所に設定したかった理由です。将来的にフィールドを追加または削除する可能性がある2つのフィールドのみを追跡する必要があります。 ありがとう!
13 database  sql  tracking 

4
サーバーで生成されたフロントエンドアプリケーションとは対照的に、Webアプリケーションでのクライアント/サーバーアーキテクチャの利点は何ですか
当社では、組み込みLinuxプラットフォーム上にWebインターフェースを構築する必要があります。2つのオプションがあります:HTMLとJavaScriptがサーバー側で生成されるテクノロジーを使用します(JSP、Grailsを考えますが、C ++を使用してHTML / JavaScriptを生成します)、またはHTML5 'クライアント'を作成しますJSONまたはXML生成バックエンドと通信するアプリケーション。 現在、Webアプリケーションは後者を使用する傾向があると感じていますが、そうすることの利点は何ですか(プロジェクトの開発者は、主にHTMLとJavascriptよりもC ++をよく知っているという事実に基づいて前者を選択します)

2
マルチコアプロセッサでスレッド割り当てをプログラムする方法は?
たとえば、2つの異なるプロセッサコアで実行される2つの異なるスレッドを使用するプログラムを作成するなど、マルチコアプロセッサ上のスレッドを試してみたいと思います。 ただし、スレッドがどのレベルで異なるコアに割り当てられるかは明確ではありません。次のシナリオを想像できます(オペレーティングシステムとプログラミング言語の実装に依存)。 スレッドの割り当ては、オペレーティングシステムによって管理されます。スレッドはOSシステムコールを使用して作成され、プロセスがマルチコアプロセッサで実行されると、OSは異なるコアに異なるスレッドを自動的に割り当て/スケジュールしようとします。 スレッドの割り当ては、プログラミング言語の実装によって管理されます。スレッドを異なるコアに割り当てるには特別なシステムコールが必要ですが、プログラミング言語の標準スレッドライブラリは、その言語の標準スレッド実装を使用するときにこれを自動的に処理します。 スレッドの割り当ては明示的にプログラムする必要があります。私のプログラムでは、使用可能なコアの数を検出し、ライブラリ関数などを使用して異なるスレッドを異なるコアに割り当てるために、明示的なコードを記述する必要があります。 質問をより具体的にするために、WindowsまたはLinux上のJavaまたはC ++でマルチスレッドアプリケーションを作成したと想像してください。マルチコアプロセッサで実行すると、アプリケーションが魔法のように複数のコアを認識して使用しますか(すべてがオペレーティングシステムまたは標準のスレッドライブラリによって管理されるため)、または複数のコアを認識するためにコードを変更する必要がありますか?

2
GPLライセンスのJavaScriptを商用Webサイトで使用できますか?
私が開発しているWebサイトのアップロード機能については、pluploadを探しています。現在、pluploadはGNU GPLv2のライセンスを取得しています。これは、すべての派生ソフトウェアもGPLのライセンスを取得する必要があることを意味します(右?)。したがって、ミニファイヤを介してpluploadを実行すると、単一の縮小されたjsファイルはライセンスに違反し、要求に応じて、ページのすべてのソースを利用可能にする必要があります(右?)。 私は興味があります: コードをオープンソース化せずにplupload APIを使用できますか? ライセンスは何らかの形で縮小コードを除外しますか? 参照:https : //stackoverflow.com/questions/3213767/minified-javascript-and-bsd-license
13 licensing 

3
オープンソースプロジェクトで機密データを非表示にするにはどうすればよいですか?
複数のファイルホスト間でDropBoxにファイルをアップロードするオープンソースプロジェクトがあります。現在、DropBoxの画面スクレイピングをしています。APIを使用するには、OAuth認証用に提供された秘密キーをハードコードする必要があります。しかし、だれでも見ることができるように見えれば、鍵は秘密ではないのではないかと思います。 悪意のある誰かが私のキーを使用してウイルスをユーザーのアカウント(すでに私のアプリへのアクセスを許可している)にアップロードし、PC(デスクトップ同期が有効になっている場合)および他のPC(彼らは共有フォルダを持っていた)など。:O 私と同じ問題を抱えているこの未回答の質問を見つけました。 しかし、私は一般に、オープンソースプロジェクトで機密データを隠す方法を知りたいと思います。 アイデアが一つあります。 ソースコードに「<SECRET KEY HERE>」などのプレースホルダーを用意し、リリース用のバイナリをビルドするときにのみ埋めます。(うん!) 適切なアイデアはありますか?

2
クラスを介してすべてのコードを構造化し、クラス(Javaなど)にコンパイルすることの長所と短所
編集:私の言語は、Javaとは異なり、複数の継承を可能にします。 教育、レクリエーション、潜在的に有用な目的のために、独自のプログラミング言語の設計と開発を開始しました。 最初は、Javaをベースにすることにしました。 これは、すべてのコードがクラスの形式で記述され、そのコードがVMによってロードされるクラスにコンパイルされることを暗示しています。 ただし、インターフェイスや抽象クラスなどの機能は必要ないため、除外しました。彼らはパラダイムを実施しているようで、私の言語はそれをしないようにしたいです。クラスをコンパイル単位として保持したかったのは、実装が便利で馴染みがあり、アイデアが気に入ったからです。 それから、クラスをstaticディレクティブを使用して定数と関数を提供する「名前空間」として、またはインスタンス化する必要のあるオブジェクトのテンプレート(「実際の」クラスの目的)として使用できるモジュールシステムが基本的に残っていることに気付きました他の言語で)。 今、私は疑問に思っています:コンパイル単位としてクラスを持つことの利点と欠点は何ですか? また、私のデザインに関する一般的なコメントは大歓迎です。私の言語に関する有益な投稿は、http://www.yannbane.com/2012/12/kava.htmlにあります。

3
プログラミング言語の構文は、ユーザビリティテストされていますか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 一般に公開される前に、プログラミング言語の構文はユーザビリティテストを受けていますか?もしそうなら、どのような種類のテストが実行され、結果は何で、テスト結果は言語の設計にどのような影響を与えましたか?

7
すべてのセキュリティの脅威はソフトウェアのバグによって引き起こされていますか?
私が聞いたほとんどのセキュリティの脅威は、ソフトウェアのバグが原因で発生しました(たとえば、すべての入力が適切に健全性チェックされていない、スタックオーバーフローなど)。ソーシャルハッキングをすべて除外すると、すべてのセキュリティ上の脅威はバグによるものですか?言い換えると、バグがなければ、セキュリティ上の脅威はありませんか(再び、パスワードの開示などの人間の過失を除く)。または、バグが原因ではない方法でシステムを悪用できますか?
13 security  bug  hacking 

4
ソフトウェアパイプラインで共有データをカプセル化するための優れた実装戦略
既存のWebサービスの特定の側面のリファクタリングに取り組んでいます。サービスAPIの実装方法は、一連のタスクが順番に実行される「処理パイプライン」のようなものを持つことです。当然のことながら、後のタスクは前のタスクによって計算された情報を必要とする場合があり、現在これを行う方法は「パイプライン状態」クラスにフィールドを追加することです。 私は、無数のフィールドを持つデータオブジェクトを持つよりもパイプラインステップ間で情報を共有するより良い方法があると考えています(そして望んでいますか?)このクラスをスレッドセーフにするのは大きな苦痛になります(可能かどうかはわかりません)、その不変式について推論する方法はありません(そしておそらくないかもしれません)。 私はインスピレーションを見つけるためにGang of Fourのデザインパターンブックをページングしていましたが、そこに解決策があるとは感じませんでした(Mementoはやや同じ精神ですが、まったく同じではありませんでした)。私もオンラインで調べましたが、「パイプライン」または「ワークフロー」を検索する2番目のケースでは、Unixパイプ情報、または独自のワークフローエンジンとフレームワークのいずれかであふれています。 私の質問は、ソフトウェア処理パイプラインの実行状態を記録する問題にどのようにアプローチし、後のタスクが以前のタスクによって計算された情報を使用できるようにするかです。Unixパイプとの主な違いは、直前のタスクの出力だけを気にしないことです。 要求されたとおり、私のユースケースを説明するためのいくつかの擬似コード: 「パイプラインコンテキスト」オブジェクトには、さまざまなパイプラインステップで入力/読み取りできるフィールドがあります。 public class PipelineCtx { ... // fields public Foo getFoo() { return this.foo; } public void setFoo(Foo aFoo) { this.foo = aFoo; } public Bar getBar() { return this.bar; } public void setBar(Bar aBar) { this.bar = aBar; } ... // more …

3
テンプレートを使用する場合、ますます長いコンパイル時間をどのように処理しますか?
私はVisual Studio 2012を使用していますが、ユニットテストでこれらのパーツをモックオブジェクトに置き換えることができるように、「継ぎ目」を導入するためにクラスパラメーターにテンプレートパラメーターを追加した場合があります。 通常、C ++でどのようにシームポイントを導入しますか。テンプレートパラメーターを使用して、暗黙的なインターフェースとのいくつかの基準に基づいてインターフェースを使用したり、混合したりしますか?これを求める理由の1つは、1つのC ++ファイル(テンプレートファイルを含む、他のテンプレートも含む可能性がある)をコンパイルすると、開発者のマシンで約5〜10秒かかるオブジェクトファイルが生成されるためです。 。 VSコンパイラは、私が理解している限り、テンプレートをコンパイルするのに特に高速ではありません、テンプレートインクルードモデルのために(実際にテンプレートの定義を間接的に使用するすべてのファイルに含め、変更するたびにそのテンプレートを再インスタンス化する可能性がありますそのテンプレートとは何の関係もない)コンパイル時間に問題がある可能性があります(インクリメンタルコンパイルを行う場合)。 テンプレートを操作するときに、コンパイル時間をインクリメンタルに(そしてそれだけでなく)処理する方法は何ですか(より良い/より速いコンパイラに加えて:-))。
13 c++  tdd  templates 

1
汎用プログラミングの言語としてのScala
ガルシアらによる論文「汎用プログラミングのための言語サポートの拡張比較研究」。汎用プログラミングのプログラミング言語機能の興味深い比較を示します。 用語の簡単な説明: 誰でもこのフレームワーク内で汎用プログラミングのScalaサポートをテストできますか?つまり、可能であれば説明付きの最初の表に列を追加します。

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