ソフトウェア工学

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

7
Inversion of Controlの名前がそのようになっているのはなぜですか?
単語invertor controlは、私が見た定義で制御の反転を定義するためにまったく使用されていません。 定義 ウィキペディア 制御の反転(IoC)は、オブジェクト指向プログラミングの観点からここで表現されるプログラミング手法です。オブジェクト結合は、実行時にアセンブラオブジェクトによってバインドされ、通常、静的解析を使用したコンパイル時には不明です。〜http://en.wikipedia.org/wiki/Inversion_of_control マーティン・ファウラー Inversion of Controlは、Javaコミュニティの一般的なパターンであり、軽量コンテナをワイヤリングしたり、さまざまなプロジェクトのコンポーネントを凝集したアプリケーションに組み立てたりするのに役立ちます。〜に基づいて http://www.martinfowler.com/articles/injection.html (言い換え) それでは、Inversion of ControlがInversion of Controlと呼ばれるのはなぜですか?どのような制御が逆にされており、何によって?反転と制御という用語を使用して、制御の反転を定義する方法はありますか?


18
単体テストは本当に便利ですか?[閉まっている]
私はちょうどCSの学位を取得して卒業しましたが、現在はジュニア.NET開発者(C#、ASP.NET、およびWebフォーム)として仕事をしています。私がまだ大学にいたとき、ユニットテストの主題はカバーされましたが、その利点は実際には見られませんでした。コードのブロックが使用に適しているかどうかを判断する、つまり、何をすべきかを理解しています。しかし、私は実際に単体テストを書く必要がなかったし、その必要性を感じたこともありませんでした。 既に述べたように、私は通常ASP.NET Webフォームを使用して開発しており、最近、いくつかの単体テストを作成することを考えています。しかし、これについていくつか質問があります。 ユニットテストは、しばしば「モック」を書くことで行われることを読みました。私はこの概念を理解していますが、完全に動的なWebサイトのモックをどのように作成し、ほとんどすべてがデータベースからのデータに依存するかを理解することはできません。たとえば、私はItemDataBoundイベントなどを持っているリピーターをたくさん使用しています(これも「不明」なデータに依存します)。 質問番号1:ASP.NET Webフォームのユニットテストを書くことは頻繁に行われますが、もしそうなら:「動的環境」問題をどのように解決すればよいですか? 私が開発しているとき、私は多くの試行錯誤を繰り返します。だからといって、自分が何をしているのかわからないというわけではありませんが、通常はコードを書いて、Ctrl F5何が起こるかを確認します。ほとんどの場合、このアプローチは仕事をしますが、時々、私は少し無知であると感じます(私の小さな経験のため)。私も時々このように多くの時間を無駄にします。 質問番号2:ユニットテストの書き始めをアドバイスしてくれませんか?実際の実装には役立つかもしれないと思いますが、それでも私は遅くなるかもしれないと感じています。

18
プログラミング言語にとって冗長性が悪いのはなぜですか?[閉まっている]
プログラミング言語の冗長性について文句を言う人がたくさんいます。プログラミング言語の冗長性が高いほど、理解するのが適切であることがわかります。冗長性はAPI、その特定の言語のより明確なsの作成も強化すると思います。 私が考えることができる唯一の不利な点は、より多くの入力ができることですが、ほとんどの人がすべての作業を行うIDEを使用しているということです。 それでは、冗長プログラミング言語の潜在的な欠点は何ですか?

21
新しいプログラマーは、ソフトウェアエンジニア(上司)にどのように印象づけることができますか?[閉まっている]
私は最初のプログラミングの仕事で働いています。私の上司は非常に賢いソフトウェアエンジニアであり、彼に比べて提供できるものはほとんどないと感じています。問題は、彼はいつも忙しく、彼を助けてくれる人が必要だということです。私は自分が十分ではないように感じますが、私はまだ成功したいと思います。私は素晴らしいプログラマーになりたいです。 彼を感動させるために私は何ができますか? ありがとうございました。

30
コードを見ると、どのものがすぐに警報を鳴らしますか?[閉まっている]
数週間前にソフトウェア職人のイベントに参加しましたが、コメントの1つは「見たときに悪いコードをすべて認識していると確信している」というもので、誰も議論することなく賢くうなずきました。 この種のことは、誰もが自分が平均以上のドライバーだと思っているという真実があるので、常に私を心配しています。悪いコードは認識できると思いますが、他の人がコードの匂いだと考えるものについては、人々のブログやほんの一握りの本で詳細に議論されることはめったにないので、もっと学びたいと思います。特に、ある言語ではコード臭があり、別の言語では臭いがないものについて聞くのは面白いと思います。 簡単なものから始めます。 コメントアウトされたコードの割合が高いソース管理のコード -なぜそこにあるのですか?削除するつもりでしたか?それは半分完成した作品ですか?多分それはコメントアウトされるべきではなく、誰かが何かをテストしているときにのみ行われたのでしょうか?個人的には、この種のことは、それがあちこちの奇妙な行であっても本当に迷惑だと感じますが、コードの残りの部分に大きなブロックが散在しているのを見ると、まったく受け入れられません。また、通常、残りのコードも疑わしい品質である可能性が高いことを示しています。

9
ビルドスクリプトの利点は何ですか?
私のプログラミングのキャリアのほとんどで、実行可能なプログラムを作成するために使用しているIDEで「ビルド/コンパイル/実行」コマンドを使用しました。これは1つのボタンで、非常に簡単です。ただし、さまざまな言語やフレームワークについて詳しく知ると、プロジェクトを実行するための「ビルドスクリプト」(ANT、Maven、Gradleなど)の話がどんどん増えています。これらの私の理解は、それらが設定の詳細を指定するコンパイラ/リンカー/魔法のプログラムメーカーへの指示であるということです-細目。 学校に戻ってメイクファイルを書いたことを覚えていますが、そのとき特別な利点はありませんでした(便利な「ビルド」ボタンのあるIDEが存在しないUnixターミナルで書くときにのみ使用しました)。それ以外にも、ビルドスクリプトがプログラムを作成するだけでなく、ホストマシンに関係なくユニットテストを実行し、リソースを保護する方法を説明する他の質問があります。 ビルドスクリプトは開発者として理解することが重要であるという感覚を揺るがすことはできませんが、意味のある説明が欲しいです。なぜビルドスクリプトを使用/作成する必要があるのですか? Build ScriptとBuild Serverの責任は、より広い範囲での役割について説明しています。IDEの「ビルド/実行」コマンドまたは同様の単​​純なメソッドに対して、ビルドスクリプトが提供する特定の利点を探しています。

4
Java参照はCポインターとどのように異なりますか?
Cにはポインターがあり、Javaには参照と呼ばれるものがあります。彼らはすべてが何かを指しているという意味でいくつかの共通点を持っています。Cのポインターは、それらが指すアドレスを格納することを知っています。参照には住所も保存されますか?ポインターがより柔軟でエラーが発生しやすいことを除いて、それらはどのように違いますか?
97 java  c  pointers  reference 

17
カプセル化はまだOOPの象の1つですか?
カプセル化により、すべてまたはほとんどすべてのフィールドをプライベートにして、ゲッター/セッターによってこれらを公開するように指示されます。しかし、Lombokなどのライブラリが登場し、1つの短い注釈ですべてのプライベートフィールドを公開できるようになりました@Data。すべてのプライベートフィールドのゲッター、セッター、および設定コンストラクターを作成します。 誰かが私にすべてのフィールドをプライベートとして非表示にし、その後いくつかの余分な技術でそれらのすべてを公開するという意味を説明できますか?なぜパブリックフィールドだけを使用しないのですか?私たちは出発点に戻るためだけに長く困難な道を歩んだと感じています。 はい、ゲッターとセッターを介して機能する他のテクノロジーがあります。そして、単純なパブリックフィールドを介してそれらを使用することはできません。しかし、これらの技術が登場したのは、私たちがそれらの多くの特性を持っているからです-公共のゲッター/セッターの背後にあるプライベートフィールド プロパティがなければ、これらの技術は別の方法で開発され、パブリックフィールドをサポートします。そして、すべてがシンプルになり、ロンボクは今は必要ありません。 このサイクル全体の意味は何ですか?そして、実際のプログラミングではカプセル化は本当に意味がありますか?


17
(なぜ)新しいプログラミング言語を学ぶべきですか?[閉まっている]
私は、Java、C / C ++、JavaScript / jQueryに非常に精通しており、Objective-Cにはかなり優れています。私は言語とそれに対応するフレームワークも非常に生産的であり、エンタープライズレベルのシステム(および小規模なシステム)を十分に簡単に作成しながら、コードを「クリーン」で保守可能な状態に保ちます(はい、6年後に自分のコードを読むことができます)ヶ月:) プラットフォーム(iPhone、iPadなど)またはクライアント/実装組織によって義務付けられていない限り、「なぜ」新しいプログラミング言語を学ぶ必要があるのでしょうか。「楽しい」だけですか?そして、私がそれで価値のあることをするつもりがないなら、その楽しみで何をしますか? 私の仲間の多くは、「次の新しいもの/言語」を学ぶために飛び込む準備ができており、通常はPython、Ruby、またはPHP(人気のあるものをいくつか挙げています)です。今、言語自体を知っているだけでは無駄です。また、フレームワークを理解し、それらの使用法/ API、および「適切な実装慣行」などを学ぶ必要があります。 それでは、「経済的」な意味から、新しいプログラミング言語を学ぶことに何か利点はありますか?言語が迅速かつ汚い方法で習得された場合、おそらく迅速かつ汚いプロトタイピング/実装にも使用されますが、それは時間/労力の正当な投資とは思えません。 だから、なぜ私(またはそのことについて誰でも)が「楽しいから試してみよう」以外の新しいプログラミング言語を学ぶべきなのか-長い目で見れば時間の投資がそれだけの価値がない場合は?

30
プログラミングにおける有害な誘惑
ちょうど好奇心が強い、プログラミングでどんな誘惑があなたのプロジェクトで本当に有害であることが判明しましたか? 何かをしたいという衝動を実際に感じて、それがプロジェクトに利益をもたらすと信じているとき、または信じられないように自分をだまして、1週間後に実際の問題を解決していないが、代わりに新しい問題を作成した、または、最良の場合、目に見える影響なしにあなたの内なる獣を喜ばせました。 個人的には、悪いコードをリファクタリングしないのは非常に難しいと思います。私は多くの悪いレガシーコードを扱っていますが、リファクタリングが何も壊さないことを証明するためのテストがないとき、それに触れないようにするには深呼吸が必要です。 ユーザーインターフェイスのもう1つの悪魔は、UIレイアウトの変更を楽しんでいるという理由だけで、文字通り何時間もUIレイアウトの変更に費やすことができることです。時々私はユーザビリティに取り組んでいると自分自身に言いますが、真実はボタンを動かすのが大好きです。 あなたのプログラミングの悪魔とは何ですか?また、どのように回避しますか?

8
アプリケーションをステートレスに保つ方法
これは複雑な質問かもしれませんが、私は無国籍の理解を深めようとしています。 私が読んだことに基づいて、Webアプリケーションはステートレスである必要があります。つまり、各リクエストは独立したトランザクションとして扱われます。そのため、セッションとCookieは両方ともステートフルであるため、回避する必要があります。より良い方法はトークンを使用することです。トークンはサーバーに何も保存されないためステートレスです。 だから私は理解しようとしている、私のセッションのために保持されているデータ(ショッピングカートのアイテムなど)があるとき、Webアプリケーションはどのようにステートレスになりますか?これらは実際にどこかにデータベースに保存され、その後定期的にパージされますか?クッキーの代わりにトークンを使用している場合、これはどのように機能しますか? そして、関連する質問として、主要なWebサイト(Amazon、Google、Facebook、Twitterなど)は実際には無国籍ですか?トークンまたはCookie(または両方)を使用していますか?

6
繰り返し呼び出されたときに、一度呼び出すのと同じ効果を持つ関数の用語は何ですか?
(シングルスレッド環境を想定) この基準を満たす関数は次のとおりです。 bool MyClass::is_initialized = false; void MyClass::lazy_initialize() { if (!is_initialized) { initialize(); //Should not be called multiple times is_initialized = true; } } 本質的に、この関数を複数回呼び出すことができ、MyClass複数回初期化することを心配する必要はありません この基準を満たさない関数は次のとおりです。 Foo* MyClass::ptr = NULL; void initialize() { ptr = new Foo(); } initialize()複数回呼び出すと、メモリリークが発生します。 動機 この基準を満たすことが期待される関数に適切にコメントできるように、この動作を説明する簡潔な単語を1つ用意しておくとよいでしょう(特に、オーバーライドされると予想されるインターフェース関数を記述する場合に便利です)
96 naming  functions 

12
クライアントは現在のプロジェクトのコメントの25%を望んでいますが、どのように対応しますか?[閉まっている]
ジュニア開発者はこちら。 私は現在、私の会社の大顧客向けのWebアプリケーションで単独で作業しています。先月始めました。クライアントは、各ソフトウェアプロジェクトに少なくとも25%のコメントを求めています。 私は以前のアプリケーションのコードをチェックしました、そして私の観察はここにあります: 各ファイルはコメントブロックで始まります(パッケージ、最終更新日、会社名、著作権) すべての変数は名前でコメント化されます // nameOfCustomer public String nameOfCustomer すべてのゲッターとセッターがコメントされます 非常に少数の有用なコメント 開発者は、品質や有用性に関係なく、25%のしきい値に達するためにできるだけ多くのコメントを配置するようです。私の会社は、「クライアントが望んでいるとおりにそれを行う」と言っています。 私はこれについてクライアントと直接話しませんでした。これまでの私の議論は次のとおりです。 読み書きする無駄な行(時間の無駄) コメントが時々更新されない(混乱の原因) 開発者が実際に役立つコメントを使用または信頼する可能性が低い このテーマに関するアドバイスは何ですか?状況をどのように処理すればよいですか?

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