ソフトウェア工学

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

2
Akkaが同時実行性に優れているのはなぜですか?
私はアッカと俳優のフレームワークに不慣れです-明らかな何かが欠けていると確信しています。事前に謝罪を受け入れてください。 私は、Akkaを選択する際の主なポイントの1つが、並行性の管理方法であることを読み続けています。 Akkaがなぜそれほど特別なのかははっきりしません。私は非常に軽くて速い小さな俳優がたくさんいることを理解しています。ただし、2人のユーザーが同時にフォームを保存する場合、これはどのように役立ちますか? なんらかの並行処理ロック(悲観的/楽観的/その他)はまだ必要ないのでしょうか?

1
ISO-8601の「kk」と「HH」+1の違いは何ですか?
ISO-8601には複数の時間形式があり、そのうちの1つは1〜24時間の「kk」です。 これの目的は何ですか?時間を相殺した国はありますか?軍事用ですか? Wikipediaの記事は、 HHと株式会社との正確な性質を明らかにしませんでした。私の懸念の主な原因は、SimpleDataFormatterでのフォーマットの動作です。 編集:私が言及しているSimpleDateFormatの直接の部分はこれです: H時間(0〜23)数値0 k時間(1〜24)数値24 使用中... HH:mm:ss // 00:00:00 kk:mm:ss // 01:00:00

3
ASP.Netの3層アーキテクチャとMVC(モデル、ビューコントローラー)の違い
3層アーキテクチャがASP.NetのMVC(モデル、ビューコントローラー)とどのように異なるかを知りたいのですが、同じアーキテクチャが適用されるようです。 3階層では、我々は持っているUser Services Layer、BusinessLayerとDataAccessLayer、私たちは持っている一方でModel、View、とController。これは同じアーキテクチャのようです。 2つのアーキテクチャの実際の違い、各レイヤーの違いについて説明できますか?

1
ウェブサイトのバージョン管理:dev / productionフロントエンドファイル
私は私たちのウェブサイトプロジェクトをバージョン管理するためのより良い方法を考えています。私はフロントエンドの開発者にすぎないので、VCSに関する深い知識はありません。 ワークフローは変化しており、過去のバージョン管理の習慣は時代遅れになっています。主な問題は、各Webサイトにフロントエンドファイルの2つの配列があることです。 開発環境(少ないファイル、非圧縮のjs、イメージなど)。「不正な」ビルド環境(すべて圧縮され、人間が読み取れないもの)。 ただし、ソースファイルを含むWebサイトを販売することはできません。まあ、それは完全に正しくないと感じています。 2つのリポジトリを持つソリューションがあります。1つはビルド、1つは開発で、gulpがビルドファイルをビルドディレクトリに送信します。しかし、それを維持するのは面倒であり、小さな会社では、それはそれほど素晴らしいとは思いません。それは多くのレポを作成し、人々はいくつかのレポで、時には1つのsvnレポでさえも管理しなければならず、問題が発生します。 したがって、同じsvn内のソースファイルとprodファイルの1つのリポジトリを持つソリューションもあります。ただし、Webサイトがローカルの開発サーバーから本番サーバーに移動するときに、ソースファイルを削除する必要があります(そのため、単一のリポジトリには、その場所、開発または本番に基づいて異なるファイルがあります)。私が聞いたことから、それは良くありません バージョン管理システムに関して、不適切なフロントエンドワークフローを管理する正しい方法は何ですか?

3
CRUD API:更新するフィールドをどのように指定しますか?
ある種のデータベースに永続化されているある種のデータ構造があるとします。簡単にするために、このデータ構造を呼びましょうPerson。これで、他のアプリケーションがを作成、読み取り、更新、および削除できるようにするCRUD APIを設計する必要がありますPerson。簡単にするために、このAPIが何らかのWebサービスを介してアクセスされると仮定します。 CRUDのC、R、Dパーツのデザインはシンプルです。私はC#のような関数表記を使用します-実装はSOAP、REST / JSON、またはその他の可能性があります。 class Person { string Name; DateTime? DateOfBirth; ... } Identifier CreatePerson(Person); Person GetPerson(Identifier); void DeletePerson(Identifier); アップデートはどうですか?自然なことは void UpdatePerson(Identifier, Person); しかし、どのフィールドを更新するかをどのように指定しますPersonか? 私が思いつくことができる解決策: 常に完全な Personを渡すように要求することができます。つまり、クライアントは次のようにして生年月日を更新します。 p = GetPerson(id); p.DateOfBirth = ...; UpdatePerson(id, p); ただし、そのためには、GetとUpdateの間にトランザクションの整合性またはロックが必要になります。そうしないと、他のクライアントによって並行して行われた他の変更を上書きする可能性があります。これにより、APIがさらに複雑になります。さらに、次の疑似コード(JSONをサポートするクライアント言語を想定)であるため、エラーが発生しやすくなります。 UpdatePerson(id, { "DateOfBirth": "2015-01-01" }); -これは正しいように見えます-DateOfBirthを変更するだけでなく、他のすべてのフィールドをnullにリセットします。 であるすべてのフィールドを無視できますnull。しかし、それを変更しないこと DateOfBirthと、意図的にnullに変更することの違いをどのように作成しますか? 署名をに変更しますvoid UpdatePerson(Identifier, Person, ListOfFieldNamesToUpdate)。 署名をに変更しますvoid …

1
すべてのユーザーの認証済みリクエストをキャッシュする
同じコンテンツをリクエストするために、承認が必要な同時ユーザーの非常に大きなインパルスを処理する必要があるWebアプリに取り組んでいます。現在の状態では、32コアのAWSインスタンスでさえ完全に機能しなくなっています。 (Nginxをリバースプロキシとして使用していることに注意してください) 最悪の場合、JWTをデコードしてユーザーが認証されているかどうかを確認する必要があるため、応答を単純にキャッシュすることはできません。これは、ほとんどが同意するだろうLaravel 4、最大発射たち必要です遅い PHP-FPMとOpCacheが有効になっていても、。これは主に、ブートストラップ段階が多すぎるためです。 「これが問題になることがわかっているのに、なぜPHPとLaravelを最初に使用したのですか?」-しかし、その決定に戻るには今では遅すぎます! 可能な解決策 提唱されている1つの解決策は、LaravelからAuthモジュールを軽量の外部モジュール(Cなどの高速なもので記述)に抽出することです。このモジュールの責任は、JWTをデコードし、ユーザーが認証されるかどうかを決定することです。 リクエストの流れは次のようになります。 キャッシュヒットかどうかを確認します(通常どおりPHPに渡されない場合)。 トークンをデコードする 有効かどうかを確認する 場合は、有効な、キャッシュからサーブ 無効な場合は、Nginxに通知すると、NginxはリクエストをPHPに渡し、通常どおりに処理します。 これにより、このリクエストを1人のユーザーに提供した後はPHPにヒットせず、代わりに軽量モジュールに手を伸ばして、JWTのデコードやこのタイプの認証に伴うその他の警告をいじくります。 このコードを直接Nginx HTTP拡張モジュールとして書くことさえ考えていました。 懸念 私の懸念は、これがこれまでに行われたのを見たことがないことであり、より良い方法があるかどうか疑問に思いました。 また、ユーザー固有のコンテンツをページに追加すると、このメソッドは完全に強制終了されます。 Nginxで直接利用できる別の簡単なソリューションはありますか?または、ワニスのようなより専門的なものを使用する必要がありますか? 私の質問: 上記の解決策は意味がありますか? これは通常どのように行われますか? 同様またはより良いパフォーマンスの向上を達成するためのより良い方法はありますか?

4
実行時にのみ認識される一時的な依存関係の競合にどのように対処しますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 通常、大規模なソフトウェアプロジェクトで実行時に発生する一時的な依存関係の問題にどのように取り組みますか? 過去3週間、私はソフトウェアの別のコンポーネント内で大規模なソフトウェアのコンポーネントを開始しようとしましたが、実行時にのみ知られる一時的な依存関係の問題が原因で断続的に停止します。 一時的な依存関係の問題とは、特定のプロジェクトの依存関係の特定の依存関係が実行時に他の依存関係と衝突し、不安定性や瞬時の障害を引き起こすことを意味します。 何百、何百もの依存関係が使用されており、ツールに関連する約50のサブプロジェクトが他のチームによって分離されており、すべてのモジュールが相互に深くネストされた依存関係を持っています。プロジェクトの規模と複雑さを考えると、誰もがすべてのサブプロジェクトが何に使用されるのかを知りません。 この状況では、影響を受けるコンポーネントの依存関係ごとにDAGの視覚的な表現を生成し、実行時に衝突が発生する可能性のある場所を特定しようとしますか?他のサブプロジェクトで依存関係を管理する方法を制御できず、他の開発者が作成したJavaコードを変更できません 私が思いついたソリューションは、1〜2時間しか機能せず、その後、上流コンポーネントの変更により機能が停止します。上流コンポーネントの例は、私が取り組んでいるプロジェクトが依存する成果物であり、CIパイプラインの初期段階でビルドされます。 他の要求に応じて、使用されているテクノロジーに関する情報を含めます。情報が多すぎるために質問が閉じられたり、身体が長くなりすぎたりするリスクがあります。 Mavenは依存関係管理に使用されます。そして SpringはDIコンテナーとして使用されます。 依存関係の問題のほとんどは、実行時に読み込まれる他のモジュールのコンテキストの結果として、Beanコンテキストの重複を伴​​います 製品は適切に動作し、単体テストのスモールガスド、およびプログラムの機能的な正確さを逃れる統合テストがあります 一般的に、特定のプロジェクトの依存関係の可能なすべての組み合わせを列挙することなく、依存関係の競合を解決する方法を識別するための言語にとらわれないアプローチを探しています。 プロジェクトを再構築したり、品質ゲートを追加したり、会社全体のパラダイムシフトを推進したり、解決策として言語を切り替えたりすることはできません。

2
エンティティの既知のビジネスIDは、DDD / OOPの専用タイプで表す必要がありますか?
実際には、カスタムタイプ(不変)classをstring他のプリミティブ型の上で使用することを意味します。 例: 出版:国際標準図書番号。 金融:国際証券識別番号。 利点: 識別子の形式を確認できます。 モデルのファーストクラスのメンバーになります。 短所: 永続化の摩擦を追加します(例:Entity Framework)。 より多くのコード。

1
TFSに特定のタスクを新しい作業項目に自動的に追加させる方法は?
私たちは職場でTFSを使用して、ソースコードを管理し、開発を追跡しています。 バグややるべきことがあるときはいつでも、少なくとも次の2つのタスクを常に行う必要があります。 作業をテストするか、テストが必要かどうかを判断します。 現在のリリースのリリースノートを更新するか、特定のエントリが必要かどうかを決定します。 他のタスクは、実行中の作業に固有のものですが、新しい作業項目を追加するときに、「テスト」と「リリースノート」を常に入力していることに気づきました。 新しいバグまたは作業項目が作成されるたびにTFSにこれら2つのタスクを自動的に追加させる方法はありますか?まれなケースでは、これらのタスクは不要であり、単にその作業項目に対して完了または削除のマークを付けることができるため、これを自動化することによる影響については心配していません。 私は周りを見回しましたが、PowerShellスクリプトを作成して、欠落しているすべての作業項目にタスクを追加できる可能性があるようです。

7
週次データシリーズ間のトランザクションを決定するためのアルゴリズム?
私は小さなレポートツール(sqliteバックエンド)を開発しようとしています。このツールは「トランザクション」元帳として最もよく説明できます。私がやろうとしていることは、毎週のデータ抽出からの「トランザクション」を追跡することです。 「新規」(または追加)- 抽出によって表示されていないため、アプリがこのリソースを以前に追跡していない可能性があるため、リソースはアプリにとって新しいものです。 「更新」(またはヒット)-そのリソースが最近使用されており、保存期間がもう1週間更新されています。 「削除」(またはドロップ)-このアイテムは、前回のレポート以降、使用されていません(オプションですが、リソースの需要の週ごとの変化をグラフ化するには便利です)。 私が持っているのは、私が制御できないレガシーのアーカイブ/レコード管理システムからの毎週のデータ抽出(パイプ区切りのフラットファイル)だけです。 各行は基本的にこれに蒸留することができます: resource_id | resource info | customer_id | customer_info サンプルデータ: 10| Title X | 1 | Bob 11| Another title | 1 | Bob 10| Title X | 2 | Alice 目標は、(最後のヒットに基づいて)Xか月間使用されていないリソースについて簡単にレポートできるようにすることです。リソースが人気がある場合、アクセスを容易にするためにリソースが保持される保持期間があります。18か月間使用されていないリソースは、他の場所で長期アーカイブ用にマークされています。 これは一般的な問題です。データセット間で何が新しい/同じ/削除されたかを判断するための汎用アルゴリズムがあるかどうか(dbと最新の抽出)

3
クロスランゲージテスト駆動開発
短い質問:複数の言語にまたがるプロジェクトでテスト駆動開発をどのようにフォローしますか? 具体的には、JavaScriptとPHPを使用するWebアプリケーションを作成していて、TDDの原則に従いたいのですが、それらを統合する方法がわかりません。JSセクションとPHPセクションで別々のテストスイートを実行し、JSスイートのモックを使用してサーバーの応答をエミュレートしますか?1回の実行で両方のコンポーネントを単体テストする手法はありますか? これは、テスト駆動開発を使用した私の最初の経験なので、困難を少なくする方法について共有できるアドバイスがあればすばらしいでしょう。私がそれを選んだ理由は、プロトタイプが完成するとすぐに要件が変更され、設計を変更せざるを得なくなったためです。最初からやり直すのであれば、最初から組み込みの回帰テストを使ってより拡張可能なコードを書きたいと思っていました。 PHPテストはSimpleTestで、JavaScriptテストはJsTestDriverで作成しています。私はオブジェクト指向のパラダイムに慣れているので、PHPにはいくつかのクラスがあり、JavaScriptではプロトタイプ継承を使用して同様のことをしています。また、PythonでのTDDに関するこの本とJavaScriptでのTDD に関するこの本も読み始めましたが、これらすべては、Seleniumや別のWebドライバーなどを使用する以外のアプリケーションの完全なテストについては説明していません。フロントエンドの受け入れテストを実行するためにTDDはフルスタックの開発者のために切り取られていないだけですか?

1
C ++シリアライゼーションデザインレビュー
C ++アプリケーションを書いています。ほとんどのアプリケーションはデータ引用を読み書きする必要があり、これも例外ではありません。データモデルとシリアル化ロジックの高レベルデザインを作成しました。この質問は、これらの特定の目標を念頭に置いて、私のデザインのレビューを要求しています: 任意の形式(rawバイナリ、XML、JSONなど)でデータモデルを読み書きする簡単で柔軟な方法を提供する。al。データの形式は、シリアル化を要求しているコードと同様に、データ自体から分離する必要があります。 シリアル化が合理的に可能な限りエラーが発生しないようにするため。I / Oは、さまざまな理由で本質的にリスクが高くなります。私の設計では、失敗する方法が増えているのですか?もしそうなら、それらのリスクを軽減するために設計をどのようにリファクタリングできますか? このプロジェクトはC ++を使用します。好きでも嫌いでも、言語には独自の方法があり、デザインはその言語に対抗するのではなく、その言語で機能することを目指しています。 最後に、プロジェクトはwxWidgetsの上に構築されます。より一般的なケースに適用できるソリューションを探していますが、この特定の実装はそのツールキットでうまく機能するはずです。 以下は、C ++で記述された非常に単純なクラスのセットであり、設計を示しています。これらは私がこれまでに部分的に書いた実際のクラスではなく、このコードは私が使用しているデザインを単に示しています。 まず、いくつかのサンプルDAO: #include <iostream> #include <map> #include <memory> #include <string> #include <vector> // One widget represents one record in the application. class Widget { public: using id_type = int; private: id_type id; }; // Container for widgets. Much more than …
9 design  c++  c++11 

6
クラスAの子オブジェクトのプロパティを参照するクラスAのプロパティを実装する方法
このコードは、簡略化すると次のようになります。 public class Room { public Client Client { get; set; } public long ClientId { get { return Client == null ? 0 : Client.Id; } } } public class Client { public long Id { get; set; } } 現在、3つの視点があります。 1)Clientプロパティは常に設定される必要があるため(つまりnullではない)、これは適切なコードでClient == nullあり、Id値0は偽のIDを示します(これはコードの作成者の意見です;-)) 2)が0偽の値であることを呼び出し元に依存することはできません。Idまた、 Clientプロパティを常に設定する必要exceptionがあるget場合は、Clientプロパティがnullになったときにをスローする必要があります。 3)Clientプロパティを常に設定する必要がある場合は、プロパティがたまたまnullの場合に戻りClient.Id、コードにNullRef例外をスローさせClientます。 これらのうちどれが最も正しいですか?または、4つ目の可能性はありますか?
9 c#  code-quality  null 

1
javadocsのコード例を最新に保つ方法
私は、基本的なよく知られている文字列メトリックの実装を提供する小さなライブラリに取り組んでいます。主に私自身の教育のために。ですから、少し時間があるときに開発が行われます。 このため、私はほとんどのプロセスを自動化しているので、バージョンをリリースするのに、手間をかけずに頻繁に行うことができます。ただし、例が含まれているため、Java docの保守は依然として負担です。 APIが進化するにつれ、各例を手動で繰り返し確認する必要があります。これを行うより良い方法はありますか? ドキュメントと例を別のプロジェクト(Caliperチュートリアルなど)に移動することを検討したので、通常のコードと一緒にリファクタリングしてコンパイルできます。ただし、これにより、ドキュメントが目的のクラスから移動します。 そうそう。ケーキも食べてみたいです。:D * <h2>Tokenization</h2> * * Tokenization cuts up a string into tokens e.g. * <code>chilperic ii son of childeric ii</code> is tokenized into * <code>[chilperic, ii, son, of, * childeric, ii]</code>. Tokenization can also be done repeatedly by tokenizing * the individual tokens e.g. * …

4
誰がバグチケットの重複を排除しますか?
私のチームメイトの一人と私は別々のバグチケットを手に取り、自分たちに個別に割り当てましたが、チケットは重複しています! 重複チケットを解決する最良の方法は何ですか?通常、これはQAリソースによって行われますか?私は、技術者以外の人が「フロー」を中断すると言う2か所で働いてきましたが、開発者へのアクセスが制限されている状況(つまり、基本的に常に)で、技術者以外の人ができることです。

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