ソフトウェア工学

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

4
TDDを簡単に実行できるようにゼロから設計された新しい言語はどのように見えますか
いくつかの最も一般的な言語(Java、C#、Javaなど)では、コードを完全にTDDしたいときに、その言語と対立しているように見えることがあります。 たとえば、JavaとC#では、クラスの依存関係をモックする必要があり、ほとんどのモックフレームワークでは、クラスではなくインターフェイスをモックすることをお勧めします。これは、多くの場合、単一の実装で多くのインターフェースがあることを意味します(この影響は、TDDにより多数の小さいクラスを作成するよう強制されるため、さらに顕著になります)。具象クラスを適切にモックできるようにするソリューションは、コンパイラーを変更したり、クラスローダーをオーバーライドしたりするなど、かなり厄介です。 それで、TDDに最適になるようにゼロから設計された言語はどのようになりますか?(インターフェイスをコンストラクタに渡すのではなく)依存関係を記述する何らかの言語レベルの方法で、明示的に行うことなくクラスのインターフェイスを分離できるのでしょうか?

2
単体テスト:「リファクタリングしていて、共同編集者がいない場合、コードのにおいがします」?
私はロイ・オセロベによるユニットテストの芸術を読んでいます。私はセクション7.2にいます。ここでは、作成者がコードのにおいについてこのメモを持っています。 注:外部テストから見えるように内部状態をリファクタリングする場合、それはコードのにおい(コードの設計またはロジックに問題がある可能性がある兆候)と見なすことができますか?共同編集者を公開するためにリファクタリングしているときは、コードのにおいではありません。リファクタリングを行っていて、共同編集者がいない場合は、コードのにおいです(したがって、何もスタブしたりモックしたりする必要はありません)。 編集:著者が「共同編集者」によって意味するのは依存関係です。彼の依存関係の例には、データベースにアクセスするクラスや、OSのファイルシステムにアクセスするクラスがあります。ここで、彼はスタブを定義し、コラボレーターという言葉を使い始めます。 スタブは、既存の制御置換である依存性(または 共同編集システムにおいて)。 作者にはこのコードの匂いの例はなく、これがどのように見えるか理解/描写するのに苦労しています。誰かがこれをもう少し説明して、おそらく具体的な例を提供できますか?

4
成熟したチームにとって良い「完了の定義」はどのようなものですか?
さまざまなソースで行われた定義の例を見ると、通常、次のような点が含まれています。 コード完成 単体テストの実行 ピアレビューまたはペアリングされたコード チェックインされたコード ドキュメントが更新されました … 私たちのチームにも同様のリストがありますが、これらのポイントが非常に明白であるため、これらの手順のいずれかをスキップすることは誰にも起こらないため、誰もそれを確認することはありません。つまり、それが主にアジャイルプロセスに移行するチームのためのツールであるのか、それを取り除くだけではいけないのかと考えていました。 一方、多くの文学は、すべての高性能チームが完了の強い定義を持っていると主張しています。この種のヒントは、ここで改善する機会を逃す可能性があることを示しています。 では、成熟したチームの完了の強力な定義の例は何ですか?一般的にどのような点が含まれていますか?

11
OOPで画像のサイズを変更できる必要がありますか?
私はImageエンティティを持つアプリを作成していますが、各タスクの責任を決定するのにすでに苦労しています。 最初に私はImageクラスを持っています。パス、幅、その他の属性があります。 次にImageRepository、単一のテスト済みメソッドで画像を取得するためのクラスを作成しましたfindAllImagesWithoutThumbnail()。 しかし今、私もできるようにする必要がありますcreateThumbnail()。誰がそれに対処すべきですか?ImageManagerアプリ固有のクラスになるクラスを考えていました(選択したサードパーティの画像操作の再利用可能なコンポーネントもあり、私はホイールを再発明していません)。 それとも、Imageサイズ変更自体を行うには0Kでしょうか?または聞かせてImageRepositoryとImageManager同じクラスで? どう思いますか?

6
プログラミングエクスペリエンスを増やすにはどうすればよいですか?[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私は3年目のコンピュータサイエンスの学生になり、ヘッドファーストJava、ヘッドファーストCを読みました。現在、C ++を読んでいます。これは、経験のある人向けの優れた教育スタイルがあるため、私が最も好きな言語です。QTでソフトウェアを作成する方法を学ぶか、objective-C(for iPhone)を学ぶか、Effective C ++を読むことを計画しています。 プログラマーとしての経験を得るにはどうすればよいですか?オープンソースプロジェクトに参加するスキルはありますか、それともphp、mySQL、またはその他の言語を学ぶ必要がありますか。一部のクラスは非常に難しい(理論的なコンピュータサイエンス)場合もありますが、プログラミングとコンピュータサイエンスは一般的に大好きです。また、C ++の第一人者になる予定ですが、すぐには実現しません。
9 c++  experience  qt 

4
すべての機能が必要ない場合にVisual Studio Ultimateをインストールすることの欠点はありますか?
Microsoftは本日、MSDNでVisual Studio 2012の最終ビルドをリリースしました。このバージョン比較ページから、インストールするエディションを決定しようとしています(必要なエディションを無料でインストールできます)。私は、主にWebアプリとコンソールアプリをC#とPythonで開発するソロ開発者です。Ultimate / Premiumの一部の機能(UMLや "ヒストリカルデバッグ"など)は見栄えがするように見えますが、ほとんどの機能は私が必要としないか、聞いたこともありません。 一方で、いつか欲しいときに備えて機能を備えておくと便利です。一方、一部のソフトウェア製品では、追加機能によりハイエンドエディションが(1)遅くなり、より多くのメモリを使用し、(2)UIが雑然としています。 これはVisual Studioの場合ですか?

4
メモリ使用量の分析:JavaとC ++は無視できるか?
Javaで記述された整数オブジェクトのメモリ使用量は、C ++で記述された整数オブジェクトのメモリ使用量とどのように比較されますか?違いは無視できますか?変わりはない?大きな違いは?言語に関係なくintはintであるため、同じだと思います(?) 私がこれを尋ねた理由は、プログラムのメモリ要件がプログラマーが特定の問題を解決するのをいつ妨げるかを知ることの重要性について読んでいたからです。 私を魅了したのは、単一のJavaオブジェクトを作成するために必要なメモリの量です。たとえば、整数オブジェクトを考えてみましょう。私が間違っているが、Java整数オブジェクトが24バイトのメモリを必要とする場合は修正してください。 intインスタンス変数用に4バイト 16バイトのオーバーヘッド(オブジェクトのクラス、ガベージコレクション情報、同期情報への参照) 4バイトのパディング 別の例として、Java配列(オブジェクトとして実装されている)には48バイト以上が必要です。 24バイトのヘッダー情報 16バイトのオブジェクトオーバーヘッド 長さは4バイト パディング用に4バイト さらに、値を格納するために必要なメモリ これらのメモリ使用量は、C ++で記述された同じコードとどのように比較されますか? 以前は自分が書いたC ++およびJavaプログラムのメモリ使用量について気づいていませんでしたが、アルゴリズムについて学び始めた今、コンピューターのリソースに対する理解が深まっています。

4
インターフェースまたはクラスを返す
メソッドがあるとしましょう public List<User> GetBatchOfUsers(IEnumerable<int> userIDs) { List<User> users = new List<User>(); // some database stuff return users; } を返すのではなく、インターフェイス(IListまたはのいずれかIEnumerable)を返す方がよいことを読みましたList。私がそうすることについて聞いたいくつかの議論は、それがデータを隠すことであり、API開発者に後日データの内部表現を変更する柔軟性を与えます。 を返すだけの私の懸念IEnumerableは、ランダムアクセスやCountプロパティなどの機能を失うことです。 IEnumerableメソッドとして動作するための最小限の要件である、メソッドにデータを送信するための最高の柔軟性を消費者に与えるため、パラメーターとしてを受け入れることには意味があることを知っています。 戻り値型のベストプラクティスは何ですか?
9 c#  interfaces  class 

9
printf-バグの原因?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はprintfコードでトレース/ロギングの目的で多くを使用していますが、それがプログラミングエラーの原因であることがわかりました。私は常に挿入演算子(<<)が少し奇妙なものであることに気付きましたが、代わりにそれを使用することでこれらのバグのいくつかを回避できると思い始めています。 誰かが似たような啓示を受けたことがありますか、ここでストローを掴んでいるだけですか? いくつかのポイントを奪う 私の現在の考え方は、型安全性はprintfを使用する利点よりも優れているということです。本当の問題は、フォーマット文字列とタイプセーフでない可変長関数の使用です。 多分私は使用せ<<ず、stl出力ストリームのバリアントを使用しますが、非常によく似たタイプセーフメカニズムの使用を検討します。 トレース/ロギングの多くは条件付きですが、めったに分岐しないという理由だけで、テストのバグを見逃さないように常にコードを実行したいと思います。
9 c++ 

3
一般的に、RESTサービス用のクライアントライブラリを開発して、APIの破損を防ぐ必要がありますか?
UIコードが同じチームによって開発されるが、サービスレイヤー(REST / Java)とは異なる言語(Python / Django)で開発されるプロジェクトがあります。各レイヤーのコードは、異なるコードリポジトリに存在し、異なるリリースサイクルに従うことができます。UIレイヤーの観点から、サービスレイヤーの重大な変更を防止/軽減するプロセスを考え出そうとしています。 UIまたはサービスレイヤー(2つのGitリポジトリにあるコードをビルドするためのCIツールとしてJenkinsを使用しています)を構築するたびに実行するUIレイヤーレベルで統合テストを作成することを考えました。障害が発生すると、サービスレイヤーで何かが壊れ、コミットが受け入れられません。 また、サービスレイヤーの開発者に、UIレイヤーに存在するRESTサービスのクライアントライブラリを作成および保守してもらい、UIレイヤーに重大な変更があった場合に更新するようにしてもよいでしょうか(ベストプラクティスですか?)。彼らのサービスAPI?おそらく、UIコードが構築する静的に型付けされたAPIの利点があるでしょう。クライアントライブラリAPIが変更された場合、UIコードはコンパイルされません(したがって、重大な変更があったことがすぐにわかります)。また、UIまたはサービスレイヤーの構築時に統合テストを実行して、UIとサービス間の統合が引き続き機能することをさらに検証します。
9 rest  django 

3
複数のバージョン管理システムを使用しない理由はありますか?
トランク、公式ブランチ、ほとんどのサブプロジェクト/非公式ブランチのメインバージョン管理システムとしてGITを使用するプロジェクトに取り組んでいます。したがって、私は自分のブランチでGITを使用して、コミュニティの残りのメンバーが知っているシステムを使用して私のブランチにアクセスできるようにしたいと考えています。 しかし、私は公式ブランチと非公式ブランチの両方に重なるプロジェクトの一部と、トランクに入らないいくつかのパッチに取り組んでいます-そのため、パッチを個別に保ち、すべてで使用できるようにする必要がありますトランクで使用するためのブランチと選択パッチ。これは当然、Mercurialキューの使用に傾いています。 自分のローカルリポジトリにmercurialを使用できないが、全体をGITとMercurialがホストするリポジトリの両方にプッシュする理由はありますか?むしろ、そうしない理由があるのではないかと思います。

4
外部EXEを開始するクラスのユニットテストの記述
EXEのリストを開始するために使用するC#クラスを作成しました(私のものではありません-実行する必要のあるサードパーティのEXE)。 。 追加、削除などの基本的なロジックをテストできます。EXEを保持する実際の作業が機能することを単体テストするにはどうすればよいですか? 私の最初の考えは、1秒後に自分自身を閉じるダミーEXEを起動し、それを使用してテストすることです。それは単体テストの領域外ですか?

2
既存の機能の小さな部分を削除するためのユーザーストーリーを作成することは適切ですか?
開発されたアプリケーションの領域について、メニューから項目を削除する要求が出されました。 これは小さなことですが、スクラムでどのように扱いますか?ユーザーストーリーを使用して、機能を追加するのではなく、削除することに慣れています。 だから私の質問は、私はこれのためにユーザーストーリーを作成する必要がありますか?それとも、これに対処するより良い方法がありますか?
9 agile  scrum 

1
SilverlightアプリをHTML5に移行する方法[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 Silverlight 5アプリケーションをしばらく使用しています。私はこのテクノロジーが好きで、Silverligtの開発で認定を受けるポイントに魅了されました。 しかし、Html5はこの時点で勢いを増し、新しいアプリケーションについての新しい波が押し寄せました。今、私はSlとhtml5のどちらで開発するかを考えています。私はこの件に関する何千もの投稿を読みましたが、アプリケーションをHTML5 SLに移行する方法があるかどうか、プロセスを助けるためのツールがあるかどうかわかりませんか?

9
プロの開発者として、単体テストを記述しないことは許容されますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 TDD /自動化された単体テストの長所と短所について疑問に思っており、プロの開発者が単体テストをサポートせずにアプリケーションを作成することが受け入れられるかどうかについてのコミュニティの見解を探していますか?

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