ソフトウェア工学

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

2
OCaml批判:それはまだ有効ですか?
私はOCamlの完全な初心者です。最近、このページに出会って、 OCamlに対するかなりの批判を挙げました。 ページがかなり古いことを確認します(2007):そこにリストされている箇条書きのどれが、今日でもまだ真実ですか?たとえば、汎用オブジェクトを印刷することは不可能であることはまだ本当ですか? 私はそこに表明された意見の議論を探していないことを明確にしたいと思います。整数が警告なしでオーバーフローするという事実など、リストされている情報が、OCamlのより新しいバージョンに対してまだ正しいかどうかを尋ねています。
15 ocaml 

4
依存関係注入で「循環依存関係」を処理する方法
タイトルには「Circular Dependency」と書かれていますが、それは正しい表現ではありません。私にはデザインがしっかりしているように見えるからです。 ただし、次のシナリオを検討してください。青い部分は外部パートナーから提供され、オレンジは私自身の実装です。またConcreteMain、複数あると仮定しますが、特定のものを使用したいと思います。(実際には、各クラスにはさらにいくつかの依存関係がありますが、ここでは単純化しようとしました) すべてをDepency Injection(Unity)でStackOverflowExceptionインスタンス化したいのですが、明らかに次のコードを取得します。これは、RunnerがConcreteMainのインスタンス化を試行し、ConcreteMainにはRunnerが必要だからです。 IUnityContainer ioc = new UnityContainer(); ioc.RegisterType<IMain, ConcreteMain>() .RegisterType<IMainCallback, Runner>(); var runner = ioc.Resolve<Runner>(); どうすればこれを回避できますか?これをDIで使用できるように構成する方法はありますか?私が今しているシナリオは、すべてを手動で設定することですが、ConcreteMainそれをインスタンス化するクラスに強い依存関係を置きます。これは私が回避しようとしているものです(構成にUnityの登録がある場合)。 以下のすべてのソースコード(非常に単純化された例!); public class Program { public static void Main(string[] args) { IUnityContainer ioc = new UnityContainer(); ioc.RegisterType<IMain, ConcreteMain>() .RegisterType<IMainCallback, Runner>(); var runner = ioc.Resolve<Runner>(); Console.WriteLine("invoking runner..."); runner.DoSomethingAwesome(); Console.ReadLine(); } } public …

1
AngularJSディレクティブとサービスとコントローラー
会社の内部Webサイトで変更要求の実装を開始しようとしています。これにより、多くのフィールドがチェックされ、特定のガイドラインに一致する場合は強調表示されます。たとえば、生年月日が今日の場合、そのフィールドの概要が表示され、ツールチップに「お誕生日おめでとう!」と表示されます。 仕様では、ページの残りの部分のレンダリングが完了した後にこれをロードするように要求しているため、ロード時間は増加しません。angularJSは初めてなので、これを行うべき「適切な」方法がわかりません。 問題点: これには境界線と画像およびタイトル属性の追加(DOM操作)が含まれるため、ディレクティブを使用する必要があるようです。 ただし、これは再利用できず、ほとんどのディレクティブがそうであるように「短く」なります。 チェックする必要があるデータの半分は、ページの読み込み時に元の呼び出しで返されるので、それを保存し、もう一度取得する別の呼び出しを無駄にしたくないので、すべてのデータを保存するのにサービスがいいと思います。 私はこれをすべてコントローラーで行う方法を知っていますが、それは悪い悪いコードです:P これを行うことができる最善の方法に関するアイデアはありますか?基本的に、すべてのデータをチェックするためにhttp呼び出しが必要になります。これにより、必要な 'Call Out'の各タイプのブール値を持つオブジェクトが返されます。次に、このリストを実行し、値がtrueの場合、境界線、画像、およびツールチップテキストを追加します。 この質問が十分に明確かどうかはわかりませんので、詳細を追加してほしい場合はお問い合わせください。ありがとうございました!
15 angularjs 

2
リポジトリは本当に何をすべきでしょうか?
リポジトリパターンの多くを聞いたことがありますが、リポジトリが実際に何をすべきかを理解していませんでした。「リポジトリが実際にすべきこと」と言うとき、私は主にどのメソッドを提供すべきかを心配しています。たとえば、リポジトリは本当にCRUDメソッドを提供する必要がありますか、それとも何らかの種類のメソッドを提供する必要がありますか? つまり、リポジトリにビジネスロジックを含めるべきですか、それとも単にデータストアと通信し、保存またはロードするエンティティを管理するためのロジックを含めるべきですか? また、リポジトリは集約の永続性の単位であると聞いています。しかし、それはどうですか?これが実際にどのように機能するのか理解できません。IRepositoryCRUDメソッドを含むインターフェイスを1つだけ持つ必要があると考えました。その後、エンティティには、そのような型をデータストアから保存および取得するためのロジックが含まれます。

6
「名前空間を使用する」汚染とは何ですか?
私はグーグルコーディングガイドを見ていました[ここ]、彼らは私がそれを誤解しなかった場合、using namespaceまたはを使用することをお勧めしませんnamespace::function。 これstdは同様に適用されますか?cout<<それなしでは機能しません。この本は、同じことをお勧めします。では、またはなしで使用するにはどうすれcout<<ばusing namespace std;よいstd::cout<<ですか? 推奨される方法は何ですか?std::cout<<?ほとんどのC ++教科書using namespace std;は初心者向けに、コーディングの習慣が乏しいことを教えていますか?
15 c++  coding-style 

3
MVC:モデルとサービスの違いは何ですか?
一部のフレームワークではロジック層が「モデル」と呼ばれるのに対し、一部のフレームワークでは「サービス」と呼ばれるのはなぜですか。それらは互いに異なるのですか、それとも命名規則によってのみ異なるのですか? 更新1 私が求めている理由は、古典的なMVCフレームワークであるZend Frameworkでは、誰もがモデルの概念を使用しているためです。今、私はAngularJSを学んでいますが、Modelという言葉は消えて、serviceという言葉に置き換えられたようです。 私が気づいたのは、サービスは何度も何度も再利用できるシングルトンに似ていることです(例:RESTクライアント)。一方、モデルはMVCパターンのコントローラーからのデータ操作により関連しています。
15 mvc  model  service 

4
MVCのユーティリティクラス-ASP.NET
だから、今日は、ASP.NET MVCアプリのどこにユーティリティクラスを置くのだろうと思っていましたか?ユーティリティクラスとは、静的であり、機能を実行するためだけに使用されるクラスを意味します。引数としてメールアドレス、件名、本文を受け取るメールを送信するクラスのように。 私はおそらく別のフォルダと名前空間を作成するだけで十分だと思いますが、みんなの意見を得たいと思いました

5
潜在的な利害関係者が多すぎるときに開発プロジェクトを開始する方法
私は大学で(唯一の)Webアプリケーション開発者として新しい仕事に就きました。 大学には多くの異種のシステムがありますが、どれもかなりひどくコーディングされたレガシーシステムです。ほとんどがPHPで構築されており、出席、試験結果、採点などを処理します。 私の最初の仕事は、このデータを大量に組み込むシステムを構築することです。現在、さまざまなデータベースに格納されており、それを引き出すためのフレンドリーなAPIはありません(既存のシステムは、データとビューを分離せずにPHPでコーディングされています)学生に関する牧歌的な情報を記録し、教師や上級スタッフに有用な方法で提示するための新しいプラットフォームを使用して、学生に関する問題に迅速に対応できるようにします。 最初の会議では18人が参加しました!多数派を代表する明確なリーダーや声はありませんでした。識別可能なクライアントはありません。会議は、学部長からのマイナーな機能に関する詳細な実装のアイデアから、Excelスプレッドシートをデータ入力に使用すべきかどうかについての議論へと変わりました。 想像できるように、私の頭は最後に回転していました。私は実際にはたくさんの良いアイデアを持っていましたが、それらを聞くことはできませんでした。マーケティング代理店の開発チームの一員になる前、これは私にとって非常に新しい役割です。プロジェクトマネージャー、クライアント、デザイナー、開発者という非常に明確な役割がありました。 経験豊富な開発者やマネージャーが、プロジェクトチームに似たものに同僚を誘い込む方法についての指針を教えてくれるかどうかを知りたいです。アジャイルは進むべき道ですか?すべての異なる声を処理する方法はありますか?いくつかのプロセスを非常に迅速に導入する必要があることは明らかですが、それが何であるかはわかりません。

1
科学計算ライブラリの単体テスト
以前、ユニットテストの経験が少しありました。(軽jor的ではなく)古典的なソフトウェアエンジニアリングプロジェクト:MVC、ユーザーGUI、データベース、中間層のビジネスロジックなど。 m C#で科学計算ライブラリを作成する(そう、C#が遅すぎること、Cを使用すること、車輪を再発明しないことなど)私たちはそれを必要としています)。ソフトウェア開発業界の観点から見ると、これは小さなプロジェクトです。なぜなら、私はほとんど自分で、そして時々同僚の助けを借りて書いているからです。また、私はそれに支払われません、そして最も重要なのは、学術プロジェクトです。つまり、いつかプロ品質になると期待しています。なぜなら、私はオープンソースになることを計画しているからです。 とにかく、プロジェクトは大きくなり(18,000行程度のコードで、1人のプロジェクトにとっては大きいと思います)、手に負えなくなりました。私はgitをソース管理に使用していますが、大丈夫だと思いますが、古い学校のようにテストしています。つまり、主にシステムの大部分をテストする完全なコンソールアプリケーションを作成しています。このシナリオで単体テストを行うことはできますが、それが私がやるべきことだと思います。問題は、ライブラリの大部分がアルゴリズム(たとえば、グラフアルゴリズム、分類器、数値ソルバー、ランダム分布など)であるということです。これらのアルゴリズムのそれぞれに小さなテストケースを指定する方法がわかりません。確率論的正当性を検証する方法がわかりません。たとえば、分類の場合、精度や再現率などの指標がありますが、ただし、これらのメトリックは、単一のアルゴリズムを判断するよりも2つのアルゴリズムを比較する方が適切です。だから、ここで正確さを定義するにはどうすればよいですか? 最後に、パフォーマンスの問題もあります。まったく異なるテストセットを知っていますが、パフォーマンスは、ユーザーの満足度や他のソフトウェアエンジニアリングメトリックではなく、科学ツールの重要な機能の1つです。 私の最大の問題の1つは、データ構造にあります。kd-treeについて考えられる唯一のテストはストレステストです。大量のランダムベクトルを挿入してから、大量のランダムクエリを実行し、単純な線形検索と比較します。パフォーマンスについても同じです。数値オプティマイザーを使用すると、テストできるベンチマーク関数がありますが、これもストレステストです。これらのテストは単体テストとして分類できるとは思わず、最も重要なのは、それらのほとんどがかなり重いため、継続的に実行されることです。しかし、これらのテストを実行する必要があると思います。2つの要素を挿入してルートをポップすることはできません。はい、0-1-nの場合に機能します。 それで、もしあれば、この種のソフトウェアの(ユニット)テストアプローチは何ですか?そして、コードビルドビルドコミット統合サイクルの周りでユニットテストと重いテストをどのように整理しますか?
15 c#  unit-testing 

3
スケーラブルブルームフィルターはどのように機能しますか?
スケーラブルブルームフィルターを読んでいて、構成ブルームフィルターがいっぱいになるたびに、より大きなサイズの新しいブルームフィルターが追加される方法を理解できませんでした。 最初に作成されたフィルターの設定ビットに寄与した要素は、存在を検索できません。おそらく私はこれを理解していないのでしょうか? 基本的なブルームフィルターは理解できます。ただし、動的ブルームフィルターに頭を包むことはできません。

7
x86アセンブリでのNOP命令とalignステートメントの目的
アセンブリクラスを最後に受講してから1年ほど経ちました。そのクラスでは、IrvineライブラリでMASMを使用して、プログラミングを簡単にしました。 ほとんどの指示を終えた後、彼はNOP指示は基本的に何もせず、それを使うことを心配しないと言った。とにかく、それは中間期であり、適切に実行されないサンプルコードがあるため、NOP命令を追加するよう指示され、正常に機能しました。私は授業の後で、なぜそれが実際に何をしたのかと尋ねました。 誰か知ってる?
15 assembly  x86 

6
静的キーワードを理解する
Java、Javascript、およびPHPを使用した開発の経験があります。 Microsoft Visual C#2010 Step by Stepを読んでいますが、C#言語を紹介する上で非常に良い本だと感じています。 静的キーワードの理解に問題があるようです。クラスが静的に宣言されている場合、これまで私が理解していたことから、すべてのメソッドと変数は静的でなければなりません。メインメソッドは常に静的メソッドであるため、メインメソッドが存在するクラスでは、すべての変数とメソッドは、メインメソッドで呼び出す必要がある場合、静的と宣言されます。また、別のクラスから静的メソッドを呼び出すために、クラス名を使用できるオブジェクトを作成する必要がないことに気付きました。 しかし、静的キーワードの実際の目的は何ですか?静的変数とメソッドはいつ宣言する必要がありますか?

5
プレーンなPHPを使用してテンプレートシステムを構築する方法は?
私はstackoverflowでこの質問を読んでいた: /programming/104516/calling-php-functions-within-heredoc-strings そして受け入れられた答えは、このような単純なPHPテンプレートを実行するように言っています: template.php: <html> <head> <title> <?= $ title?> </ title> </ head> <本体> <?= getContent()?> </ body> </ html> index.php: <?php $ title = 'デモタイトル'; 関数getContent(){ return '<p> Hello World!</ p>'; } include( 'template.php'); ?> 私には、template.phpが他のスクリプトで定義された変数に依存するという意味で、上記の構造はうまくありません。また、実行時にコードを実行するためにinclude()をinclude('template.php')使用しています(include()を使用して、すぐには実行されないクラスまたは関数を含めるのとは対照的です)。 テンプレートを関数内にラップするのがより良いアプローチだと思います: template.php: <?php 関数template($ title、$ content){ ob_start(); ?> <html> <head> <title> <?= …
15 php  templates 

4
複数のマシンでGitを使用する
これは少し奇妙に聞こえるかもしれませんが、何らかの方法でネットワーク接続された複数のマシンからGitで作業する良い方法について疑問に思っています。私には2つの選択肢があるように見えますが、両方の利点があります: 共有にはgit自体を使用します。各マシンには独自のリポジトリがあり、それらの間でフェッチする必要があります。 他のマシンがオフラインであっても、どちらのマシンでも作業できます。これ自体はかなり大きいと思います。 マシン間のネットワークで共有される1つのリポジトリを使用します。 コードは常に最新であるため、マシンを切り替えるたびにgit pullを実行する必要はありません。 このマシンでファイル共有を使用して作業を行っていたため、他の非ホスティングマシンからコードをプッシュするのを忘れたことを心配しないでください。 私の直感では、一般的に誰もが最初のオプションを選択します。しかし、私が見る欠点は、常に他のマシンからコードにアクセスできるとは限らないことであり、毎日の終わりにすべてのWIPブランチをgithubにプッシュしたくないことは確かです。また、コンピュータから直接取得できるように、常にコンピュータの電源を入れたままにする必要はありません。最後に、複数のブランチを最新の状態に保つためのすべてのgitコマンドが退屈になる可能性があるという小さな点があります。 この状況に3番目の対処法はありますか?このプロセスを簡単にするサードパーティのツールが利用できる場合がありますか?この状況に定期的に対処する場合、何を提案しますか?
15 git  workflows  dvcs 

4
「状態」の定義
状態変数や状態マシンなどの「状態」を新しい(以前は非)プログラマーに定義する良い方法は何ですか?この概念がソフトウェアの作成に役立つ理由を説明する良い方法は何ですか?状態の概念は、プログラミングコースや書籍の開始時に一般的に明示的に教えられていますか?

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