ソフトウェア工学

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

12
コードカバレッジは「十分」ですか?
ここで私の仕事でコードカバレッジのプッシュを開始し、考えさせられました。 コードカバレッジの収益が減少する時点に達するのはいつですか?良好なカバレッジと十分でないことの間のスイートスポットは何ですか?作成しているプロジェクトのタイプ(WPF、WCF、Mobile、ASP.NETなど)によって異なりますか(これらは私たちが書いているC#クラスです)。

23
優れたプログラマーにとって大学教育は価値があるのでしょうか?[閉まっている]
覚えている限り、デザインとプログラミングを行ってきました。プログラミングの問題がある場合、私はそれを理解することができます。(確かに、Stack Overflowを使用すると、多くの場合、計算をスキップして、すぐに実行できます。)ゲーム、難解なプログラミング言語、およびウィジェットとギズモを大量に作成しました。現在、汎用プログラミング言語に取り組んでいます。プログラミングよりも優れていることはありません。 大学教育は単なる形式以上のものですか?
37 education 

2
PHP:いつ配列を使用し、ほとんどのデータを保存するコード構成にオブジェクトを使用するのですか?
PHPは混合パラダイム言語であり、配列などの非オブジェクトデータ型を使用して返すことができます。特定の状況でどのプログラミング構成を使用するかを決定する際に、配列とオブジェクトの選択に関するいくつかのガイドラインを明確にしようとする質問を投げかけます。 これは、PHP言語の構造を使用してデータをエンコードする方法と、データの受け渡しの目的(つまり、サービス指向アーキテクチャまたはWebサービス)で他の方法を選択する可能性が高い場合についての質問です。 例 {cost、name、part_number、item_count}で構成されるアイテムタイプがあるとします。プログラムでは、そのようなアイテムタイプをいくつか表示する必要があります。ここでは、各アイテムタイプを保持する外部コンテナとして配列を使用することにします。[PHP ArrayObjectをオブジェクト指向パラダイムに使用することもできますが、私の質問はその(外部)配列に関するものではありません]。私の質問は、アイテムタイプデータをエンコードする方法と、使用するパラダイムについてです。PHPでは、PHP Native Arraysまたはを使用できますPHP Objects。 このようなデータは、次の2つの方法でエンコードできます。 //PHP's associative arrays: $ret = array( 0 => array( 'cost' => 10.00, 'name' => 'item1', 'part_number' => 'zyz-100', 'item_count' => 15 ), 1 => array( 'cost' => 34.00, 'name' => 'item2', 'part_number' => 'abc-230', 'item_count' => 42 ), ); 対 //here …


6
単体テストとデータベース:どの時点で実際にデータベースに接続しますか?
データベースに接続するテストクラスの方法に関する質問への回答があります。たとえば、「テストクラスがサービスを接続する必要があります...」や「ユニットテスト-データベース結合アプリ」などです。 したがって、要するに、データベースに接続する必要があるクラスAがあると仮定しましょう。Aに実際に接続させる代わりに、Aに接続に使用できるインターフェースを提供します。テストのために、このインターフェイスをいくつかのもので実装します-もちろん接続しません。クラスBがAをインスタンス化する場合、「実際の」データベース接続をAに渡す必要があります。ただし、Bはデータベース接続を開きます。つまり、Bをテストするには、接続をBに挿入します。ただし、BはクラスCなどでインスタンス化されます。 したがって、どの時点で「ここでデータベースからデータをフェッチし、このコードの単体テストを作成しません」と言う必要がありますか? 言い換えると、あるクラスのコードのどこかで呼び出す必要がある、sqlDB.connect()またはそれに似たものです。このクラスをテストするにはどうすればよいですか? また、GUIまたはファイルシステムを処理する必要があるコードでも同じですか? ユニットテストをしたいです。他の種類のテストは私の質問とは関係ありません。私はそれで1つのクラスのみをテストすることを知っています(キリアンに同意します)。現在、一部のクラスはDBに接続する必要があります。このクラスをテストして「これを行うには」と尋ねると、多くの人が「依存性注入を使用してください!」と言います。しかし、それは問題を別のクラスにシフトするだけですよね?だから、本当に、本当に接続を確立するクラスをテストするにはどうすればいいですか? おまけの質問:ここでの答えは、「模擬オブジェクトを使用してください!」どういう意味ですか?テスト対象のクラスが依存するクラスをモックします。ここでテスト対象クラスをモックし、実際にモックをテストします(テンプレートメソッドを使用するという考え方に近づきます。以下を参照)。

8
例外はOOPの概念ですか?
昨日投稿を読んで、私は例外の起源についてあまり知らないことに気付きました。OOP関連の概念のみですか?私はそう思う傾向がありますが、やはりデータベースの例外があります。

5
カウボーイコーダーをどのように武装解除しますか?[閉まっている]
私は質問(チームのコードカウボーイ)を見つけましたが、それは私が抱えている問題よりも「Ninja Coder」に関連していました。 「カウボーイコーダー」の純粋に生きた例であるチームメンバーがいます。人を変えることはできないことを理解していますが、彼が「カウボーイコーダー」のように振る舞うのをやめる方法ですか? 彼はチームの意見を聞くことを拒否し、最近、コードレビュー、ユニットテスト、実装の詳細の共有などを停止しました。 はい、彼は高速に「コーディング」しますが、彼のコードは単なるバグ生成プログラムです。他のチームメンバーと私は「バグ修正フェーズ」にあり、バグの80%は彼のコードに起因しています。私は彼のバグを修正したくありません。そして、経営陣は盲目であるか、これを見たくないか、多分彼らは彼の「スピード」を好む。 私(彼の上司ではなく、年齢の若い同僚として)がそれについて何かできる方法はありますか? このカウボーイコーダーを武装解除するにはどうすればよいですか? 私はこのプロジェクトを本当に気にかけている最後の人だと感じています。

11
出力が不確定な単体テストメソッド
ランダムな長さのランダムなパスワードを生成することを意図したクラスがありますが、定義された最小長と最大長の間に制限されています。 私は単体テストを作成していますが、このクラスで興味深い小さな障害に遭遇しました。単体テストの背後にある全体的な考え方は、繰り返し可能にする必要があるということです。テストを100回実行すると、同じ結果が100回得られるはずです。あなたが期待する初期状態にあるかもしれないし、そうでないかもしれないいくつかのリソースに依存しているなら、あなたのテストが本当に常に再現可能であることを保証するために問題のリソースをモックするつもりです。 しかし、SUTが不確定な出力を生成することになっている場合はどうでしょうか? 最小長と最大長を同じ値に修正すると、生成されたパスワードが予想された長さであることを簡単に確認できます。しかし、許容範囲(たとえば15-20文字)の範囲を指定すると、テストを100回実行して100パスを取得できるという問題がありますが、101回目の実行で9文字の文字列が返される可能性があります。 コアが非常に単純なパスワードクラスの場合、大きな問題を証明すべきではありません。しかし、一般的なケースについて考えさせられました。設計によって不確定な出力を生成しているSUTを処理するときに取るのに最適な方法として通常受け入れられている戦略は何ですか?

4
著作権表示を必要とするJavascriptを縮小できますか?
これは実際には法的問題だと思いますが、ソフトウェアに関連しています。プロジェクトにJSプラグインを含めようとしています。コメントは次のとおりです。 ソースコードの再配布では、上記の著作権表示、この条件リスト、および以下の免責事項を保持する必要があります。*バイナリ形式での再配布では、上記の著作権表示、この条件リスト、および以下の免責事項を配布物とともに提供されるドキュメントおよび/またはその他の資料に複製する必要があります。 これを私のWebサイトで「再配布」しますか? 帯域幅を節約するためにこれを縮小すると、すべてのコメントが削除されると思います。#1の答えが「はい」である場合、それは私が法的にそれを縮小することを許可されていないことを意味しませんか? (これは、展開プロセスの一部としてすべてのJSを自動縮小することを計画していたため、悪臭を放ちます。)
37 copyright 

6
アプリケーションをスケーラブルにするものは何ですか?
求人情報では、応募者が「スケーラブル」な申請書を作成した経験を持っている必要があります。アプリケーションをスケーラブルにする理由は何ですか?また、コードが何百万人ものユーザーに対応できることをどのように知るのですか この質問を表現するより良い方法は、スケーラビリティを念頭に置いてコードを作成するにはどうすればよいでしょうか そのため、コードは後から考えるのとは対照的に、導入から拡張可能です。特定の設計手法はありますか?それとも、単に仕事に適したアルゴリズムを選ぶだけの問題ですか?


3
peek()を使用してストリーム要素を変更するのはアンチパターンですか?
モノのストリームがあり、それらを途中で「強化」したい場合peek()、これを行うために使用できます。たとえば: streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); コードのこの時点でthingMutatorモノを変更することは正しい動作であると仮定します。たとえば、メソッドは「lastProcessed」フィールドを現在の時間に設定できます。 ただし、peek()ほとんどのコンテキストでは、「見て、触れないでください」という意味です。 ストリーム要素の突然変異にアンチパターンを使用peek()していますか? 編集: より一般的な代替アプローチは、消費者を変換することです。 private void thingMutator(Thing thing) { thing.setLastProcessed(System.currentTimeMillis()); } パラメータを返す関数に: private Thing thingMutator(Thing thing) { thing.setLastProcessed(currentTimeMillis()); return thing; } map()代わりに使用します: stream.map(this::thingMutator)... しかし、それは機能的なコード(return)を導入しpeek()、同じオブジェクトを返すことを知っているので、それがより明確であるとは確信していませんがmap()、同じクラスのオブジェクトであることは一目でさえわかりません。 さらに、peek()あなたは突然変異するラムダを持つことができmap()ますが、列車の残骸を構築する必要があります。比較する: stream.peek(t -> t.setLastProcessed(currentTimeMillis())).forEach(...) stream.map(t -> {t.setLastProcessed(currentTimeMillis()); return t;}).forEach(...) 私は思うpeek()ので、何の「神秘的」副作用はありません、バージョンが明確で、かつラムダは明らかに変異されます。同様に、メソッド参照が使用され、メソッドの名前が明らかに突然変異を暗示している場合、それも明確で明白です。 個人的には、peek()突然変異に使うことをためらわない-非常に便利だと思う。

3
自己参照テーブル、良いか悪いか?[閉まっている]
アプリケーション内の地理的な場所を表す、基礎となるデータモデルの設計は、2つの明確なオプション(またはそれ以上?)を提案します。 自己参照parent_id列ukを持つ1つのテーブル-ロンドン(ロンドンの親ID =英国ID) 外部キーを使用する1対多の関係を持つ2つのテーブル。 私の好みは、必要な数のサブリージョンに簡単に拡張できるため、1つの自己参照テーブルです。 一般に、人々は自己参照テーブルから離れますか、それともA-OKですか?

3
REST API-APIはネストされたJSONオブジェクトを返す必要がありますか?
JSON APIに関しては、応答をフラット化し、ネストされたJSONオブジェクトを避けるのが良いでしょうか? 例として、IMDbに似ているがビデオゲーム用のAPIがあるとします。いくつかのエンティティ、Game、Platform、ESRBRating、GamesとPlatformsをマップするGamePlatformMapがあります。 ID 1のゲームを取得する/ game / 1をリクエストすると、プラットフォームとesrbRatingがネストされたゲームオブジェクトを返します。 { "id": 1, "title": "Game A", "publisher": "Publisher ABC", "developer": "Developer DEF", "releaseDate": "2015-01-01", "platforms": [ {"id":1,"name":"Xbox"}, {"id":2,"name":"Playstation"} ], "esrbRating": { "id": 1, "code": "E", "name": "Everyone" } } JPA / Hibernateのようなものを使用している場合、FETCH.EAGERに設定されていれば自動的にこれを行うことがあります。 もう1つのオプションは、単にAPIを追加して、エンドポイントを追加することです。 その場合、/ game / 1が要求されると、ゲームオブジェクトのみが返されます。 { "id": 1, "title": "Game …
37 design  rest  api-design  json 

14
「または」論理的に定義する方法
最近、論理的な「OR」演算子をプログラムで定義する必要がある問題に遭遇しましたが、演算子自体は使用していません。 私が思いついたのはこれです: OR(arg1, arg2) if arg1 = True and arg2 = True return True else if arg1 = True and arg2 = False return True else if arg1 = False and arg2 = True return True else: return False この論理は正しいですか、それとも何か見落としていましたか?

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