ソフトウェア工学

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

4
単体テストとTDDを使用して、主にデータベースCRUD操作に依存するアプリをテストするにはどうすればよいですか?
仕事中、私のプロジェクトの1つは主に外部クライアントから渡されたデータを取得し、データベースに保持することです。JPAを使用するJavaエンタープライズアプリであり、ほとんどのロジックはCRUD操作を中心に展開します。 バグの大部分は、何らかの形でJPAに関係しています。 例1:[保存]ボタンを2回クリックすると、JPAは同じエンティティをデータベースに2回挿入しようとし、主キー違反が発生する場合があります。 例2:データベースからエンティティを取得し、編集して、そのデータを更新しようとします。JPAは、古いインスタンスを更新する代わりに、新しいインスタンスを作成しようとする場合があります。 多くの場合、ソリューションはJPAアノテーションを追加/削除/変更する必要があります。また、DAOロジックの変更に関係する場合もあります。 単体テストとTDDを使用してコードに自信を持たせる方法がわかりません。ユニットテストとTDDの適合性が悪いのか、問題に近づいているのかがわかりません。 単体テストは、実行時にしかこれらの問題を発見できず、問題を再現するためにアプリサーバーに展開する必要があるため、不適切なように見えます。通常、データベースは関与する必要がありますが、これは単体テストの定義の外側にあると考えられます。これらは統合テストです。 TDDは、展開とテストのフィードバックループが非常に遅いため、非常に非生産的であるため、不適切なように思われます。deploy + testフィードバックループには3分以上かかります。これは、作成中のコードに関するテストを具体的に実行した場合にのみ発生します。すべての統合テストを実行するには、30分以上かかります。 この型の外側にはコードがあり、できる限りいつでも単体テストを行っています。しかし、バグの大部分と最大のタイムシンクは、常にJPAまたはデータベースに関係しています。 同様の別の質問がありますが、アドバイスに従えば、コードの最も不安定な部分(JPA)をラップし、それ以外のすべてをテストします。私の質問の文脈では、私は同じ悪い状況にいるでしょう。JPAをラップした後の次のステップは何ですか?IMOその質問は(おそらく)私の質問に答えるためのステップですが、それに対する答えではありません。
22 java  unit-testing  tdd  jpa 


7
同じスプリントでのコーディングとテスト
すべてまたはほとんどのコーディングがスプリントの終了まで行われない場合、テストはコーディングと同じスプリント内でどのように処理されますか?(スプリント内の単一のPBIの「スープからナッツ」への開発とテストに言及しています。) 私がオンラインで見た回答のほとんどはQAの自動化に関係していますが、自動化されたテストを記録または作成するための機能的なUIが一般的に必要なので、それも実際には不可能です。機能を開発し、新しい要件を発見するにつれて進化し続けるストーリーボードしかありません。 私の場合、新しいデスクトップアプリケーションを開発しています。通常、デスクトップアプリは自動テストにあまり適していません。自動化された単体テストがいくつかありますが、QAの専門家が行う手動の機能/統合テストではありません。 ですから、私が今いるのは、私のスプリントが明日で終了するということです、私はまだコーディングを終える必要があります、そして私のQAの人々はまだテストするものが何もありません、そして私が手を持たずに私が彼らに与えるものをテストする方法がわかりません。 私はこのジレンマを持っている最初の人ではないと確信しています。 過去に、パイプラインを実行しました。現在のスプリントでは、テストチームが前のスプリントで実装された機能をテストします。私の現在の仕事では、PMはこのアプローチを「ウォーターフォール」と呼んでいます。

3
加重シャッフルの実装方法
私は最近、非常に非効率的だと思ったコードをいくつか書きましたが、含まれている値が少ないため、受け入れました。しかし、私はまだ次のより良いアルゴリズムに興味があります: Xオブジェクトのリスト。各オブジェクトには「重み」が割り当てられます 重みを合計する 0から合計までの乱数を生成します オブジェクトを反復処理し、合計が非正になるまで合計から重みを減算します リストからオブジェクトを削除してから、新しいリストの最後に追加します 項目2、4、および5はすべてn時間がかかるため、O(n^2)アルゴリズムです。 これは改善できますか? 重み付きシャッフルの例として、要素はより高い重みで前面にいる可能性が高くなります。 例(実際に乱数を生成します): 重みが6,5,4,3,2,1の6つのオブジェクト。合計は21 私は19を選びました:19-6-5-4-3-2 = -1したがって、2が最初の位置に移動し、重みは6,5,4,3,1になりました。合計は19 16:を選んだ16-6-5-4-3 = -2ので、3番目が2番目の位置になり、重みは6,5,4,1になりました。合計は16 3を選択しました。3-6 = -3したがって、6は3番目の位置になり、重みは5,4,1になりました。合計は10 8:を選んだ8-5-4 = -1ので、4は4番目の位置になり、重みは5,1になりました。合計は6 5:を選んだ5-5=0ので、5は5番目の位置になり、重みは1になりました。合計は1 私は1を選んだ1-1=0ので、1が最後の位置に移動し、重みがなくなり、終了します
22 algorithms 

5
ローカルマシンでのみgitを使用するのは妥当ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 gitをローカルでのみ使用しても大丈夫ですか?プライベートリポジトリ(Githubなど)を提供するサービスに料金を支払う必要はありませんが、gitはクローズドソースプロジェクトを整理するのに最適な方法だと思います。

6
CSVはXMLとJSONの優れた代替手段ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 されたCSVはに対して良いオプションと考えXMLとJSONをプログラミング言語のために? 通常、フラットファイルストレージとしてXMLとJSON(またはプレーンテキストファイル)を使用します。しかし、最近、PHPの CSV実装に出会いました。ただし、Excelファイルの入力にCSVが使用されていることは一般的に見ていますが、プログラミングでは使用していません。XMLやJSONよりも優れているでしょうか?

9
コードを読むことはできるが、主にそれを書くのに苦労している[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は最近、初めてのプログラミング試験を受けました...そして、私はかなり失敗しました。まったくうまくいきませんでした。大学時代以外のことを責めるのは自分だけです。ほとんど何もしませんでした。 今、私は夏の時間の近くに別の予定を立てていますが、これが二度と起こらないようにしています。ここ数週間、私は本を読んで、読んで、もう少し読んでいます。私は見逃した古いことと、私たちがしている新しいことを続けています。ですから、明らかに、言語の理解に大きな違いがあることに気付くことができます。しかし、それはそれについてです。私はコードを読むことができ、コードで何が起こっているのかがわかりました...しかし、自分でコードを書くということになると、私は無知です。どのアプローチを取るべきかわからないので、質問を完全に理解することはできません。 私は毎日かなりの量の読書をしてきました(過去1か月かそこらで5〜6時間くらいしていました)。特に、ノード、リスト、アレイリスト、インターフェースなどの知識を持っているが、それについてのページでそれらを読む以外に。プログラムで起こっていることすべてを正確に指摘することができますので、プリサンプルコードに注釈を付けます。しかし、自分のコードを書くことは別の話です。

7
オブジェクトモデルの変更を伝播するためのパターン..?
対処するのが常にイライラする一般的なシナリオを次に示します。 親オブジェクトを持つオブジェクトモデルがあります。親には、いくつかの子オブジェクトが含まれます。このようなもの。 public class Zoo { public List<Animal> Animals { get; set; } public bool IsDirty { get; set; } } 各子オブジェクトにはさまざまなデータとメソッドがあります public class Animal { public string Name { get; set; } public int Age { get; set; } public void MakeMess() { ... } } 子が変更されたとき、この場合はMakeMessメソッドが呼び出されたときに、親の値を更新する必要があります。Animalの特定のしきい値が混乱した場合、ZooのIsDirtyフラグを設定する必要があるとします。 このシナリオを処理する方法はいくつかあります(私が知っていることです)。 1)変更を通知するために、各動物は親動物園の参照を持つことができます。 …

2
2つのPythonプロセスがアクセスするSQLite:1つの読み取り、1つの書き込み
私は2つのコンポーネントを持つ小さなシステムを開発しています。1つはインターネットリソースからデータをポーリングし、それをsqlデータに変換してローカルに保持します。2番目のものは、ローカルインスタンスからそのsqlデータを読み取り、jsonおよびrestful apiを介して提供します。 私はもともとpostgresqlでデータを永続化することを計画していましたが、アプリケーションには保存するデータとサービスするトラフィックの量が非常に少ないため、やり過ぎだと思いました。SQLiteは仕事をしているのですか?フットプリントが小さく、この1つのタスクのために別のSQLサーバーを維持する必要がないというアイデアが大好きですが、同時実行性が心配です。 先読みロギングを有効にすると、データベースからプロセスをロックアウトせずに、SQLiteデータベースの読み取りと書き込みを同時に行うことができるようです。 1つの読み取りと他の書き込みのみが行われる場合、単一のSQLiteインスタンスは、それにアクセスする2つの並行プロセスを維持できますか?私はコードを書き始めましたが、これがSQLiteの誤用かどうか疑問に思っていました。

2
テストの修正が優先事項と見なされる環境を作成するにはどうすればよいですか?
私は中規模企業のソフトウェアエンジニアです。TeamCityで実行されるかなり堅牢なテストプラットフォームがあります。すべてのチェックインで単体テストを実行し、毎日の単体テスト/ BVTを実行します。 問題は、大量の単体テストが失敗していることです。 ユニットテストが絶えず壊れていて、メンテナンスされていない場合、かなり頻繁にユニットテストの無意味さを引き出します。変更によってリグレッションが発生したかどうかを確認できないと、単体テストプラットフォームの価値のほとんどが失われます。 良い習慣の文化を作り出す種を植えたいです。壊れたときにテストを修正し、それらを価値あるものとみなし、他の作業とともにテストの修正を優先します。 私は賄ber(焼き菓子!)を試みましたが、単純に尋ねて、チームリーダーに話しました。誰もがそれは良いアイデアだと言いますが、私はそれについて何かをしている唯一の人であると思います。 他の人にテストの修正を奨励し、スプリント内でのテスト修正の優先順位付けを開始する最良の方法は何ですか? これを尋ねる主観的な方法がなければ、どんなヒントでも喜んで受け入れます。

7
アジャイルの最初の数回の反復で何を提供しますか?
私が理解しているように、アジャイル方法論のアイデアは、機能的なものを提供し、頻繁にそれを提供することです。アプリケーションは、増分後に最終的な形状の増分になります。 しかし、初期のイテレーションでは、アプリケーションが基盤となるフレームワークまたは基盤を構築する可能性があります。これは重要なことですが、ユーザーには見えません。 これらの最初の反復でクライアントに配信されるものは何ですか?足場コードをビルドするとき、正しい方向にどのように進行状況を表示しますか?

3
機能ブランチからマスターにマージする前のコードレビューの戦略
私と私のチームは機能ブランチを使用しています(gitを使用)。マスターにマージする前に、コードレビューの最適な戦略はどれかと思います。 マスターから新しいブランチをチェックアウトし、fb_#1と呼びます 私は数回コミットし、それをマスターにマージしたい 私がマージする前に誰かがコードレビューをすることになっています 現在、2つの可能性があります。 1日 私はマージ#1 FB_するマスターを(いない最新のできるだけそれを作るためにマスターにFB_#1) チームメイトがマスターヘッドとfb_#1ヘッド間の変更を確認します fb_#1で問題なければ、fb_#1をマスターにマージします 長所:廃止されたコードはレビューされていません 短所:他の誰かが「1」の間に何かをマージする場合 および「2.」彼の変更はレビューに表示されますが、別のレビューに属します。 2番目 チームメイトがチェックアウト(git merge-base master fb_#1)とfb_#1 headの間の変更をレビューします 長所:機能ブランチでの作業中に変更された内容を正確に把握できます 短所:一部の古いコードがレビューに表示される場合があります。 あなたはどちらの方が良いと思いますか、なぜですか?別のより適切なアプローチがありますか?

2
このタイプのリスト/マップのデータ構造はありますか?
おそらく私が欲しいものには名前がありますが、私はそれを知りません。LinkedHashMapJavaのa に似たものが必要ですが、指定されたキーに値がない場合に「前の」値を返します。 つまり、整数キー(私の場合は時間単位)によって格納されたオブジェクトのリストがあります。 ; key->value 10->A 15->B 20->C したがって、キー0〜9の値を照会すると、が返されnullます。特別な部分は、何か10 <= i <= 14を照会した場合、Aを返します。または、i> = 20の場合、Cを返します。 これにデータ構造はありますか?

3
リストまたは配列を使用する必要がありますか?
アイテム番号のUPCを計算するために、Windowsフォームで作業しています。 一度に1つのアイテム番号/ UPCを処理するものを正常に作成しました。次に、複数のアイテム番号/ UPCに対して拡張および実行したいと思います。 リストを使い始めてみましたが、行き詰まってしまいます。ヘルパークラスを作成しました。 public class Codes { private string incrementedNumber; private string checkDigit; private string wholeNumber; private string wholeCodeNumber; private string itemNumber; public Codes(string itemNumber, string incrementedNumber, string checkDigit, string wholeNumber, string wholeCodeNumber) { this.incrementedNumber = incrementedNumber; this.checkDigit = checkDigit; this.wholeNumber = wholeNumber; this.wholeCodeNumber = wholeCodeNumber; this.itemNumber = …
22 c#  array  winforms  list 

4
製品バックログ項目とタスクの違いを説明する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行 。 私はこの課題に何度か出くわしました。製品バックログアイテムとTFSのタスクの違いを説明する方法について、誰かが参照、トレーニング、またはアドバイスを提供できることを望んでいます。 製品バックログ項目は「何」であり、タスクは「方法」であると理解し、説明しました。また、PBIが要件であり、タスクが要件を満たす方法であることも説明しました。 私がこれを説明するとき、私は繰り返し空白の視線と頭の傷に会います。これを説明するソフトウェアエンジニアは区別できないようです。それらはすべて同じです。 私のもう一つの課題は、区別することが重要である理由を効果的に説明できないことだと思います。

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