ソフトウェア工学

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

1
ユニットテストジェネレーターは、レガシーコードの操作に役立ちましたか?
テストカバレッジが非常に低い小さな(生成されたものを含めて〜70kLOC)C#(.NET 4.0、一部のSilverlight)コードベースを探しています。コード自体は、ユーザー受け入れテストに合格したという点で機能しますが、脆弱で、一部の領域では十分に分解されていません。通常の容疑者(NMock、NUnit、Silverlightビット用のStatLight)を使用して、レガシーコードの周りに強力な単体テストカバレッジを追加したいと思います。 私の通常のアプローチは、コードの状態に満足するまで、プロジェクト、ユニットテスト、リファクタリングを開始することです。私はこれを何度も行ったことがありますが、うまくいきました。 ただし、今回は、テストジェネレーター(特にPex)を使用してテストフレームワークを作成し、手動で具体化することを考えています。 私の質問は、レガシーコードベースでの作業を開始するときに過去にユニットテストジェネレーターを使用したことがありますか? 私の恐れは、生成されたテストがコードベースの意味のニュアンスを見逃し、コードで意図された動作を明確に表現するテストではなく、カバレッジメトリックのためにテストを行うという恐ろしい状況につながることです。

9
.NETポートフォリオの自動ビルドプラットフォーム-最良の選択?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 .NETアプリケーションのかなり大きなポートフォリオの維持に携わっています。また、ポートフォリオには、他のプラットフォーム(ネイティブC ++、ECLIPSフォームなど)の上に構築されたレガシーアプリケーションがあります。 NAntの上に、これらのすべてのアプリケーションのビルドを管理する複雑なビルドフレームワークがあります。ビルドフレームワークはNAntを使用してさまざまなことを行います。 Subversionからコードを引き出し、Subversionでタグを作成する MSBuild for .NETまたは他のプラットフォームの他のコンパイラを使用してコードをビルドします AssemblyInfoファイル内を調べてバージョン番号を増分する ビルド/リリースに含めるべきではない特定のファイルを削除する コードをリリースフォルダにリリース バックアップ用にZipコードを作成 Windowsサービスを展開します。それらを開始および停止する 等。 それらのほとんどはNAntだけで実行できますが、NAntが環境に固有のいくつかのことを実行するための拡張タスクをいくつか作成しました。また、上記のプロセスのほとんどは汎用化されており、さまざまなアプリケーションビルドスクリプトの多くで再利用されているため、ロジックを繰り返さないでください。したがって、これは単純なNAntコードではなく、単純なビルドスクリプトでもありません。ビルドを実行するために一緒に来るNAntファイルは数十あります。 最近、私はいくつかの理由でNAntに不満を感じています。(1)構文がひどい-XMLの上にあるプログラミング言語を維持するのは本当に恐ろしいです。(2)プロジェクトは蔓延してしまったようです。最近は大量の更新が行われておらず、実際には誰も舵を取っていないようです。.NET 4で動作するようにしようとすると、このアクティビティがないためにいくつかの問題が発生します。 それで、その背景のすべてを片付けて、ここに私の質問があります。上記のリストに基づいて達成したいことがいくつかあり、私は主に.NETショップにいるが、.NET以外のプロジェクトもビルドする必要があることを考えると、NAntに代わる代替案がありますか?に切り替えますか? 私のレーダー上のものが含まPowerShellの(の有無にかかわらずpsake)、MSBuildのを自分自身、そしてによって熊手。これらにはすべて長所と短所があります。たとえば、MSBuildは十分強力ですか?私はそれを何年も前に使用したことを覚えており、NAntほど強力ではなかったようです。本当にrakeを使用してビルドを行うためにチームにRubyを学習させたいですか?psakeは本当に自分のポートフォリオを固定するのに十分なほど成熟したプロジェクトですか?Powershellは「金属に近すぎる」ので、自分でビルドライブラリを作成して、それをそのまま使用するためにpsakeと同じようにする必要がありますか? 他に検討すべきツールはありますか?非常に複雑な.NETポートフォリオの保守に携わっていた場合、どのビルドツールを検討しますか?あなたのチームは現在何を使用していますか?

4
オブジェクトの境界を越えて流出する情報
多くの場合、私のビジネスオブジェクトは、情報がオブジェクトの境界を頻繁に越える必要がある状況にあります。オブジェクト指向を実行するときは、情報を1つのオブジェクトに入れ、その情報を処理するすべてのコードをできるだけそのオブジェクトに含める必要があります。ただし、ビジネスルールはこの原則に従っていないため、問題が発生します。 例として、価格を持つInventoryItemを参照するOrderItemの数を持つOrderがあるとします。数量をInventoryItem.GetPrice()で乗算するOrderItem.GetPrice()の結果を合計するOrder.GetTotal()を呼び出します。ここまでは順調ですね。 しかし、その後、一部の商品が2対1で販売されていることがわかりました。OrderItem.GetPrice()にInventoryItem.GetPrice(quantity)のような処理を行わせ、InventoryItemにこれを処理させることで、これを処理できます。 ただし、2対1の取引は特定の期間のみ続くことがわかります。この期間は、注文の日付に基づく必要があります。次にOrderItem.GetPrice()をInventoryItem.GetPrice(quatity、order.GetDate())に変更します。 ただし、お客様がシステムに滞在している期間に応じて、さまざまな価格をサポートする必要があります。 しかし、2対1の取引は、同じ在庫アイテムを複数購入するだけでなく、InventoryCategory内のアイテムの複数購入にも適用されることがわかります。この時点で、私たちは手を挙げて、InventoryItemに注文アイテムを与え、それがアクセサーを介してオブジェクト参照グラフ上を移動できるようにし、必要な情報を取得します:InventoryItem.GetPrice(this) TL; DRオブジェクトの結合を低くしたいのですが、ビジネスルールでは、特定の決定を行うために、多くの場合、どこからでも情報にアクセスする必要があります。 これに対処するための良いテクニックはありますか?他の人が同じ問題を見つけますか?

4
長い冬眠の後、データ構造のスキルを上げる方法[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 アルゴリズムとデータ構造には、かなり昔はかなり良かったです。それ以来、私はプロのプログラムを作成し、小さなチームの管理に行きました。このチームは、この分野の技術スキルを完全に打ち消しました。 再び開発者になり、Googleで働きたいと思っています。実は、私はとても練習していないので、もし今面接を受けられたら、きっと10分で失敗するでしょう。 元に戻すには、どのトレーニングプログラムをお勧めしますか?私は今週末、絶対的な基本に戻り、いくつかのソートアルゴリズム、リンクリスト、ハッシュテーブルを実装することから始めました。次に、他の基本的なデータ構造とグラフアルゴリズムについてのコース資料全体を読んでいきます。古い脳細胞を操作するために、比較的短時間で実行できる集中的な実践的なエクササイズを見つけたいと思っています。私はこのことを知っています-私はそれを知っていることを思い出す必要があります。
10 training 

3
オープンソースの非営利ライセンス?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 次の条件で、オープンソースライセンスの下でソフトウェアを公開したいと思います。 次のことが許可されています。 共有—作品をコピー、配布、送信する アプリケーションでコードの修正バージョンを使用する 次のことは許可されていません。 コードの変更されたバージョンを公開する 商用目的でコードを使用する 私のニーズに合ったソフトウェアライセンスはありますか? (クロスポスト:https ://stackoverflow.com/questions/4558546/opensource-noncommercial-license )
10 licensing 

3
INT_MIN-1はアンダーフローまたはオーバーフローですか?
私はそれを読んでいたことを覚えているようです underflowマグニチュードが小さすぎてタイプで表示できないことを意味します overflow大きさが大きすぎてタイプで表示できないことを意味します ただし、実際には、これらの用語は次のように使用されていると思います。 underflowタイプで表示できない値が小さすぎることを意味します overflowタイプで表示できない値が大きすぎることを意味します ここで使用する正しい意味は何ですか?整数型と浮動小数点型で用語の定義は異なりますか?

5
Webアプリケーションのクライアントごとに新しいテーブルを作成することは良い考えですか?
これは半仮説であり、大規模なデータベーステーブルを処理した経験がないため、何らかの理由でこれが恐ろしいかどうかはわかりません。状況について: 20,000のクライアントがあり、各クライアントがテーブルに1000以上のエントリを持つWebベースのアプリケーションを想像してみてください。これは2,000万行であり、複雑なクエリの速度を確実に低下させる可能性があります。 このような場合、クライアントごとにデータベースに新しいテーブルを作成する方が理にかなっていますか?2万(またはそれ以上)のテーブルがある場合、データベースはどのように反応しますか?

13
コードモンキーとして、コンピュータサイエンスの博士号をほとんど持っている男とプログラミングについて話し合う方法[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 私の妻の友達が今夜夕食に来ると彼は私よりもはるかに賢いです。 共通点は何でしょうか...コンピュータサイエンスの学士号を取得しました。これで、会話を始めることができます。しかし、彼は博士課程の研究をほぼ終えており、彼の特定の分野で私より数年前に進んでいます。私は魅力的だと思いますが、気にする正当な理由はありません(大量のトラフィックを介してより良い方法を除いて-彼は専門家の組み合わせの人です)と私は思います)そして私は結婚して何人かの子供がいて、医療記録ソフトウェアのプロのプログラマーでした。 私たちは多くの共通点を持っていますが、私たちがお互いに気にかけたり理解したりしない点があります。私は本当に彼から学びたいし、彼が彼の仕事について話したいと思っているかどうかはわかりませんが。 だからあなたのすべての医師やコードモンキーにとって、良い会話のスターターは何ですか!

3
Managed Extensibility Frameworkをどのように使用していますか?
MEFで約2週間働いています。MEFの目的について考え始め、MEFの使用方法を調査し、最後に3つのモジュールでホストを実装しました。契約が把握しやすく、モジュールの管理も容易です。 MEFは非常に実用的ですが、どの程度まで利用できるのでしょうか。つまり、誰もが拡張性のために既存のアプリケーションを書き直すのでしょうか? はい、それは聞こえ、そしてめちゃくちゃ非現実的です。修辞的に言えば: MEFはプログラミングの現在の傾向にどのように影響していますか? MEFを使用する機会を探し始めましたか? 拡張性の恩恵を受ける可能性がある既存のアプリの大幅な書き直しを計画し始めましたか? そうは言っても、私の質問は次のとおり です。拡張性を備えた新しいプロジェクトをいつ計画すべきかをどのように知ることができますか? 拡張性のために既存のプロジェクトを書き直す必要があるかどうかはどうすればわかりますか? MEFを使用している人はいますか?
10 .net  frameworks  mef 

8
開発者はテスト段階に関与する必要がありますか?
従来のV字型の開発プロセスを使用しています。次に、要件、アーキテクチャ、設計、実装、統合テスト、システムテスト、および承認があります。 テスターは、プロジェクトの最初のフェーズでテストケースを準備しています。問題は、リソースの問題(*)が原因で、テストフェーズが長すぎ、時間の制約があるために短縮されることが多いということです(プロジェクトマネージャーは知っています...;))。開発者は必要に応じてユニットテストを行っています。 したがって、私の質問は簡単です。開発者がテスト段階に関与する必要があるかどうか、それはあまりにも「危険」ではありません。作業が完了したので、プロジェクトマネージャーに良い品質の誤った感覚を与えることになると思いますが、追加されたman.daysは何か価値がありますか?私は、開発者がテストを行うことに自信がありません(ここでは問題はありませんが、数日間に数回のクリックで中断するのは非常に難しいことは誰でも知っています)。 ご意見をお寄せいただきありがとうございます。 (*)あいまいな理由から、テスターの数を増やすことは現在のところオプションではありません。 (ちょうど前もって、それはプログラマーがテストを設計する際にテスターを助けるべきか?の複製ではなく、テストの準備ではなくテストの準備について話し、開発者の影響を回避します)

2
「アサーションフレームワーク」とは何ですか?
js-test-driverユニットテストフレームワークについて読んでいたとき、フレームワークの背後にいる連中がアサーションフレームワークと統合することを意図していることがわかりました。アサーションフレームワークとは何ですか?一種の単体テストフレームワークですか?もしそうなら、そのようなフレームワークに固有のものは何ですか?

9
コーディングスタイルをどのように見つけ、洗練し、維持しましたか?
最近、いくつかのプロジェクトと開発環境を切り替えています。それぞれのコーディングスタイルに対する期待は異なります。 さて、私の質問は3つの部分で、最初は好奇心の問題です。 コーディングスタイルをどのように定義して見つけましたか? どのようにしてそれを増強し、改善し続けますか? どのように維持しますか?(メンタルノートから、ドキュメントの保持、StyleCopなどのツールの使用)

6
マニュアル-最新情報
長い間市場に出回っている製品があるが、毎日活発に開発されている場合-マニュアルを更新する頻度はどれくらいですか?最新のバグ修正が常に出荷されたバージョンに含まれていると組織が判断したために、ユーザーが常に最新バージョンに更新されている場合。つまり、ある日バグを修正し、翌日それが本番環境に移行する可能性があります。

4
ドメイン駆動設計でのリファクタリング[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 6年前休業。 私はプロジェクトに取り組み始めたばかりであり、ドメイン駆動設計(Eric Evansが定義するDomain-Driven Design:Tackling Complexity in the Heart of Software)を使用しています。私たちのプロジェクトは確かにこの設計の候補だと思いますエヴァンスが彼の本でそれを説明するパターン。 私は絶えずリファクタリングするという考えに苦労しています。 私は、どのプロジェクトでもリファクタリングが必要であり、ソフトウェアの変更に伴って必然的に起こることを知っています。ただし、私の経験では、リファクタリングは、ドメイン変更の理解としてではなく、開発チームのニーズが変化したときに発生します(Evansが言うように、「より深い洞察へのリファクタリング」)。私は、ドメインモデルの理解におけるブレークスルーに最も関心があります。小さな変更を加えることは理解していますが、モデルに大きな変更が必要な場合はどうなりますか? より明確なドメインモデルを取得した後、リファクタリングする必要がある自分(および他の人)を説得する効果的な方法は何ですか?結局のところ、コードの編成またはパフォーマンスを改善するためのリファクタリングは、ユビキタス言語コードの観点から表現力を高めることとはまったく別のものである可能性があります。時々、リファクタリングするのに十分な時間がないように思えます。 幸いにも、SCRUMはそれをリファクタリングに役立てます。SCRUMの反復的な性質により、小さなピースを作成し、それを変更することが容易になります。しかし、時間の経過とともにそのピースは大きくなり、そのピースが大きくなりすぎて変更が困難になるとしたらどうでしょうか。 ドメイン駆動設計を採用するプロジェクトに取り組んだ人はいますか?もしそうなら、これについていくつかの洞察を得ることは素晴らしいでしょう。DDDを正しく理解するのは非常に難しいため、私は特にいくつかの成功事例を聞きたいと思います。 ありがとう!

5
アセンブリーでのプログラミングの学習-役立つリソース[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 前のスレッドに続き、アセンブリプログラミングについて少し学ぶことに興味を持ちました。便利なアプリをプログラミングしたいのではなく、低レベルのプログラミングの感触をつかんで、何が起こっているのかをよりよく理解するためです。 誰もが初心者のために本やオンラインリソースを推薦できますか? ありがとう。
10 books  assembly 

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