ソフトウェア工学

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

4
なぜ依存性注入のためのフレームワークが必要なのですか?[閉まっている]
Inversion of Controlの原則とDependency Injectionをその実装としてさらに読んでいますが、それを理解していると確信しています。 基本的に「クラス内でクラスメンバーのインスタンス化を宣言しない」と言っているようです。むしろ、インスタンス化はコンストラクターに渡され、コンストラクターを通じて割り当てられる必要があります。外部ソースからクラスに「注入」されました。 それがそうであるように思えるこの単純な場合、注釈を使用してこれを実装するspringやguiceのようなフレームワークが必要なのはなぜですか?ここに基本的なものがありませんか?Dependency Injectionフレームワークの使用方法を理解するのに本当に苦労しています。 編集:可能性のある重複について、私の質問はSpringだけでなく一般的なDIフレームワークについて尋ねているため、よりユニークだと思います。Springは単なるDIフレームワークではないため、DIに関係のないSpringを使用したい理由はたくさんあります。

1
APIを使用しないプログラムにセマンティックバージョニングを適用する方法
でhttp://semver.org/ -which私の認識では、ブレークは/ APIを変更し、その変更が導入されたときにメジャーバージョン番号を増やすことをお勧めしますversioning-で最も広く使用されている慣例のようです。 ただし、このガイドラインの適用方法がわからない2つの関連シナリオがあります。 コードがAPIを提供しない場合はどうなりますか?コードをバージョン管理するにはどうすればよいですか? コードの開発後期にAPIの提供を開始したらどうなりますか?


6
大きなファイルのリファクタリングを処理する最良の方法は何ですか?
現在、残念ながらソフトウェア品質ガイドラインが常に守られているわけではないファイルを含む、より大きなプロジェクトに取り組んでいます。これには、明らかに複数の異なる機能を含む大きなファイル(2000〜4000行を読む)が含まれます。 次に、これらの大きなファイルを複数の小さなファイルにリファクタリングします。問題は、彼らがとても大きいので、異なるブランチの複数の人々(私を含む)がこれらのファイルで作業していることです。ですから、これらのリファクタリングを他の人々の変更とマージすることが難しくなるので、私は実際に開発とリファクタリングから分岐することはできません。 もちろん、全員がマージしてファイルを開発し、ファイルを「フリーズ」し(つまり、誰もファイルを編集できないようにする)、リファクタリングしてから「フリーズ解除」する必要があります。しかし、リファクタリングが完了するまでこれらのファイルに対する作業を基本的にすべて停止する必要があるため、これもあまり良くありません。 だから、リファクタリングする方法がありますか、他の誰かに作業を停止することを要求しないでください(長い間)、または開発のために機能ブランチをマージして戻しますか?


9
カスタムプロパティを持つJSブール値は悪い習慣ですか?
JSでは、カスタムプロパティを持つブール値を返すことができます。例えば。Modernizrは、ビデオサポートのためにテストするときに返すtrueかfalseが、返されたブール(ブール値は、JSでのファーストクラスのオブジェクトである)の形式がサポートされているものを指定するプロパティがあります。最初は少し驚きましたが、そのアイデアが好きになり始め、なぜそれが控えめに使用されているのか疑問に思い始めましたか? 基本的に何かが真であるか偽であるかを知りたいすべてのシナリオを扱うエレガントな方法のように見えますが、カスタム戻りオブジェクトを定義することなく、または準備されたコールバック関数を使用せずに定義できる追加情報に興味があるかもしれませんより多くのパラメーターを受け入れます。この方法により、より複雑なデータを返す能力を損なうことなく、非常に普遍的な関数シグネチャを保持できます。 私が想像できる3つの議論があります: インターフェイスが明確でトリッキーではない方がおそらく良い場合、それは少し珍しい/予期しないことです。 これはストローマンの議論かもしれませんが、それは少しエッジケースであるため、JSオプティマイザー、uい、VMで静かに裏目に出るか、または言語仕様のマイナーな変更などで静かに裏目に出ることを想像できます。 より正確な、簡潔で、明確で一般的な-まったく同じ方法があります。 だから私の質問は、追加のプロパティでブール値を使用することを避ける強力な理由はありますか?彼らはトリックまたは御treat走ですか? ねじれ警告をプロットします。 上記は元気な質問です。Matthew Crumleyとsenevoldsenの両方が指摘したように、それは誤った(偽の?)前提に基づいています。優れたJSの伝統では、Modernizrが行うことは言語のトリックであり、汚いものです。要するに、falseに設定された場合、プロップ(サイレントに失敗する)を追加しようとしてもfalseに設定されるプリミティブboolを持つJSと、カスタムプロップを持つことができるが、オブジェクトであるブールオブジェクトは常に真実です。Modernizrは、ブール値falseまたは真実のブール値オブジェクトを返します。 私の元々の質問は、トリックの動作が異なると想定していたため、最も一般的な回答は、コーディング標準の側面(完全に有効)を扱っています。しかし、私はトリック全体を暴く答えが最も役立つと思います(そして、メソッドを使用することに対する究極の引数も)ので、私はそれらの1つを受け入れています。すべての参加者に感謝します!

13
Any()がnull参照例外をスローしないことを期待するのは理不尽ですか?
拡張メソッドを作成する場合、もちろん、それを呼び出すことができnullます。ただし、インスタンスメソッドの呼び出しとは異なり、nullで呼び出す場合、aをスローする必要はありませんNullReferenceException->手動でチェックしてスローする必要があります。 Linq拡張メソッドの実装について、Any()MicrosoftはArgumentNullException(https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs)をスローすることを決定しました。 書かなければならないのはイライラする if( myCollection != null && myCollection.Any() ) このコードのクライアントとして、例えば((int[])null).Any()戻るべきだと期待するのは間違っていますfalseか?

6
データベースから文字列として日付を返さないのはなぜですか?
典型的なWebアプリケーションでは、日付は強く型付けされたデータベースレイヤーから取得されます(たとえば、c#ではSystem.StringではなくSystem.DateTimeとして)。 日付を文字列として表現する必要がある場合(ページに表示するなど)、DateTimeから文字列への変換はプレゼンテーション層で行われます。 どうしてこれなの?DateTimeをデータベース層の文字列に変換するのはなぜ悪いことですか? チャットでの激しい議論や、これを始めた最初の質問も見てください。

5
スピンロックはポーリングとどう違うのですか?
スピンロックとポーリングは同じものですか? ウィキペディア: スピンロックは、ロックを取得しようとするスレッドに、ロックが使用可能かどうかを繰り返し確認しながら、単純にループ(「スピン」)で待機させるロックです。 これはひどく似ています: while(!ready); 可能な限りポーリングを避けるように教えられましたが、それは完全に準最適なものだったからです。それで、スピンロックは悪い古いポーリングの派手な名前ですか?スピンロックはポーリングとどう違うのですか?
41 locks  kernel  polling 

6
なぜ「スプリント」という言葉を使用するのですか?
アジャイルマニフェストの設立原則の一つは アジャイルプロセスは持続可能な開発を促進します。スポンサー、開発者、およびユーザーは、一定のペースを無期限に維持できる必要があります。 スクラムチームは、スプリントという用語を使用してワークサイクル(反復とも呼ばれます)を指します。 しかし、これは私には意味がありません。Googleによると、スプリントは次のとおりです。 短距離で全速力で走る。 言い換えれば、それは持続可能ではありません。なぜスクラムチームはスプリントという言葉を使用するのですか?私には、アジャイルの基本原則の1つと対立するように思われます。

7
アプリケーションがローカルでのみ処理を行う場合、データベースサーバーを使用する意味がありますか?
基本的にはシステムに対してローカルで実行されるアプリケーションソフトウェアであるアプリケーションを見てきました(したがって、それらはネットワークを介してあまり通信しません)。これらのアプリケーションは、データを保存するためにデータベースサーバーに依存しているようです。 アプリケーションの例は、Amarok(Linuxで人気のある音楽プレーヤー)です。彼らがまだこれを行うかどうかはわかりませんが、Amarokをインストールすると、MySQLサーバーをインストールし、常にバックグラウンドで実行する必要があったことを覚えています。 sqliteのような小さな埋め込みSQLソリューションを使用する場合と比較して、ローカルストレージにサーバーを使用する利点は何ですか?私はアプリケーションソフトウェア全般について話しているが、必ずしもamarokとは限らない(これは単なる例である)。組み込みデータベースと比較して、データベースサーバーの使用が理にかなっている状況はありますか?

13
変数を宣言するときにデータ型を指定する必要があるのはなぜですか?
ほとんどのコーディング言語(すべてではないにしても)では、変数を宣言する必要があります。たとえば、C#では、その数値フィールドが int PhoneNumber 私は、通常の英語を使用している場合は、私は宣言する必要はありませんPhoneNumberようintにそれを使用します。たとえば、友人のサムに電話番号を教えてもらったら、 「サムが電話番号を教えて」 言わない 「Char(20)サムがint phoneNumberをくれた」 データ型を指定する必要があるのはなぜですか?

13
ランダムな見知らぬ人からのソースコードをコンパイルすることはどれくらい安全ですか?[閉まっている]
求職者がスキルを証明するために送信するコードをレビューするとします。明らかに、彼らが送信する実行可能ファイルを実行したくない。それほど明確ではありませんが、コードのコンパイル結果を実行したくないのです(たとえば、Javaではコメント内の実行可能なコードを非表示にできます)。 コードをコンパイルするのはどうですか?私のコンパイラを悪用する巧妙な文字シーケンスがコードに含まれていて、コンパイラがマシンを危険にさらしている場合はどうでしょうか? 「コンパイラーの脆弱性」をGoogleで検索すると、コンパイラーの最適化とコードの発行、および発行されたコードが元のソースコードの意図どおりに安全であるかどうかがヒットします。 コンパイラーは通常、いくつかの巧妙なコードをコンパイルするときにユーザーマシンを危険にさらさないように検証されていますか?見知らぬ人からのコードをコンパイルすることはどれくらい安全ですか?

5
スクラムがアジャイルでないと感じる人はいますか?
私はアジャイル開発の大ファンであり、数年前に非常に成功したプロジェクトでXPを使用しました。私はそれについてのすべて、反復開発アプローチ、テストの周りのコードの記述、ペアプログラミング、物事を実行するための顧客を現場に持っていることが大好きでした。それは非常に生産的な職場環境であり、私はプレッシャーにさらされているように感じたことはありませんでした。 しかし、私が働いた最後のいくつかの場所はスクラムを使用/使用しました。最近のアジャイル開発の代表的な子であることは知っていますが、アジャイルであることを100%確信しているわけではありません。以下に、私にとって俊敏性を感じない主な理由を2つ示します。 プロジェクトマネージャーは大好き 本質的にタイムラインに夢中になっているプロジェクトマネージャーは、すべてスクラムを気に入っているようです。私の経験では、彼らは時間要件を追跡し、特定のタスクに費やされた時間の記録を保持する手段としてスプリントバックログを使用しているようです。ホワイトボードを使用する代わりに、全員がExcelシートを使用します。各開発者はそれを宗教的に記入する必要があります。 私の意見では、これはアジャイルプロセスのための非常に多くのドキュメント/時間追跡です。タスク自体に取り掛かることができるのに、タスクがどれだけの時間を要するかを見積もるのに時間を無駄にするのはなぜですか。または、同様に、手近な次のタスクに移動できるときに、タスクにかかった時間を文書化するのに時間を浪費するのはなぜですか。 スタンドアップミーティング 私が以前働いていた場所でのスタンドアップミーティングは悪夢でした。毎日、昨日やったことと、その日に何をしようとしていたかを説明しなければなりませんでした。タスクの「見積もり」に時間を費やした場合、プロジェクトマネージャーは悪臭を放ち、タイムラインを順守していないためにあなたが無能であることを示す手段としてスプリントバックログを参照します。 今、私はコミュニケーションの必要性を理解していますが、確かに毎日の会議の雰囲気は軽やかで、知識の共有に焦点を当てるべきです。私はそれがあなたの宿題スタイルのシャレードの場所になるとは思わない。また、アジャイルの重要なポイントは、タイムラインが変更されることであり、それらを固定するべきではありません。 結論 アジャイルのアイデアは、開発者の生活を楽にすることでソフトウェアを改善することです。したがって、私の意見では、チームが使用するアジャイルプロセスは開発者主導である必要があります。プロジェクトマネージャーが、プロジェクトを追跡するために「アジャイル」とラベル付けしたプロセスを使用することは、アジャイル開発と関係があるとは思わない。 誰でも考えますか?
41 agile  scrum 

6
グラフィックデザイナーと仕事をする正しい方法は何ですか?[閉まっている]
最近、グラフィックデザイナー(クライアントが手配)と協力して、作成したDjango + Bootstrapアプリケーションのスキンを提供しました。デザイナーは、いくつかの技術的属性(フォントサイズ、色、いくつかの寸法など)を説明するドキュメントとともに、新しいレイアウトの一連の静的画像を提供しました。 これを実装するには非常に時間がかかることが判明しました。サイト全体は基本的にフロントページ、インデックスページ、および6つの詳細ページでしたが、CSSとHTMLの変更を実装するだけで少なくとも5日間を費やしました。それで、私は手足に出て、これを間違った方法と呼びます。 私の基本的なアプローチは: 静的な画像と現在のレンダリングを比較して、違いに注目してください。 CSS / HTMLでどのような変更が必要かを推測します その変更を行う 手順1に進みます。 特定の問題のいくつかは、デザインに8列から12列への変更が含まれていることを理解していないことでした。ピクセルパーフェクトレンダリングなどを実現するために通常のCSSレスリングを使用します。また、特定の動作を得るために、HTMLテンプレートを再編成しなければならない場合がありました。 正しい方法は何ですか?

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