ソフトウェア工学

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

8
最も効果的にコードをデバッグする方法は?[閉まっている]
コードに忍び寄るバグは最小限に抑え、それが書かれている通り、完全に解消されないことができます-プログラマがあり、多くのだろうが反対し、人間だけを。 コードでエラーを検出した場合、それを取り除くために何ができますか?貴重な時間を最も有効に活用し、それを見つけようとする時間を短縮し、より多くの時間をコーディングできるようにするには、どのようにアプローチする必要がありますか?また、デバッグするときは何を避けるべきですか? ここで、バグの防止については話していないことに注意してください。バグが発生した場合の対処方法について説明しています。これは広い分野であり、言語、プラットフォーム、ツールに大きく依存している可能性があります。もしそうなら、考え方や一般的な方法などの回答を網羅してください。
33 debugging 

10
Microsoftスタックを実行する大規模なWebサイトが少ないのはなぜですか?[閉まっている]
私の頭上では、Microsoftスタックを利用するいくつかの大規模サイトを考えることができます。 Microsoft.com デル 私のスペース PlentyOfFish スタックオーバーフロー Hotmail、Bing、WindowsLive しかし、観察に基づいて、上位500サイトのほぼすべてが他のプラットフォームを実行しているように見えますが、市場への浸透がほとんどない主な理由は何ですか? コスト? 技術の制限? マイクロソフトは、パブリックWebサイトよりも企業/イントラネット環境に対応していますか? 市場シェアを探しているのではなく、MSスタックの大規模な採用を探しています。

12
フォーマルUMLはどのくらいの頻度で使用しますか?
アドホックMUML(メイクアップモデリング言語)を使用して、システムをかなり頻繁に設計および説明しました。それはUMLに似ており、かなりよく理解される傾向があります。 しかし、可能な限り仕様に近い、厳密で正式なUMLの使用を重視する教授が1人か2人いました。私は常に、厳密なUMLは彼らが主張したほど一般的ではないと疑っていました。それでは、どのように「どのように」、適切な行末、多重度、メンバータイプシンボルなどをすべて使用する完全な図を実際にどれくらいの頻度で描画しますか?
33 uml  diagrams 


20
無料で働いていますか?[閉まっている]
この記事Work for Freeに出会って、考えさせられました。 すべての雇用主の目標は、会社が賃金で支払うよりも労働者からより多くの価値を獲得することです。そうでなければ、雇用主にとって成長も前進も利益もありません。逆に、すべての従業員の目標は、賃金で受け取るよりも多くの企業に貢献することであり、それによって企業の昇給と昇進を受け取るための確固たる根拠を提供する必要があります。 refusenikがこの仕事で長続きしなかったと言う必要はありません。 対照的に、先週の話はこちらです。電話が鳴った。それは主要な大学の雇用部門でした。電話の男は、昨年Mises.orgでサイトの仕事をした人のパフォーマンスについて尋ねていました。危機の最中に行動に移った注目に値する若者について、彼が19時間3日間、3日間連続でどのように働いたのか、どのように勤勉に新しいソフトウェアを学んだのか、どのようにクールに保ち、約80種類のサードパーティのプラグインとデータベース、避けられない問題の回避方法、結果に対する責任の引き受けなど、さまざまな方法で優雅さと専門知識を駆使して道を進みました。 インタビュアーに伝えなかったのは、この人が支払いを求めずにこれをすべて行ったということです。その事実は彼のパフォーマンスに関する私の報告に影響を与えましたか?よくわかりませんが、インタビュアーはおそらく、この人がミーゼス研究所のためにしたことに対するtoward敬の念を私の声で感じました。インタビュアーは、私に尋ねるために15の異なる質問を書き留めたが、私の独白の過程ですでにそれらすべてに答えた、そして彼はこれらすべての詳細を聞くことに興奮したと私に言った。 人は仕事を提供されました。彼は非常に賢明なことをした。彼は人生の信者を獲得していた。 経済状況が厳しくなればなるほど、雇用主は、誰かを雇うときに何を得ているかを知る必要があります。求職者はバケツでいっぱいになり、すべて度数で埋められ、可能な限り印象的になります。それはすべて紙だけです。今日重要なことは、人が会社のためにできることです。履歴書はプロフォーマになりますが、これらの条件下では決定的ではありません。しかし、元上司やマネージャーがあなたを潜在的な雇用主に賞賛するために?それはすべての価値があります。 どう思いますか?ここで無料で働いている人はいますか?もしそうなら、それは何らかの形であなたに利益をもたらしましたか?なぜあなたは無料で仕事をするべきなのか(他の手段でお金を稼ぎ続けていると仮定して)?経験を共有できますか? 私は大学を1年休んでいて、まだ学位を取得していないので、おそらく私の仕事の応募のほとんどが無視されています。経験のために無料で働くことを考えていますか?
33 experience 

30
あなたが今までに犯した最大の間違い[クローズ]
Server Faultで読んだ質問と同様に、IT関連のポジションでこれまでに犯した最大の間違いは何ですか。友人からのいくつかの例: 実稼働サイトで作業を行う必要があったため、ライブデータベースをベータサイトにコピーすることにしました。かなり標準的ですが、ベータサイトに行ったとき、それはまだ古い情報を引き出していました。おっとっと!ベータデータベースをライブサイトにコピーしました。バックアップしてくれてありがとう。 そして、私にとっては、特定の時間帯に開催されるイベントのフォームを作成しました。参加者は勝つチャンスのためにフォームに記入し、イベントオーガナイザーにデータベースからCSVを送信します。私はデータベースにアクセスしましたが、私の唯一のエントリーが見つかりました。調査すると、自動インクリメントキーを忘れたように見えます。サーバーのセットアップのため、失われたデータを回復する方法はありませんでした。 この質問はStack Overflowの質問と似ていますが、実際のストーリーではなく一般的な答えを受け取ったように見えます:) 今までで最大のコーディングエラー/ミスは何ですか…
33 experience 

3
循環依存関係を解決する方法は?
相互に循環依存する3つのクラスがあります。 TestExecuterはTestScenarioのリクエストを実行し、ReportGeneratorクラスを使用してレポートファイルを保存します。そう: TestExecuterはReportGeneratorに依存してレポートを生成します ReportGeneratorは、TestScenarioおよびTestExecuterから設定されたパラメーターに依存します。 TestScenarioはTestExecuterに依存しています。 それらの依存関係を削除する方法がわかりません。 public class TestExecuter { ReportGenerator reportGenerator; public void getReportGenerator() { reportGenerator = ReportGenerator.getInstance(); reportGenerator.setParams(this.params); /* this.params several parameters from TestExecuter class example this.owner */ } public void setTestScenario (TestScenario ts) { reportGenerator.setTestScenario(ts); } public void saveReport() { reportGenerator.saveReport(); } public void executeRequest() { /* …

4
Web ApiにWSDLタイプのサポートがないのはなぜですか?
したがって、私は.Net WebApiを使い始めたばかりで、すぐに気づいたことの1つは、APIの外観と消費方法(各アクションからのリクエスト/レスポンス)を定義する契約がないことです。これは通常の形式ですWCF / SoapのWSDL。 これは非常に価値があり、APIの利用者の生活をずっと楽にするものであるように思えます。 存在しない理由はありますか?知らないプログラミングのパラダイムや原則はありますか?作成する方法はありますか?

6
プログレッシブエンハンスメントとシングルページアプリ
ボストンで開催されたAn Event Apartというカンファレンスから戻ってきました。 スピーカーの間で本当に人気のあるテーマは、プログレッシブエンハンスメントのアイデアでした。サイトのコンテンツはHTMLに入れ、JavaScriptは動作を強化するためだけに使用する必要があります。 スピーカーがプログレッシブエンハンスメントに対して行った議論は非常に説得力がありました。古いブラウザや低帯域幅のネットワーク上のデバイスをサポートするための堅実なパターンであるだけでなく、HTMLはJavaScriptよりもはるかに優雅に失敗します(つまり、サポートされていないマークアップは無視されますが、ブラウザが実行中に例外をスローした場合スクリプト-あなたはうんざりしています)。 ジェレミー・キースはこれについて特に洞察力に富んだ講演を行いました。 しかし、BackboneやAngularなどの単一ページのWebアプリはどうでしょうか。これらのフレームワークの背後にある設計全体が、開発者をコンテンツをHTMLからJSON APIのようなものに移行させるように思われます。 プログレッシブエンハンスメントとシングルページWebアプリの2つのデザインパターンを融合させることはできません。一方が他方より優れている場合はありますか?それとも、敵対的な技術でさえないのか、ここに私の精神モデルで何かが欠けていますか?

3
同じソリューションでMVCアプリケーションからWeb APIを呼び出す必要がありますか?
私はモバイルアプリケーションを持つMVCのプロジェクトに取り組んでいるので、モバイルアプリケーションで使用できるようにWeb APIを使用する必要があることは明らかです。 Webサイトの開発を開始したときにAPIを作成した後、私たちは混乱し、APIを使用するか、ビジネスオブジェクトに直接アクセスするかについて議論しました。そして、ビジネスオブジェクトを直接使用する代わりに、Web APIを使用する経験豊富な開発者の意見を聞いた後、私たちは終わりました。 このソリューション構造に関して混乱が生じています。 1)Web APIを使用し、HTTP要求(時間のかかる)を行って、同じソリューションにあるビジネスオブジェクトの代わりにデータを直接取得または配置する必要がある理由。 2)引数を取得した後、クライアントが別のクラウドサーバーでAPIとWebをホストし、APIのみにスケーリングを適用する場合、またはAPIとWebにアクセスするために別のURLを使用する場合(論理的)その場合、同じソリューションでMVCアプリケーションからWeb APIを呼び出す必要がありますか? 3)APIとWebを異なるホスティングでホストしている場合、WebはWebClientを使用し、各ナビゲーションでHTTP呼び出しを行います。正しいですか? 4)別のサーバーでAPIとWebホスティングの両方からビジネスオブジェクトを作成する場合、BLで何か変更を加えた場合は、両方のサーバーでビルドを更新する必要があります。 5)または、API用のプロジェクトを1つだけ作成し、ビューまたはhtmlページを追加してWebインターフェースを開発することで、ajaxから直接APIを呼び出すことができます。 私の知る限りでは、#5が最適なソリューションであるか、APIはサードパーティアクセス専用です。同じソリューションにDB、EF、データ層、ビジネス層がある場合、APIを使用してHTTP呼び出しを行ったり、ビジネスオブジェクトに直接アクセスしたりしないでください。(間違っている場合は修正してください)APIは、モバイルアプリケーションやデスクトップ、またはアプリケーションにアクセスしたいときに同じリポジトリとデータレイヤーを持つために必要です。 私のシナリオでは、モバイルアプリケーションもあるため、APIを作成する必要があります。プロジェクトAPI側では、ビジネスレイヤー(別のプロジェクト)と呼ばれ、ビジネスレイヤーはデータアクセスレイヤー(別のプロジェクト)と通信します。したがって、私の質問は、APIとWebを異なるサーバーにホストする場合、プロジェクトを作成してビジネスレイヤーの.dllを作成するときに、ビジネスレイヤーのメソッドを使用するよりも、HTTPリクエストであるAPIの呼び出しに時間がかかる場合があります APIコントローラーでは、ビジネスの出力をJSON形式に変換するだけです。 インターネットで検索しましたが、納得のいく答えが得られませんでした。私はブログ見つけたhttp://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspxを同じポイントを議論したが、再びそのブログで私の質問は、シナリオ#3を検討する必要がある理由です。 更新:異なるAPIプロジェクトとMVCプロジェクトを使用でき、jvascriptを使用してWebからAPIを呼び出すか、MVVMパターンを使用できます。

6
クロージャーは不純な機能スタイルと見なされますか?
関数型プログラミングではクロージャは不純であると考えられますか? 関数に値を直接渡すことで、一般にクロージャを回避できるようです。したがって、可能な限り閉鎖を避けるべきですか? それらが不純であり、避けることができると述べるのが正しい場合、なぜ多くの関数型プログラミング言語がクロージャーをサポートするのですか? 純粋な関数の基準の1つは、「関数は常に同じ引数値を指定すると同じ結果値を評価する」ということです。 仮に f: x -> x + y f(3)常に同じ結果が得られるとは限りません。f(3)のy引数に依存しない値に依存しますf。したがってf、純粋な関数ではありません。 すべてのクロージャーは引数ではない値に依存しているため、クロージャーがどのように純粋になる可能性がありますか?はい、理論的には、閉じた値は一定である可能性がありますが、関数自体のソースコードを見ただけではそれを知る方法はありません。 これが私を導くのは、同じ機能はある状況では純粋であるが、別の状況では不純かもしれないということです。ソースコードを調べても、関数が純粋であるかどうかを常に判断できるわけではありません。むしろ、そのような区別をする前に呼び出される時点で、その環境のコンテキストでそれを考慮する必要があります。 私はこれについて正しく考えていますか?

5
すべての単体テストでデータをハードコーディングする必要がありますか?
ほとんどの単体テストのチュートリアル/例では、通常、個々のテストごとにテストするデータを定義する必要があります。これは「すべてを単独でテストする必要がある」理論の一部だと思います。 しかし、大量のDIを含む多層アプリケーションを扱う場合、各テストのセットアップに必要なコードが非常に長くかかることがわかりました。代わりに、多くのテストスキャフォールドが事前に構築された多数のテストベースクラスを構築し、継承することができます。 この一環として、実行中のアプリケーションのデータベースを表す偽のデータセットも作成していますが、通常、各「テーブル」には1行または2行しかありません。 すべてではないにしても、すべての単体テストのテストデータの大部分を事前に定義することは、受け入れられている慣行ですか? 更新 以下のコメントから、単体テストよりも統合を進めているように感じます。 私の現在のプロジェクトはASP.NET MVCで、Entity Framework Code Firstを使用した作業単位とテスト用のMoqを使用しています。UoWとリポジトリをモックしましたが、実際のビジネスロジッククラスを使用し、コントローラーアクションをテストしています。テストでは、UoWがコミットされていることを頻繁に確認します。たとえば、次のとおりです。 [TestClass] public class SetupControllerTests : SetupControllerTestBase { [TestMethod] public void UserInvite_ExistingUser_DoesntInsertNewUser() { // Arrange var model = new Mandy.App.Models.Setup.UserInvite() { Email = userData.First().Email }; // Act setupController.UserInvite(model); // Assert mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never); mockUnitOfWork.Verify(m => m.Commit(), Times.Once); } } …


7
未知のコードの重複を防ぐにはどうすればよいですか?
私はかなり大きなコードベースに取り組んでいます。数百のクラス、大量の異なるファイル、多くの機能が、新しいコピーの取得などに15分以上かかります。 このような大きなコードベースの大きな問題は、かなりの数のユーティリティメソッドがあり、同じことを行うか、可能な場合にこれらのユーティリティメソッドを使用しないコードがあることです。また、ユーティリティメソッドは、すべてが1つのクラスに含まれているわけではありません(巨大な混乱のせいだからです)。 私はコードベースにはかなり慣れていませんが、何年もこのコードに取り組んでいるチームリーダーも同じ問題を抱えているようです。それは多くのコードと作業の重複につながり、そのため、何かが壊れると、通常は基本的に同じコードの4つのコピーで壊れます このパターンをどのように抑制できますか?ほとんどの大規模プロジェクトと同様に、すべてのコードが文書化されているわけではありません(一部は文書化されています)。しかし、基本的には、この点で品質の改善に取り組み、将来コードの重複を減らし、ユーティリティ関数のようなものを見つけやすくすることができれば、本当に素晴らしいことです。 また、ユーティリティ関数は通常、いくつかの静的ヘルパークラス、単一のオブジェクトで動作する非静的ヘルパークラス、または主に「ヘルプ」を行うクラスの静的メソッドのいずれかにあります。 拡張メソッドとしてユーティリティ関数を追加する1つの実験がありました(クラスの内部は不要であり、非常に特定のシナリオでのみ必要でした)。これには、プライマリクラスなどが乱雑になるのを防ぐ効果がありましたが、すでにそれを知っていない限り、実際には発見できません

3
MVVMアプリケーションでナビゲーションを制御する必要があるのは誰ですか?
例#1:MVVMアプリケーションにビューが表示され(ディスカッションの目的でSilverlightを使用しましょう)、新しいページに移動するボタンをクリックします。 例#2:同じビューに別のボタンがあり、クリックすると、子ウィンドウ(ダイアログ)に詳細ビューが開きます。 ユーザーのクリックに応答するメソッドを持つボタンにバインドされたViewModelによって公開されるCommandオブジェクトがあることを知っています。しかし、それではどうでしょうか?どうすればアクションを完了できますか?いわゆるNavigationServiceを使用していても、何を伝えているのでしょうか? 具体的には、従来のビュー優先モデル(WebやSL組み込みナビゲーションフレームワークなどのURLベースのナビゲーションスキームなど)では、Commandオブジェクトは次に表示するビューを知る必要があります。パターンによって促進される懸念の分離に関しては、これは境界線を越えるようです。 一方、ボタンがCommandオブジェクトに接続されておらず、ハイパーリンクのように動作する場合、ナビゲーションルールはマークアップで定義できます。しかし、ビューでアプリケーションのフローを制御し、ナビゲーションは単なる別のタイプのビジネスロジックではありませんか?(場合によってはyes、その他の場合はnoと言うことができます。) 私にとって、MVVMパターンのユートピア実装(および他の人がこれを公言していると聞いたことがあります)は、アプリケーションがヘッドレスで実行できるように(つまり、ビューなし)ViewModelを配線することです。これにより、コードベースのテストに最も広い領域が提供され、ビューがアプリケーションの真のスキンになります。そして、私のViewModelは、メインウィンドウ、フローティングパネル、または子ウィンドウに表示されるかどうかを気にするべきではありませんか? このアプローチによると、各ViewModelに表示するビューを「バインド」するのは、実行時に他の何らかのメカニズムに依存します。しかし、ビューを複数のViewModelと共有したい場合、またはその逆の場合はどうでしょうか? したがって、View-ViewModel関係を管理する必要があるため、子ウィンドウ/ダイアログの表示など、ビュー間をナビゲートする必要がある場合に何を表示するかを知るために、MVVMパターンでこれをどのように実現しますか?

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