ソフトウェア工学

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


7
新しいフレームワークを構築するための一般的なルールやベストプラクティスはありますか?
オープンソースのECMとやり取りするために、新しいフレームワークの設計と開発を開始する必要があります。これには、このECMと対話するWebサイト開発者を支援するカスタマイズされたデータモデルが含まれているため、ノード操作の詳細やその他の低レベルの詳細を気にする必要はありません。これは、開発するクラスとメソッドの集まりです。 そのプロジェクトの組織と管理をどのように扱うかについて、いくつかの疑問があります。従うべき一般的なルール、ヒント、ベストプラクティス、またはこの種のプロジェクトを開発する際に留意すべき点はありますか? フレームワークまたはライブラリの開発とアプリケーションの開発には多少の違いがあると確信しています。

3
ロープの終わりに[閉じた]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私は大企業の請負業者です。現在、プロジェクトには3人の開発者がいますが、私も含めています。 問題は、他の2人の開発者が実際に理解していないことです。「それ」とは、次のことを意味します。 彼らは私たちが使用している技術のベストプラクティスを理解していません。私と他の人が彼らに例を与えてから6ヶ月後、ひどいアンチパターンが使用されています。 彼らは、主にスパゲッティコードを生成する「コピーアンドペースト」プログラマです。 彼らは絶えず物事を壊し、変更を実施しますが、すべてが良いかどうかを確認するための基本的な煙のテストを行いません 彼らは、コードレビューの依頼を拒否/​​まれにしています。 彼らは、コードのフォーマットなどの基本的なことを拒否/まれに行います。 クラスに関するドキュメントはありません(jsdocs) 何もしないコードを削除することを恐れる バージョン管理を行っていても、コメントされたコードブロックはどこにでも残します。 他のコードをフォーマットし、バグを修正し、壊れた機能を発見し、スパゲッティを削除するための抽象化を作成するにつれて、私はますますイライラしています。 私は本当に何をすべきかわかりません。欲求不満にならないようにしていますが、それは単なる混乱です。私はこれらの人々を人間として気に入っていますが、コーディングの状況がひどく、一日中ウェブを閲覧していれば、より速く動くことができると感じています。 マネージャーに他のsvnコミットアクセスを確認するように依頼するのは行外でしょうか。コミットは、私たちがやっていることに精通している人によるレビュー後にのみ行うことができますか?請負業者として、それが最善の策かどうかはわかりません。 修正しているものの数を明確にする微妙な/それほど微妙でない方法はありますか?
17 bad-code 

4
依存性注入とシングルトン。それらはまったく異なる2つの概念ですか?
私は同僚のためにシングルトンを介した依存性注入の使用について聞いてきました。互いに置き換えることができる2つの直交パターンであるかどうかはまだわかりませんか?または、DIはシングルトンパターンをテスト可能にする方法ですか? 次のコードスニペットをご覧ください。 IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); SingletonConsumer型のパラメータを受け入れていますIMathFace。内部的にシングルトンクラスにアクセスする代わりにSingletonConsumer、呼び出し元から渡されたシングルトンインスタンスを取得します。これは、依存性注入を介してシングルトンクラスを使用する良い例ですか?

5
長いファイル名拡張子:どうして
私はiPad用のアプリを完成させています。ファイル名拡張子(主にMailとDropboxがファイルを開くプログラムを認識するために使用されます)は12文字です。に近い場所にある唯一のファイル名拡張子はtax2010です。なぜこのトピックにそれほどバリエーションがないのか、アプリに長いファイル名拡張子を使用するとどのような問題が予想されますか?これらのファイルは郵送、コピー、および共有されます*。 すべてのテストで、完全に機能します。 *願っています。

6
アヒルは多型のサブセットを入力しています
WIkipediaの多態性から コンピュータサイエンスでは、ポリモーフィズムはプログラミング言語の機能であり、さまざまなデータ型の値を統一されたインターフェイスを使用して処理できます。 ウィキペディアのカモタイピングから オブジェクト指向プログラミング言語を使用したコンピュータープログラミングでは、ダックタイピングは、特定のクラスまたは特定のインターフェイスの実装からの継承ではなく、オブジェクトの現在のメソッドとプロパティのセットが有効なセマンティクスを決定する動的なタイピングのスタイルです。 私の解釈では、アヒルのタイピングに基づいて、オブジェクトのメソッド/プロパティが有効なセマンティクスを決定します。オブジェクトの現在の形状が、保持するインターフェースを決定することを意味します。 ポリモーフィズムから、インターフェイスを維持している限り、複数の異なるデータ型を受け入れる場合、関数はポリモーフィックであると言えます。 したがって、関数が型をダッキングできる場合、複数の異なるデータ型を受け入れ、それらのデータ型に正しいメソッド/プロパティがあり、インターフェースを維持している限り、それらを操作できます。 (インターフェースという用語の使用は、コード構成ではなく、記述的で文書化された構成としての意味です) ダックタイピングとポリモーフィズムの正しい関係は何ですか? 言語がタイプをダッキングできる場合、それは多態性を実行できることを意味しますか?

2
Perl 5のスマートマッチ演算子が壊れていると見なされるのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は、Perlのスマートマッチ演算子が壊れているというウェブ上で多くのコメントを見てきました。元々はPerl 6の一部であり、古いバージョンの仕様からPerl 5.10で実装され、その後5.10.1で現在のPerl 6仕様と一致するように修正されたことを知っています。 この問題は5.10.1以降で修正されていますか、それとも実際に面倒なスマートマッチ演算子に他の問題がありますか? 問題は何ですか? 問題を修正する、さらに更新されたバージョン(おそらくPerl 6)がありますか? 編集:明確にするために、私はバグについてではなく、意図された動作~~が悪いという意見を聞いています。
17 perl 

5
最速ルートを決定するアルゴリズム?
1から5に行くとしましょう。最短ルートは1-4-3-5(合計60 km)です。 これには、ダイクストラのアルゴリズムを使用できます。 問題は、渋滞やその他の要因により、最短ルートが常に最速ルートとは限らないことです。 例えば: 1-2は頻繁に渋滞することが知られているため、避けるべきです。 4-3で突然自動車事故が発生するため、それも避ける必要があります。 等... 渋滞や事故がないため、おそらくルート1-4-5でスピードを上げることができるので、5に速く到着します。 まあそれは一般的な考え方であり、私はまだ詳細については考えていません。 この問題を解決するアルゴリズムはありますか?
17 graph  dijkstra 

4
どの時点でリリースビルドに切り替える必要がありますか?
Jez HumbleのContinuous Deliveryで設定されているプラ​​クティスの1つは、1つのパッケージをビルドしてから、展開先の各環境にリリースし、実稼働に移行する前に展開とアーティファクト自体が複数回テストされるようにすることです。 私はこの考えを完全に支持します。 一方、行番号付きのスタックトレースを提供するデバッグモードビルドは、リモートデバッグ機能と同様に、テスト環境で非常に便利です。しかし、リリースビルドを実稼働環境に送信する必要があります。 それでは、最初の原則に従う人々にとって、どの時点でデバッグからリリースビルドに切り替えるのですか? テスト環境への最初の展開の前に、デバッグモードを失うコストを計算することは、実際のリリース候補を早期にテストするために支払う価値がありますか?または、プロモーションプロセスのある時点で、ソフトウェアを介したビルドプロセスを信頼することを考えて、再度ビルドしますか?それとも、すべてを台無しにして、デバッグバージョンを運用環境に展開するだけですか? 注:通常、ビルド時にスイッチを設定するのではなく、設定でスイッチをフリックできるため、これはインタープリター言語には実際には適用されません。

5
どのバージョン管理システムがすべての側面を管理できますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 数ヶ月前、私はSubversionとGITを掘り下げましたが、がっかりしました。ソースコードは正常に処理されますが、他の側面は処理されません。たとえば、バージョン管理下のWebサイトでは、ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取り/書き込みアクセス、アクセス制御リスト、タイムスタンプ、データベースコンテンツを管理する必要があります。および外部リンク。1か月前のバックアップからリロードするのと同じくらい完璧な復帰を実行できるバージョン管理システムはありますか?

5
ペアプログラミング中にどのようにフローを達成および維持できますか?
Flowは、Mihaly Csikszentmihalyiによって導入された概念です。要するに、それは「ゾーン」に入ることを意味します。集中して仕事に没頭しているように感じます。このタスクは困難ですが、同時に挑戦的です。人々がフローを達成すると、生産性が急上昇します。プログラミングでは、頭の中でいくつかのことを一度に処理する必要がある場合が多いため、精神的に集中する必要があります。多くの人は、仕事に全力を注ぐことができる静かな環境で働くのが好きです。中断された場合、フローに戻るまでに数分または数時間かかる場合があります。 アジャイル開発には、ペアプログラミングと呼ばれる極端なプログラミングのプラクティスがあることを理解しています。つまり、コミュニケーションがシームレスになるように、ソフトウェア開発チーム全体を1つの部屋に配置します。ペアでコードを書くのは、この方法ですぐにコードレビューを取得し、バグが少なくなるためです。 絶え間ない中断のため、ペアプログラミング中にフローを達成するのに常に問題がありました。私は問題について深く考えており、突然誰かが私に別のペアから質問をします。私の思考の流れが失われます。 ペアプログラミング中にどのようにフローを達成および維持できますか?

2
抽象例外スーパータイプ
投げることSystem.Exceptionがとても悪いと考えられるなら、そもそもなぜException行わabstractれなかったのですか? そうすれば、以下を呼び出すことはできません。 throw new Exception("Error occurred."); これにより、派生した例外を使用して、発生したエラーに関する詳細を提供することができます。 たとえば、ライブラリのカスタム例外階層を提供する場合、通常、例外の抽象基本クラスを宣言します。 public abstract class CustomExceptionBase : Exception { /* some stuff here */ } そして、より具体的な目的を持ついくつかの派生した例外: public class DerivedCustomException : CustomExceptionBase { /* some more specific stuff here */ } 次に、ライブラリメソッドを呼び出すときに、この汎用try / catchブロックを使用して、ライブラリからのエラーを直接キャッチできます。 try { /* library calls here */ } catch (CustomExceptionBase ex) …

5
大規模なアプリケーションをコーディングするときにVimを使用する
私はVimを学び始めており、stackexchangeでここで与えられたいくつかのアドバイスに従っています。私はいくつかのおもちゃのプロジェクトでそれを使い始めています、そしてそれで私はクールです。 しかし、そのクラスの名前や他のファイルに含まれるマクロなどを知るためだけに、常に他のファイルを開かずに生産性を高めることができるのだろうかと思い始めました。 あなたが与えることができる一般的なアドバイスは何ですか?

2
DDD-Liteは依存性注入のパターン言語ですか?
グレッグヤングの講演7:20でDDD-Liteと呼ばれるものに言及したDDDプロジェクトが失敗する7つの理由に出会った。 要約すると、彼は基本的に、DDDに関連することを何もせずにパターン言語(エンティティ、リポジトリ、値オブジェクト、サービスなど)としてDDDを使用する人もいると言います。彼は、.Netのドメインモデルの60%以上がDDD-Liteであると仮定しています。彼は、DDD-Liteが基本的に依存性注入に関する言語を構築していると考えています。彼は、DDDを完全に実行するか、もっと簡単なことを行うと言います。そうでなければ、彼は、人が良い抽象化を構築するためにこの仕事のすべてを出しているが、本当の利益なしであると主張します。 私はDDDについてあまり知りたいとは思わないので、まだ使用しようとしていません。また、エリック・エヴァンの本も読んでいません。私はずっとエリック・エヴァンスDDD帳から、この主題の使用条件と参照概念に依存性の注入と、多くの、多くの書籍やブログに興味を持って。ここで、DDDの概念に触れました。私がこれを読んでいる本には以下が含まれます: .NETでの依存性注入 Microsoft .Net:企業向けアプリケーションの設計 .NETでのブラウンフィールドアプリケーション開発 依存性注入を実行したい場合、「DDD-Lite」を実行するより簡単な代替手段は何ですか?良い抽象化を構築することは、DDDの概念を「DDD-Lite」の方法で使用しているかどうかに関係なく、非常に役立つように思えます。(Mark Seemannのブログ投稿を参照してください。インターフェースは抽象化ではありません。より良い抽象化に向けて)。依存性注入を行っているすべての人が、本格的なDDDを実行している(または実行する必要がある)ことを信じるのは困難です。グレッグヤングのDDD-Liteについての議論を何らかの形で誤解しましたか?

8
組み込みデバイスでTDDを実行するにはどうすればよいですか?
プログラミングは初めてではなく、AVRで低レベルのCおよびASMを使用したこともありますが、大規模な組み込みCプロジェクトを回避することはできません。 RubyのTDD / BDDの哲学に退化されているため、このようなコードを作成してテストする方法を理解することはできません。私はそれが悪いコードだと言っているのではなく、これがどのように機能するのか理解していません。 低レベルのプログラミングにもっと入りたいと思っていましたが、これにどのようにアプローチするのか全く分かりません。それは私が慣れ親しんだまったく異なる考え方のように見えるからです。ポインターの計算やメモリの割り当ての仕組みを理解するのに問題はありませんが、Rubyと比較して複雑なC / C ++コードがどのように見えるかを見ると、信じられないほど難しいようです。 すでにArduinoのボードを注文しているので、低レベルCをさらに理解して、物事を適切に行う方法を本当に理解したいと思いますが、高レベル言語のルールは適用されないようです。 組み込みデバイスでTDDを実行したり、ドライバーやカスタムブートローダーなどを開発したりすることも可能ですか?

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