ソフトウェア工学

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

7
Cの任意のブロックの慣用的な使用とは何ですか?
ブロックは、実行されるステートメントのリストです。ブロックがCで現れる場所の例は、whileステートメントの後とifステートメントです while( boolean expression) statement OR block if (boolean expression) statement OR block Cでは、ブロックをブロック内にネストすることもできます。これを使用して変数名を再利用できます。「x」が本当に好きだとします int x = 0; while (x < 10) { { int x = 5; printf("%d",x) } x = x+1; } 5を10回印刷します。変数名の数を少なく保つことが望ましい状況を見ることができたと思います。おそらくマクロ展開で。ただし、この機能が必要な理由はわかりません。誰でも私がこの機能の使用法を理解するのを手伝ってくれますか?
15 c  syntax 

1
機械学習は検索エンジンの設計にどのように組み込まれていますか?
現在、Apache Luceneに基づいた小さな社内検索エンジンを構築しています。その目的は簡単です-いくつかのキーワードに基づいて、社内で書かれた記事を提案します。基本メトリックとしてかなり標準的なTF-IDFスコアリングを使用しており、その上に独自のスコアリングメカニズムを構築しています。これらのすべては、ランキングがめちゃくちゃになっているように見えるいくつかのコーナーケースを除いて、うまく機能しているようです。 したがって、私がやろうとしているのは、検索結果ページに小さな関連/非関連リンクを追加して、その結果が最初に含まれるべきかどうかの認識に応じてユーザーがそれらのいずれかをクリックできるようにすることです。 私のアイデア これらの関連/非関連をラベルとして扱い、トレーニングデータを作成します。 このデータを使用して分類器(SVMなど)をトレーニングします このモデルを検索エンジンに組み込みます。つまり、新しい結果はすべて分類子を通過し、関連性があるかどうかのラベルが割り当てられます。 このアプローチは直感的に思えますが、実際に機能するかどうかはわかりません。私には2つの具体的な質問があります。 すべての機能を抽出する必要がありますか? 機械学習コンポーネントを検索エンジンに統合するより良い方法はありますか?私の最終目標は、ビジネスロジックとユーザーフィードバックの両方に基づいてランキング関数を「学習」することです。

5
カプセル化を壊さずに依存性注入を使用できますか?
ここに私のソリューションとプロジェクトがあります: BookStore (ソリューション) BookStore.Coupler (プロジェクト) Bootstrapper.cs BookStore.Domain (プロジェクト) CreateBookCommandValidator.cs CompositeValidator.cs IValidate.cs IValidator.cs ICommandHandler.cs BookStore.Infrastructure (プロジェクト) CreateBookCommandHandler.cs ValidationCommandHandlerDecorator.cs BookStore.Web (プロジェクト) Global.asax BookStore.BatchProcesses (プロジェクト) Program.cs Bootstrapper.cs: public static class Bootstrapper.cs { // I'm using SimpleInjector as my DI Container public static void Initialize(Container container) { container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>), typeof(CreateBookCommandHandler).Assembly); container.RegisterDecorator(typeof(ICommandHandler<>), typeof(ValidationCommandHandlerDecorator<>)); container.RegisterManyForOpenGeneric(typeof(IValidate<>), AccessibilityOption.PublicTypesOnly, (serviceType, …

3
高階関数の命名規則?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 高階関数の命名規則はありますか?つまり、他の関数を返す関数です。 JavaScriptの例: function onlyDivisibleBy(div) { // <-- higher order function return function (n) { return n % div === 0; } } var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9] arr.filter(onlyDivisibleBy(5)); // [0, 5] 私はそれを上記のように書く傾向がありました:つまり、呼び出しポイントでの読みやすさの最適化(上記の最後の行を「配列をフィルターして5で割り切れる項目を取得する」と読みました)使用されているコンテキストから、この関数がその名前から何をするのかを理解するのはそれほど簡単ではありません。

1
マルチスレッドを使いすぎているかどうかはどうすればわかりますか?
現在、マルチスレッドを使いすぎているように感じます。 A、B、Cの3種類のデータがあります。 それぞれAを複数に変換できB、それぞれBを複数に変換できますC。 私はCsの治療にのみ興味があります。 これは、いくつかの変換関数を使用してかなり簡単に作成できます。しかし、スレッド、3つのキュー(queue_a、queue_bおよびqueue_c)で実装することに気づきました。異なる変換を実行する2つのスレッドと1つのワーカーがあります。 ConverterA読み取りqueue_aおよび書き込みqueue_b ConverterB読み取りqueue_bおよび書き込みqueue_c Worker 各要素を処理します queue_c 変換は平凡であり、このモデルが複雑すぎるかどうかはわかりません。しかし、私には非常に堅牢なようです。各「コンバーター」は、データがキューに到着する前でも動作を開始でき、コード内の任意の時点で新しいAsまたはBsを「送信」するだけで、ワーカーによってジョブをトリガーする変換パイプラインをトリガーします。糸。 結果のコードでさえ、よりシンプルに見えます。しかし、単純なスレッドを悪用しているかどうかはまだわかりません。

1
マイクロソフトがIronRubyとIronPythonを放棄したのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 数年前、MicrosoftはRubyとPythonが.netに登場することを発表しました。プロジェクトはそれぞれIronRubyおよびIronPythonと呼ばれていました。Microsoftは、プロジェクトは.net DLRの上に構築されると述べた。 WIKIpediaは、すべての意図と目的のために、これらのプロジェクトがマイクロソフトによって放棄されたことを示しています。 なぜマイクロソフトはこれらのプロジェクトを放棄したのですか?
15 .net  python  ruby  microsoft 

2
手順として実装されていない継続の例は何ですか?
SOに関するコールバックと継続の区別に関する興味深い議論がこの質問を促しました。定義上、継続とは、計算を完了するために必要なロジックの抽象的な表現です。ほとんどの言語では、これは継続的な処理が必要な値を渡す1つの引数プロシージャとして現れます。 純粋に関数型の言語(すべての関数が純粋でファーストクラスの市民である場合)では、継続は関数として完全にモデル化できると思います。これは、結局のところ、これまでの継続を私が以前に理解していた方法です。ただし、世界は状態(ため息)でいっぱいです。したがって、一般的な定義では、継続がプログラムの状態をキャプチャする必要はありません。 私の理解を助けるために、継続が関数よりも抽象的な方法で表現されている関数型言語で例を提供できますか?Schemeを使用すると、現在の継続をファーストクラスの方法(call / cc)で取得できることはわかっていますが、それでも、call / ccに渡される1つの引数プロシージャには、現在の継続が別の形式で与えられているようですcall / cc'd関数が結果を適用できる引数手続き。

9
Cの学習はコンピューターサイエンスに不可欠ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私はフロントエンドの開発者で、ファイルの拡張子.hや.c拡張子をほとんど見ていません。私は基本的なC構文を知っています。Unrealityで学習しましたが、単純なことにはあまりにも多くのセットアップが必要だったため、このような低レベルのプログラミングには興味がありませんでした。 コンピューターサイエンスのすべての側面を学ぶことに非常に興味がありますが、コンピューターサイエンスの概念のほとんどを理解するために特定の言語を実際に知る必要はないと信じたいです。しかし、データ構造やアルゴリズム設計などのコンピューターサイエンスの基本的な概念に関する本や記事を読み始めると、すべての例とレッスンさえもC(そして時にはJava)で書かれているため、Cを学ぶ必要があるようです。 私の質問は、Cはコンピューターサイエンスに不可欠なプログラミング言語ですか、それともたまたまCで書かれたすべてのリソースをCで作成したのでしょうか?Cを学習せずにコンピューターサイエンスを学習できますか?

5
スクラムは、新しいコンパイラバックエンドを実装するときに意味がありますか?
新しいプラットフォームに移植する必要がある既存の言語があります。既存のコンパイラのバックエンドを変更することで、おそらくこれを試みます。 バックエンドを書き直すのはかなりの作業です。INVEST基準に違反することなく、これを理にかなったストーリーに分解する方法はありません。 各ストーリーがどのように交渉可能であるかはわかりません-それらはすべて、動作するコンパイラに必要です。ストーリーの優先度はすべて同じであり、配信する順番は関係ありません。それらすべてを行う必要があります。 私が実装しているソフトウェアには、他の部分より優先度が低い部分があり、それを段階的に提供できることがわかります。ただし、Must Haveという重要なコアがあります。 私はスクラムを追いかけようと計画していますが、私はただ動きをしているだけですか? この種のプロジェクトに推奨されるプラクティスはありますか?

6
ウェブサイトとパスワードが安全であることをユーザーに保証する方法[非公開]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 信頼できるWebサイトでは、「すべてのデータは暗号化されています」または「すべてのパスワードは128ビット暗号化を使用して暗号化されています」などのクレームが常に表示されます。 私のウェブサイトでは、SHA-512(ほとんどの場合)ハッシュをランダムソルトで使用した後、すべてのユーザーパスワードをデータベースに保存します。パスワードが必要であるためにWebサイトの使用を妨げないように、パスワードが安全であることをユーザーに保証するスニペットを追加します。ユーザーに安全を感じてもらいたいのですが、ハッシュとは誰もが知っているとは思いません。 私の質問:「すべてのパスワードは暗号化され安全です」というメッセージを提供しても大丈夫ですか?平均的なユーザーはハッシュと暗号化の違いを知っているとは思わないので、見ているだけで安全だと感じる可能性が高い慰めの言葉「暗号化」?または、提供する必要がある代替メッセージはありますか? ちなみに、私は暗号化とパスワードハッシュが初めてであり、サイトを立ち上げた時点でこれで十分であるかどうか疑問に思っていました。安全でない場合は安全だとユーザーに伝えたくありません。どんな情報でも大歓迎です。ありがとう。

2
コンパイラーは、再帰ロジックを同等の非再帰ロジックに変換できますか?
私はF#を学んでおり、C#をプログラミングしているときの考え方に影響を与え始めています。そのために、結果が読みやすくなると感じたときに再帰を使用していましたが、スタックオーバーフローに巻き込まれることを想像できません。 これは、コンパイラーが再帰関数を同等の非再帰形式に自動的に変換できるかどうかを尋ねることになりますか?

4
自動ログインを安全に実装する方法
私は多くの、多くの、読んだ多くの「あなたはおそらく間違ったパスワードを保存している」方法についての記事を。これらは常に、ユーザーがログインしているサーバーにパスワードを保存することを指します。基本的に、パスワードなどを確実にソルトするなど、ユビキタスなアドバイスを再ハッシュします(ただし、クライアントがログインする必要がないように、パスワードをクライアントに保存するためのベストプラクティスに関する記事を見たことはありません)ログインするたびに手動で。「私を記憶する」機能。 ブラウザからDropboxなどのプログラムまで、多くのソフトウェアにこの機能があります。 最近、DropboxがコンピューターにIDを保存する方法に関する古い記事を読みました。別のコンピューターにコピーして貼り付けてDropboxを起動し、IDを取得したデバイスとしてログインできます。ログインもなし、Dropboxアカウントへのフルアクセスもありません。これは本当にばかげたデザインのように思えますが、それを行うより良い方法は考えられません。 クッキーのようなものをプレーンテキストで保存しないようにする方法すらわからない。暗号化する場合、暗号化を解除するためのキーはどこに保存しますか? セキュリティの脆弱性を導入しない唯一の方法は、自動ログイン機能を削除し、ユーザーがサービスを使用するたびにパスワードを入力するようにすることですが、それは使い勝手が悪く、ユーザーはそうする必要がないことを期待して甘やかされています。 自動ログイン機能を実装するために、資格情報を安全にローカルに保存することについて何を読むことができますか?原則が記事全体に対して単純すぎる場合、それらは何ですか?問題のソフトウェアは、すべてのプラットフォームに存在しない機能(一部のLinuxディストリビューションにある「キーチェーン」など)に依存すべきではありません。
15 security  login 

5
(受け入れ)テスト駆動開発の相対的なコスト効率
ソフトウェア開発に対するより伝統的なアプローチとは対照的に、プロジェクトの要件と設計が自動化された受け入れテストと単体テストによって駆動される場合、ソフトウェアプロジェクトに対するリソース計画の全体的な影響を知りたいと思います。 あなたの経験では、「従来の」開発方法論とは対照的に、TDDの下でソフトウェアプロジェクトを完了するためのリソース要件に対する全体的な影響は何ですか?品質が向上し、テストが早期に行われるため不確実性の量が減少することは自明のように思えますが、事前にテストを行う必要があるため、開発者により多くの時間を費やす必要があります。バグを事前に排除することにより、開発の労力はどの程度増加しますか、実際に減少しますか? 顧客からどれだけの労力が必要ですか?特に前もって大きなデザインに慣れている場合は、プロジェクトとの関係を変える必要がありますか?顧客全体の所要時間は増加しますか、それとも実際に減少しますか? TDDプロジェクトの開始時の反復TDDプロセスでは、ソフトウェア開発計画がないため、時間の見積もりが非常に曖昧になると思います。たとえば、プロジェクトに20%のポイントがあり、ある程度安定した時間とお金の見積もりを最終的に顧客に提供できるほど信頼性が高まりますか? 注:ここでは主観的な意見や理論を探しているわけではありませんので、推測しないでください。TDDでの実際の経験をもっと探しています。
15 tdd  estimation 

3
SOAサービス構成は実際に機能しますか?
SOAサービスの主要な設計原則の1つは、サービスの構成可能性の原則(https://en.wikipedia.org/wiki/Service_composability_principle)です。 アイデアは、既存のサービスを構成要素として使用して新しいサービスを構成することにより、新しいサービスを迅速に開発できるということです。新しいメソッドを実装するときにオブジェクトのexisingメソッドを呼び出す方法に似ています。これは、SOAによる生産性の向上の多くがもたらされることになっている場所です。 実際に誰かがこれを実際にしていますか?私はこれを文章で延々と繰り返してきましたが、実際の実装を実際に経験したことはありません。また、ほとんどのテキストでは、トランザクション処理に関する記述が省略されています。これは、構成可能なサービスを実現する上で最大の障害であると思われます。 最初に、重要なサービスを作成する前に、トランザクションの問題に取り組む必要があります。もちろん、例にサービス「findCurrentTime()」および「writeLogMessage()」がある場合、トランザクションについて心配することは簡単ですが、「depositMoney()」および「withdrawMoney()」などの実世界の例を持っている場合はそうではありません。 私は2つのオプションを知っています: WS-Atomic Transactionなどを使用して実際のトランザクションを実装する Aへの呼び出しを「cancelA()」またはBへの呼び出しが失敗した場合に何らかの補償を行う補償ベースのソリューションを実装する これらは両方とも非常に問題があるように思われます。 WS-Atomic Transaction 多くの複雑さのは、私は警告したことが最もアドバイス「お尻の痛みは、それを行ういけません」 サポートは制限されています。たとえば、オープンソースのESBを使用する場合、ServiceMix、Mule、またはWSO2の主要な代替はサポートしません 補償 補償の処理を実装することは私にとって非常に複雑に思えます。サービスAが成功し、サービスBから回答を得られず、失敗したか成功したかわからない場合はどうすればよいですか?このようなロジックを(合成サービスの実装者として)手動で処理すると、手首を切り裂きたいと思うようになります。 また、重要なサービスで補償方法を使用する方法もわかりません。サービスAが「depositMoney()」で成功した場合、他のアクションがすぐに別の場所に送金し、「compensateDepositMoney()」を受け取ったとします。ワームの大きな缶のようです。 私にとっては、サービスの構成は非常に基本的なSOAの原則であるため、サービスを(便利に)構成できない場合は、SOAの利点を実際には得られないようです。。現実は何ですか?90%のSOAユーザーは、実際のサービスを使わずに「暗号化されたSOA」を使用していますか?または、ほとんどのユーザーが実際にサービス構成を使用しており、その難しさを誇張していますか?

5
ラムダ計算におけるλx.λf.fx(逆適用のような)の名前は何ですか?対応する関数にはプログラミングの標準名がありますか?
ラムダ計算におけるλx.λf.fxの名前は何ですか? 対応する関数は、Haskellのような関数型プログラミング言語の標準名を持っていますか? オブジェクト指向プログラミングではfoo、引数として関数を受け取るメソッドに通常の名前がありx.foo(f)ますf(x)か?

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