ソフトウェア工学

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


5
デスクトップアプリケーションに「管理者パスワード」を提供するためのいくつかの可能な代替策は何ですか?
私は現在、会社で10年以上使用されているソフトウェアを管理およびリファクタリングしています。このアプリケーションの要素の1つは、管理者モードまたはパワーユーザーモードの一種で、追加/内部入力や、入力制限をオフにする機能などを提供します。 歴史的にこのモードは、Windowsシステムディレクトリの特定の場所(どちらもアプリケーションにハードコードされていました)に特定の名前のファイルを配置することでオンになりました。 DLLではなくASCIIファイル。 そこで、最近、ユーザーが管理者パスワードを入力してこの機能をオンにできるようにするコードと小さなモーダルフォームを追加しました。これは設定されたパスワードであり、ユーザー固有ではありません。正しいパスワードが入力されると、アプリケーションのルートディレクトリに「キーファイル」を作成することによって同じことを行い、そのファイルが存在する場合にプログラムが管理モードで起動できるようにします。 今、このソフトウェアが主に使用する部門のマネージャーは、その考えをあまり好きではありません。彼は、単純で事前に設定されたパスワードがあれば簡単に「出て行ける」と考えており、経験の浅いユーザーがこれらの追加機能にアクセスすることを望んでいないと考えています。 だから私の質問は、この種のアクセスを提供するために、いくらか安全な他の方法があるのですか?このソフトウェアの保守と管理に関しては、私だけです。したがって、ほとんど完全に組み込まれていないか自動化されていないものは役に立ちません(たとえば、「ライセンスキー」の要求を送信するなど)。 注:このアプリケーションはVB.NET(.NET 4.0)で記述されており、現在、新しいバージョンが完了したらクリックワンス展開を使用することを計画しています。
10 .net  passwords 

2
データベースのコンテンツに依存するドメインモデルルールをどこで検証しますか?
私は、管理者がフィールドを含むフォームを定義できるシステムに取り組んでいます。定義されたフォームは、システムにデータを入力するために使用されます。フォームは、GUIを介して人間が入力する場合もあれば、別のシステムから報告された値に基づいて入力される場合もあります。 各フィールドについて、管理者はフィールドに許可される値を制限する検証ルールを定義できます。検証ルールは、「フィールドに入力された値はTrueまたはFalseである必要があります」から「フィールドに入力された値はデータベースのテーブルBの列Aに存在している必要があります」まで、任意です。管理者はいつでもフィールドの検証ルールを変更できます。 このシナリオでは、各フィールドが正しく入力されていることを検証するのに最も適した場所は何だと思いますか?私は現在、主に2つのアプローチを考えています。 オプション#1:ドメインモデルで検証する 各フィールドオブジェクトには、管理者が指定した検証ルールが含まれます。Fieldオブジェクトには、IValidatorへの参照も含まれます。フィールドの値を設定しようとすると、フィールドは指定された値と検証ルールをIValidatorに渡します。指定された値が有効でない場合、ValidationExceptionがスローされ、他のシステムへのGUI /インターフェイスで適切に処理されます。 長所: 検証ルールに違反するフィールドが誤って割り当てられたフィールドに対する強力な保護 短所: データアクセスレイヤーは、検証をバイパスし、現在の検証ルールに違反するフィールドを構築できる必要があります。管理者がフィールドの入力規則を変更しても、何年も前に入力されたフォームをレンダリングするときなど、古いデータに基づいてフィールドオブジェクトを構築できる必要があります。これは、フィールドを保存するたびに現在の検証ルールを保存することで解決できる可能性があります。 この設計では、フィールドモデルはIValidatorを介してデータアクセスレイヤー/リポジトリに間接的にリンクしています。ドメインモデルへのサービス/リポジトリの挿入は、一般的には嫌われているようです。 オプション#2:サービスで検証する フィールドの値を設定するすべての試行が、検証ルールが確実に実行されるサービスを通過するようにしてください。検証ルールに違反している場合は、ValidationExceptionをスローします。 もちろん、以前はDBに永続化されていたFieldオブジェクトを作成する場合、データアクセス層はサービスを使用しません。 長所: 「サービス/リポジトリをドメインモデルに挿入しない」という考え方に違反していない。 フィールドを永続化するときに、現在の検証ルールを永続化する必要はありません。サービスは、フィールドの現在の検証ルールを単純に検索できます。履歴データを見ると、フィールドの値は変更されません。 短所: サービスを使用してフィールド値を設定する必要のあるすべてのロジックが実際にそうであるとは限りません。私はこれを大きな欠点だと考えています。誰かが「thisField.setValue(thatField.getValue())」を書いているだけで、thisFieldの検証ルールに違反する可能性があります。これは、データアクセスレイヤーがフィールドを永続化しようとしているときに、フィールドの値が入力規則と一致するようにすることで軽減できる可能性があります。 私は現在、オプション#2よりもオプション#1を好みます。これは主にこれをビジネスロジックと見なしており、オプション#2がシステムに不正なデータを導入するリスクが大きいと感じているためです。どちらのオプションを選択しますか、またはこのシナリオに適合する、説明した2つのオプションよりも優れた別のデザインはありますか? 編集(検証の複雑さ) 現在のところ、検証ケースは比較的単純です。フィールド値は、数値、日付、時刻付きの日付、またはデータベース列の既存の値である必要があります。ただし、時間の経過とともに複雑さが徐々に増加すると思われます。たとえば、検証ソリューションは国際化を念頭に置いて構築する必要があります。日付などはロケール固有の構文で入力できます。 ここでは、オプション1に進むことを決定しました。ドメインモデルに多くの責任を割り当てないように注意してください。同様の状況に直面している人は、関連する質問を確認することもできます。階層化アーキテクチャでの検証と承認およびデータ入力検証-どこですか?いくら?。

5
CプログラマーがK&Rを読んだことの利点はありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 現在、カーニガン&リッチーのCプログラミング言語(K&R)を読んでいるので、この質問は私を悩ませてきましたが、私は多くの人と出会いました。 だから、私の質問は:K&Rを読むことには利点がありますか?必需品でしょうか?
10 c 

1
2つの文字列に一致しますが、ある程度のエラーを許容します
どうすれば2つの文字列を一致させることができますが、同時にX文字の文字が一致しない場合があります。エラー数は制御可能な変数である必要があります。 X個の文字が文字列内で一致することはできませんが、シーケンス内で実行される文字数には制限があります。2つの文字列が与えられた場合、5文字が異なることを許可する可能性がありますが、連続して2文字を超えることはできません。 私はこれらの2つの文字列を比較するための推奨アルゴリズムを探しています。または、これに対する既知の解決策がすでにあるかもしれません。

4
Team Foundation Serverへの移行を評価する方法
私の開発チームは現在、ワークフローで次のソフトウェアを使用しています。 ジラ Bamboo(アトラシアン連続統合) Greenhopper(アトラシアンのアジャイルプロジェクト管理) 合流 Git、BitBucketでホスト Visual Studio 2012 ご覧のとおり、私たちはアトラシアンのエコシステムにかなりの投資をしています。コードレビューなどの高度なVisual Studioインテグレーション、さらに重要なことにはMicrosoftテストマネージャーを利用できるように、TFSへの移行を検討しています。 私の以前のTFSの経験は2005年または2008年でした(覚えていません)。ClearCaseでの時間ほど悪くはありませんが、それについては悪い思い出があります。 TFSへの移行を適切に評価するために、どの基準を検討する必要がありますか?

3
妥協する必要があります:DRY、またはCommand-Query-Separation?
私は最近、コマンドとクエリメソッドの両方であるメソッドをリファクタリングしていました。 それを1つのコマンドメソッドと1つのクエリメソッドに分離した後、コマンドを呼び出してクエリから値を取得するコード内の複数の場所があり、これはDRYの原則に違反しているようです。 しかし、その一般的なコードをメソッドにラップすると、そのメソッドはコマンドとクエリの両方になります。これは受け入れられますか?

5
フロートを比較するとき、違いのしきい値を何と呼びますか?
私は現在Javaで浮動小数点数を比較しています。最も簡単な式は次のとおりです。 Math.abs(a - b) < THRESHOLD 差異のしきい値として変数に名前を付ける場合、デルタまたはイプシロンのどちらに名前を付ける必要がありますか?具体的には、浮動小数点数が表すことができる最小値の正しい項はどれですか。 プログラミング言語という用語は特定のものですか、それとも言語間で共通ですか?
10 math 

3
小さなバグ修正と小さな機能のどちらが良いですか-チケット番号でブランチに名前を付けるか、機能の説明でブランチに名前を付けますか?
私は適切なブランチの命名について私のリードとの不一致(もちろん、コーディアル)の真っ最中です。これは、バグ修正と小さな機能ブランチに適用され、長時間実行される機能ブランチには適用されません。長期間実行される機能ブランチの場合、人間が読める名前の方が優れていることに同意します。2つの視点があります。 私の: チームとチケット番号に従ってブランチに名前を付けた方が良いです。チケットシステムでそれらを見つけやすくなり、入力が短くなります。また、チケットに関する履歴情報を検索するときに、GITで関連するブランチを簡単に検索できます。 例: team-name/12345 team-name/53719 彼: 機能/機能に従ってブランチに名前を付けます。オートコンプリートが簡単になり、個々の数字より覚えやすくなります。 例: team-name/fix-that-sql-bug team-name/expand-http-parser 私が提供した1つの妥協点は次のとおりです。 team-name/12345-fix-that-sql-bug しかし、GITのオートコンプリートに干渉するため、彼はこれを好みません。 これが主に意見に基づいている場合は、これがどのようにSOに適しているかについてのガイダンスを遠慮なく教えてください。

2
カードゲームをどのようにデザインしますか?
私のカードゲームには良いアーキテクチャが思いつきません。ゲームの通常の設計方法を理解するのに助けが必要です。 まず、ゲームのルールについて説明します。 ゲームのルール セットアップ 4人のプレーヤーがいて、各2人がチームを形成します。 各プレイヤーは12枚のシャッフルカードを取得します テーブル(川)に4枚の盲目カードがあります プレイヤーの注文はこんな感じ 賭け 各プレーヤーは、100から160までの現在の賭けより大きい数をパスまたは選択できます 賭けは最初のプレーヤーから始まり、チームが合格するまでサークルします プレイヤーがパスすると、もうベットすることはできません ベッティングラウンドに勝ったチームは、ゲームに勝つために、少なくとも自分のベットに等しいポイントを集める必要があります。 ベッティングラウンドに敗れたチームは、チームが目標を達成することを許可してはなりません。 ベッティングラウンドに勝ったチームがすべてのポイントを取得した場合、他のチームは自分のベットに等しいマイナスのポイントを取得します ベッティングラウンドに敗れたチームがすべてのポイントを集めた場合、他のチームはダブルのマイナスポイントを獲得します ゲームの流れとポイントの収集 ベッティングラウンドに勝ったプレーヤー(キング)は、テーブルに残っているカードを4枚受け取ります。 その後、4枚のカードのセットを、プレイすることなくチームカードバンクに保存できます。 王は定規スーツとしてスーツを選び、他の人にそれを知らせます キングは手札のカードをテーブルに置くことからゲームを開始します。他の各プレーヤーはこの順序でプレイする必要があります 手札に同じカードのスーツがある場合、それらのカードの1つをプレイする必要があります。 彼らが持っていない場合、彼らは他のスーツをプレイすることができます 他のすべてのプレーヤーがハンドをプレーした後、ラウンドの勝者は次のようになります。 すべてのカードが同じ場合に最も高いカードを持っている人 「ルーラー」カードがある場合、最も高いカード ラウンドの勝者はカードを集めて銀行に置きます 前のラウンドに勝ったプレーヤーは次のラウンドを開始します これはみんなの手が空になるまで続きます カウントポイント 各ラウンドでの勝利は5ポイントです。これは、4枚のカードごとに少なくとも5点あることを意味します。 バンクにエースが10、5いると、それぞれ5ポイントが加算されます 私のデザイン クラス class Card { string suit; string rank } class Deck { List cards = []; List …

4
node.jsはバックグラウンド処理に適していますか?
私はゆっくりと学習node.jsしていて、始めたい小さなプロジェクトがあります。プロジェクトには多くのバックグラウンドプロセス(外部サイトからのデータのダウンロード、CSVファイルの解析など)があります。 私とノードにとって大きな「勝利」は、クライアントとサーバーの両方にJavaScriptを使用していることです。私は日々の仕事でJavaとJavaScriptでコーディングしていますが、Rubyもかなり得意です。 しかし、私が言ったように、どこでも1つの言語を使用することは魅力的であり、JSはその法則に適合しているようです。 ただし、私はJSを使用してバックグラウンドジョブを実行する経験があまりありません。Rubyはこれに優れているようです。そして、私はそれを使うことに反対していません。では、これを100%JSにすることについてどう思いますか?非常に大きなプロジェクトにはカスタムソリューションが必要であることに気づきました。努力するだけの価値があるのか​​と思っています。それとも、そのような雑用にはRubyだけを使うべきでしょうか? ご意見をお寄せください。 ありがとう

4
乱数発生器は、同じシードが与えられても、異なる出力を生成できますか?
タイトルはそれを要約します。DateTime.Nowや、光センサーなどから生成された数値など、他のソースのランダム性に依存せずに、同じ入力が与えられた場合に可変出力を生成できるアルゴリズムが存在するかどうかを知りたい。さらに、アルゴリズムを実行できない順番に、異なる出力を生成する2つの異なる無関係な実行。
10 random 

3
HATEOASを使用してRESTサービスを発見するための戦略はありますか?
HATEOAS制約を使用してRESTサービスを構築する場合、リンクを介してリソースの存在を宣伝するのは非常に簡単です。あなたGETは私のサイトのルートにa を作成し、私はすべての第1層リソースをリストするルートドキュメントで応答します。 { users: { href: "/users" } questions { href: "/questions" } } これらのhref値の読み取り方法を理解しているクライアントは、これらの値に対してGET要求を実行し、アプリケーションで使用可能な現在のすべてのリソースを発見できます。 これは基本的なルックアップシナリオではうまく機能しますが、リソースがクエリ可能かどうかは示しません。たとえば、次のことを実行するのが妥当な場合があります。 GET /users?surname=Smith リソースの事前の知識がなくても、クライアントが一貫したクエリを形成できる十分な情報でこのクエリ機能を表現できる形式はありますか? さらに、クライアントがPOST期待された場所で特定の場所への実行を許可されていることを表現する方法はありますか。たとえば、クライアントが新しい質問リソースを作成するために以下を実行することが期待できます。 POST /questions { title: "Are there strategies for discovering REST services using HATEOAS?", body: "When building a REST service with the HATEOAS constraint, it's very..." } 人間が使用する形式としてHTMLを使用する場合、フォームとプロンプトを使用してこれを多く表現し、サービスで実行できる操作を人間が発見できるようにすることができます。 クライアントにとって同様のことができるフォーマットはありますか?
10 design  rest  hateoas 

7
スケーラビリティについて考え始めるのはいつですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 面白いけどひどい問題があります。新しい(iPhone)アプリを起動しようとしています。これは、自分のカスタムバックエンドで実行されるターンベースのマルチプレイヤーゲームです。しかし、私は立ち上げることを恐れています。 どういうわけか、私はそれが何か大きなものになるかもしれないと思います、そしてその人気は私の貧しい孤独な単一サーバー+ MySQLデータベースを殺すと思います。 一方では、それが成長している場合は、準備を整えて、スケーラブルなインフラストラクチャーをすでに準備しているほうがよいと考えています。 一方、私はそれを世界に送り出し、何が起こるかを見たいと思っています。 私は「時期尚早な最適化がすべての悪の根源である」などの記事をよく読んだり、ツールを手元に置いて今すぐキラーゲームを構築し、後でスケーラビリティなどの他のことについて心配するべきだと言っています。 私はこれについて専門家やこれを経験した人からこれについていくつかの意見を聞きたいです。ありがとう!

2
ゲームの成果を検出するにはどうすればよいですか?
私は誤ってこれをstackoverflowに投稿し、そのサイトの提案に基づいてここに投稿しました... これは非常に高レベルの概念的な質問です。ソフトウェアアプリケーションで、「アップロード」、「共有」、「コメント」など、4つの異なるアクションがあるとします。 そして、私は次のようなユーザーに達成バッジを与えたいです: 新人-最初の5つのファイルをアップロードする Junkieをアップロードする-1日に20個のファイルをアップロードする ナイトクローラー-午前0時以降にファイルをアップロード Share-a-holic-10種類のファイルを共有する すべてが好き-20種類のファイルが好き あなたはアイデアを得ます。ユーザーが特定のアチーブメントを達成したかどうかをチェックして、達成のためのロジックをコードにコンパイルする必要がないかどうかを確認する最良の方法は何ですか?そして..-コンパイル後に新しい実績を追加する機能を保持します(xmlまたはdb)-実績は特定のアクション、回数、および追加の基準(時刻など)を追跡する必要があります-検出はほぼリアルタイムであるため、ユーザーに通知されます実績が完了するとほぼ瞬時に 私の最大の質問は、達成されているこれらの成果をどのように検出するかです。私は: 1)すべてのアクションの後で、...(ほとんどリアルタイム)かどうかを確認します。2)別のプログラムに、一連のルールに照らして常にDBをチェックさせますか?(最も簡単) 私が見逃している別のパラダイムはありますか?多くのゲーム(iOSのjetpackなど)では、ロックを解除した瞬間にロックを解除した実績が通知されるので、間違いなくあると思います。非常に印象的でした。 ありがとうございました

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