ソフトウェア工学

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

6
オブジェクトプーリングは非推奨のテクニックですか?
私はオブジェクトプーリングの概念に非常に精通しており、常に可能な限りそれを使用しようとしています。 さらに、Java自体と他のフレームワークが可能な限りプーリングを使用することを確認したため、オブジェクトプーリングは標準的な標準であると常に考えていました。 最近、私にとってはまったく新しい(そして直感に反する?)ものを読みました。 このプーリングにより、特に同時実行アプリケーションでは特にプログラムのパフォーマンスが低下します。new新しいJVMではオブジェクトのインスタンス化が非常に高速であるため、代わりにオブジェクトをインスタンス化することをお勧めします。 私は本でこれを読みました: Java Concurrency in Practice 本の最初の部分では、新しいインスタンスを作成する代わりにExecutorsその再利用を使用するようにアドバイスされているので、ここで何かを誤解しているのではないかと考え始めていThreadます。 それでは、オブジェクトプーリングは非推奨になりましたか?

7
浮動小数点の丸めエラーの原因は何ですか?
浮動小数点演算には精度の問題があることを認識しています。私は通常、数値の固定10進数表現に切り替えるか、単にエラーを無視することでそれらを克服します。 しかし、この不正確さの原因はわかりません。浮動小数点数で丸めの問題が多いのはなぜですか?

15
カウボーイプログラマーにソース管理を使用するよう説得するにはどうすればよいですか?
更新 私は4人の開発者の小さなチームで働いています。それらはすべてソース管理を使用しています。それらのほとんどはソース管理に耐えられず、代わりに使用しないことを選択します。ソース管理は専門能力開発の必要な部分だと強く信じています。いくつかの問題により、ソース管理を使用するように説得することが非常に困難になります。 チームはTFSの使用に慣れていません。2回のトレーニングセッションを行いましたが、1時間しか割り当てられていませんでした。 チームメンバーは、サーバー上のコードを直接変更します。これにより、コードが同期しなくなります。最新のコードで作業していることを確認するためだけに比較が必要です。そして、複雑なマージの問題が発生します 開発者が提供する時間の見積もりには、これらの問題の修正に必要な時間は含まれていません。ですから、nonoと言うと10倍時間がかかります...これらの問題を絶えず説明し、自分自身を危険にさらす必要があります。 サーバー上の物理ファイルは、〜100ファイルにわたって未知の点で異なります。マージには、当面のプロジェクトの知識が必要であり、したがって、開発者の協力を得ることはできません。 他のプロジェクトは同期していません。開発者はソース管理に不信感を持ち続けているため、ソース管理を使用しないことで問題を悪化させています。 開発者は、マージはエラーが発生しやすく、難しいため、ソース管理の使用は無駄だと主張します。これは議論するのが難しいポイントです。なぜなら、ソース管理がひどく誤用され、ソース管理が継続的にバイパスされると、間違いが起こりやすいからです。したがって、彼らの見解では証拠は「それ自身のために語る」。 開発者は、サーバーコードを直接変更し、TFSをバイパスすると時間を節約できると主張します。これも議論するのが難しいです。開始するコードを同期するために必要なマージには時間がかかるためです。これに私たちが管理する10以上のプロジェクトを掛けます。 永続ファイルは、多くの場合、Webプロジェクトと同じディレクトリに保存されます。そのため、公開(完全公開)は、ソース管理にないこれらのファイルを消去します。これはまた、ソース管理に対する不信感を引き起こします。「公開するとプロジェクトが壊れる」ためです。これらの場所はweb.configで設定されておらず、多くの場合複数のコードポイントに存在するため、これを解決する(保存されたファイルをソリューションサブフォルダーから移動する)には多大な時間とデバッグが必要です。 だから、文化はそれ自体が持続します。悪い習慣はより悪い習慣を生みます。悪い解決策は、新しいハックを駆り立てて、より深く、より時間のかかる問題を「修正」します。サーバー、ハードドライブのスペースを手に入れるのは非常に困難です。それでも、ユーザーの期待は高まっています。 この状況で何ができますか?

3
Googleのリポジトリはどのようなものですか?
Googleにはすべてのコードの巨大なプライベート(内部)リポジトリがあり、従業員はそこにアクセスできるので、開発中に車輪を再発明する必要はありません。私はそれについてもっと知りたいです! Googleからもう少し詳しく説明できる人はいますか、それについてもう少し知っていますか?私は主に、それがどのように構成され、従業員がそのような巨大なコードベースで必要なものを簡単に見つけられるようにする方法について知ることに興味があります。

15
物事がうまくいかない場合のフラストレーションへの対処[終了]
シンプルなものを実装しようとしますが、何らかの奇妙な理由で機能しません。 そのため、可能な解決策を試してみますが、他の何かが機能しません。さまざまな回避策を試し続けていますが、毎回異なるものが機能していません。 一歩近づくたびに、この問題の解決からさらに1つ(またはそれ以上)のステップが得られ、現在では10時間かかっていたはずの3時間でした。そして、それはまだ解決されていません。 あなたの会社には誰も助けることができず、あなたはあなたの拳をあなたのスクリーンに入れようとしています。 この時点であなたはとてもイライラして、あなたはもはや問題についてはっきりと考えることができません。この時点で何をすべきですか?または、このポイントに到達しないようにするために何ができますか?

1
Software Development Managerの書面の役割[終了]
ソフトウェア開発マネージャーが何をするかは誰もが知っていますが、漠然としか知らないのではないでしょうか。私たちは彼が何をしているかを知っていると思いますが、仕事の範囲を正確にリストアップすることは少し難しいです。 あなたの意見では、ソフトウェア開発マネージャーの役​​割は何ですか?
62 management 


11
スペースの強化に対処しましたか?
スペースの強化に関しては、ベストプラクティスを研究したいと強く思っています。たとえば、私は(もう記事を見つけることはできませんが)火星探査機の中核部分は動的メモリ割り当てを使用していないことを読んでおり、実際には禁止されていました。私はまた、昔ながらのコアメモリが宇宙で好ましいかもしれないことを読みました。 Google Lunar Challengeに関連するいくつかのプロジェクトを見て、月に、または宇宙にさえコードを入れるのはどんな感じだろうと思っていました。スペースが強化されたボードは、このような過酷な環境である程度の健全性を提供することを知っていますが、(Cプログラマーとして)宇宙で実行する何かを書いている場合、どのように思考とコードを調整する必要があるのでしょうか? 私は今後数年間でプライベートスペース企業の成長がさらに見込めると思うので、少なくともベストプラクティスについてある程度知識を持ちたいと思っています。 断熱材に損傷を与えたボードに放射線、寒さ、または熱が衝突すると、プログラムはどうなりますか?目標は、宇宙船内に人間を置き(物の修理や交換に関する限り)、物事を修理するミッションを避けることだと思います。 さらに、ボードが重要なシステムを維持している場合、早期の警告が最優先されるようです。 テストと試行錯誤を通して、この経験をどのように得ることができますか(あなた自身の個人的な衛星の打ち上げがなければ)?
62 c  memory 

1
MITでライセンスされているGithubのプロジェクトをフォークした場合、帰属と著作権表示を処理する方法は?
MITプロジェクトをフォークし、大幅に変更して名前を変更する場合、メインライセンスファイルのMITライセンスの上にある著作権表示をどのように処理しますか。元の著者と私の会社、または元の著者のみをリストしますか?原作者の帰属に関する法的選択肢は何ですか?私もMITでソフトウェアのライセンスを取得し、オープンソースのままにしておきます。

5
依存性注入:フィールド注入vsコンストラクター注入?
私はこれが熱い議論であることを知っており、意見はベストアプローチの実践に関して時間とともに変化する傾向があります。 コンストラクターインジェクションの利点についてさまざまなブログ(例:petrikainulainenとschauderhaftとfowler)を読み始めるまで、クラスではフィールドインジェクションのみを使用していました。それ以来、必要な依存関係にはコンストラクター注入を使用し、オプションの依存関係にはセッター注入を使用するように方法を切り替えました。 しかし、私は最近、モック作成フレームワークであるJMockitの作成者との議論に参加しました。彼は、コンストラクターとセッターの注入を悪い習慣と見なし、JEEコミュニティが彼に同意することを示しています。 今日の世界では、注射を行う好ましい方法はありますか?フィールドインジェクションは好ましいですか? ここ数年フィールドインジェクションからコンストラクターインジェクションに切り替えたため、使用するのがはるかに明確になりましたが、自分の視点を再検討すべきかどうか疑問に思っています。JMockit(RogérioLiesenfeld)の著者はDIに精通しているため、コンストラクター/セッターインジェクションに対して非常に強く感じているので、私のアプローチを検討する義務があります。

14
MVCアンチOOPではありませんか?
OOPの背後にある主な考え方は、単一のエンティティ(オブジェクト)でデータと動作を統合することです。手続き型プログラミングには、データと、データを変更する個別のアルゴリズムがあります。 Model-View-Controllerパターンでは、データとロジック/アルゴリズムはそれぞれ別個のエンティティ、モデル、コントローラーに配置されます。同等のOOPアプローチでは、モデルとコントローラーを同じ論理エンティティに配置するべきではありませんか?

10
すべてのメソッドをテストする必要がありますか?
それで今日、チームメイトとユニットテストについて話しました。全体が始まったのは、彼が「ねえ、そのクラスのテストはどこにありますか、1つしか見えないのですか?」クラス全体がマネージャー(または、そのように呼び出したい場合はサービス)であり、ほとんどすべてのメソッドが単にものをDAOに委任しているため、次のようになりました。 SomeClass getSomething(parameters) { return myDao.findSomethingBySomething(parameters); } ロジックを持たない種類のボイラープレート(または、少なくともロジックのような単純な委任を考慮していない)ですが、ほとんどの場合(レイヤー分離など)に便利なボイラープレートです。そして、ユニットテストを行うかどうかについてかなり長い議論がありました(DAOの完全なユニットテストを行ったことは言及する価値があると思います)。彼の主な議論は、TDDではないこと(明らかに)、誰かがこのメソッドが何をするかを確認するためにテストを見たいと思うかもしれない(それがどのようにもっと明白になる可能性があるのか​​わかりません)、または将来誰かが変更したいかもしれないということです実装し、それに新しい(または「より多く」のような)ロジックを追加します(この場合、誰かが単純にそのロジックをテストする必要があると思います)。 しかし、これは私に考えさせられました。最高のテストカバレッジ%を目指して努力する必要がありますか?それとも、それは単に芸術のための芸術ですか?私は、次のようなテストの背後にある理由をまったく見ていません。 ゲッターとセッター(実際に何らかのロジックがある場合を除く) 「定型」コード 明らかに、このようなメソッド(モックを使用)のテストには1分もかかりませんが、それでも時間の無駄であり、CIごとに1ミリ秒長くなると思います。 コードのすべての(または彼ができる限り)行をテストする必要がある理由について、合理的/「可燃性でない」理由はありますか?

9
「良い」単体テストを書く方法は?
このスレッドをきっかけに、私は(再び)プロジェクトでユニットテストを最終的に使用することを考えています。そこのいくつかのポスターは、「テストは良いテストだとすれば、テストはクールだ」と言っています。私の今の質問:「良い」テストとは何ですか? 私のアプリケーションでは、主な部分は多くの場合、大量の観測データに応じた何らかの数値解析であり、このデータをモデル化するために使用できるフィット関数になります。可能な入力と結果の数が多すぎてすべてのケースをテストすることができないため、これらのメソッドのテストを構築することは特に困難であることがわかりました。この種の方法の「良い」テストに特に興味があります。

3
単一のスレッドは複数のコアでどのように実行されますか?
私は、シングルスレッドが複数のコアでどのように実行されるかを高レベルで理解しようとしています。以下は私の理解です。私はそれが正しいとは思わない。 Hyper-threadingの私の読書に基づいて、OSはすべてのスレッドの命令を、それらが互いに待機しないように編成しているようです。次に、CPUのフロントエンドは、各コアに1つのスレッドを配布することにより、これらの命令をさらに整理し、オープンサイクル間で各スレッドから独立した命令を配布します。 そのため、スレッドが1つしかない場合、OSは最適化を行いません。ただし、CPUのフロントエンドは、独立した命令セットを各コアに分配します。 https://stackoverflow.com/a/15936270によると、特定のプログラミング言語が作成するスレッドは多かれ少なかれありますが、それらのスレッドで何をすべきかを判断する際には無関係です。OSとCPUがこれを処理するため、使用されるプログラミング言語に関係なくこれが発生します。 明確にするために、単一のコアで複数のスレッドを実行するのではなく、複数のコアで実行される単一のスレッドについて尋ねています。 要約の何が問題になっていますか?スレッドの命令は複数のコアにどこでどのように分割されますか?プログラミング言語は重要ですか?これは広範なテーマであることを知っています。私はそれについて高レベルの理解を望んでいます。

12
アジャイル手法で優れたソフトウェアを開発する方法は?
顧客満足の狩野モデルは、製品機能のさまざまなクラスを定義します。それらの中には 必須の品質:これらが実装されていない場合、顧客は製品を受け入れません。 魅力的な品質(喜び):顧客が最初に期待することさえないが、発見されたときに興奮と喜びをもたらす機能。 魅力的な資質は明らかに多くのビジネス価値を持っています。5.000未満の使用済みフィアットがすべての必須要件を満たす場合、人々は500.000でフェラーリを購入します。 ただし、私が知っているすべてのアジャイルプロセスは、必須の要件を強く支持しています。これらは常に最高の優先度を取得します。アジャイルには魅力的な資質がある場所すらありません。 アジャイルプロセスはソフトウェア開発に非常に役立つと思います。しかし、どうすればそれらを適用して、必須の要件をかろうじて満たす最低限のものだけでなく、楽しい高品質のソフトウェア製品を作成できますか? 補遺:最初の2つの答えが指摘したように、必須要件に最高の優先順位を与えることは理にかなっています。しかし、私たち(および顧客)は、必要な要件が何であるかを事前に常に知っていますか 私は、最初に高い優先度が与えられた要件が、後で役に立たないとしても、それほど重要ではないことが判明したことを何度か経験しました。したがって、私は、必要な要件に慎重に焦点を合わせるべきではないと考えています。

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