タグ付けされた質問 「development-process」

ソフトウェア開発のプロセスに関する質問。

17
見積もりを求められた場合の対応方法
プログラマとして、私たちは常に「どれくらいかかるか」と尋ねられていますか? そして、ご存知のように、状況はほとんど常に次のようなものです。 要件は不明です。すべての影響を詳細に分析した人はいません。 この新機能はおそらく、コード内で行ったいくつかの仮定を破り、リファクタリングする必要のあるすべてのことをすぐに考え始めるでしょう。 過去の課題から他にやることがあり、その他の作業を考慮に入れた見積もりを考え出す必要があります。 「完了」の定義はおそらく不明です。いつ実行されるのでしょうか。コーディングを終えたときのように「完了」、または「ユーザーが使用中」のように「完了」 あなたがこれらすべてのことをどれほど意識していても、「プログラマーのプライド」によって、本来考えていたよりも短い時間が与えられたり受け入れられたりすることがあります。締め切りと経営陣の期待のプレッシャーを感じるときは特に。 これらの多くは、組織的または文化的な問題であり、単純で簡単に解決することはできませんが、実際には、見積もりを求められており、合理的な答えを期待しています。それはあなたの仕事の一部です。単純に言うことはできません:私は知りません。 その結果、私はいつも私が後で達成できないことに気づくと見積もりを出すことになります。それは何度も起こりました、そして、私はいつもそれが再び起こらないことを常に約束します。しかし、そうです。 見積もりを決定して配信するためのあなたの個人的なプロセスは何ですか?どんなテクニックが便利だと思いましたか?

30
IT業界では、他の業界と同様に、大規模で障害のないプロジェクトを迅速に提供できないのはなぜですか?
National GeographicのMegaStructuresシリーズを見て、大規模なプロジェクトがどれほど高速に完了するかを知りました。準備作業(設計、仕様など)が紙の上で行われると、巨大なプロジェクトの実現自体はわずか数年、時には数ヶ月かかります。 たとえば、エアバスA380は 「2000年12月19日に正式に打ち上げられました」、「2005年3月上旬に」、航空機はすでにテストされています。同じことは、巨大な石油タンカー、高層ビルなどにも当てはまります。 これをソフトウェア業界の遅れと比較すると、ほとんどのITプロジェクトがなぜこんなに遅いのか、より正確には、なぜ同じ規模で同じ規模で、十分な人数の人がいるほど速くて障害がないのか疑問に思わずにはいられません。 エアバスA380などのプロジェクトは、両方を提示します。 予期せぬ主なリスク:これは最初に製造された航空機ではありませんが、技術の限界を押し広げており、小さな旅客機でうまく機能したものは、物理的な制約のために大きな旅客機では機能しません。同様に、たとえばボーイング747が完成した1969年には利用できなかったため、まだ使用されていない新しい技術が使用されています。 一般的な人的資源と管理に関連するリスク:プロジェクトの途中で辞める人々、休暇中に人に連絡することができない、通常の人為的ミスなど これらのリスクにより、人々はまだこれらの大型旅客機のようなプロジェクトを非常に短い期間で達成しており、配達の遅延にもかかわらず、それらのプロジェクトは依然として非常に成功しており、高品質です。 ソフトウェア開発に関しては、プロジェクトは旅客機ほど大きく複雑ではなく(技術的にも管理の面でも)、現実世界からの予期しないリスクがわずかに少なくなっています。 それでも、ほとんどのITプロジェクトは遅くて遅く、プロジェクトにさらに開発者を追加することは解決策ではありません(10人の開発者から2000人のチームに行くと、プロジェクトをより速く提供できる場合があります。計画し、それをまったく完了しないリスクを高めます)。 まだ配信されているものには多くのバグが含まれていることが多く、連続したサービスパックと定期的な更新が必要です(元の製品のバグにパッチを当てて航空機がcrash落するのを防ぐために、週に2回すべてのAirbus A380に「更新プログラムをインストール」することを想定してください)。 そのような違いはどのように説明できますか?それは、ソフトウェア開発業界が若すぎて、大規模でほぼ完璧な製品を非常に高速に提供するために、単一のプロジェクトで数千人を管理できないという事実だけに起因するのでしょうか?

19
20万行のスパゲッティコードを継承しました。
これが一般的な質問ではないことを願っています。経験豊富なアドバイスを本当に活用できました。 私は、過去10〜20年にわたって広大なコードベースを一緒に使用してきたかなり小さな科学者の店で、唯一の「SWエンジニア」として新たに採用されました。(実質的に廃止された言語で書かれました:G2 -Pascal with graphicsを考えてください)。プログラム自体は、複雑な化学処理プラントの物理モデルです。それを書いたチームは信じられないほど深いドメイン知識を持っていますが、プログラミングの基礎に関する正式なトレーニングはほとんど、またはまったくありません。彼らは最近、存在しない構成管理の結果についていくつかの難しい教訓を学びました。また、コード自体に文書化されていない「スラッジ」が大量に蓄積されているため、メンテナンス作業が大幅に妨げられています。私はあなたに状況の「政治」をspareしまない(常にある 政治!)、しかし言うことで十分ですが、先の道に必要なものについて意見のコンセンサスはありません。 彼らは、現代のソフトウェア開発の原則のいくつかをチームに提示し始めるように私に頼みました。彼らは、コーディング規約、ライフサイクル管理、高レベルの設計パターン、およびソース管理に関する業界標準の実践と戦略のいくつかを紹介してほしいと思っています。率直に言って、それはかなり困難な作業であり、どこから始めればよいのかわかりません。 最初は、The Pragmatic Programmer、またはFowler's Refactoring( "Code Smells"など)の中心概念のいくつかでそれらを指導したいと思っています。また、多くのアジャイル手法を紹介したいと思っています。しかし、最終的には、効果的にするために、5〜7の基本的な基礎に磨きをかける必要があると思います。言い換えれば、彼らが現実的に実装を開始できる最も重要な原則または慣行は何であり、それは彼らに最も「大金」を与えるでしょう。 それが私の質問です:スパゲッティをまっすぐにするのに役立つ(そして将来的にそれを防ぐために)最も効果的な戦略のリストに何を含めますか?

12
APIキーなどの秘密情報をソース管理から守るための戦略は?
私は、ユーザーがTwitter、GoogleなどのOAuth資格情報を使用してログインできるようにするWebサイトに取り組んでいます。これを行うには、これらのさまざまなプロバイダーに登録し、所有している極秘APIキーを取得する必要がありますさまざまな身体部分からの誓約で保護する。キーがギャンクされると、パーツがヤンクされます。 APIキーは実行時に認証要求を実行するために使用されるため、ソースと共に移動する必要があります。私の場合、キーはアプリケーション内の構成ファイルまたはコード内に存在する必要があります。単一のマシンからビルドして公開する場合、それは問題ではありません。ただし、ソース管理をミックスに組み込むと、事態はさらに複雑になります。 私は安っぽい野郎なので、クラウド内のTFSやGitHubなどの無料のソース管理サービスを使用することを好みます。これにより、若干の難問が残ります。 APIキーがコード内にあり、コードが公開リポジトリで利用可能な場合、どうすれば体を傷つけずに保持できますか? これを処理する方法はいくつか考えられますが、満足できるものはありません。 コードからすべての個人情報を削除し、展開後に編集することができます。これは実装するのが非常に苦痛であり(多くの方法を詳しく説明しません)、オプションではありません。 暗号化できました。しかし、私はそれを解読しなければならないので、ソースを持っている人は誰でもそれを行う方法を見つけ出すことができました。無意味。 私は個人的なソース管理にお金を払うことができました。LOL j / kはお金を使いますか?お願いします。 言語機能を使用して、機密情報をソースの他の部分から分離し、ソース管理から保護することができます。これは私が今やっていることですが、誤ってシークレットファイルをチェックインすると簡単に失敗する可能性があります。 開発、デバッグ、展開を通じてスムーズに動作し、同様に確実に動作するプライベートを世界と共有しないことを保証する方法を本当に探しています(snapchatを除く)。これは完全に非現実的です。 それでは、現実的に何ができますか? 技術的な詳細:VS2012、C#4.5、ソース管理はTFサービスまたはGitHubのいずれかになります。現在、部分クラスを使用して、ソース管理に追加されない別の.csファイルで機密キーを分割します。GitHubには、.gitignoreを使用して部分的なクラスファイルがチェックインされないようにすることができるという利点があると思いますが、以前はそれを台無しにしました。「ああ、よくある問題、これがあなたのやり方です」を望んでいますが、私は「それができる限り吸わない」ために解決する必要があるかもしれません:/

11
「The Mythical Man-Month」の「外科チーム」パターンはどうなりましたか?
何年も前に、The Mythical Man-Monthを読んだとき、他の情報源からすでに知っているものをたくさん見つけました。しかし、1975年からの本にもかかわらず、そこには新しいものもありました。そのうちの1つは次のとおりです。 外科チーム ミルズは、大規模な仕事の各セグメントはチームに取り組むことを提案しますが、チームは豚の屠殺チームではなく外科チームのように組織されることを提案します。つまり、各メンバーが問題を切り捨てる代わりに、1人がカットを行い、他のメンバーが彼の有効性と生産性を高めるすべてのサポートを提供します。 これは、ソフトウェア開発チームを編成するための非常に興味深いパターンですが、他のソフトウェアエンジニアリングの本では説明されておらず、どこにも記載されていません。 何故ですか? 「手術チーム」は当時も珍しかったですか? または、試行されて失敗しましたか? もしそうなら、どのように失敗しましたか? そうでない場合、今日のソフトウェアプロジェクトでそのパターンが実装されていないのはなぜですか。

14
ボブおじさんが、コーディング標準を避けることができれば書き留めてはならないと提案するのはなぜですか?
私がこの質問を読んでいる間、トップ投票の回答はコーディング基準についてボブおじさんを引用しましたが、私はこのヒントに混乱しました: 回避できる場合は書き留めないでください。むしろ、コードを標準の取得方法にしてください。 これは私の脳内で跳ね返りましたが、固執する場所を見つけることができませんでした。新しい人がチームに参加した場合、またはコーディング標準が変更された場合、情報の混乱はありませんか? コーディング標準を書き留めてはいけないのはなぜですか?

16
コードレビューが非常に難しい場合はどうしますか?
わかりましたので、多くのコードレビューはかなり日常的です。しかし、時折、既存の複雑で脆弱なコードに広く影響を与える変更があります。この状況では、変更の安全性、リグレッションの欠如などを検証するのにかかる時間は過剰です。おそらく、開発自体を行うのにかかった時間を超えることさえあります。 この状況で何をすべきか?マージして何も抜けないことを望みますか?(それを提唱しない!)最善の方法は、明らかな欠陥を見つけることだけが可能です(おそらく、これがコードレビューよりも目的とするべきものでしょうか?) これは、コードレビューの一環としてテストを行う必要があるかどうかという問題ではありません。これは、特に差し迫った締め切り、利用可能な単体テストの包括的なスイートがない、または変更された断片化されたコードに対して実行できない単体テストで、説明されている状況で最良のオプションが何であるかを尋ねる質問です。 編集:私はこれまでの回答/コメントのいくつかが私のフレーズ「広範に影響する」に気づいており、おそらくそれが変更が多数のコード行を含むことを意味すると考えていました。私はこれが解釈であることを理解できますが、それは本当に私の意図ではありませんでした。「大幅な影響」とは、たとえば、コードベースの相互接続性またはノックオン効果の範囲のために、回帰の可能性が高いことを意味します。変更自体が必ずしも大きなものではありません。たとえば、開発者は、多くの低レベルルーチンへの呼び出しをカスケードする既存の高レベルルーチンを呼び出すことにより、1行でバグを修正する方法を見つけるかもしれません。バグ修正が機能したことをテストおよび検証するのは簡単です。すべてのノックオン効果の影響を(コードレビューを介して)手動で検証することは、はるかに困難です。

16
バグ修正がいつ過剰になりますか?
JavaScriptでビデオプレーヤーを作成しているとします。このビデオプレーヤーは、再帰関数を使用してユーザーのビデオを繰り返しループします。そのため、ブラウザーはいつかトリガーしtoo much recursion RangeErrorます。 おそらくループ機能をそれほど使用する人はいないでしょう。ユーザーがアプリケーションを1週間ループしたままにしたとしても、アプリケーションはこのエラーをスローしませんが、まだ存在します。問題を解決するには、アプリケーションでループが機能する方法を再設計する必要がありますが、これにはかなりの時間がかかります。職業はなんですか?どうして? バグを修正する バグを残す 人々がつまずくバグを修正するだけではいけませんか?バグ修正がいつ過剰になりますか? 編集: 実際のバグを引き起こさない再帰的なアプローチが懸念事項である場合、プレーヤーがビデオをループするたびに変数が増加すると仮定します1。2 53ループ後、この変数はオーバーフローし、プログラムはそれを処理できなくなり、例外をスローします。

7
私のオフィスでは、ポリシーとして無限ブランチのマージを望んでいます。他にどんなオプションがありますか?
私のオフィスは、ブランチの分割とマージをどのように処理するかを理解しようとしており、大きな問題に直面しています。 私たちの問題は、長期的なサイドブランチにあります-マスターから分かれるサイドブランチで数人の人々が働いている種類で、数ヶ月間開発し、マイルストーンに到達すると2つを同期します。 今、私見、これを処理するための自然な方法は、単一のコミットにサイドブランチをつぶすことです。master前進し続けます。当然のことです- master過去数か月の並列開発を過去にさかのぼってダンプしているわけではありません。そして、もし誰かがサイドブランチの歴史のためにより良い解像度を必要とするなら、もちろん、それはすべてまだそこにあります-それはただではなくmaster、サイドブランチにあります。 問題は次のとおりです。私はコマンドラインのみを使用していますが、残りのチームはGUISを使用しています。そして、GUISには他のブランチからの履歴を表示するための合理的なオプションがないことを発見しました。したがって、「この開発はブランチから押しつぶされた」と言って、スカッシュコミットに到達した場合XYZ、何が入っているかを確認するのは非常に苦痛XYZです。 SourceTreeでは、私が見つけることができる限り、それは大きな頭痛の種です:でmaster、からの履歴を見たいmaster+devFeature場合は、チェックmaster+devFeatureアウトする必要があります(異なるすべてのファイルに触れる)、または適切な場所が見つかるまで、リポジトリのすべてのブランチを並行して表示するログをスクロールします。そして、あなたがどこにいるのかを理解してください。 私のチームメイトは、開発の歴史にあまりアクセスできないことを望んでいません。したがって、彼らは、これらの大きくて長い開発側ブランチを、常にマージコミットでマージしたいと考えています。マスターブランチからすぐにアクセスできない履歴は必要ありません。 私はその考えが嫌いです。それは、並行した開発の歴史が無限に行き来できないことを意味します。しかし、私たちがどのような選択肢を持っているのか見ていません。そして、私はかなり困惑しています。これは、優れたブランチ管理について私が知っているほとんどすべてをブロックしているようであり、解決策が見つからない場合は、常にフラストレーションが溜まります。 ここには、サイドブランチを絶えずマージコミットでマスターにマージする以外のオプションがありますか?または、マージコミットを常に使用するのが私が恐れているほど悪くないという理由はありますか?

18
ソース管理への最初のコミットはいつ行うべきですか?
プロジェクトがソース管理に最初にコミットするのに十分であるかどうかはわかりません。プロジェクトが「フレームワーク完了」になるまでコミットを延期する傾向があり、それ以降は主に機能をコミットします。(これには大きすぎるコアフレームワークを持つほどの個人的なプロジェクトは行っていません。)これがベストプラクティスではないと感じていますが、何が間違っているのかわかりません。 たとえば、1つのコードファイルで構成されるプロジェクトがあるとします。約10行のボイラープレートコードと、プロジェクトを非常に基本的な機能(1つまたは2つの機能)で動作させるために100行かかります。最初にチェックインする必要があります: 空のファイル? 定型コード? 最初の機能は? 他のポイントで? また、特定の時点でチェックインする理由は何ですか?

8
多くのプログラマーがコードをgithubに移動するのはなぜですか?
過去6か月以上、sourceforge.netでホストされている多くのコードや、「GitHubに移動する」他のホスティングサイトを見てきました。「Moved to Github」というフレーズを含む単なるGoogle検索では、githubに移動されたテキストを含むいくつかの結果が返されます。これは私にとって非常に紛らわしいですし、なぜ人々は正確に動いているのでしょうか?GitHubの方が優れているということですか、それとも私には見られない特別な利点がありますか?

10
同僚がテストせずにコミットしてプッシュする
同僚が自分のPCでテストする必要がないと考えると、彼は変更を加え、コミットしてからプッシュします。次に、彼は実稼働サーバーでテストを行い、ミスを犯したことに気付きます。週に1回発生します。現在、彼は3つのコミットを行い、5分以内に運用サーバーへの展開をプッシュしていることがわかります。 私は彼に、これは良い仕事がどのように行われるかではない、と何度か言った。私は彼に再び失礼になりたくありません、そして、彼は会社で私と同じ地位にあります、そして、彼はここで私より多くをしました。 この振る舞いを何らかの形で罰するか、できる限り不快にしたいのです。 始める前に、会社はFTPなどの旧式な方法を使用して展開していましたが、バージョン管理はありませんでした。 Git、Bitbucket、Dploy.io、およびHipChatを使用するように強制しました。展開は自動ではなく、誰かがdply.ioにログインして展開ボタンを押す必要があります。 さて、実稼働サーバーでテストしないように強制するにはどうすればよいですか?HipChatボットのようなものは、同じ行で繰り返し編集が行われていることを感知し、プログラマーに通知を送信できます。

12
(ジュニア)開発者は、開発/ ITチームでより良いプロセスと実践を推進する必要がありますか?
私はジュニア開発者であり、変更を正当化することができ、チームが作業を完了するのに役立つ場合、チームのプロセスを形作るのに役立つ能力を与えられています。私の過去の企業は、管理から来るプロセスを多かれ少なかれ厳密に定義していたので、これは私にとって新しいものです。 私のチームはかなり小さく、やや新しい(<3歳)です。彼らは欠けています: 明確に定義されたソフトウェア開発/作業管理フレームワーク(スクラムなど) 強力な製品所有権 明確に定義された役割(たとえば、ビジネススタッフが手動テストを行う) 定期的なスタンドアップミーティング 統合された問題追跡プロセス(ツールがあり、プロセスはまだ開発中です) ユニット、システム、リグレッション、または手動テストスイートまたはリスト ビジネスロジックとプロセスに関するドキュメント 社内および顧客向けのヒントを文書化するナレッジベース そしてリストは続きます。経営陣は、価値が正当化され、最も重要な作業(開発)が完了するのを助ける限り、改善の実施に対してオープンです。ただし、基本的な前提は、誰もあなたのためにそれをするつもりはないので、実装の所有権を取る必要があるということです。そして、言うまでもなく、上記のプロジェクトのいくつかは、時間のかかる疑いもなく、重要なものであり、明らかに開発作業ではありません。 時間が経つにつれて上記のことを試してプッシュする(後輩の)開発者の努力の価値はありますか?または、「自分のレーンにとどまり」、開発に集中し、プロセスの定義と最適化の大部分を管理者に任せることが最善でしょうか?

13
どの「バージョン命名規則」を使用していますか?[閉まっている]
異なるバージョンの命名規則は異なるプロジェクトに適していますか?何を使用し、その理由は? 個人的には、16進数のビルド番号(11BCFなど)を好みます。これは非常に定期的に増やす必要があります。そして、顧客向けにシンプルな3桁のバージョン番号、つまり1.1.3。 1.2.3 (11BCF) <- Build number, should correspond with a revision in source control ^ ^ ^ | | | | | +--- Minor bugs, spelling mistakes, etc. | +----- Minor features, major bug fixes, etc. +------- Major version, UX changes, file format changes, etc.

10
コミット間の待機時間が長すぎる場合はどうすればよいですか?
私はいたずらだった...あまりにも多くの「カウボーイコーディング」、十分なコミット。さて、ここで私は多大なコミットをしています。はい、ずっとコミットしていたはずですが、今は遅すぎます。 何が良いですか? 私が変更したすべてのものをリストする1つの非常に大きなコミットを行う ファイルには複数の修正、変更、追加のメソッド名などがあるため、コンパイルできない可能性のある小さなコミットに分割してみてください 適切なコミットのためだけにファイルの部分的な復元を行ってから、新しい変更を元に戻します。 注:現時点では、このプロジェクトに取り組んでいる唯一のプログラマーです。少なくともより多くのプログラマを雇うまで、これらのコミットコメントのいずれかを見るのは私だけです。 ところで:私はSVNとSubclipseを使用しています。これらの変更を行う前に、新しいブランチを作成しました。 詳細:そもそもどうやってこの状況に陥ったのかということに関して、別の質問をしました。アプリケーションの接着剤を書き換える準備をする方法

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