ソフトウェア工学

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

3
テスト対象のクラスの一部を偽造しても大丈夫ですか?
クラスがあるとしましょう(不自然な例とその悪いデザインを許してください): class MyProfit { public decimal GetNewYorkRevenue(); public decimal GetNewYorkExpenses(); public decimal GetNewYorkProfit(); public decimal GetMiamiRevenue(); public decimal GetMiamiExpenses(); public decimal GetMiamiProfit(); public bool BothCitiesProfitable(); } (GetxxxRevenue()およびGetxxxExpenses()メソッドには、スタブ化された依存関係があることに注意してください) 現在、GetNewYorkProfit()とGetMiamiProfit()に依存するBothCitiesProfitable()を単体テストしています。GetNewYorkProfit()とGetMiamiProfit()をスタブしても大丈夫ですか? そうしないと、GetNewYorkProfit()とGetMiamiProfit()をBothCitiesProfitable()と同時にテストしているようです。GetxxxProfit()メソッドが正しい値を返すように、GetxxxRevenue()およびGetxxxExpenses()のスタブを設定する必要があります。 これまでのところ、内部メソッドではなく外部クラスのスタブの依存関係の例を見てきました。 そして、それが大丈夫な場合、これを行うために使用すべき特定のパターンはありますか? 更新 コアの問題を見逃しているのではないかと心配しています。これはおそらく私の貧弱な例のせいです。基本的な質問は、クラス内のメソッドが、その同じクラス内で公開されている別のメソッドに依存している場合、その他のメソッドをスタブ化しても大丈夫(または推奨)ですか? たぶん何かが欠けているかもしれませんが、クラスを分割することが常に意味があるかどうかはわかりません。おそらく、もう1つの最小限の良い例は次のとおりです。 class Person { public string FirstName() public string LastName() public string FullName() } ここで、フルネームは次のように定義されます: public string …

4
動的言語と静的言語のアーキテクチャの違い
静的言語(C#やJavaなど)と動的言語(RubyやPythonなど)で構築されるアプリケーションを設計するときに、アーキテクチャ上の大きな違いはありますか? 一方のタイプに適した設計で、もう一方のタイプに悪い設計の可能性はどれですか?一方のタイプでは実現できない便利な機能がありますが、他のタイプでは実現できません(もちろん、設計とアーキテクチャにおいて)。 また、ダイナミック固有のデザインパターンはありますか?

7
HTML5ローカルストレージを使用してCSSとJavaScriptを保存するのは現実的ですか
考えは、頻繁にアクセスされるCSSとJavaScriptを保存するためにHTML5ローカルストレージを利用することです。 例(擬似コード): var load_from_cdn = true; if(ローカルストレージを検出) { if(cssのキャッシュ、jsが見つかった) { ローカルストレージキャッシュをロードする load_from_cdn = false; } } if(load_from_cdn) { document.write( '<script> ...'); } これは可能ですか、現実的ですか? 私はブラウザのキャッシュを認識していますが、まだいくつかのヘッダーアクセスチェックがあり ますが、HTTPアクセスの方が良いと仮定しています(私の考えでは) PS:ローカルストレージはキーと値のペアのみをサポートしているようですが、誰かがそれを証明できますか? (いくつかの例に最適)

8
プロジェクト後の会議は時間の無駄ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 私の職場では、深刻な成長痛がありました。私たちは3から10の開発チームから出発し、会社自体はこの1年で30%成長しました。ほとんどの測定では、私たちはうまくやっています。残念ながら、ソフトウェアの品質が低下しています。 今日、部門のマネージャーとのミーティングで、製品の発売から1〜2日後にプロジェクトチームのミーティングを提案しました。予算の懸念、範囲、何がうまくいかなかったか、何がうまくいったかを話し合うことができました。理想的には、私たちの過ちから学ぶ。私たちは他の人々のためにサイト/アプリを構築しているので、私たちの時間は非課金に対して請求可能です。このような会議は後者に該当します。 私のマネージャーは、すぐにそれを打ち切りました。「その時間は請求対象ではありません。それについて話しているその時間の終わりに時間を浪費するので、私たちは別のプロジェクトに遅れをとります。」私はこの論理に不意を突かれたので、彼と戦うことさえしませんでした。 だから私の質問:私は価値がプロジェクト後の会議であると思いますが、彼はそうではありません。長期(または短期)で時間とお金を節約するのに役立つプロジェクト後の会議の証拠が文書化されていますか?直感的にはそうなるだろうと思うが、彼は明らかに、そこにいる必要がある5人の少額の請求できない時間をより心配している。

11
基礎数学はプログラミング言語によってどのように効率的に評価されますか?
プログラミングの背後にある理論にますます関与していくにつれて、一見単純なことに魅了され、umb然とするようになります。 Q:これはどのように機能しますか? A:そうだから! 私はこの実現が嫌いです!私は知識が大好きで、それに加えて学習も大好きです。それが私の質問につながります(それは広義の質問ですが)。 質問: 基本的な数学演算子はプログラミング言語でどのように評価されますか? 現在の方法はどのように改善されましたか? 例 var = 5 * 5; 私の解釈: $num1 = 5; $num2 = 5; $num3 = 0; while ($num2 > 0) { $num3 = $num3 + $num1; $num2 = $num2 - 1; } echo $num3; これは非常に効率が悪いようです。高い係数を使用すると、このメソッドは非常に遅くなりますが、標準の組み込みメソッドは瞬間的です。加算を繰り返さずに乗算をどのようにシミュレートしますか? var = 5 / 5; これはどのように行われますか?文字通り5を5つの等しい部分に分割する方法は考えられません。 var = …
22 math  evaluation 

4
私たちはSubversion Geeksであり、Mercurialの利点を知りたい[非公開]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私はSubversionオタクだということを読んだので、なぜMercurialやGitまたはその他のDVCSを検討すべきか、検討すべきではないのか。 関連するフォローアップの質問があります。私はその質問を読み、推奨されるリンクとビデオを読んで、その利点を見ましたが、人々が話している全体的なマインドシフトは見ていません。 私たちのチームは、60のプロジェクトで構成される1つの大きなコードベースで作業する8〜10人の開発者です。Subversionを使用し、メイントランクを持っています。開発者が新しいFogbugzケースを開始すると、svnブランチが作成され、ブランチ上で作業が行われ、完了したらトランクにマージされます。場合によっては、ブランチに長時間滞在し、トランクにブランチをマージして変更を反映することがあります。 Linusがブランチを作成し、二度とブランチを作成しないことについて話すのを見たとき、それはまったく私たちではありません。おそらく週に50〜100のブランチを問題なく作成します。最大の課題はマージですが、私たちもそれをうまく得ています。ブランチのルート全体ではなく、fogbugz case&checkinでマージする傾向があります。 リモートで作業することも、ブランチからブランチを作成することもありません。コードベースのそのセクションで作業しているのがあなただけなら、トランクへのマージはスムーズに進みます。他の誰かがコードの同じセクションを変更した場合、マージが面倒になり、手術が必要になる場合があります。競合は競合です。コードを理解できるほど賢くなければ、ほとんどの場合、どのシステムでもそれを正しく実現できるとは思いません。 ブランチを作成した後、以下の60k +ファイルのチェックアウトには時間がかかりますが、これは使用するソース管理システムの問題です。 DVCSには、私たちにとって大きな助けになるとは思えない利点がありますか?
22 git  svn  mercurial  dvcs 

10
「開発者の不適切な最適化の直感」を回避するにはどうすればよいですか?
この声明を発表した記事を見ました: 開発者は、適切な理由でコードを最適化することを好みます。それはとても満足で楽しいです。ただし、最適化のタイミングを知ることははるかに重要です。残念ながら、開発者は一般に、アプリケーションのパフォーマンスの問題が実際にどこにあるのかについて恐ろしい直感を持っています。 開発者はこの悪い直感をどのように回避できますか?コードのどの部分が本当に最適化が必要かを見つけるための優れたツールはありますか(Javaの場合)?このテーマに関する記事、ヒント、または良い読み物を知っていますか?
22 java  performance 

14
仕事の後の仕事のために無料のプログラミング作業をする動機は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、、ヘルプセンターをご覧ください。 閉まっている 6年前にました。 私はプロジェクトのために残業するのではなく、R&D、または会社に利益をもたらすテストベッドアプリケーションについて話している。これらは教育ツールになり、最終的には販売ツールになります。聞いてみるのもおかしく聞こえますが、急速に変化するテクノロジーに関するこの業界の傾向と、プログラマーが社内で得た時間外の知識を持ち込むことに関する問題が見られます。自然に溢れると思うかもしれませんが、仕事は会社によって、そして今は会社の所有物によって「管理」されるので、ほとんどのリードは抑制しています。実際に何かをテーブルに持ち込んで報酬を得ることができる、やり取りを刺激する堅実なプログラムやイニシアチブはありますか? 編集 誰でもこれについて追加のフィードバックを提供できますか? 実際に何かをテーブルに持ち込んで報酬を得ることができる、やり取りを刺激する堅実なプログラムやイニシアチブはありますか? ここには誤解があるようです。一部のユーザーは、同僚から無料で仕事を得る方法を見つけようとしている印象を受けています。まさにその逆です。存在するプログラム、またはあなたが持っているアイデアがあなたをやる気にさせてくれるかどうかを知りたい。それは必ずしもお金である必要はない。

8
Scalaはプライムタイムの準備ができていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 Scalaを使ってささいなことをいくつかやったので( "hello world"と不自然なアプリケーションが大好きです!)、開発をサポートするツールの成熟度と、一般的な適用可能性については疑問に思っています。ツールセットは準備ができていますか?Scalaはエンタープライズ/ビジネスアプリケーションでの使用に適していますか?自明ではないプロジェクトで「あなた」はそれを使用しますか? 私の(おそらく根拠のない)懸念事項のいくつかは次のとおりです。 IDEおよびツールセットは、.netおよびjavaアプリケーションを開発するために必要なものと同じくらい豊富ですか(ScalaのEclipseはJavaのEclipseと比較して制限されているようです)? ビルド/ CI /テストツールセットはScalaを効果的に処理できますか? その言語で書かれた(奨励された)簡潔なコードはどの程度保守可能か? Scalaの経験を持つ開発者を見つけることは可能ですか? オンラインのリファレンスや、言語の「イントロ」以上の本を通して助けを得るのに十分なクリティカルマスはありますか? 結論として、エコシステムは現在使用できるほど成熟しているか、それとも進化の様子を待つほうがよいのでしょうか? 編集:「non-trivial」は、複数年、複数リリース、10〜20人の開発者プロジェクトだとしましょう。
22 scala 

10
スクラムチームの支配的なチームメンバー
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 チームメンバーが最初に彼にではなく、スクラムマスターに割り当てられている責任をとろうとする状況で、あなたは何をしますか?

15
すべての関数/メソッド引数を新しい行にリストするのは悪い考えですか?なぜですか?
私は、関数を呼び出すたびに引数を新しい行に置く人と仕事をしています。 aFunction( byte1, short1, int1, int2, int3, int4, int5 ) ; コードが非常にコンパクトではないことを意味するため、これは非常に迷惑です。したがって、実際にロジックを理解するには、さらに上下にスキャンする必要があります。これが実際に悪い慣行であるかどうかを知りたいのですが、もしそうなら、どうすれば彼らにそれをしないように説得できますか?

6
アスペクト指向プログラミング:フレームワークの使用を開始するタイミング
グレッグ・ヤングがKISSに人々に警告するこの講演を見ました:Keep It Simple Stupid。 彼が提案したことの1つは、アスペクト指向プログラミングを行うために、フレームワークを必要としないということです。 彼は強力な制約を作成することから始めます。すべてのメソッドは1つだけのパラメーターを取ります(ただし、彼は部分適用を使用してこのパラメーターを少し緩めます)。 彼が与える例は、インターフェースを定義することです: public interface IConsumes<T> { void Consume(T message); } コマンドを発行したい場合: public class Command { public string SomeInformation; public int ID; public override string ToString() { return ID + " : " + SomeInformation + Environment.NewLine; } } コマンドは次のように実装されます。 public class CommandService : IConsumes<Command> { …

7
あなたが主な開発者である小さなスタートアップをやめますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 同様の状況にあったかもしれない他の人から聞いてみたいだけです。私は小さなスタートアップ(非常に小さい)で働いており、私は彼らが構築しているアプリの大部分の主な開発者であり、他の開発者は私とは異なる仕事をしています。私は会社に5ヶ月かそこら滞在しましたが、あまりにも多くのストレス、残業、プレッシャーなどになりすぎて利益が少なすぎて、他の会社と仕事をするのが恋しいので、すぐにもっと安定した会社に行くことを考えていますプロジェクトを支援できる開発者。男は私の仕事に満足しており、彼らがかなり遠くに行くのを助けたと思いますが、会社の方向性を伝えるのが難しいので、これほど「エッジ」にいるのが好きではないことに気付きましたとても新しいからです。また、私は 詳細を追加するだけで、私は会社のパートナーでも何でもありません。これについては議論されなかったので、W2に取り組んでいます(もちろん利点はありません)。私は家で仕事をしているので、退社しやすくなっていると思いますが、私はただ男をめちゃくちゃにしたくないだけでなく、あまりにも長く縛られたくはありません。少なくとも2週間は通知する予定ですが、もっと通知する必要がありますか?私はそれを育てるのが面倒なことになるのを知っているので、どのように私は主題を育てる必要があります。どんなアドバイスも大歓迎です 更新:これについて投稿してくれたすべての人に感謝します。私は今、大企業とのオファーを受け入れ、スタートアップを終了するプロセスを完了しました。私は2週間前に通知し、その後必要に応じて利用可能にすることを提案しました。基本的にはこの時点では本当に小さな会社なので、対処しなければならないのは1人の開発者だけです...とにかく、それはそうです将来の仕事のために創業者と良好な関係を維持する限り、うまくいくかもしれませんが、私は彼らの欠陥/欠点よりも個人的/ライフスタイルの問題であることがわかりました。
22 startup 

2
dylibとは何ですか?
私はiphoneアプリを開発していて、libz.dylibを使用するサンプルコードをいくつか見ていきました。libz.dylibをzipファイルに使用できること以外、いくつかの調査を行ったところ、啓発的なものは見つかりませんでしたが、他のフレームワークが好まれています... 私はpdfサンプルを扱っていますが、なぜlibz.dylibを使用するのですか?一般に、dylibとは何ですか?そして、なぜすべてのバージョンですか?

11
継続的インテグレーションシステムのベビーシッター
私のチームにおける私の役割の1つはビルドパーソンです。私は、ビルドスクリプトを維持/更新し、継続的インテグレーションサーバー上で「スムーズに」ビルドすることを確認する責任があります。私は通常、この仕事を気にしませんが、CIサーバーを常にベビーシッターしているように感じることがよくあります。 ビルドが中断した場合、作業中のストーリーを削除し、ビルドの失敗を調査する必要があるため、このジョブは時々面倒な場合があります。ビルドの失敗はチームで毎日発生します。開発者は、コミットする前にローカルでビルドしない場合があるため、CIサーバーでのテストは失敗します。この状況では、ビルドがあまりにも長く壊れないように、「悪いコミット」をした人にすぐに連絡を取りたいです。CIサーバーに、デバッグする必要のある奇妙な状態が時々(はるかに少ない頻度で)存在します。 多くの成熟したチームが継続的インテグレーションを使用していることは知っていますが、優れたプラクティスに関する資料はあまりありません。 私の問題は、継続的インテグレーションがあまり成熟していない、またはこれが単なる仕事の一部であると指摘していますか? 従うべきいくつかの良い習慣は何ですか?成熟した継続的インテグレーションの特徴は何ですか? 更新 いくつかのコメントに答える代わりに、代わりに更新を行います。アプリをビルドするときにビルドサーバーが実行することを正確に実行する単一のシンプルなコマンドがあります。コンパイル、すべてのユニット/統合、およびいくつかのクイックUIベースのテストを実行します。 みんなの答えを読んで、2つの大きな問題があるかもしれないと感じています。 ビルドが失敗したときにCIサーバーが十分に不平を言っていない。 開発者は、コミットが正常に実行されることを確認する責任を全員に負わないと感じています。 私のチームで物事を難しくしているのは、大規模なチーム(10人以上の開発者)がいて、仕事をしていないときでも、数人のオフショアチームメンバーがコミットしていることです。チームが大規模であり、頻繁な小さなコミットが好ましいことを確立したため、1日で実際に多くのアクティビティを行うことがあります。

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