ソフトウェア工学

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

8
本当に大きなソースコードコミットの用語は何ですか?[閉まっている]
時々、ソフトウェアのコミット履歴を確認すると、実際には大きなコミットがいくつかあることがわかります。数百のソースコード行(デルタ)が変更された10または20のファイルが変更される場合があります。このようなBIGコミットには一般的に使用される用語がありますが、その用語が何であるかを正確に思い出すことはできません。誰も私を助けることができますか?プログラマーがこのようなBIGと巨大なコミットを指すために通常使用する用語は何ですか? ところで、たくさんの変更をまとめてコミットするのは良い習慣ですか? 更新:感動的な議論をありがとう!しかし、「コードボム」は私が探している用語だと思います。

2
GitとMercurialの人気の経験的証拠
2012年です!MercurialとGitは両方ともまだ強力です。 私は両方のトレードオフを理解しています。また、誰もが何らかの好みを持っていることを理解しています。それはいいです。 両方の使用レベルに関する情報を探しています。例えば、上のstackoverflow.com、探しGitのは、あなたに12000本のヒットを取得し、Mercurialはあなたを取得3000 Googleトレンドでは、それは1.9だと言う:Gitのための1.0。 両方のツールの相対的な使用を推定するために、他にどのような経験的情報が利用できますか?
37 git  mercurial 

19
他の人が非常に複雑なソリューションを構築したとき、コードレビューで何と言いますか?[閉まっている]
先日、チームの誰かが書いたコードをレビューしました。ソリューションは完全には機能せず、デザインは複雑でした-不要な情報の保存、不要な機能の構築を意味し、基本的にコードには金メッキのような不要な複雑さがたくさんあり、存在しない問題を解決しようとしました。 この状況では、「なぜこのようにしたのですか?」 答えは、他の人がそのようにしたいと感じていることです。 次に、これらの機能のいずれかがプロジェクト仕様の一部であるかどうか、エンドユーザーが使用できるかどうか、または追加データがエンドユーザーに提示されるかどうかを尋ねます。 答えはいいえだ。 そこで、不必要な複雑さをすべて削除することをお勧めします。私が通常得る答えは、「それはすでに終わっています」です。 私の見解では、それは行われておらず、バグがあり、ユーザーが望むことを行わず、メンテナンスコストは、私が提案したより簡単な方法で行われた場合よりも高くなります。 同等のシナリオは次のとおりです。 同僚が10秒以内にResharperで自動的に実行できたコードを手作業でリファクタリングするのに8時間かかります。当然のことながら、手作業によるリファクタリングは疑わしい品質であり、十分にテストされていないため、信頼できません。 繰り返しになりますが、私は「既に完了しています」という応答を受け取ります。 この態度に対する適切な対応は何ですか?

11
TDDを行う人々は、主要なリファクタリングを行うときに仕事の損失をどのように処理しますか
しばらくの間、コードの単体テストを書くことを学んでいます。 最初は、真のTDDを開始しました。最初に失敗したテストを記述するまで、コードを記述しませんでした。 しかし、最近、多くのコードが関係する解決しにくい問題がありました。テストとコードの記述に数週間を費やした後、私は全体のアプローチが機能しないという不幸な結論に至り、2週間の作業を捨ててやり直す必要がありました。 これは、コードを作成したばかりの場合には十分な判断ではありませんが、数百のユニットテストを作成した場合、すべてを捨てるのはさらに感情的に困難になります。 概念実証のためにコードをまとめて、その後自分のアプローチに満足したらテストを書くことができたのに、これらのテストを書くのに3日間または4日間の努力を無駄にしたと考えるのは仕方ありません。 TDDを実践する人々は、このような状況を適切に処理しますか?いくつかのケースでルールを曲げる場合はありますか、それともコードが役に立たないことが判明した場合でも、常に最初にテストを慎重に書くのですか?
37 tdd  refactoring 

8
メソッドチェーンを使用する場合、オブジェクトを再利用しますか、それとも作成しますか?
次のようなメソッドチェーンを使用する場合: var car = new Car().OfBrand(Brand.Ford).OfModel(12345).PaintedIn(Color.Silver).Create(); 次の2つのアプローチがあります。 次のように、同じオブジェクトを再利用します。 public Car PaintedIn(Color color) { this.Color = color; return this; } 次のCarように、すべてのステップでタイプの新しいオブジェクトを作成します。 public Car PaintedIn(Color color) { var car = new Car(this); // Clone the current object. car.Color = color; // Assign the values to the clone, not the original object. return …

6
「マッパー」は有効な設計パターンですか、それとも「工場」パターンのバリエーションですか?
私が見ている一般的なパターンは、Mapperパターンと呼ばれるDataMapperものです(混同しないでください)。これは、ある種の「生の」データソース(ADO.NET DataReaderやなどDataSet)を引数として受け取り、フィールドをマップします。ビジネス/ドメインオブジェクトのプロパティ。例: class PersonMapper { public Person Map(DataSet ds) { Person p = new Person(); p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString(); // other properties... return p; } } アイデアは、Gateway / DAO / Repository / etcになります。返される前にマッパーを呼び出すので、基になるデータコンテナに対してリッチビジネスオブジェクトを取得します。 ただし、これは同一ではないにしても、ドメインオブジェクトを構築して返すFactoryパターン(とにかくDDDの用語)に関連しているようです。ウィキペディアによると、これは次のとおりです:DDDファクトリー: ファクトリ:ドメインオブジェクトを作成するメソッドは、代替の実装を簡単に交換できるように、専用のファクトリオブジェクトに委任する必要があります。 その引用から私が考えることができる唯一の違いは、「マッパー」が特定のクラスにキー設定されている間に、必要に応じて特別なタイプのオブジェクトを返すことができるようにDDDスタイルのファクトリーをパラメーター化できることです(たとえば、BusinessCustomer対ResidentialCustomer)そして翻訳のみを行います。 それで、これらの2つのパターンに違いはありますか、それとも異なる名前で本質的に同じものですか?

16
多くのプログラミング言語の一部を学ぶのは苦痛ですか?
9年生のときにBASICでプログラミングのキャリアを始めました。加算、減算、印刷を行う簡単なプログラムを書くことで、少し基本を学びました。それから私は大学に行き、コンピューター情報とシステム工学を学びました。最初の年に私はCを教えられました。 次に、2年目にC ++を学びました。OOPの知識を教えてくれただけです。今、PHPを(HTMLとともに)実行しています。私はC ++、BASIC、またはPHPをマスターしていません。現在、モバイル開発に移行する予定です。しかし、私は学んだ言語ですべてをカバーしていないと感じています。 それは本当に重要ですか?
37 php  c++  c  basic 

8
Javaで「this」キーワードを使用するために受け入れられているスタイルは何ですか?
私はPythonやJavascript(およびオブジェクト指向ではない他の言語)の出身であり、Javaの実用的な知識を向上させようとしています。 常にthis現在のインスタンス属性の先頭に追加するのは悪い習慣と見なされますか?書くほうが自然に感じます ... private String foo; public void printFoo() { System.out.println(this.foo); } ... より ... private String foo; public void printFoo() { System.out.println(foo); } ... インスタンス属性とローカル変数を区別するのに役立ちます。 もちろん、Javascriptのような言語では、よりthis多くの関数をネストできるため、常に使用する方が理にかなっています。したがって、ローカル変数はより大きなスコープから取得されます。Javaでは、私が理解している限り、このようなネストは不可能です(内部クラスを除く)。したがって、おそらく大きな問題ではありません。 いずれにせよ、私は使用したいと思いますthis。風変わりではなく、奇妙に感じますか?

7
より大きなソフトウェアプロジェクトに必要な時間を見積もることが難しいことを説明するにはどうすればよいですか?
私はジュニア開発者であり、より大きなソフトウェアプロジェクトを完了するのにどれくらいの時間がかかるかを見積もることは難しいと感じています。一般にアーキテクチャを構築する方法は知っていますが、どの詳細を実行し、どの問題を解決する必要があるかを知るのは困難です。だから、どのプロジェクトを解決する必要があるのか​​、そしてそれらを解決するのにどのくらいの時間がかかるのかわからないので、より大きなプロジェクトを完了するのにどれくらいの時間がかかるかを見積もることは難しい。 ソフトウェア開発者ではない人にこれをどのように説明できますか?

9
TDDでの赤ちゃんの歩数はどのくらいですか?
今日、私たちはTDDをトレーニングしていて、次の誤解のポイントを見つけました。 タスクは、入力 "1,2"が3である数値の合計を返すためのものです。(C#で)私が書いたのは: numbers = input.Split(','); return int.Parse(numbers[0]) + int.Parse(numbers[1]); //task said we have two numbers and input is correct しかし、他の人はそれを別の方法で行うことを好みました。まず、入力 "1,2"について、次のコードを追加しました。 if (input == "1,2") return 3; 次に、入力 "4,5"のテストをもう1つ導入し、実装を変更しました。 if (input == "1,2") return 3; else if (input == "4,5") return 9; そしてその後、彼らは「さて、今はパターンが見える」と言って、私が最初にやったことを実装しました。 2番目のアプローチはTDDの定義により適していると思いますが、...厳密にすべきでしょうか?私にとっては、些細な赤ちゃんのステップをスキップして、何もスキップしないことを十分に確信している場合は、それらを「ツインステップ」に結合してもかまいません。私が間違っている? 更新。私はそれが最初のテストではないことを明確にしないことで間違いを犯しました。すでにいくつかのテストが行​​われているため、「return 3」は実際に要件を満たすための最も単純なコードではありませんでした。
37 testing  tdd 

17
睡眠不足の場合、実際に高品質のコードを生成できますか?[閉まっている]
私はプログラマーが睡眠なしで2日間コーディングし、コーヒーとRed Bullを飲むことを聞いたことがあります。また、The Social Networkのような映画では、Mark Zuckerbergが36時間プログラミングを行っているシーンを示しています。また、Facebook、Google、foursquareなどの企業では、24時間以上睡眠なしでコーディングできることも読んでいます。 これは本当ですか?睡眠不足の場合、実際に高品質のコードを生成できますか? レッドブルのようなものは睡眠を補うことができますか?

5
「証明はプログラムです。それが証明する式はプログラムの型です」
これは哲学的な質問かもしれませんが、客観的な答えがあると思います。 Haskellに関するウィキペディアの記事を読むと、次のことがわかります。 この言語は、「証明はプログラムであり、それが証明する式はプログラムの型である」というHaskell Curryと彼の知的子孫の観察に根ざしています 今、私が尋ねているのは、これはほとんどすべてのプログラミング言語に本当に当てはまるのですか?Haskellのどの機能(または機能セット)がこのステートメントに準拠していますか?言い換えれば、この声明が言語の設計に影響した顕著な方法は何ですか?
37 haskell 

11
抽象クラス/メソッドは廃止されていますか?
以前は、多くの抽象クラス/メソッドを作成していました。その後、インターフェイスの使用を開始しました。 現在、インターフェイスが抽象クラスを廃止していないかどうかはわかりません。 完全に抽象クラスが必要ですか?代わりにインターフェースを作成してください。いくつかの実装を含む抽象クラスが必要ですか?インターフェイスを作成し、クラスを作成します。クラスを継承し、インターフェイスを実装します。追加の利点は、一部のクラスが親クラスを必要とせず、インターフェイスを実装するだけであることです。 それでは、抽象クラス/メソッドは廃止されていますか?

9
コーディング時に解析によって麻痺を克服するにはどうすればよいですか?
新しいプロジェクトを始めるとき、私はしばしばすぐに実装の詳細について考え始めます。「DataBaseHandlerはどこに配置しますか。どのように使用する必要がありますか?それを使用するクラスはいくつかの抽象スーパークラスから拡張する必要があります..?インターフェイスを使用する必要がありますか?を含むクラスで使用する抽象化のレベルリクエストを送信してデータを解析する方法は?」 拡張性と再利用性のためにコーディングしたいので、私は長い間行き詰まってしまいます。しかし、完全に実装する方法について過去の考えを得るのはほとんど不可能だと感じています。 そして、「ネジを締めて、やるだけだ!」と言うと、コードが整理されていないため、抽象化のレベルが混在しているなどの理由で、レンガの壁にすばやくぶつかります。 新しいプロジェクトを立ち上げながら、拡張性の高い論理/モジュール構造をセットアップするためのテクニック/方法は何ですか? - - EDIT - - まあ、これはすでに答えを受け入れるのが難しいタイプの質問ですが、いくつかのコンセンサスがあるかどうかを確認して、より多くのフィードバックを取得したいです。TDDは本当にクールに聞こえますが、率直に言って、JUnitなどの使用方法をもっと理解することを意味してきました。同時に、TDDのファンは、TDDに関連する1つの正当な点が特定の問題は、TDDが実際に設計の問題に対処していないように見えることです。確かに、TDDは自分がやりたいことを定義するのに役立ち、徐々にその方法を進めることができますが、ユニットテストをすべて通過できるさまざまな全体的なデザインパターン/構造があります。それだけです:単一のUNITSをテストします。私は少し混乱していると思います...私は知らない。多分、私' ありがとう!

12
仲間のプログラマーが最悪のプログラミング手法を使用した
言うのは奇妙に思えますが、職場の仲間のプログラマーは故意にいくつかの悪いプログラミング慣行を意図的に使用しました!説明します。まず、彼は知的な男であり、ほとんどの場合、彼はわかりやすいコードを書いていると言いましょう。 彼は、Javaで書かれたWebアプリケーションプロジェクトにライセンスを実装するよう求められました。Javaなので、本当に必要な場合は、おそらくjarファイルをハックして、内部に記述されたクラスとメソッドの名前を読み取ることができます。この問題に対する彼の解決策は、文字通り、新しいクラスを生成するのではなく、変数とメソッドをわかりにくい名前で不自然に呼び出し、すでに混雑しているクラス内にそれらを植え付けることでした。 彼の正当化は、ハッカーがライセンスチェックをバイパスするために特定のクラスを切り替えたい(したがって、製品の無料コピーを取得したい)場合、どの方法が明らかでない場合、それははるかに困難な時間になるだろうということでしたこれらの特定のタスクを実行します。彼がそれを行って初めて、私は彼に立ち向かったので、良いプログラミングの実践を維持しながら、何らかの難読化ライブラリを購入してそれを行うことができるかもしれないと示唆しました。彼は、その種のソリューションを検索する時間やリソースがなかったと主張しています。 ..私はジレンマに陥ります。Javaで難読化ライブラリを探して、彼の古いコードを修正します(彼のコードを改造するのは少し面倒かもしれません)か、それをそのままにしておきますか?

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