ソフトウェア工学

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

15
報告されたほとんどすべてのバグは、優先度の高いバグです[終了]
いくつかのソフトウェアプロジェクトの作業中にパターンに気付きました。報告されたバグの大部分は、優先度が非常に高い/非常に高いものでした。私は何人かの同僚になぜこれが起こっているのかと尋ねましたが、バグがその優先度を持たない場合、バグが開発者の注意を引くことは非常にまれであると述べました。 ですから、この問題が一般的なのか、それとも運が悪かったのかを知りたいと思いました。Googleで簡単に検索したところ、一部のチームがバグ報告ガイドラインを実装しているか、別の「バグトリアージ」チームを持っていることがわかりました。この問題に直面して解決した場合、どのアプローチが効果的でしたか? この質問は、具体的には「優先インフレ」問題に関するものです。シナリオに直面した場合、およびこの問題に対してどのような対策が効果的か。

11
なぜ「GitHubでフォークしてください」?[閉まっている]
GitHubの仕組みを理解していますが、混乱していることの1つは、ほとんどすべてのOSSプロジェクトが最近、ホームページに「GitHubでフォーク」リンクを持っている理由です。例えば、 http://jqtjs.com/、http://www.daviddurman.com/flexi-color-picker/など。 これはなぜそんなに一般的ですか?彼らは、コードの検証を望んでいる/必要としているのか、どうすればいいのかわからないかもしれないセキュリティ/パフォーマンスの改善をチェックしているのか? これが共同プロジェクトであることを示すことを意図していますか?改善を追加しても大丈夫ですか? 彼らはGitHubで働いていますか、それともサービスを宣伝したいですか?奇妙なことに、最近「Bitbucketの Forkプロジェクト」のロゴを見たことがないと思います。 そのロゴに対する私の最初の反応は、プロジェクトをおそらく有用なものと統合するために変更(分岐)する必要があること、またはフラグメント化されたコードベースを奨励し、全員がプロジェクトの独自の分岐を作成することを奨励していることです。しかし、私はそれが意図ではないと思います。


3
Scalaのコンパニオンオブジェクトと静的メソッドの利点は何ですか?
Scalaには静的なキーワードはありませんが、代わりにコンパニオンオブジェクトを通じて同様の機能があります。舞台裏では、コンパニオンオブジェクトは静的メソッドを持つクラスにコンパイルされるため、これはすべて構文糖です。この設計選択の利点は何ですか?欠点?他のラングアンジュには同様の構造がありますか?
50 scala 

14
RESTful APIデザイン。行がない場合、何を返す必要がありますか?
現在、Slim Frameworkを使用してソーシャルネットワーク用のAPIをコーディングしています。私の質問は、json構造に返す行がない場合のベストプラクティスは何ですか? この呼び出し/ v1 / get / moviesがテーブルmovie namesから2行を返すとしましょう: [ {"name": "Ghostbusters"}, {"name": "Indiana Jones"} ] しかし、それから/ v1 / get / booksを呼び出すと、そのテーブルには行がありません。空の構造を返すだけですか? [ ] ...または、メッセージとエラーコードの方が良いでしょうか? [ "errors": { "message": "no matches found", "code": 134 } ] どちらが良い方法ですか?(APIはiOSおよびAndroidアプリで使用されます)ありがとう!

11
テストを開始するためにデザインが必要な場合、TDDがどのように優れたデザインを取得するのに役立つかがわかりません。
TDD、特に開発の部分に頭を包み込もうとしています。私はいくつかの本を見てきましたが、私が見つけた本は主にテストの部分に取り組んでいます-NUnitの歴史、テストが良い理由、レッド/グリーン/リファクタリング、文字列計算機の作成方法。 良いものですが、それはTDDではなく「単なる」単体テストです。具体的には、テストを開始するためにデザインが必要な場合、TDDが優れたデザインを取得するのにどのように役立つか理解できません。 例として、次の3つの要件を想像してください。 カタログには製品のリストが必要です カタログは、ユーザーが閲覧した製品を記憶する必要があります ユーザーは製品を検索できる必要があります この時点で、多くの本は魔法のうさぎを帽子から引き出して「ProductServiceのテスト」に飛び込みますが、そもそもProductServiceがあるという結論に至った経緯については説明していません。それが私が理解しようとしているTDDの「開発」の部分です。 既存の設計が必要ですが、エンティティサービス以外のもの(つまり、Productがあるため、ProductServiceが必要です)はどこにも見つかりません(たとえば、2番目の要件では、ユーザーですが、思い出させる機能をどこに配置しますか?また、検索はProductServiceの機能または別のSearchServiceの機能ですか?どちらを選択すべきかをどのように知ることができますか?) SOLIDによると、UserServiceが必要になりますが、TDDなしでシステムを設計すると、単一メソッドサービスが大量に発生する可能性があります。TDDは、最初に自分のデザインを発見することを意図したものではありませんか? 私は.net開発者ですが、Javaリソースも機能します。実際のビジネスアプリケーションを扱う実際のサンプルアプリケーションや本はないようです。TDDを使用して設計を作成するプロセスを示す明確な例を提供できますか?
50 java  c#  .net  tdd 

9
なぜ==演算子文字列値の比較がJavaにならないのですか?
有能なすべてのJavaプログラマーは、==が参照の等価性をチェックするため、==ではなくString.equals()を使用してストリングを比較する必要があることを知っています。 文字列を扱うとき、ほとんどの場合、参照の等価性ではなく値の等価性をチェックしています。==を使用するだけで文字列値を比較できる言語であれば、より直感的になると思います。 比較として、C#の==演算子は文字列 sの値が等しいかどうかをチェックします。参照の等価性を本当に確認する必要がある場合は、String.ReferenceEqualsを使用できます。 もう1つの重要な点は、文字列は不変であるため、この機能を許可しても害はありません。 これがJavaで実装されない特別な理由はありますか?

4
大規模システムのEntity Framework-モデルの分割方法
私は、1000以上のテーブル、さらに数百のビュー、数千のストアドプロシージャを備えたSQL Serverデータベースを使用しています。新しいプロジェクトにEntity Frameworkの使用を開始したいと考えており、そのための戦略に取り組んでいます。ハングアップしているのは、テーブルを異なるモデルに分割する最良の方法です(最初にコードを作成する場合は、EDMXまたはDbContext)。私はすぐにいくつかの戦略を考えることができます: スキーマによる分割 テーブルはおそらく12個のスキーマに分割されています。スキーマごとに1つのモデルを作成できます。ただし、dboは500を超えるテーブル/ビューで非常に大きくなるため、これは完全ではありません。もう1つの問題は、特定の作業単位が複数のモデルにまたがるトランザクションを実行しなければならないことです。これにより、EFがこれをかなり簡単にすると仮定します。 意図 で分割するスキーマを気にする代わりに、モデルを意図で分割します。そのため、取得する粒度に応じて、アプリケーション、プロジェクト、モジュール、または画面ごとに異なるモデルを用意します。これに伴う問題は、UserやAuditHistoryなど、すべての場合に必ず使用する必要がある特定のテーブルがあることです。それらをすべてのモデルに追加しますか(DRYに違反すると思います)、それともすべてのプロジェクトで使用される別のモデルにありますか? まったく分割しないでください-1つの巨大なモデル これは開発の観点からは明らかにシンプルですが、私の研究と直感から、設計時、コンパイル時、そしておそらく実行時の両方でひどく実行できるようです。 このような大規模なデータベースに対してEFを使用するためのベストプラクティスは何ですか?具体的には、この大量のDBオブジェクトに対してモデルを設計する際にどのような戦略を使用しますか 私が上で持っているものよりもうまく機能すると思っていないオプションはありますか? また、これはNHibernateなどの他のORMの問題ですか?もしそうなら、彼らはEFよりも優れたソリューションを考え出しましたか?


8
バグ修正タスクのストーリーポイント:スクラムに適していますか?
ストーリーポイントをバグ修正タスクに割り当てる必要があるかどうかだけを考えています。私たちの問題追跡ソフトウェアであるJIRAには、バグタイプの問題のストーリーポイントフィールドがありません(StoryおよびEpic専用です)。 ストーリーポイントフィールドの該当する問題タイプにバグ問題タイプを追加する必要がありますか?長所と短所は何ですか?スクラムに適しているでしょうか?
50 agile  scrum  bug  user-story 

8
スクラム-バックログをゆがめることなく、部分的に完成したユーザーストーリーを次のスプリントに引き継ぐ方法
私たちはスクラムを使用していますが、時折、それが計画されたスプリントでユーザーストーリーを完了できないことがあります。とにかく真のスクラムスタイルでソフトウェアを出荷し、次のスプリントプランニングセッション中に次のスプリントにユーザーストーリーを含めることを検討します。私たちが引き継いでいるユーザーストーリーが部分的に完了している場合、次のスプリントプランニングセッションでどのように正しく見積もることができますか?私達は考慮しました: a)ストーリーポイントの数を減らして、ユーザーストーリーを完了するために残っている作業のみを反映するようにします。残念ながら、これは製品バックログの報告を台無しにします。 b)部分的に完了したユーザーストーリーを閉じて、新しいストーリーを作成して、ストーリーポイントの少ない残りの機能を実装します。これは、そのスプリントで完了しなかったものを遡及的に見る能力に影響し、少し時間がかかるようです。 c)aまたはbのいずれにも煩わされず、スプリントプランニング中に「ユーザーストーリーはXストーリーポイントかもしれませんが、95%が終了していることを知っているので、それが収まると確信しています。」

6
単体テストはリポジトリに保存する必要がありますか?
私は成長中のプログラマーで、GitHubに保存しているライブラリの単体テストを最終的に実践しています。 レポジトリにテストスイートを含めることができたのですが、他のプロジェクトを見てみると、テストを含めるのは失敗したように思えます。 これは悪い形と見なされますか?ユーザーは作業コードにのみ興味があり、とにかく自分のフレームワークでテストするという考えはありますか?

7
会ったことのない人々とのプログラミング
APコンピューターサイエンスクラスからグループプロジェクトを割り当てられ、他の3人と協力する必要があります。私は以前彼らと話したことがなく、彼らのスキルレベルがわからず、彼らのメールアドレスしかありません。要約すると、割り当ては次のとおりです。 「チームとして、クラスに少なくとも3つのモジュールを完了します。...」 私は「チームキャプテン」になろうとしていますが、彼らは誰もお互いに連絡をとろうとしませんでしたが、私は興味があります。私は彼らにメールを送り、お互いにメールを送るよりもコミュニケーションの方が良いかどうか尋ねましたが、実際にプロジェクトを開始したら、誰が何をしているのかを把握する必要があります。 私は何をすべきか?会ったことがない3人を「担当」し、リードするにはどうすればよいですか。 以下は実際の割り当ての抜粋です。 したがって、各チームメンバーが週の初めにこのプロジェクトで果たすさまざまな役割について話し合う必要があります。Pronto(またはBlackboard IM)、電子メール、Wiki、Googleグループ、ブログ、またはその他の適切な方法を介して通信できます。週の終わりまでにグループメンバーがグループに参加しない場合は、インストラクターに知らせて、追加のガイダンスを提供します。 ... また、プロジェクトの終了時にチーム評価が行われます。この評価では、各チームメンバーがこのプロジェクトの完了への貢献度と推奨成績を評価します。 編集:多くの人々は、私が彼らにコーヒーショップなどで会うことを提案しました。唯一の問題は、私たち全員が異なる状態にあるということです。また、そのうちの1人がFacebook / Skype / twitterの使用を許可されていないこともわかったため、yahooメッセンジャーとメールでメッセージを送信することに頼らなければなりません。

7
私は(ロジックの)優れたプログラマーではありません。どうすれば修正できますか?[閉まっている]
さて、ここに私の問題があります: 私は大企業で働いていますが、なんとなく仕事を見つけました(率直に言って、面接が簡単だったからです)。私は自分のものを知らないわけではなく、Javaを理解するのがかなり得意です。ライブラリなどです。 しかし、ロジックの問題を解決しようとすると、解決策を見つけるのが非常に困難になります。 たとえばconversion of decimal to roman、解決策を見たとき、それは簡単な問題であることがわかりました。しかし、1〜2時間試してから実装できませんでした。 私は愚かで、ソフトウェアエンジニアになる価値はないと感じています。パズルを解く能力は、優れたプログラマーにネイティブに備わっている必要があります。しかし、いくつかのパズルを解こうとすると、解決策を見つけることができず、ただグーグルアップしてしまいます!....それが嫌いです! 仕事で問題(xyz機能を実装するなど)が与えられたとき、私はそれを非常にすばやく理解し、職場で尊敬していますが、私はそれについてまったく誇りに思っていません。数学的にも論理的にも挑戦的な問題を解決しようとすると、私は手探りするからです。私は今でも(エンジニアとして)私がやっていることを愛していると感じていますが、友人が思いつくいくつかの難しいロジックの問題を解決できないことを本当に悲しんでいます。 私は意気消沈したと感じます:( TL; DR:実用的な観点(製品に機能を実装すること)で物事を理解していますが、ProjectEulerからの問題に取り組むとき、私はひどく吸います!そして、私は私の脳を研ぐ必要があります! だから、私の質問は: 修正するにはどうすればよいですか?プロジェクトのオイラー問題を解決することから始める必要がありますか?いくつかの基本的な問題を解決するのに何時間もかかっても? または、基本に戻っていくつかの基本的な数学を勉強する必要がありますか? パズルを解く楽しさはあまりありません。しかし、私は自分のためにそれを楽しくしたいです!そして、それらをより良く理解できれば、それが好きになると思います! PS:私はCSで教育を受けたことはありませんでした(私の学部生は選挙でした)。しかし、それは嫌な開発者であることの言い訳ではありません。 ありがとう!

5
共通のネストされたサブモジュールを使用してGitリポジトリを整理する
私はGitサブモジュールの大ファンです。バージョンとともに依存関係を追跡できるので、以前のバージョンのプロジェクトにロールバックし、対応するバージョンの依存関係を安全かつクリーンに構築できます。さらに、ライブラリの履歴は、ライブラリに依存している(およびオープンソース化されない)アプリケーションの履歴とは別個であるため、ライブラリをオープンソースプロジェクトとしてリリースする方が簡単です。 仕事中の複数のプロジェクトにワークフローを設定していますが、単一のモノリシックプロジェクトではなく、このアプローチを少し極端にするとどうなるか疑問に思っていました。サブモジュールを実際に使用すると、ワームの潜在的な可能性があることにすぐに気付きました。 一対のアプリケーション:studioおよびplayer、および依存ライブラリcore、graphおよびを想定します。network依存関係は次のとおりです。 core スタンドアロンです graphcore(サブモジュール./libs/core)に依存 network上のcoreサブモジュール(サブモジュール./libs/core) studio依存graphし、network(サブモジュールに./libs/graph及び./libs/network) player依存graphし、network(サブモジュールに./libs/graph及び./libs/network) CMakeを使用しており、これらの各プロジェクトに単体テストとすべての作品があると仮定します。各プロジェクト(studioおよびを含むplayer)は、コードメトリックス、ユニットテストなどを実行するためにスタンドアロンでコンパイルできる必要があります。 事は、再帰的git submodule fetchであり、次のディレクトリ構造を取得します: studio/ studio/libs/ (sub-module depth: 1) studio/libs/graph/ studio/libs/graph/libs/ (sub-module depth: 2) studio/libs/graph/libs/core/ studio/libs/network/ studio/libs/network/libs/ (sub-module depth: 2) studio/libs/network/libs/core/ プロジェクトでcore2回複製されていることに注意してくださいstudio。このディスクスペースの浪費とは別に、core2回ビルドするため、ビルドシステムの問題が発生しますcore。 質問 共通のネストされたサブモジュールの複数のコピーを取得せずに、バージョン付きの依存関係とスタンドアロンビルドを取得できるように、サブモジュールを整理するにはどうすればよいですか? 可能な解決策 ライブラリの依存関係がある程度示唆されている場合(つまり、「バージョンXで動作することがわかっている」または「バージョンXのみが公式にサポートされている」方法)次のシナリオを想像できます。 ビルドシステムを用意しgraph、networkどこで見つけるかを伝えますcore(たとえば、コンパイラインクルードパスを使用して)。「standalone」と「dependency」の2つのビルドターゲットを定義します。「standalone」は「dependency」に基づき、ローカルcoreサブモジュールを指すインクルードパスを追加します。 追加の依存関係を導入studioしcoreます:on 。次に、studiobuilds core、coreサブモジュールの独自のコピーへのインクルードパスを設定し、ビルドgraphしnetworkて「依存関係」モードにします。 結果のフォルダー構造は次のようになります。 studio/ studio/libs/ (sub-module depth: 1) studio/libs/core/ studio/libs/graph/ studio/libs/graph/libs/ (empty folder, …
50 git  cmake  submodules 

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