ソフトウェア工学

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

1
複数のアプリ用のOAuth共有承認サーバー
私のショップには、認証にOAuthトークンを使用する.NET Web APIがいくつかあります。現在、各Web APIは承認とリソースサーバーの両方です。ユーザーは、同じ資格情報を使用してこれらすべてのAPIに対して認証を行いますが、現時点では、各APIに対して個別に認証する必要があります。 共有認証サーバーの作成に興味があります(http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/)、しかし私はクレームの変換に悩まされています。次の例のように、発行されたトークンに(アプリケーションに固有の)カスタムクレームを追加できると便利です。 public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { /* validate credentials here... */ var identity = new ClaimsIdentity("JWT"); identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName)); identity.AddClaim(new Claim("sub", context.UserName)); identity.AddClaim(new Claim(ClaimTypes.Role, "Manager")); identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor")); var props = new AuthenticationProperties(new Dictionary<string, string> { { "audience", (context.ClientId == null) ? string.Empty : context.ClientId …
8 asp.net  oauth2 

1
Nullオブジェクトパターンと入力検証-実際の実装をコピーするか、すべてを黙って受け入れますか?
私が持っているWifiComponent私にはCamera私のクライアントアプリケーションで。カメラのWifi関連の機能を処理します。Cameraは実際のカメラを表します。 これWifiComponentは、有効にすることができます(この場合、接続ステータスのチェックやスキャンなど、それを使って行うことができます)または無効にすることができます(この場合、有効かどうかを確認する以外は、何もできません)。 作成するときCamera、私の中のクライアントアプリケーションを、私はそのかどうかを尋ねるカメラWifiComponent有効になっています。次にWifiComponent、WifiComponentImplまたはの適切なサブクラスを作成しますNullWifiComponent。 supportedWifiTypes()およびwifiScan()メソッドの実装は簡単です。NullWifiComponent任意の種類をサポートしていない、すぐには結果をスキャンしないと発見して行われます。 しかし今、私はbool connect(WifiNetwork network, String password)メソッドを実装する必要があります。接続に失敗したと言いたいのですが...でWifiEncryptionType提供されているものもサポートしていませんWifiNetwork。実際の実装ではIllegalArgumentException、サポートされていないWifiEncryptionTypewifiネットワークを渡すとスローされます。 私は... リクエストをIllegalArgumentExceptionサポートしていないため、スローWifiEncryptionTypeしますか? return false何が提供されていても、接続に失敗します()。 一般的な質問: 実際の実装が契約を満たし、この契約の一部が特定の入力に対して例外をスローすることである場合、null実装はその中立性または契約を優先する必要がありますか?

5
開発テストケース(ユニットおよび開発統合)をQA(テスト)チームと共有しますか?
テストチーム(一部の組織では、いわゆるQAチーム)は、開発チームが(開発チームの)テストケースを彼らと共有する必要があると主張しています。彼らの主張は、開発テストケースがQAテストの出発点であるということです。 開発チームのメンバーとして、私は要求を理解していません。私自身、テスターは要件に基づいてソリューションをテストする必要があります。テストチームを詳細設計(低レベル設計)ドキュメントと共有する必要があるかどうかはわかりません。ただし、詳細設計は共有しています。 私はここでいくつかの投稿を読みました。QAチームは、より良いソリューションとスループットのために、テストケースを開発チームと共有する必要があると述べています。しかし、テストケースをQAテストチームと共有する開発チームはありません。 開発ユニットと統合テストケース、およびテスト結果を共有できれば、QAチームは非常に満足しているようです。

6
TDDを使用する正しい方法がどれなのか混乱しています
TDDの背後にあるアイデアと、チームがTDDを使用する方法を把握しようとしています。NUnit + Moqを使用した次のテストケースがあります(メモリで書き込むだけで、サンプルがコンパイルされるとは限りませんが、説明が必要です)。 [Test] public void WhenUserLogsCorrectlyIsRedirectedToLoginCorrectView() { Mock<IUserDatabaseRepository> repoMock = new Mock<IUserDatabaseRepository>(); repoMock.Setup(m => m.GetUser(It.IsAny())).Returns(new User { Name = "Peter" }); Mock<ILoginHelper> loginHelperMock = new Mock<ILoginHelper>(); loginHelperMock.Setup(m => m.Login(It.IsAny(), It.IsAny())).Returns(true); Mock<IViewModelFactory> factoryMock = new Mock<IViewModelFactory>(); factoryMock.Setup(m => m.CreateViewModel()).Returns(new LoginViewModel()); AccountController controller = new AccountController(repoMock.Object, loginHelperMock.Object, factoryMock.Object) var result = …
8 tdd  mocking 

7
暗黙の要件を処理する適切な方法は何ですか?
新しいソフトウェア製品の研究開発をしています。 経営陣は当然のことながら、明らかに顧客に利点をもたらす主要機能に焦点を当てています。しかし、同様に重要と見なすことができる多くの要件があります(例:パフォーマンス、将来の拡張性、データのトレーサビリティ、セキュリティ、スムーズなUI)。これらの暗黙の要件は、おそらくすべての製品の数が多く、満たされていない場合、顧客を不幸にする可能性があります。 どういうわけか、開発中にこれらのものが自動的に実装されるようになることが予想されます。私にとっては、すべてがそれ自体の注意と開発努力を必要とする原子的な側面です。 経営が忙しくて、そういうところに目が行き過ぎているのではないかと感じています。開発者の誇り、品質管理、および費やした労力を説明できるようにするために、暗黙の要件をいつどのように文書化して伝達する必要がありますか? (つまり、製品に存在するが、顧客または管理者のいずれとも明示的に話し合われていない機能) 明確化 質問に関心をお寄せいただきありがとうございます。これまでの回答の主な要点は次のようです。 「暗黙の要件を明示的にする必要があります。」 ネズミ...それは私には起こりませんでした。 私が意味する要件には、次のタイプがあります。 お客様がこれらの要件について聞くことはできません。私は、製品がどのように満足するかについて話すのではなく、製品が失敗する可能性がある方法の長いリストを提示するからです。 忙しい経営者は、「明白な」機能について話すとき、私は彼らの時間を浪費していると感じています。 実装中は、これらの要件の一部のみを説明できます。計画中、特定の問題は開発中に集中的な努力を必要とするかもしれないと直感するだけかもしれません。 会社のトーテムポールで必要な高さではなく、自分の労働条件を決定している。 本格的な要件よりも労力をかけずに、[暗黙の]要件をセミフォーマル化する方法のガイドラインを求めていますが、判断の準備をしているので、手ぶらで捕まることがありません。

5
Cでデータのタイプをprintf()に通知する必要があるのはなぜですか?
このCコードを考えてみましょう: #include <stdio.h> main() { int x=5; printf("x is "); printf("%d",5); } これで、私たちが書いたときに整数であるint x=5;ことをコンピューターに伝えましたx。コンピュータはそれxが整数であることを覚えておく必要があります。しかし、xin の値を出力するときは、整数であるprintf()ことをコンピューターに再度通知する必要xがあります。何故ですか? なぜコンピュータはそれxが整数だったことを忘れるのですか?
8 c  io  type-safety 

2
STLを複数の共有ライブラリに静的にリンクすることの何が問題になっていますか?
ここにシナリオがあります: libA.soとlibB.soは両方とも同じSTLに静的にリンクします。 libA.soには、std :: stringを返すパブリックAPIがあります。 libB.soはこの関数を呼び出し、文字列のコピーを受け取ります。 文字列のlibB.soのコピーがスコープ外になると、文字列のデストラクタが呼び出されます。 コピーされた文字列を解放しようとするアプリケーションセグメントフォールト。 このように静的にリンクすることは悪いことを他の場所で読んだことがありますが、なぜそれが悪いのかをもっと理解したいと思います。上記のシーケンスがクラッシュする理由を誰かが説明できますか?

1
同じWebプロジェクト内のWebフォームとMVC
私はASP.NET Webフォームを使用して構築された大規模なレガシープロジェクトで作業しており、同じプロジェクトにMVCライブラリを追加するという考えはあちこちに放棄されています。私はこれが可能であることを知っています(たくさんの記事が利用可能です)が、同様のことをした人がこれを推奨するのかどうか、またなぜ推奨しないのか疑問に思っています。 新しいMVCパターンを使用してアプリケーションの新しい領域を構築し、レガシーページを常に実行し続けることができるという考えです。 編集:明確にするために、MVPパターンはこのプロジェクトの一部ですでに使用されているので考慮していませんが、この記事で説明されているものと同様のことをしています:https : //www.simple-talk.com/dotnet/ asp.net/mixing-web-forms-and-asp.net-mvc/

1
べき等のWebサービス呼び出しを実装する方法
私は、「時々接続された」モバイルデバイスが使用するWebサービスレイヤー用のWCFベースのソリューションを開発しています。追加の複雑さのため、サービスは(この段階では)キューイングを使用しないため、単純な要求/応答アプローチを操作します。 もちろん、モバイルデバイスであるため、挿入/更新中にデバイスが信号を失う可能性があります。Webサービス自体がトランザクションを完了した可能性がありますが、クライアントはこのメッセージを受信しません。このため、サーバーは要求を再送信します。その時点で、サーバーはこれを重複要求として認識し、最初のインスタンスで試行したのと同じ応答を返す必要があります。 したがって、私はサービスをべき等にすることを試みています。これを実現するために、RequestIDと、呼び出しを完了するために必要なパラメーターで構成されるRequest Paramter DTOオブジェクトを実装しています。 ただし、リクエストIDを監視する方法を実装するのは難しいです。サービスは現在ステートレスであるため、現在想定できる唯一の方法は、データベースにServiceRequestテーブルを作成することです。これにより、RequestIDがプライマリになります。これを照会すると、クライアントが同じRequestIDを送信するため、要求がすでに処理されているかどうかがわかります。ただし、サービスはどのメッセージを返信するかを知る必要もあります。挿入/更新の場合、影響を受ける集約ルートIDも、リクエストテーブルに直接、またはRequestToObjectLookupテーブルに直接格納する必要があります。 それで、これを実装するためのベストプラクティスの方法があるかどうか疑問に思っていますか?私の考えは、リクエストID、追加情報、および結果オブジェクトIDへの参照(保存/挿入/更新)を格納するServiceRequestテーブル(サービスに固有)を用意することです。そのため、新しいリクエストが来たときに、保存を実行するか、または以前に更新されたオブジェクト(最初のリクエストの試行で実行されたオブジェクト)を返すだけかを問わず、残りのリクエストに進む前にこのテーブルを最初に参照できます。 (述べたように)残りの情報を取得するために関係を使用できるようにする必要があるため、リクエストで参照されるルート集約IDのみを保持する必要があると私は考えています。

2
Vernonによる「DDDの実装」:値オブジェクトかどうか?
この本の382ページに、(エンティティの)ルートの下で、値オブジェクトを集計で使用することについて説明している箇所があります。Product他の値に加えて、エンティティのSet<ProductBacklogItem>コレクションが含まれている例があります。 さて、バーノンはProductBacklogItemエンティティが値オブジェクトではなく、なぜであるかを説明しようとします: ProductBacklogItemが値ではなくエンティティとしてモデル化されるのには、十分な理由があります。値オブジェクト(6)で説明したように、バッキングデータベースはHibernateを介して使用されるため、値のコレクションをデータベースエンティティとしてモデル化する必要があります。要素のいずれかを並べ替えると、かなりの数、またはすべてのProductBacklogItemインスタンスが削除されて置き換えられる可能性があります。これは、インフラストラクチャに大きなオーバーヘッドを引き起こす傾向があります。エンティティーとして、製品所有者が必要とする頻度で、すべてのコレクション要素にわたって順序付け属性を変更できます。ただし、MySQLでのHibernateの使用からKey-Valueストアに切り替える場合は、代わりにProductBacklogItemをValueタイプに簡単に変更できます。Key-Valueまたはドキュメントストアを使用する場合、 リポジトリの実装で、モデルがエンティティオブジェクトまたは値オブジェクトになるかどうかを判断する理由がわかりません。Key-Valueストアに行く場合でも、彼が話している順序が残っている可能性があります。 これは理にかなっていると思いますか?

2
アクセストークンを使用したAPIの設計、GETリクエストの処理方法
さまざまな部門間の使用状況を追跡したり、アクセス制御を行うために、アクセストークンを利用するAPIを構築しています。私の計画は、HTTP動詞を適切に利用することです- GET情報の取得、POST追加、DELETE削除などを行います。 私の質問は、GET呼び出しでアクセストークンをどのように処理する必要があるかです。 オプション1: クエリ文字列の一部としてアクセストークンを提供することです/api/users/?token=ACCESSTOKEN。これで私が抱えている問題は、ACCESSTOKENがサーバーログに表示されることです。このメソッドは、本文を介してトークンが渡されるPOSTまたはDELETEリクエストとも異なります。 オプション2: (POSTリクエストで行うように)リクエストに本文を指定します。パラメータの1つはトークンです。ここでの問題は、社内の他の開発者が、データを渡しているため、これは「真のGETリクエスト」ではないと言っていることです。彼らが呼び出すURLは単純にこのように/api/users/なりtoken=ACCESSTOKEN、本文内に提供されます。 オプション3: 使用GETを中止し、すべてをに強制しますPOST。これらのAPI呼び出しの多くでは、新しいリソースを作成していないため、このアイデアは好きではありません。私は単に、承認が必要なAPIの背後にあるデータを返すだけです。 私が見当たらない、または調整する必要があるオプションはありますか?私はオプション2が好きですが、他の部門の開発者の懸念に敏感です。

9
パンチカードがプログラミングに使用された理由
この投稿を改善したいですか?この質問に対する詳細な回答を提供してください。これには、引用や、回答が正しい理由の説明が含まれます。詳細が不十分な回答は編集または削除される場合があります。 私はプログラミング言語の歴史についての研究エッセイをやっていて、なぜプログラマーがパンチカードで自分のプログラムを書いたのかと思っていました。コンピューターの画面とキーボードは、プログラマーが使用する頃にはすでに存在していませんでしたか? Jacquard織機を使用して目的のデザインを制御するために最初に発明されたのは知っていますが、人々がプログラムするときに、なぜカードにプログラムを書くことに決めたのですか? コンピューターが非常に高価だったので、コンピューターにアクセスできる人が多くなかったため、パンチカードでプログラムを作成し、それを実行する会社や誰か、または組織に提出して結果を伝えていたのでしょうか。

3
ドメイン主導の設計で、主キーを持つデータベーステーブルを値オブジェクトに変換するにはどうすればよいですか?
次のように定義されたデータベーススキーマがあるとします。 Person.mail_address_key ----- Address.address_key Person.billing_address_key ----- Address.address_key A Personには郵送先住所と請求先住所があります。非正規化手法として、別のAddressテーブルを作成します。時間のほとんどは、mail_address_keyおよびbilling_address_key単一のはPerson同じ値になります(例:自分の郵送や請求先住所のキーが同じになります)。 私のデータベースでAddressは、IDがあります(アドレスキー)。しかし、私のドメインモデルではAddress、がエンティティになる説得力のある理由はわかりません。値オブジェクトにしたいのですが。 DDDでは、これはオプションですか?または、値オブジェクトは通常、(テーブルではなく)列のグループですか?データベースがドメインモデルの構造を指示するべきではないと思うので、ここでは悪魔の擁護者を演じています。 もしそうなら、アドレスはどこで/いつ/どのようにデータベースのアイデンティティを失うので、ドメインレイヤーの値オブジェクトとして使用できますか?または、データベース識別子を値オブジェクトに保持することになっていますか? モデルをデータベースに永続化する必要がある場合、プロセスは何ですか?私はa)これらのフィールドでアドレスを検索し、b)存在しない場合は新しいアドレスを作成しますc)存在する場合はフィールドを更新しますか?

4
OOD:Java継承とキャストによる子メソッドへのアクセス
私はいくつかのクラス持っているParentとしChild1... Child9Javaで実装されています。Parent抽象クラスであり、子クラスのすべての共通変数(多くのParent場合、インターフェースではなく抽象クラスを作成した主な理由です)、いくつかの抽象メソッド、およびいくつかの実装されたメソッドを含みます。 一部の子クラスには、それらに固有のカスタムメソッドがあります。ダウンキャストを使用して子メソッドを呼び出すことがよくあります。 Parent p = new Child1(); ((Child1) p).child1SpecificMethod(); どういうわけか、これはOODの悪い習慣だと感じていますが、それが本当にデザインの改善方法であるかどうかはよくわかりません。 -編集- とにかく変更する必要があるのは、多くの(今のところ)共通変数を整理するためにParentクラスを使用し、それらを具象クラスのメンバー(またはコンテナーオブジェクト)にすることです。

4
ネストされたtry / except / elseをクリーンアップする方法は?
コードを書くとき、私はしばしばこのようなことをしたいです: try: foo() except FooError: handle_foo() else: try: bar() except BarError: handle_bar() else: try: baz() except BazError: handle_baz() else: qux() finally: cleanup() 明らかに、これは完全に判読できません。しかし、それは比較的単純なアイデアを表しています。一連の関数(または短いコードスニペット)を、それぞれに例外ハンドラーを付けて実行し、関数が失敗するとすぐに停止します。Pythonがこのコードに構文糖を提供できると思います。おそらく次のようなものです。 # NB: This is *not* valid Python try: foo() except FooError: handle_foo() # GOTO finally block else try: bar() except BarError: handle_bar() # ditto else try: baz() …

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