ソフトウェア工学

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

6
単体テストの実行順序を強制するのは悪い習慣ですか?
複数のサブモジュールで構成されるプロジェクトのテストを書いています。作成した各テストケースは互いに独立して実行され、テスト間ですべてのデータをクリアします。 テストは独立して実行されますが、場合によっては複数のサブモジュールが必要になるため、実行順序の強制を検討しています。たとえば、サブモジュールがデータを生成し、別のサブモジュールがデータに対してクエリを実行しています。データを生成するサブモジュールにエラーが含まれている場合、サブモジュール自体が正常に機能していても、クエリサブモジュールのテストも失敗します。 私がテストしている主な機能は、最初のサブモジュールからのみデータを取得するブラックボックスリモートサーバーへの接続であるため、ダミーデータを操作することはできません。 この場合、テストの実行順序を強制してもいいですか、それとも悪い習慣ですか?このセットアップには臭いがあるように感じますが、より良い方法は見つかりません。 編集:質問は、1つのテストが別のテストのセットアップである場合のテストの構成方法からですか?「前の」テストはセットアップではなく、セットアップを実行するコードをテストするためです。

6
代わりにdoubleが主に推奨されるのに、なぜfloatがJava言語の一部であるのはなぜですか?
私が見たすべての場所で、それはほぼすべての点doubleで優れていると言いfloatます。Javaでfloat廃止さdoubleれたのに、なぜまだ使用されているのですか? 私はLibgdxで多くのプログラムを作成しており、それらを使用することを強制していますfloat(deltaTimeなど)が、doubleストレージとメモリの点で作業する方が簡単だと思われます。 私はまた、いつfloatを使用し、doubleを使用するのかを読んでいますが、float本当に小数点以下の桁数が多い数値にのみ適している場合、なぜ多くのバリエーションの1つを使用できないのdoubleですか? もはや利点がなくなっても、人々がフロートを使用することを主張する理由はありますか?すべてを変更するのは大変な作業ですか?

12
単体テストでファイルの内容/エンコードをチェックすることは「悪い習慣」と見なされますか?
少しのコンテキスト:今日、私は別の同僚が提供したいくつかのSQLコードを更新する必要がありました。それは非常に大きなスクリプトであるため、別個のファイルとして保存されます(その後、実行時に読み取られて実行されます)。これを行っている間に、数か月前にあった2つのバグを誤って再導入しました。 何らかの理由でASCIIファイルがUTF-16でエンコードされていました(同僚がファイルを電子メールで送信したため、ファイルが作成された可能性があります)。 スクリプトには初期SETステートメントがありませんでした(プロダクションでは一部のドライバーが必要ですが、ローカルでのクリーンインストールでは必要ありません)。 これを約1時間(再び)デバッグした後、これが二度と起こらないことを保証するためにいくつかの単体テストを書くことにしました(そして、将来の開発者に簡単な修正を提供するためにアサーションメッセージに修正する簡単な方法を含めます)。 しかし、このコードをプッシュしたとき、別の同僚(チームリーダーでもある)が近づいてきて、これらのことを二度とするべきではないと言った。 「これらのことは単体テストに属していません」 「ユニットテストは、コードのフローを確認するためにのみ使用してください」 このバグは将来再導入されないので、今やっていることは間違っていないと思うので、今はかなり対立していますが、この同僚は先輩として働いて、結局は何を決めるのですか?私たちは時間を費やしています。私は何をすべきか?このようにするのは間違っていますか?それは悪い習慣と考えられていますか?

7
ロボットはどのようにしてCAPTCHAを打ち負かすことができますか?
Webサイトの電子メールフォームがあります。カスタムCAPTCHAを使用して、ロボットからのスパムを防ぎます。それにもかかわらず、私はまだスパムを受け取ります。 どうして?ロボットはどのようにしてCAPTCHAを打ち負かしますか?ある種の高度なOCRを使用するのか、それとも保存場所からソリューションを取得するのか? どうすればこれを防ぐことができますか?別の種類のCAPTCHAに変更する必要がありますか? 電子メールはフォームから送信されていると確信しています。これは、フォームメッセージを送信する電子メール送信者から送信されるためです。文字スタイルも同じです。記録のために、私はPHP + MySQLを使用していますが、この問題の解決策を探しているわけではありません。ロボットがこれらの技術を打ち負かす一般的な状況に興味がありました。この状況を例として伝えたので、あなたが私が尋ねていることをよりよく理解することができます。
84 security  captcha 

4
リッチドメインモデル—正確に、動作はどのように適合しますか?
リッチドメインモデルと貧血ドメインモデルの議論では、インターネットは哲学的なアドバイスに満ちていますが、権威のある例は不足しています。この質問の目的は、適切なドメイン駆動設計モデルの決定的なガイドラインと具体例を見つけることです。(理想的にはC#で。) 実際の例では、このDDDの実装は間違っているようです。 以下のWorkItemドメインモデルは、Entity Frameworkがコードファーストデータベースに使用するプロパティバッグに他なりません。ファウラーごとに、それは貧血です。 WorkItemService層は、明らかにドメインサービスの一般的な誤解です。WorkItemのすべての動作/ビジネスロジックが含まれています。イェメリャノフなどによると、手続き型です。(ページ6) 以下が間違っている場合、どうすれば正しくできますか?AddStatusUpdateまたはCheckoutなど の動作はWorkItemクラスに属している必要がありますか? WorkItemモデルにはどのような依存関係が必要ですか? public class WorkItemService : IWorkItemService { private IUnitOfWorkFactory _unitOfWorkFactory; //using Unity for dependency injection public WorkItemService(IUnitOfWorkFactory unitOfWorkFactory) { _unitOfWorkFactory = unitOfWorkFactory; } public void AddStatusUpdate(int workItemId, int statusId) { using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork<IWorkItemUnitOfWork>()) { var workItemRepo = unitOfWork.WorkItemRepository; var workItemStatusRepo = …

11
GitHub用のGUIアプリがあるのになぜgitを学ぶのですか?
GitHubがMacとWindowsの両方にGUIアプリを提供しているとすると、コマンドラインからgitを使用することを学ぶことの利点は何ですか? 現在、Macアプリを使用してリポジトリを更新していますが、これまでのところ私のニーズを満たしているようです。何を見逃しているのでしょうか?
84 git  github 


10
マルチスレッドが難しい理由を説明する方法
私はかなり良いプログラマーであり、上司もかなり良いプログラマーです。彼はマルチスレッドなどのいくつかのタスクを過小評価しているように見えますが、それがどれほど難しいかはわかりません(いくつかのスレッドを実行し、すべてが完了するのを待ってから結果を返す以上のことは非常に難しいと思います)。 デッドロックや競合状態を心配し始めた瞬間、私はそれを非常に難しいと感じますが、上司はこれを感謝していないようです-私は彼がこれに遭遇したことはないと思います。ロックをたたくだけで、態度はほぼ変わりません。 それでは、どうやって彼を紹介したり、なぜ彼が並行性、並列処理、マルチスレッドの複雑さを過小評価しているのかを説明できますか?または多分私は間違っていますか? 編集:彼がやったことのほんの少し-リストをループし、そのリストの各アイテムに対して、そのアイテムの情報に基づいてデータベース更新コマンドを実行するスレッドを作成します。一度に実行されるスレッドの数を彼がどのように制御したかはわかりません。実行中のスレッドが多すぎる場合(キューはセマフォを使用しなかった場合)、キューに追加する必要があります。

11
個人(1人)プロジェクトのgit。やりすぎ?
私は、Subversionとgitの2つのバージョン管理システムを知っています。現在のところ、Subversionは私が唯一の開発者である個人プロジェクトに使用され、gitはオープンソースプロジェクトや、他の人もプロジェクトで作業すると信じているプロジェクトに使用されます。これは主に、gitの驚くべき分岐機能とマージ機能が原因です。誰もが自分のブランチで作業できます。とても便利な。 今、私は個人プロジェクトにSubversionを使用しています。gitはほとんど意味がないと思うからです。それは少しやり過ぎのようです。私が唯一の開発者であるときに(通常はホームサーバー上で)集中化されていれば問題ありません。とにかく定期的にバックアップを取ります。私は自分のブランチを作る能力を必要としません。メインブランチは私のブランチです。はい、SVNは分岐を簡単にサポートしますが、それより強力なサポートは意味がありません。マージはそれで苦痛になるか、少なくとも私の小さな経験からです。 個人的なプロジェクトでgitを使用する正当な理由はありますか、それとも単に過剰に過ぎますか?

18
欠陥をデザインし、それからの屈辱に対処する[非公開]
あなたが提案したソフトウェア設計において常に根本的に正しいのですか?基本的に間違っているデザインを提供すると、仲間のチームメンバーの尊敬を失う傾向があります。その後、あなたが何をしても、あなたはその事件の後にあなたが提案するすべてのものについてクロスチェックされることになります。これは、チームの初心者であり、彼らがあなたの過去の成功事例を知らない場合、特に悪化します。 たぶんあなたが悪いデザインを与えた理由は、その分野での経験や知識、あるいはその両方の不足が原因でした。そのような状況に直面したあなたはどのように対処しましたか?これはあなたのキャリアの中で一度きりのようなものですか、それともオンとオフで起こりますか?これを後回しにしているのですか、それともそのような状況にある人は新しい仕事を探す必要がありますか?正直なフィードバックをお願いします... ありがとうございました。
84 design 

6
なぜPythonの人気はそんなに突然でしたか?[閉まっている]
Pythonは1991年に初めて登場しましたが、2004年までTIOBEランキングが意味のあるものを定量化するかどうかは不明でした。 どうした?この13歳の言語への関心が屋根をくぐった原因は何ですか?Pythonが最初の10年間でPerlの本当の競争相手と見なされなかった理由はありますか?Pythonがさらに10年間、比較的あいまいな状態を続けなかった理由はありますか? 個人的にはPythonはとてもいい言語だと思います。私だけではないことを嬉しく思います。しかし、企業の支持や関連性の突然の上昇を説明するキラー機能はありません。 誰もが物語を知っていますか?

3
RESTとは(簡単な英語で)[終了]
最近、私はRESTに慣れることに興味を持ち始めました。RESTのwikiエントリを読んでみましたが、助けにはなりませんでした。誰かが簡単な英語で説明できるなら、それは本当にありがたいです(不必要な技術用語はありません) RESTとは Webアーキテクチャエコシステムで占める位置 プロトコルとどの程度緊密に(または緩く)結合されているか。 RESTの代替とは何か、RESTはそれらとどのように比較されますか。 1つまたは2つのパラグラフでこれに答えることができない場合があることを理解しています。その場合、関連リンクが高く評価されます。
84 rest 

13
分岐するかしないか?
最近まで、私の開発ワークフローは次のとおりでした。 製品所有者から機能を入手する ブランチを作成します(機能が1日以上の場合) ブランチに実装する メインブランチからブランチへの変更をマージします(後方マージ中の競合を減らすため) ブランチをメインブランチにマージする マージに問題があることもありましたが、一般的には気に入っています。 しかし、最近、継続的な統合や継続的な配信などを実践するのが難しくなるため、ブランチを作成しないというアイデアの信者が増えています。 Git、Mercurialなど 質問は、最近のブランチを使用する必要がありますか?

14
オンラインで本名を使用することの利点と欠点は何ですか?[閉まっている]
プログラマーとして、発明されたハンドルと比較して、オンラインの談話であなたの本当の名前を使用することで、専門家や他の利点を見ますか?私は常に単一のユーザー名で行っており、可能な場合はいつでも本名を表示していました。いくつかの理由があります オンラインでの私の興味はほとんど専ら専門家であり、船上です。 それは、どこでも私のすべての仕事の検索フレンドリーな公開ログを構築します。 誰かが私に連絡したいなら、それをする多くの方法があります。 私の仕事のポートフォリオはすべて個人的に結びついています。 完全な開示に対して考えられる短所は次のとおりです。 面倒なことに関与したいと思うなら、それはもっと難しいかもしれません。 あなたのプロジェクトを受け継ぐサイコパスは、あなたがどこに住んでいるかをより簡単に見つけることができます。 あなたは、あなたが有名な素晴らしいソフトウェアをもっと書くことに費やすことができる貴重な時間の価値がない人々によってスパムされるかもしれません。 仕事のポートフォリオはすべて個人的に結びついています。 とにかく、StackOverflowユーザーの大多数は本名ではなく、発明されたハンドルを使用しているようです。注目すべき例外には、業界でよく確立されている最も有名なユーザーが含まれます。しかし、私たちが名前を世間に知らなかったなら、どうして伝説のロックスタープログラマーになることができるでしょうか?議論する。

22
タブとスペース-あらゆる状況において、あらゆるものに適切なインデント文字は何ですか?[閉まっている]
drupal.orgでホストされているコードのコーディング標準では、2つのスペースを使用してコードをインデントすることを推奨しています。他のサイトでは、タブを使用してコードをインデントすることを推奨しています。 あらゆる状況、あらゆる状況で適切なインデント文字は何ですか?答えを説明してください。

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