ソフトウェア工学

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

2
凝集と結合の指標はありますか?
McCabe Complexityメジャーに類似したメトリックがあります。これは、ルーチンの凝集度と、同じコードベース内の他のコードとの疎結合(または密結合)の度合いを測定するためのものですか。

6
非営利コードをオープンソースにしない理由は?[閉まっている]
私はオープンソースコードの大ファンです。オープンソース化の利点のほとんどを理解していると思います。私は理科の学生研究者であり、オープンソースではない(プロプライエタリであるか、パブリックでない)非常に驚くべき量のソフトウェアとコードを使用する必要があります。私にはこれの正当な理由が本当にわかりません。そして、コードとそれを使用している人々は、より一般的になることから間違いなく恩恵を受けることがわかります他の人があなたのコードにアクセスできない場合、それははるかに困難です)。 :私は外出して布教活動を開始する前に、私が知りたいのために何かいいの引数がありません OSI準拠のライセンスで公に非営利コードをリリースは、と? (私は周りに同様の 質問がいくつかあることを理解していますが、ほとんどはコードが主にお金を稼ぐために使用される状況に焦点を当てており、答えにあまり関連性がありませんでした。) 明確化:「非営利」とは、親会社のブランド認知や投資家の利益期待など、下流の利益の動機を含みます。言い換えれば、質問は、ソフトウェアに関連する利益の動機がまったくないソフトウェアにのみ関連します。

8
JavaScriptはいつHTMLを生成する必要がありますか?
JavaScriptからできるだけ少ないHTMLを生成しようとします。代わりに、Ajaxを使用するのに適していない要素を動的に挿入する必要がある場合にのみ、HTMLを生成でき、既存のマークアップを操作することを好みます。これにより、マークアップの読み取りとトレースが容易になるため、コードの保守とコードの変更がはるかに簡単になります。私の経験則では、HTMLはドキュメント構造用、CSSはプレゼンテーション用、JavaScriptは動作用です。 しかし、フォーム全体やコンテンツが多いモーダルダイアログなど、HTMLの山を生成するJSコードをたくさん見ました。一般的に、どの方法がベストプラクティスと見なされますか?どのような状況でJa​​vaScriptを使用してHTMLを生成する必要がありますか?
34 javascript  html 

3
Model-View-Presenter(MVP)スキームはAndroidに役立ちますか?
Androidでビューとプレゼンターを分離する方法、ユーザーアクション(MVPのプレゼンター部分)に対する反応は、GUI要素(MVPのビュー部分)を表示する同じアクティビティに設定されます。 「Martin FowlerやMichael Feathers [2]が言うように、モデルビュープレゼンターでは、UIのロジックはプレゼンターと呼ばれるクラスに分離され、ユーザーからのすべての入力を処理し、「ダム」ビューにディスプレイ」(ここから引用)。 今まで、Androidの主な機能の1つは、アクションを実行し、それらに反応して結果を表示するスマートアクティビティであると考えていました。MVPスキームはAndroidの哲学と矛盾していますか?Androidでそれを実現しようとするのは理にかなっていますか?はいの場合、どのようにそれを行うことができますか?
34 android  mvp 

8
Clang / LLVMが、列挙されたすべてのケースが含まれるswitchステートメントでデフォルトを使用することについて警告するのはなぜですか?
次のenumおよびswitchステートメントを検討してください。 typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 私はObjective-Cプログラマですが、より多くの読者のために純粋なCでこれを書いています。 -Weverythingを使用したClang / LLVM 4.1では、デフォルトの行で警告が表示されます。 すべての列挙値をカバーするスイッチのデフォルトラベル 今、私はこれがなぜあるのかを見ることができます:完全な世界では、引数に入力する値theMaskは列挙型のみであるため、デフォルトは必要ありません。しかし、ハックがやって来て、初期化されていないintを美しい関数に投げ込んだらどうなるでしょうか?私の機能はライブラリのドロップとして提供され、そこに何が入るかを制御することはできません。を使用することdefaultは、これを処理する非常に適切な方法です。 なぜLLVMの神は、この振る舞いを地獄のデバイスにふさわしくないと考えているのでしょうか?引数をチェックするifステートメントをこれに先行させる必要がありますか?


6
C ++でブール値を使用する必要があるのはいつですか?
私たちは、三目並べゲームを作成しなければならないクラスに割り当てられました。人々は自分自身を複雑にするのが好きなので、メニューを含む複雑なゲームを書きました。ゲームの最後に、もう一度プレイするか、プログラムを終了するかを選択する必要がありました。そのためにint変数を使用しましたが、クラスメートがBOOLを使用していることに気付きました。 より効率的ですか?intboolに保存するのではなく、2つの値のみを保存する回答を保存することの違いは何ですか?これらの変数の正確な目的は何ですか?
34 c++  boolean 

2
高度に拡張可能なクラスでの使用により適したBlochのBuilderパターンを改善する方法
Joshua BlochのEffective Javaの本(第2版)に大きな影響を受けました。おそらく私が読んだどのプログラミングの本よりもそうでしょう。特に、彼のビルダーパターン(項目2)が最大の効果をもたらしました。 Blochのビルダーは、過去10年間のプログラミングよりも数か月ではるかに遠くまで私を導いてくれましたが、私は今でも同じ壁にぶつかっています。 --especiallyジェネリックが遊びに来たときに、そして特にと自己参照ジェネリック医薬品(などComparable<T extends Comparable<T>>)。 私には2つの主要なニーズがありますが、この質問で焦点を当てたいのは2番目だけです。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。好奇心may盛な方のために、この回答記事の最後でこの部分について説明しましたが、ここで焦点を当てたいものではありません。 私がコメントを求めている2番目の問題は、「他の多くのクラスによって拡張されることを意図したクラスにビルダーを実装するにはどうすればよいですか」です。ビルダーを使用してクラスを拡張するのは、当然、ビルダーを使用せずに拡張するよりも困難です。を実装Needableするビルダーを持つクラスを拡張することは、そのため、それに関連付けられた重要なジェネリックを持ち、扱いにくいです。 それが私の質問です:Bloch Builder(私が呼ぶもの)をどのように改善できますか?そのクラスが「ベースクラス」であることを意図している場合でも、自由にビルダーを任意のクラスに添付できますビルダー(およびその潜在的なジェネリック)が彼らに課す余分な荷物のために、私の未来やライブラリのユーザーを落胆させることなく、何度も何度も拡張およびサブ拡張されましたか? 補遺 私の質問は上記のパート2に焦点を当てていますが、対処方法など、問題1について少し詳しく説明したいと思いました。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。これは、拡張クラスがこれらのチェーンを再実装する必要があることを防ぐためではなく、もちろん、これらのメソッドチェーンを利用したい非サブクラスを防ぐ方法を再実装する必要があります- ユーザーがそれらを利用できるように、すべての自己復帰機能を実装しますか?このために、ここでインターフェースのスケルトンを印刷し、今のところはそのままにしておく必要がある必要性の高いデザインを考え出しました。私にとってはうまくいきました(この設計は長年の開発でした...最も困難な部分は循環依存を回避することでした): public interface Chainable { Chainable chainID(boolean b_setStatic, Object o_id); Object getChainID(); Object getStaticChainID(); } public interface Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); boolean isNeededUsable(); R endCfg(); } …

3
完全にモジュール化されたWebアプリケーションを構築する方法[非公開]
今後数か月で、クライアント用に構築したシステム(v1)を取得し、ゼロから再構築するプロジェクトを開始します。v2の目標は、この特定のクライアントが使用する独自のモジュールセットを持ち、別のクライアントが異なるモジュールセットを完全に使用できるようにモジュール化することです。ここでのコツは、会社Aがそのシステムの動作を変更する一連のチェックアウトおよびユーザーモジュールを持っている可能性があることです。会社Bは、標準のチェックアウト手順に固執するかもしれませんが、製品の閲覧方法をカスタマイズします。 アプリケーションをゼロから構築しCore、すべてのクライアントで共有したい一方で、クライアント専用に変更するものの柔軟性を維持したい場合、アプリケーションアーキテクチャへの良いアプローチは何ですか? CodeIgniterのフックを見たことがありますが、250のフックになる可能性があり、まだ十分な柔軟性がないため、これは良い解決策ではないと思います。他のソリューションは何ですか?理想的には、砂の中に線を引く必要はありません。

5
映画館の座席予約システムは、複数のユーザーが同じ座席を予約することをどのように防止しますか?
映画館には、チケットキオスクがあります。チケットキオスクを使用すると、必要な座席を選択できます。また、同じことを行うWebサイトもあります(Webサイトには、30秒程度のカウントダウンタイマーがあり、座席を選択する必要があります)。 データベーストランザクションや、複数の同時ユーザーを処理するためのその他のテクニックなどは理解していますが、複数の人が同時に座席を選択できる方法について頭を悩ますことはできません。BUYを押した最初の人が席を獲得し、他の人がエラーメッセージを受け取るのと同じくらい簡単ですか、それとも何かが足りませんか?

12
DVCSは継続的な統合を妨げますか?
10人のアジャイル開発者のチームがあるとします。毎日、彼らはボードからタスクを選び、そのタスクに対していくつかの変更をコミットします(1日の終わりまでに)。すべての開発者は、トランクに対して直接チェックインします(Googleスタイル、すべてのコミットはリリース候補であり、機能の切り替えなどを使用します)。 SVNのような集中型CVSを使用している場合、1人がコミットするたびに、ビルドサーバーは変更を統合し、他の9人の開発者の作業に対してテストします。ビルドサーバーはほぼ1日中継続的に実行されます。 しかし、gitのようなDCVSを使用している場合、開発者はタスクを完了するまで待ってから、ローカルコミットをすべて中央リポジトリにプッシュすることができます。それらの変更は、一日の終わりまで統合されません。 このシナリオでは、SVNチームはより頻繁に継続的に統合し、gitチームよりもはるかに迅速に統合の問題を発見しています。 これは、DVCSが従来の集中型ツールよりも継続的なチームに適していないということですか?この遅延プッシュの問題をどのように回避しますか?

5
Javascriptは関数型プログラミング言語ですか
Javascriptは関数型言語ですか?私はそれがオブジェクトを持っていることを知っています&あなたもそれでOOPを行うことができますが、それは関数型言語でもあります、そのように使用できますか? OOPがどのようにプログラミングの次の進化のようになったか/知っている、それは「機能プログラミング」が次の進化であることを意味します(注:これは意見のプロンプトではなく、事実に基づいた答えのプロンプトであり、このノートは投稿者よりもモデレーターの方が多い;))。 私は例を通して最もよく学びます。おそらく、誰かが同じタスクをOOPの方法で実行し、それから関数型プログラミングの方法で関数型プログラミングの機能を理解して比較することができます。 「関数型プログラミング」を正直に完全に理解していない:Pしたがって、Javascriptと関数型プログラミングを比較することは完全に間違っている可能性があります。 関数型プログラミングを素人の言葉で言うと、それは単に匿名関数を使用したアブスレーションの利点ですか? または、その方法は単純すぎますか?簡単に言うと、OOPはオブジェクトを介した抽象化の利点ですが、OOPを説明するには少し単純すぎると思います。 これは関数型プログラミングの良い例ですか?... Javascript OOPの例: // sum some numbers function Number( v ) { this.val = v; } Number.prototype.add( /*Number*/ n2 ) { this.val += n2.val; } 関数型プログラミングの例: function forEach(array, action) { for (var i = 0; i < array.length; i++) action(array[i]); } function add(array) { …

8
機能要件または非機能要件?
機能要件または非機能要件について疑問に思っています。これらの用語にはさまざまな定義がありますが、要件の一部を適切なカテゴリに割り当てることはできません。 たとえば、次のように、何らかのアクションに関連していない、または追加の条件がある要件について疑問に思っています。 選択したデバイスのリストで、デバイスを繰り返すことができます。 データベースには少なくとも100個のアイテムが含まれている必要があります 価値のある通貨は米ドルである必要があります。 デバイスには、ワット単位の名前と電力消費値が必要です。 それらの要件は機能的または非機能的ですか?

4
MicrosoftにはVisual Studioの無料バージョンがありますか?[閉まっている]
試用版ではなく、ユーザーがダウンロードできる真の無料バージョンです。... どういうわけか彼らのウェブサイトのオプションを逃した場合に私は疑問に思っていました。Visual Studioのどのバージョンでも実行できます。 そうでない場合、Visual Studioのオープンソースの代替物(類似の機能を備えているか、同等の機能を低下させている可能性のあるもの)はありますか?それが違いを生む場合、私はWindows 7で実行しています...

13
関連するコードの前後にコメントする[終了]
コメントが適用される行に収まらない(または行けない)と仮定した場合、コードの前または後にコメントを書く必要がありますか? さて、将来の読者がコメントの範囲を最もよく理解するところはどこでも。言い換えれば、ほとんどのプログラマー/スクリプト作成者がそのようなコメントを書くところです。 では、ほとんどのプログラマー/スクリプト作成者は、コードの前後にどこにコメントを入れますか? 回答が特定の言語のみに適用される場合は、どちらを指定してください。 そして、あなたの答えをサポートする受け入れられた仕様またはガイドを引用できるなら、それははるかに良いです。
34 comments 

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