ソフトウェア工学

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

12
期限に達した後、廃止されたコードがコンパイルされないようにする[終了]
私のチームでは、大きなモノリシックプロジェクト(クラス全体、メソッドなど)で多くの古いものを削除しています。 そのクリーニングタスクの間に、私はいつもよりも一種の注釈やライブラリの凝ったものがあるのか​​と思っていました@Deprecated。これにより@FancyDeprecated、特定の日付が過ぎた後に古い未使用コードをクリーンアップしていない場合、プロジェクトのビルドが成功しなくなります。 インターネットで検索してみましたが、以下に説明する機能を持つものは見つかりませんでした。 特定の日付の前に削除する予定のコードに配置するための注釈または類似のもの その日付の前にコードがコンパイルされ、すべてが正常に動作します その日以降、コードはコンパイルされず、問題について警告するメッセージが表示されます 私はユニコーンを探していると思います...どのプログラム言語にも同様の技術はありますか? 計画として、BIは、「デッドライン」で失敗し始めるコードの単体テストでマジックを作成する可能性を考えています。これについてどう思う?より良いアイデアはありますか?

13
リポジトリでコードフォーマッタを定期的に実行するのは悪い考えでしょうか?
私は、コードをチェックアウトし、その上でコードフォーマッタを実行し、変更があった場合は変更をコミットしてプッシュするcronジョブを作成することを考えています。 オートフォーマッタを使用するほとんどのプロジェクトは、それらをgitフックに入れますが、数時間ごとに自動的に行うと、各開発者がgitフックをインストールする負担がなくなります。 私はまだ誰もがクリーンで適切にフォーマットされたコードを書くことをお勧めします。おそらく、書いたコードが再フォーマットされたときにシステムが開発者に自動的にpingできるようにして、彼らは将来何をすべきかを知っています。


17
Gitを学べない開発者のために何ができますか?[閉まっている]
状況 8人のエンジニアからなる私のチームは、次の大きな仕事のために(Subversionから)Gitに移行しています。Gitを手に入れるのが非常に難しいと感じている「経験豊富な」エンジニアが少数います。ユーザーマニュアル、トレーニング活動、ホワイトボードセッションを提供したにもかかわらず、私は同じ些細な質問をしました。数日のうちにすべてを拾い上げた2人のジュニアコンサルタントがいましたが、それが問題を明らかにしました。これはGitに限定されたパターンではありませんが、結果として目に見えるようになりました。 質問 学べない/学べないエンジニア、特にここにいる年功序列レベルのスタッフには特に好意的ではありません。ただし、チームが成功し、優れた製品を構築することを望んでいます。中央集中型のGit Flowモデルを使用していますが、すべての新しい用語がそれらを困惑させているように感じます。 これらの従業員がGitを学ぶのを支援するためにできることはありますか? Sourcetreeは、チーム全体で使用されているクライアントです。
68 git  gitflow 

7
プライベート静的メソッドがあるのはなぜですか?
質問を解決したかっただけです。プライベートな可視性を持つ通常のメソッドとは対照的に、プライベートな静的メソッドを持つことのポイントは何ですか? 静的メソッドを持つことの利点は、クラスのインスタンスなしで呼び出すことができることだと思っていましたが、そのプライベートは静的であるというポイントさえありますか? 私が考えることができる唯一の理由は、オブジェクトレベルではなく、クラスレベルでメソッドを概念的に理解するのに役立つということです。

5
Pythonのクラスでインスタンス変数をNoneとして宣言するのは良い習慣ですか?
次のクラスを検討してください。 class Person: def __init__(self, name, age): self.name = name self.age = age 私の同僚は、次のように定義する傾向があります。 class Person: name = None age = None def __init__(self, name, age): self.name = name self.age = age これの主な理由は、選択したエディターがオートコンプリートのプロパティを表示することです。 個人的には、後者が嫌いNoneです。クラスにこれらのプロパティがに設定されていることには意味がないからです。 どちらがより良い練習であり、どのような理由でですか?
68 python 

8
命名の問題:「ISomething」の名前を「Something」に変更する必要がありますか?[閉まっている]
Clean Codeの名前に関するボブおじさんの章では、主にハンガリーの表記法に関して、名前のエンコーディングを避けることを推奨しています。またI、インターフェイスからプレフィックスを削除することについて具体的に言及していますが、この例は示していません。 以下を想定してみましょう: インターフェイスの使用法は、主に依存性注入によりテスト容易性を実現することです 多くの場合、これは単一の実装者と単一のインターフェースを持つことにつながります それで、例えば、これらの2つは何と命名されるべきでしょうか?ParserそしてConcreteParser?ParserそしてParserImplementation? public interface IParser { string Parse(string content); string Parse(FileInfo path); } public class Parser : IParser { // Implementations } または、このような単一実装の場合、この提案を無視する必要がありますか?

7
既存のコードのテストを書く
比較的大きなプログラム(C#で900k SLOCなど)があり、すべてが十分にコメント/文書化され、適切に組織化され、適切に機能しているとします。コードベース全体は、もはや会社にいない単一の上級開発者によって作成されました。すべてのコードはそのままテスト可能であり、IoCが全体で使用されます(ユニットテストを作成しなかった奇妙な理由を除く)。今、あなたの会社はコードを分岐させ、変更がコア機能を壊すときを検出するために単体テストを追加したいと考えています。 テストの追加は良いアイデアですか? もしそうなら、どのようにしてこのようなものから始めるのでしょうか? 編集 わかりました、それで私は反対の結論に対して良い議論をする答えを期待していませんでした。とにかく問題は私の手に負えないかもしれません。私も「重複した質問」を読みましたが、一般的なコンセンサスは「テストを書くのは良い」ということです...ええ、しかしこの特定のケースではあまり役に立ちません。 レガシーシステムのテストを書くことをここで考えているのは私だけではないと思います。どれだけの時間を費やし、新しいテストが問題をキャッチする回数(および、そうでない回数)のメトリックを保持します。私は戻って来て、私の結果でこれから1年かそこらを更新します。 結論 そのため、正統性に似た既存のコードに単体テストを追加することは基本的に不可能です。コードが動作すると、テストを赤信号/緑信号にすることは明らかにできません。通常、テストする必要がある動作が明確ではなく、どこから始めればよいか、完了したら明確ではありません。本当にこの質問をすることでさえ、そもそもテストを書くことの主要なポイントを見逃しています。ほとんどの場合、意図した機能を解読してユニットテストを遡及的に追加するよりも、TDDを使用してコードを書き直す方が実際に簡単であることがわかりました。問題を修正したり、新しい機能を追加したりするのは別の話であり、ユニットテストを追加するときだと思います(以下で指摘するように)。最終的には、ほとんどのコードが書き直され、多くの場合、予想よりも早くなります。

3
これはMockitoのリセット方法の適切な使用ですか?
テストクラスには、よく使用されるBarオブジェクトを作成するプライベートメソッドがあります。Barコンストラクタが呼び出されますsomeMethod()私の嘲笑オブジェクトのメソッドを: private @Mock Foo mockedObject; // My mocked object ... private Bar getBar() { Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod() } 私がチェックしたいテストメソッドのいくつかでは、someMethodその特定のテストによっても呼び出されました。次のようなもの: @Test public void someTest() { Bar bar = getBar(); // do some things verify(mockedObject).someMethod(); // <--- will fail } モックされたオブジェクトがsomeMethod2回呼び出されたため、これは失敗します。私のテストメソッドが私のgetBar()メソッドの副作用を気にしたくないので、終了時にモックオブジェクトをリセットするのは合理的でしょうgetBar()か? private Bar getBar() { Bar …
68 java  mocking 

5
なぜPython辞書内に関数を保存するのですか?
私はpython初心者であり、辞書と関数を含むテクニックを学びました。構文は簡単で、些細なことのように思えますが、私のPythonの感覚はチクチクしています。これは深くて非常にパイソン的な概念であり、その重要性を十分に把握していないということです。誰かがこのテクニックに名前を付けて、どのように/なぜそれが役立つかを説明できますか? テクニックは、Python辞書とそれに使用する予定の関数がある場合です。値が関数の名前である追加の要素を辞書に挿入します。関数を呼び出す準備ができたら、名前ではなく、dict要素を参照して間接的に呼び出しを発行します。 私が取り組んでいる例は、Learn Python the Hard Way、2nd Edのものです。(これは、Udemy.comからサインアップしたときに利用可能なバージョンです。残念ながら、ライブの無料HTMLバージョンは現在Ed 3であり、この例は含まれていません)。 言い換えると: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in …

4
関数型言語は乱数をどのように処理しますか?
私はそれについて意味することにということですほとんど、すべてのチュートリアル私は関数型言語について読んだ機能の優れた点の一つは、あなたが二度同じパラメータを持つ関数を呼び出す場合、あなたはだろうということであるということである常にで終わります同じ結果。 一体どのようにして、パラメータとしてシードを取り、そのシードに基づいて乱数を返す関数を作成しますか? これは、機能について非常に良いことの1つに反するように見えることを意味しますよね?または、私はここで何かが完全に欠けていますか?

9
ドキュメントとプロジェクト管理にGitを使用する必要がありますか?コードは別のリポジトリに配置する必要がありますか?
グループプロジェクトのGitリポジトリを起動しています。コードと同じGitリポジトリにドキュメントを保存するのは理にかなっています -これはgitリビジョンフローの性質と矛盾するようです。 ここに私の質問の要約があります: コードとドキュメントの両方が同じリポジトリにチェックインされている場合、Gitリビジョンスタイルは混乱するでしょうか?これでの経験? Gitはドキュメントのリビジョン管理に適していますか? 私はありません一般的にはリビジョン管理システムは、またはマニュアルのために使用すべきではないかどうかを尋ねる-それがなければなりません。 これまでのフィードバックに感謝します!

7
Bitbucket、Github、Kiln、および同様のDVCSブラウジングおよび管理ツールに代わるオープンソースの代替手段はありますか?[閉まっている]
Bitbucket、Github、Kiln、SCM-Manager、Rhodecodeなど、DVCSブラウジングと管理を提供するいくつかのツール/サービスを認識しています。 しかし、私が検討しているユースケースは次のようなものです: すべてのソースコードは、雇用主の内部サーバーに存在する必要があります。 ソリューションはオープンソースでなければなりません。 プロジェクトwiki、リポジトリの参照と管理、コードレビューなどのソーシャルコーディングの側面など、BitbucketまたはGithubのようなエクスペリエンスを提供する必要があります。 ソリューションには、水銀のサポートが必要です(他のDVCSをサポートしていない場合)。 これらのうち、SCM-ManagerとRhodeCodeのみが、独自のサーバーにインストールでき、オープンソースであるため、近づいています。ただし、BitbucketやGithubの経験はありません。課題トラッカーやウィキはありません。UIは機能的ですが、GithubやBitbucketに匹敵しません。 リポジトリブラウザでTracまたはRedmineに近づくことができますが、残念ながらリポジトリ管理機能はありません。 Bitbucket、Github、またはKilnと同様のエクスペリエンスを提供する他のオープンソースツールはありますか?

14
このアンチパターンの名前は?ローカル変数としてのフィールド[終了]
私がレビューしているいくつかのコードでは、次のものと同等の道徳的なものを見ています: public class Foo { private Bar bar; public MethodA() { bar = new Bar(); bar.A(); bar = null; } public MethodB() { bar = new Bar(); bar.B(); bar = null; } } このフィールドbarは論理的にローカル変数です。これは、その値がメソッド呼び出し間で持続することを意図していないためです。ただし、メソッドの多くはFootypeのオブジェクトを必要とするBarため、元のコード作成者はtypeのフィールドを作成しましたBar。 これは明らかに悪いことですよね? このアンチパターンに名前はありますか?

22
あなたがばかげたインタビューの質問に遭遇したとき、あなたは何をしますか?[閉まっている]
私は「自分のJavaスキルを誇り​​に思っている」ように見える人にインタビューしていました。 彼は私に「Java IOクラスに関するあなたの知識はどういうことか、例えば、ハッシュマップはどうですか?」と尋ねました。 彼は私に紙の上にJavaコードを書くように頼みました-クラスをインスタンス化し、インスタンスのメソッドの1つを呼び出します。私が終わったとき、彼は私のプログラムが実行されないと言った。5分間真剣に考えた後、私はあきらめて理由を尋ねました。彼は私がメイン関数を書いていないので実行しないと言った。紙の上に。 [私は愚かさを続けるにはあまりにも激怒しています...] トリックの質問や心霊的または怒りの管理評価の問題ではないと信じてください。 彼の顔から分かるように、彼はこれらの質問を誇りに思っていました。 その「開発者」は候補者を「判断」することになっていた。 私はいくつかのことを考えることができます: 彼を椅子で叩き(必死に望んでいた)、立ち去った。 単に歩いてください。 彼は理にかなっていないと言ってRi笑します。 理にかなっていないことを丁寧に伝え、質問に答えてみてください。 彼に何も言わずに、質問に答えてみてください。 これまでのところ、私は4と5だけを試しました。それは助けにはなりませんでした。残念ながら、多くの候補者は同じように礼儀正しく残っているように見えますが、これにより、この種の「開発者」は企業のはしごを登り続けることができ、徐々に多くの人を獲得する能力を獲得します。 静脈を破裂させることなく、これらのインタビュアーをどのように処理しますか?他の潜在的な雇用者がここで何が起こったのかを知ることができたとしても、これに対処する適切な方法は何ですか?あなたができることはありますか、これを修正しようとする必要がありますか? PS私の怒りが事実によって何度も増幅されたことを認めさせてください: 彼はあなたが信じられないように笑っていました。 前日、その会社からたくさんの(20ほど)の電話があり、その日は仕事ができなかったので、面接に来てほしいと頼みました。 有給休暇を無駄にしました。
68 interview 

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