ソフトウェア工学

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

6
Javaでは複数の値がどのように返されますか?
関数から複数の値を返したい場合があります。 これは通常 Javaでどのように行われますか? 1つのオプションは、リストまたはタプルを返すこのPythonスニペットのような配列を使用することです。 value, success = read_unreliably() if success: print value 別のオプションは、次のJavaScriptの例のように、ハッシュ/辞書を返すことです。 var result = readUnreliably() if (result.success) { alert(value); } もう1つは、このJavaの例のように、この目的のためだけにカスタムオブジェクトを作成することです。 ReadUnreliablyResult result = readUnreliably() if (result.getSuccess()) { System.out.println(result.getValue()); } もちろん、物事をやり取りする代わりに、いくつかのグローバル変数を使用して必要なものを保存することもできますが、それはオプションではないと言ってみましょう。

8
大規模プロジェクトを開発する際の最大のボトルネックは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私の会社がMS Wordのレプリカを開発することだったとしましょう(例として)。開発プロセスのボトルネックは何でしょうか。無限の現金とMicrosoftのような組織があると仮定するとどうなりますか?言い換えれば、そのようなソフトウェアを迅速に開発する際の最も一般的な障害は何ですか?すべての仕様が整っており、組織が完全に機能していると仮定しましょう。そのため、製品の出荷準備が整うまでソフトウェア開発に専念します。-コードの作成-テストの作成-最終製品の手動テスト-設計の不備によるコードの再作成-コードの設計-経験豊富な開発者によるコードレビュー-GUIの設計-アルファに基づくGUIの再設計/ beta-user feedback-ユーザーからのフィードバックの処理-alpha / beta-userフィードバックを待っています 回答に参考文献を使用するか、主題に関する経験を述べてください。

7
再帰-「分割して征服する」か「コードを再利用する」か
再帰 -誰もが知っているように-これらの問題の1つです-あなたの頭を包むことは、プログラミングの旅で「マイルストーン」を達成するような気がします。 しかし、実際の問題で実際に使用する場合は、再帰のメカニズムを知るだけでは十分ではありません。再帰が最も適切な解決策である問題の性質も理解する必要があります。 私の質問はこれです... 再帰の解決を要求する「問題パターン」とは何ですか 再帰は「分割統治」戦略の形式、または「コード再利用」の形式です-または、それ自体が設計パターンです 再帰が即座の解決策として頭に浮かぶ現実世界の問題の例を教えてください -更新- 多くの答えは、「本当の問題」をツリー探索や階乗などと呼んでいます。「本当の本当の問題」を好むでしょう。例を挙げましょう... テキストの大規模なチャック(のリンクリストとして約30 MBのテキストstructs)があり、全文検索のためにそのインデックスを作成する必要がありました。インデックス全体をメモリに保持し、10分ごとにテキストのインデックスを再作成する必要がありました。 10分ごとに、テキスト全体(2つのリンクリスト、1行ずつ)と新しく生成されたテキストチャンクを比較し、変更された行を確認し、その行のみを再インデックスしますテキスト全体のインデックスを再作成する必要がなくなりました。覚えておいてください-2つの30 MBのリンクリスト間の差分ポイントを見つける必要がありました。 私の同僚の一人は、HEAVY再帰を使用して行を比較する素晴らしいプログラムを思い付きました-そして、チャックが配列内で異なる位置を収集します-はいやった 要点は、再帰を頻繁に使用することで、この問題をスマートに解決できることをどのように確認できるのでしょうか?
11 recursion 

2
REST APIの認証の設計
私は、RESTサービス用のAPIを作成しています。これは、作成と消費の両方を行います。私は過去数日間、認証をうまく処理する方法を見つけようとして過ごし、最終的に何かを思いついたと思います。 アプリケーションスタックに関する次の事実に基づいて、これを考えています。 クライアントとサーバーは.NET4にあります(クライアントプロファイルのクライアント部分) サーバーはWCF RESTを使用して公開します アプリのユーザー名とパスワードをメモリに保持したくない 3から、トークン認証の形式を使用したかったため、サーバーによって資格情報が検証された後、クライアントはアプリの残りの部分で使用するトークンを取得します(これにより、ユーザーのタイムアウト、Webバージョンとデスクトップバージョン間でのシームレスなユーザーの移動など)。通話をリプレイし、改ざん防止する方法を考えた後、次のことを思いつきました。 クライアントは認証を試みる前に、ECDiffieHellmanCngクラスを使用してDiffie-Hellmanキーペアを生成します。 鍵ペアの公開部分をユーザー名とパスワードとともに有線で送信します(もちろんHTTPS経由)。 サーバーはユーザー名とパスワードの組み合わせを認証し、成功した場合、次のことを行います。 一意のセッショントークンを作成します 独自のDHキーペアを生成し、クライアントから提供された公開キーから共有シークレットを計算します データベース内のセッショントークン、共有シークレット、ユーザー、および「最終アクション」時間(ローリング有効期限ウィンドウに使用)をメモします。 セッショントークン、その公開DHキー、および認証成功メッセージを返します クライアントは、応答からDHキーを取得し、共有シークレットを計算し、トークンとシークレットの両方をメモリに保存します。 この時点から、セッショントークン/シークレットの組み合わせは、他のほとんどのREST APIと同様に機能し、要求のフィンガープリントとタイムスタンプが付けられ、何らかのHMACが生成されます。クライアントがサーバーに対してアクションを実行するたびに、トークン/シークレットペアをチェックし、有効で期限切れでない場合はアクションを許可し、セッションの最後のアクションレコードを更新します。 明らかな欠陥は見当たらず、おそらくこのために過剰に設計されていますが、ある時点でこれを行う方法を学ぶ必要があります。HMACはリプレイ攻撃を防ぎ、DHネゴシエーションはMITM攻撃を防ぐのに役立ちます(HMAC / DHの間で頭の上の実行可能な攻撃を考えることはできません)。 誰でもこれを突くことができる穴はありますか?


8
プロジェクトを取るべきかどうかはどのように決定しますか?
私はかなり新しい開発者です。専門的には、インターンとして2年間、ジュニア開発者として6か月間、C#でプログラムを作成しました。私の家族の友人は、VB.netで書かれたプロジェクトの助けを必要としています。私はVB.netを使用したことがないので、少し心配しています。 しかし、本当の疑問は、プロジェクトのドキュメントを見ると、本当に良いものは何もないと感じているという事実にあります。私は、現在の私の人生で望んでいるよりも多くのストレスを引き起こすと感じています。 経験豊富な開発者は、プロジェクトを採用するのか、それとも手放すのかをどのように決定しますか?決定を容易にするための良い指標は何ですか? 編集 これは実際に彼が私に働きかけたい非常に大きなERPのようであり、彼はプログラミングについて何かを知っているとは思わないので、私は非常に後輩であるという事実さえ彼の心を越えたとは思わない。
11 project  contract 

9
チェスのルールを学ぶ
同様の問題は、コンピュータがゲームの数千人を分析することによって、チェスで最適にプレイすることを学ぶことができるかどうか尋ねます。 マシンが最初と各移動後にチェスのいくつかのゲーム(またはチェッカーのいくつかのゲーム)のボードの状態を見ることができる場合、ゲームのルールを学習するようにプログラムできますか? それが可能な場合、どの程度まで(たとえば、キャスティングやプロモーションを説明できるでしょうか)、これは機能しますか?どの機械学習アルゴリズムがこれを可能にしますか?

5
コードでランタイム例外を処理することは良い習慣ではありませんか?
私はJavaアプリケーションで作業していますが、実行時例外は多くの場所で処理されることがわかります。例えば、 try { // do something } catch(NullPointerException e) { return null; } 私の質問は、いつランタイム例外を処理するのが良い習慣ですか?例外を未処理のままにする必要があるのはいつですか?
11 java  exceptions 

4
理想的なHTML5 Webアプリケーションの制限はありますか
次の2つの仮定が真であると仮定しましょう。 ユーザーベース全体がどこからでもブロードバンドにアクセスできます HTML5およびWHATWGグループのドラフト仕様全体を一貫して実装する架空のブラウザーXがあり、すべてのユーザーがブラウザーXを使用しています。 商用パブリックデスクトップアプリケーションが必要な商用パブリックHTML5 Webアプリケーションの本質的な制限は何ですか? 追加機能をFlash / Java / SilverLight / etcブリッジに依存せず、追加機能をブラウザプラグインに依存しないプラグインレスWebアプリケーションの制限に興味があります。 適用されない可能性のある制限: データベース?WebSQLとindexedDBがあります。 ファイルIO?読み取りと書き込みの両方を行うHTML5 File APIがあります。 速度?最近のJavaScriptエンジンの競合により、ブラウザーの速度は遅くなりません。ネイティブC ++は、ChromeのV8エンジンよりもわずか3倍高速です。 開発ツール?Webは成熟しており、リストするには数が多すぎるツールが利用できます。 クローズドソース?はい、すべてのコードはオープンソースです。これは両刃の剣であり、クローズドソースまたはオープンソースコードの使用について多くの意見があります。個人的には、オープンソースコードの利点が欠点を上回ると考えています。 JavaScript / HTML5?「私は個人的にHTML5とEcmaScriptは恐ろしい開発プラットフォームだと思う」などの議論は数えません。 既知の制限: リアルタイム/セキュリティ(極秘)の重要なコードはWebにも属していません。CやC ++などの低レベルで高度に制御可能な言語で作成する必要があります。 コンピューターに接続されている外国のサードパーティ製ハードウェアとやり取りする必要があるツールは、Webアプリケーションと通信するのに苦労します。 Webに属さないプログラムのスイートもあります。オペレーションシステム、ドライバー、サーバーソフトウェア、低レベルAPI。私はそれを承知していますが、それらを「商用公開」アプリケーションとして分類していません。これらはコンピューターにプリインストールできるソフトウェアのタイプです。 余談ですが、2つの仮定は恐ろしく非現実的ですが、5/10/20/30年でそれらを達成するかもしれません。私は、アプリケーションのタイプと、それらがWebと完全に非互換になるアプリケーションの機能に興味があります。 動機: Googleアプリケーション Microsoft Office365 Webアプリケーションリスト Adobe Aviary ポイント: デスクトップアプリケーションが有効なソリューションである一連の問題を考えます。 Webアプリケーションが有効なソリューションではないのはなぜですか? Webアプリケーションをソリューションとして使用できるかどうかを確認するにはどうすればよいですか。 私は、Webアプリケーション(インターネット接続とブラウザーサポート)の主な問題を、それらが存在しないと断言することで除去しようとしました。 余談ですが、HTML5オフラインアプリケーションとModernizrは、これら両方の問題の解決に向けて順調に進んでいます。 Webアプリケーション開発のその他の困難は何ですか?

4
なぜデスクトップパラダイムではなくブラウザーでDOMを使用しているのですか
私の理解では、WebインターフェイスはHTMLを使用するように開発されました。当時、帯域幅の制限や処理能力のために、SilverlightやFlashの動作など、ブラウザーでデスクトップスタイルのアプリケーションをシミュレートできなかったからです。 なぜ過去に存在しなかったのか、そして現在はFlash / Silverlightのようなテクノロジーに対するより大きな受け入れとプッシュだったのですか?私の経験から、彼らは(もちろん私の意見では)一緒に開発する方が楽しいですし、クロスブラウザーコンプライアンスや古いブラウザー(大部分)に対処する必要はありません。 ポストバック、AJAXなどの処理は、デスクトップアプリケーションの開発パラダイムと比較して、余分な不必要な努力のようです。DOMとそれを補完するテクノロジーは、Silverlight / Flashがプラグインのインストールを必要とし、一部のモバイルデバイスがプラグインをサポートしていないという事実に基づいて成長し続けていますか?

2
visualstudioデータベースプロジェクトをデータベースと同期させるにはどうすればよいですか?
データベーススキーマをVisual Studio .dbprojデータベースプロジェクトと同期させたいのですが。 現在、ほとんどのデータベース開発作業にSSMSを使用しています。dbスキーマと.dbprojを同期する必要がある場合は、Visual Studioのスキーマ比較ツールを手動で使用する必要があります。なぜこれが必要なのでしょうか?なぜなら: 変更をチェックインする唯一の方法です 変更を適用する唯一の方法です そうしないと、ファイルを取得するときにマージの問題が発生します(基本的に、「最新の取得」にチェックアウトせずに更新しているdbオブジェクトのdb変更が含まれている場合、マージはトリガーされず、簡単に実行できますどのバージョンがどのバージョンであるかを追跡します) スキーマの最新バージョンでVisualStudioの検索機能を使用できることは素晴らしいことです 検索結果を使用して、VSからストアドプロシージャを変更できると便利です(通常、ファイルの名前を変更した場合)。 「スキーマ比較」ツールを自動化して5分ごとに実行する(「クリーン」なソリューションとは思えない)こと以外に、これを実現する方法はありますか? 可能であればSSMSを使用し続けたいのですが、Visual Studioの「サーバーエクスプローラー/データベース接続」を使用して行われた変更を.dbprojに自動的に伝達する方法にも興味があります。

10
RDBMSはどのように流行と見なすことができますか?
2003年にコンピューティングAレベルを完了し、2007年にコンピューティングの学位を取得し、SQLの使用が多い企業での取引を学び、ストレージにリレーショナルデータベースを使用するというアイデアを思いつきました。 そのため、開発は比較的初心者でしたが、次のようなコメント(/software//q/89994/12436)を読むのに驚きました。 [一部の開発者]は[SQL]を軽deし、それとRDBMSは流行だと思います 明らかに、有能な開発者は適切なジョブに適切なツールを使用し、ストレージ用のフラットファイルまたは別のソリューションが適切な場合にリレーショナルデータベースを作成しませんが、RDBMは非常に多くの状況で役立ちます。流行と考えられますか?

4
ゲーム用の動作/コンポーネントベースのシステムを作成する
バックグラウンド 私はゲーム開発を趣味として行っており、それらを設計するより良い方法を探しています。現在、私は標準のOOPアプローチを使用しています(8年間エンタープライズ開発を行ってきたので、最終的には実現しています)。たとえば、「バディ」 public class Baddie:AnimatedSprite //(or StaticSprite if needed, which inherit Sprite) { //sprite base will have things like what texture to use, //what the current position is, the base Update/Draw/GetInput methods, etc.. //an AnimatedSprite contains helpers to animated the player while //a StaticSprite is just one that will draw …

4
オープンソースプロジェクトは、その設計やアーキテクチャに関するドキュメントなしで成功するにはどうすればよいですか?
有名なオープンソースプロジェクトを勉強してプログラミングスキルを向上させたいのですが、ソースコードに飛び込むだけで簡単に迷子になります。 そこで、最初にコードの構成に関する一般的なアイデアを得るために、設計またはアーキテクチャ(UMLダイアグラムなど)に関するドキュメントを読むことにしました。しかし、驚いたことに、Hibernate、Spring、ASP.NET MVC、Railsなどの大規模なオープンソースプロジェクトのアーキテクチャドキュメントは見つかりませんでした。 だから私は疑問に思い始めました:新しい開発者が読むべきアーキテクチャ/設計ドキュメントがない場合、またはプロジェクトマネージャーがソースコードを開いただけでドキュメントを閉じた場合、オープンソースプロジェクトはどのように成功するのでしょうか?

3
なぜ反復バージョンに時間がかかるのですか?
私はhttp://programming.lispdream.com/blog/2011/06/recursion-vs-iteration/を見ていましたが、階乗関数の再帰的および反復的な実装の彼の実装では、実際には反復に時間がかかりますn = 1,000が与えられます。理由はわかりません(彼は説明しませんが、それは読者にとっての練習だと言います)。このすべてに私の新しさを申し訳ありません。

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