ソフトウェア工学

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

13
プログラマーがISO標準を無視するのはなぜですか?[閉まっている]
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私がよく遭遇することの1つは、ISO標準に準拠していないプログラムによって引き起こされる問題です。 1つの例は、ISO国テーブルを使用せず、独自の短縮形を作成することです。これは、米国(米国)またはオランダ(NL)には問題ありませんが、英国(GBではなく英国)またはスペインには見事に間違っています。 (ESではなく、SP)および他の多くの国。 別の例として、内部日付表記。なぜ誰もが日付を2014年1月2日として保存するのでしょうか?それが2月1日であるか1月2日であるかは完全に不明ですが、ISO標準を使用する場合は2014-02-01 *のみを保存し、2月1日であることは明白です。 私の質問:ISO規格が利用可能な場合、プログラマーはいつ、なぜ独自の構成を作成する必要がありますか? * 2014-02-01を保存し、エンドユーザーに表示するときに日付を適宜フォーマットします。

5
データベーステーブルはいつタイムスタンプを使用する必要がありますか?
まず、この質問はデータベース交換に属していると思いましたが、データベースよりもプログラミングソリューション全体に関連していると思います。人々がそれを最高だと思うなら、データベース交換に移行します。 データベーステーブルに作成および更新されたタイムスタンプをいつ追加する必要があるのか​​疑問に思いましたか? 最初の明らかな答えは、何かが更新されたとき(トランザクション完了日など)をビジネスロジックが知る必要がある場合、それを入力する必要があるということです。 しかし、非ビジネスロジックの場合はどうでしょうか。たとえば、いくつかのビジネスロジックが失敗し、関連するデータベースの行を確認して、1つの行が更新される前に識別することができるなど、障害の検出に役立つように行が変更された日時を知ることが本当に役立つシナリオを考えることができますエラーの原因となっている別の行。 このユースケースでは、すべてのテーブルに更新を与えてタイムスタンプを作成することは理にかなっています(アプリケーションのどの部分によっても更新されない最も単純な列挙テーブルを除く)。 すべてのテーブルにタイムスタンプを与えることは、間違いなくデータベースをすぐに停止させる素晴らしい方法です。 それでは、データベーステーブルはいつタイムスタンプの作成と更新を使用すべきですか?

4
キャストとはどういう意味ですか?
CIのような低レベル言語でコーディングする場合、キャストは「これらのバイトを常に他のタイプであるかのように再解釈する」こともあれば、「この値を他のタイプにインテリジェントに変換すること」を意味することもあります。 単語の本来の意味は何ですか?また、いつ変換を期待するか、いつ生の再解釈を期待するかについて一貫性はありますか?

4
永続性は純粋に機能的な言語にどのように適合しますか?
コマンドハンドラーを使用して永続性を処理するパターンは、IO関連のコードをできるだけ薄くしたい純粋に機能的な言語にどのように適合しますか? オブジェクト指向言語でドメイン駆動設計を実装する場合、コマンド/ハンドラーパターンを使用して状態の変更を実行するのが一般的です。この設計では、コマンドハンドラーはドメインオブジェクトの上に配置され、リポジトリの使用やドメインイベントの発行など、永続性に関連する退屈なロジックを担当します。ハンドラーは、ドメインモデルのパブリックフェイスです。UIなどのアプリケーションコードは、ドメインオブジェクトの状態を変更する必要があるときにハンドラーを呼び出します。 C#のスケッチ: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } } documentドメインオブジェクトは、((「あなたは既に破棄されていた文書を破棄することはできません」または「ユーザーが文書を破棄する権限を持つべきである」のような)ビジネスルールを実装するため、我々は公開する必要があるドメインイベントを発生させるための責任があるdocument.NewEventsだろうIEnumerable<Event>おそらく含まれていますDocumentDiscarded)イベントを。 これは素晴らしいデザインです-拡張が簡単で(ドメインモデルを変更せずに新しいコマンドハンドラーを追加することで新しいユースケースを追加できます)、オブジェクトの永続化方法に依存しません(MongoのNHibernateリポジトリを簡単に交換できます)リポジトリ、またはRabbitMQパブリッシャーをEventStoreパブリッシャーに交換します)これにより、偽物やモックを使用して簡単にテストできます。また、モデル/ビューの分離に従います-コマンドハンドラーは、バッチジョブ、GUI、またはREST APIのいずれで使用されているかわかりません。 Haskellのような純粋に機能的な言語では、おおよそ次のようにコマンドハンドラーをモデル化できます。 newtype CommandHandler = CommandHandler {handleCommand :: …

3
コンストラクターの複雑さ
私は、コンストラクターがどれだけの作業を行えるかについて同僚と議論しています。内部に別のオブジェクトAを必要とするクラスBがあります。オブジェクトAは、クラスBがその仕事をするために必要な数少ないメンバーの1つです。そのパブリックメソッドはすべて内部オブジェクトAに依存します。オブジェクトAに関する情報はDBに格納されているので、コンストラクターでDBを検索して検証および取得を試みます。私の同僚は、コンストラクターがコンストラクターのパラメーターをキャプチャする以外に多くの作業を行うべきではないと指摘しました。コンストラクターへの入力を使用してオブジェクトAが見つからない場合、すべてのパブリックメソッドはとにかく失敗するため、インスタンスを作成して後で失敗させるのではなく、実際にはコンストラクターで早期にスローする方がよいと主張しました。 他の人はどう思いますか?それが違いを生む場合は、C#を使用しています。 読書オブジェクトのすべての作業をコンストラクターで行う理由はありますか?ユーザーがコンストラクタに間違った値を渡した場合、そのパブリックメソッドを使用できないため、DBにアクセスしてオブジェクトAを取得することは「オブジェクトを使用可能にするために必要な他の初期化」の一部です。 コンストラクターは、オブジェクトのフィールドをインスタンス化し、オブジェクトを使用可能にするために必要な他の初期化を行う必要があります。これは一般に、コンストラクターが小さいことを意味しますが、これがかなりの量の作業になるシナリオがあります。
18 c#  constructors 

8
サイコロを転がすユースケースをカバーするのに適した単体テストとは何ですか?
私はユニットテストで把握しようとしています。 デフォルトの辺の数が6に等しい(ただし、4、5辺など)ことができるダイがあるとします。 import random class Die(): def __init__(self, sides=6): self._sides = sides def roll(self): return random.randint(1, self._sides) 以下は有効/有用な単体テストでしょうか? 6面ダイスの1〜6の範囲でロールをテストします 6面ダイスの0のロールをテストします 6面ダイスの7のロールをテストします 3面ダイスの1〜3の範囲でロールをテストします。 3面ダイスの0のロールをテストします 3面ダイスの4のロールをテストします ランダムモジュールが長い間存在していたので、これらは時間の無駄だと思っていますが、ランダムモジュールが更新された場合(たとえば、Pythonバージョンを更新した場合)、少なくともカバーされます。 また、ダイロールの​​他のバリエーション(この場合は3など)をテストする必要もありますか、それとも別の初期化されたダイの状態をカバーするのが良いでしょうか?

7
if / elseステートメントは、ケースの希少性またはそれらに対処する難しさによって整理されるべきですか?
私が今書いているコードの中には、次のようなものがあります。 if (uncommon_condition) { do_something_simple(); } else { do(); something(); long(); and(); complicated(); } 私の一部は、「それが書かれている方法で結構です。単純なケースが最初に、より複雑なケースが次に進むべきです」と考えています。しかし、別の部分は次のように述べています。「elseコードは、異常なケースを処理するifためであり、他のすべてのケースを処理するためです。」どちらが正しいですか、それとも望ましいですか?ifelse

2
複雑なMVVMのヘルプ(複数のビュー)
次のシナリオのビューモデルの作成にヘルプが必要です。 深い階層データ 同じデータセットの複数のビュー 各ビューは、アクティブな選択に基づいて、動的に変化する単一のビューです プロパティの値に応じて、タブコントロールにさまざまな種類のタブを表示する 私の質問: 各ビュー(VM1、VM2など)のビューモデル表現を作成する必要がありますか? 1. Yes: a. Should I model the entire hierarchical relationship? (ie, SubVM1, HouseVM1, RoomVM1) b. How do I keep all hierarchies in sync? (e.g, adding/removing nodes) 2. No: a. Do I use a huge, single view model that caters for all views? これが単一のビューの例です …
18 wpf  mvvm 

4
あるテストが別のテストのセットアップであるテストをどのように構成するのですか?
アイム統合のみ公開APIを使用して、システムをテストします。次のようなテストがあります。 def testAllTheThings(): email = create_random_email() password = create_random_password() ok = account_signup(email, password) assert ok url = wait_for_confirmation_email() assert url ok = account_verify(url) assert ok token = get_auth_token(email, password) a = do_A(token) assert a b = do_B(token, a) assert b c = do_C(token, b) # ...and so on... 基本的に、単一のトランザクションの「フロー」全体をテストしようとしています。フローの各ステップは、成功する前のステップに依存します。私は自分自身を外部APIに制限しているため、データベースに値を突っ込むだけではいけません。 したがって、 …
18 testing 

5
Java Webアプリケーションのフォルダー構造
J2EEの初心者として、最近、Core of J2EE:Servlets&Jspsを使用して、ゼロから独自のプロジェクトの開発を開始しました。 プロジェクトのフォルダー構造が正しいかどうかを評価できませんでした。これが私のプロジェクトのフォルダ構造です。 質問をする前に、誰かが私に尋ねたとしても、なぜこのタイプのフォルダー構造なのか、答えることも正当化することもできません。質問:jspをweb-infの外に置くのは良い兆候ですか?そうでない場合、なぜそうなのですか?はいの場合、なぜですか? J2EE Webアプリケーション用の標準的なフォルダー構造の規則はありますか、mavenがいくつかの標準を導入したことは知っていますが、それでも、要件に応じてカスタマイズできます。 私は少しグーグルをして、2つの参照を見つけました 1 2 答えが同じページになく、そこから結論を引き出すことはできませんでした。 J2EE Webアプリケーションのフォルダ構造をレイアウトする際に考慮すべき点は何ですか、重要なことは、JSP、静的コンテンツをどこに入れるべきか、そしてなぜですか?

2
重要なバグを修正する際のセマンティックバージョニング
私は現在、多くのパブリックな用途があるライブラリを管理しており、セマンティックバージョン管理について質問がありました。正しく実装されていないライブラリのかなり重要な部分をリファクタリングしたい-そして常に正しく実装されていない。ただし、これを行うと、パブリックAPIが変更されることになり、これは大きな決断です。 私が行いたい変更は、イテレータの使用方法を中心に展開します。現在、ユーザーはこれを行う必要があります。 while ($element = $iterator->next()) { // ... } 少なくともPHPのネイティブIteratorインターフェイスでは、これは正しくありません。これに置き換えたい: while ($iterator->valid()) { $element = $iterator->current(); // ... $iterator->next(); } これは次のようなものです: foreach ($iterator as $element) { // ... } トムのセマンティックバージョニングのガイドを見ると、パブリックAPIへの変更(つまり、下位互換性のないもの)はメジャーリリースを正当化すべきであると明確に述べています。したがって、ライブラリは1.7.3から2.0.0にジャンプしますが、これは私にとってはあまりにも大きな一歩です。修正される機能は1つだけです。 最終的に2.0.0をリリースする計画はありますが、ライブラリを完全に書き直し、多数のパブリックAPIの変更を実装したときだと思いました。このリファクタリングの導入は、メジャーバージョンリリースを保証しますか?私は本当にそれがどのように見えるかわかりません-私は1.8.0または1.7.4としてそれをリリースすることをより快適に感じます。誰かアドバイスがありますか?

2
MITライセンスの帰属の要件は何ですか?
choosealicense.comは、MITライセンスは「短く、要点を示す許容ライセンスです」と主張しています。これにより、人々はあなたのコードを適切な属性で保証なしで何でもすることができます。しかし、ライセンスを読んで、元の著者への帰属はどこにでもあるべきだと主張するものは見当たりません。

5
職場の問題に対するより良い解決策を見つけました-コードスニペットをオンラインで投稿することを思いとどまるべきですか?
私たちプログラマーのほとんどは、Stack Overflowを使用して毎日の問題を解決していると思います。何かを行うための効率的なアルゴリズムを探していました。 ここで状況を想像してください。あなたには解決すべき問題があります。少しグーグルでStackOverflowの質問を見つけましたが、今のところあなたは答えに本当に満足していません。そのため、独自の調査を行う必要があります。会社のアプリで必要なため、調査する必要があります。 最終的には数時間後に、より良い解決策を見つけました。それを会社のコードベースに追加し、他の人を助けるために、前に見つけた質問にコードスニペット(数行)で回答を送信したいと思います。 しかし、待ってください。会社のソフトウェアはクローズドソースであり、あなたはそれを時間通りに作りました。 だからこれは、私が仕事でそれを解決し、会社がそのコードを所有しているので、私は残りの人生でその質問に職場でも自宅でも答えを投稿すべきではないことを意味しますか?
18 legal 

4
経験はどれくらいの違いをもたらしますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 少なくともx年の経験を必要とする多くの求人があります。問題は、候補者に必要な経験年数がいつあるかをどのように知るかです。x年の経験を持つ人に何を期待しますか(編集:スキルチェックに頼らずにCVが嘘をついていないかを効果的にどのようにチェックしますか)?x年の経験を持つ人は、y年(y <x)の人にはできないことを何ができますか(編集:同じようなスキルがあると仮定して)? 豊富な知識を持ち、複数のプロジェクトで働いたy年の経験を持つ情熱的なプログラマーや、少数のプロジェクトで働いたがそれほど経験のないx年の経験(x> y)を持つプログラマーの場合があります。 「この技術を知っていて、その設計(コミュニケーション、見積もりなど)を行う方法を知っているなら、あなたは私たちの仕事にふさわしい」と、このようなものに減らすことができないのはなぜですか? エンタープライズアーキテクトとして1年の経験を持つ新卒者を雇うことはできませんが、ほとんどすべての広告が経験を必要とするという事実に問題があることも知っています。私見最初に情熱を考慮する必要があります。 まず、質問がこのサイトに適しているかどうかは知りませんでしたが、採用と経験のタグがあるので、ここに場所があると思います。

5
統合テストにインメモリデータベースを使用する理由
統合テストのベストプラクティスから、テストを実行する環境が運用環境(オペレーティングシステムを含む)に可能な限り似ているべきだということも多く聞いたため、テストに使用される多くのインメモリデータベース実装を見ると、本当に混乱しています。 、ライブラリ、データベースエンジンなど ここで何が欠けていますか?
18 testing 

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