タグ付けされた質問 「sdlc」

ソフトウェア開発ライフサイクルに関する質問(つまり、必ずしも特定の方法論に関連しているわけではない、ソフトウェア開発プロセスのアクティビティ)。

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

2
コードの文書化の方法とソフトウェアの文書化が不十分な場合が多いのはなぜですか?
java apiなど、よく文書化されたコードの良い例があります。しかし、gitや企業の内部プロジェクトなどの公開プロジェクトのコードの多くは、文書化が不十分であり、初心者にはあまり適していません。 私のすべてのソフトウェア開発スティントでは、文書化が不十分なコードを処理する必要がありました。次のことに気づきました- コード内のコメントはほとんどまたはまったくありません。 メソッド名と変数名は自己記述的ではありません。 コードがシステムまたはビジネスプロセスにどのように適合するかについてのドキュメントはほとんどまたはまったくありません。 悪い開発者を雇うか、良い開発者を指導しない。シンプルでクリーンなコードを書くことはできません。したがって、開発者を含む誰にとってもコードを文書化することは困難または不可能です。 その結果、多くのコードを調べて、多くの人と話して物事を学ぶ必要がありました。これはみんなの時間を無駄にすると感じています。また、プロジェクトへの新規参入者向けのKT /ナレッジ転送セッションの必要性も生じます。 次の理由により、ドキュメントには値する注意が払われていないことを学びました。 怠惰。 開発者はコード以外は何もしません。 雇用保障。(コードを簡単に理解できる人がいない場合、簡単に交換できない可能性があります。) 期限が厳しいため、文書化する時間がほとんどありません。 ですから、会社やプロジェクトで優れた文書化の実践を奨励し、実施する方法があるのだろうかと思っています。プロジェクトの複雑さに関係なく、システムの適切なドキュメントとプロジェクトのコードを作成するために使用する戦略は何ですか?最小限のドキュメントが必要な場合やドキュメントが不要な場合の良い例はありますか? 私見、私は私達がプロジェクトが渡された後文書の検討があるべきであると感じます。単純で簡潔、説明的で使いやすいものでない場合、開発者または技術文書エンジニアがその責任を負い、修正する必要があります。私は、人々が最初の本のようにユーザーフレンドリーになることを望んではなく、ドキュメントの連を作ることを期待していませんが、何時間もの分析と無駄なKTセッションの必要性を排除すると期待しています。 この狂気を終わらせる、または軽減する方法はありますか?「ドキュメント駆動型開発」でしょうか?

11
時間の見積もりがうまくいかない場合はどうすればよいですか?
ケースの推定時間が3日間だとしましょう。2日目には、ケースが増えており、時間の推定が行われたときにカウントされなかった新しいシナリオがポップアップしていることに気付きます。新しい調査結果は、2日間余分にかかります(合計5日間)。これは、開発者として遅かれ早かれ直面する典型的な問題です。 プロジェクトリーダーに新しい納期を通知する場合、どの戦略を使用できますか? 多くの場合、なぜ質問がありますか?新しい配達時間をどのように動機付けますか? 実際、多くのプロジェクトでは、SDLCの分析と設計にあまり時間をかけていません。 編集: 非常に複雑なプロジェクトでは、分析と設計にどれだけ合理的な時間を費やしても、ビジネスルールが複雑すぎるため、常に驚きがあります。しかし、そのような場合、プロジェクトリーダーは複雑さを認識し、予期しない驚きが生じたときに正しい態度をとる必要があると思います。問題は、複雑さを理解していないプロジェクトリーダーにどのように取り組むかです。

4
QAと反復のジレンマ
私の会社では、アジャイルプラクティスでの作業に成功していますが、反復は使用していません。主な理由は、反復サイクルでQAに適合するクリーンな方法を見つけることができないからです。 QAは、特定のビルド(リリース候補)に対する追加の検証として、このビルドが顧客に展開される前に理解します。ポイントは、1つの悪意のあるコミットがリリース全体に損害を与えることを避けることです。あなたはそれがどれであるかを決して知らないので、QAはリリースのすべての機能/コミットがビルドに含まれるまで待つ必要があります。(有名な最後の言葉「それはほんの小さな変化でした」は許可されていません。) QAがリリース候補でバグを見つけた場合、開発者はそれぞれのリリースブランチでこれらのバグを修正します(そして、トランクにマージします)。すべてのバグが修正されると、QAが再テストするために新しいビルドが展開されます。特定のリリース候補にバグが見つからない場合にのみ、検証のために顧客に提供されます。 これには通常、リリースごとに約2〜3つの候補、約1週間かかります。通常、修正を記述する時間は、テスト作業よりもはるかに短いです。したがって、開発者を忙しくしておくために、彼らはリリースN + 1に取り組み、QAはNに取り組みます。 反復を使用しなくても、リリースNとN + 1の作業を重複させることができるため、これは問題になりません。しかし、私が理解していることから、これはスクラムやXPのような反復ベースのアプローチと互換性がありません。彼らは、すべてのテスト作業がイテレーションに組み込まれ、イテレーションが最後にリリース可能であることを要求します。 これは必然的に次の望ましくない結果のいずれかにつながることがわかります。 (A) QAはリリース候補を確認する時間が必要であり、バグ修正作業が開発者を完全に忙しくしていないため、開発者はイテレーションの終わりにアイドル状態です。 (B)最初のリリース候補の準備が整う前に、QAがすでに機能し始めています。これは、Stack Exchangeで最も推奨されるものです。しかし、テストされた特定のリリース候補がないため、それは私の会社がQAとして理解しているものではありません。そして、すべてを壊す「小さな変化」は、気付かれずに導入される可能性があります。 (C)バグは次の反復に引き継がれます。これはStack Exchangeでも推奨されます。私はそれがまったく解決策だとは思わない。基本的に、バグ修正が行われるたびに、新しい未検証のコミットが同じブランチに追加されるため、検証済みビルドが取得されないことを意味します。 このジレンマから抜け出す方法はありますか?
17 agile  teamwork  qa  sdlc 

10
お金を稼ぐために、どの時点でソフトウェア開発の原則をいくつか捨てますか?
興味深いことに、メディアがどこにあるかを見るために、この質問をそこに投げ出したいと思います。 過去12か月で、TDDとソフトウェア開発におけるアジャイルの価値の多くを取り上げました。私はソフトウェアの開発がどれほど良くなったかに圧倒され、それらを原則から外すことはありませんでした。まで...私は年間の持ち帰り給与を倍増する契約の役割を提供されました。 私が参加した会社は特定の方法論を踏んでおらず、チームはコードの匂いやソリッドなどのことを聞いていませんでしたし、チームでさえもしていないなら、TDDに時間を費やすことはありませんでした実際にユニットテストを見ました。売り切れですか?いいえ、完全ではありません...コードは常に「ボブおじさんの教えに従って」「きれいに」書かれ、SOLIDの原則は必要に応じて私が書くコードに常に適用されます。しかし、テストフレームワークを作成したとしても、テストフレームワークを正しく使用/保守することはありませんでした。 それを例にとると、開発者は個人的にお金/その他の利益のために職人技の原則を落とすべきではないという点を教えてください。これは、自分のニーズ、ビジネスニーズ、職人技などのためにどれだけ関心があるかについて、非常に個人的な意見になり得ることを理解しています。しかし、たとえば、テストチームは、プログラミングの単体テストを理解するのではなく、私がやったように自分自身を許すことができるでしょうか?あなたが落とすものがあることを考えると、通常はあなたが落とすものを補うビジネスに等しい費用があるはずです-できれば、もちろんあなたがあなた自身のポケットを並べてコミュニティ/社会的コラボレーションではなく)。 お金を2倍にして、RADに戻りますか?または、歩いて、アジャイルをしている人を探して、決して振り返らないでください...

5
厳格な非アジャイル手法を使用するチームにアジャイルを導入する方法は?
アジャイル以外の方法論に対して誇らしげに認定され、説明責任を実証するための顧客へのセールスポイントとして使用している会社を考えてみましょう。 かんばんやスクラムを、システム全体を壊さずに徐々に導入し、それでもなお説明責任/監査可能であると自信を持たせるにはどうすればよいですか? これは「スクラムのようなアジャイルな方法論をどのように導入しますか」に関連する可能性がありますが、ここでは、会社がSDLCを誤ったふりをしてSDLCを管理する特定の方法を課しているという事実を回避/回避する方法について疑問に思っています監査証跡を持つ唯一の方法。

5
コードレビューが配信/テストサイクルに遅れている
アジャイルプロセスには2週間のスプリントがあります。タスクは毎日配信され(毎日ビルド)、テストチームは翌日または同じ日にテストを完了します。 Devコードレビューもありますが、これには時間がかかります(1〜2時間)ため、週3回、月曜日から水曜日にスケジュールされます。開発者が集まり、コードを改善/リファクタリングする方法を提案します。 問題は、コードレビュー後にアクションアイテムが登場するまでに、ほとんどのタスクが既にテストされていることです。テスターは、既にテストに合格したものを再テストしたくない。内部の開発者の変更を気にしません。 アジャイルプロセスを誤解していますか?コードレビューは毎日のリリース/テストサイクルと互換性がありませんか?毎日コードレビューを行うことはできません。すべての人の時間がかかるからです。

3
「ソフトウェアのサポート終了」状況に対処する方法
ベンダーがソフトウェアのサポートやサービスを提供するつもりはないと宣言した場合(およびアップグレードパスを提供せずにビジネスを終了する意図を述べた場合)、顧客はどのような手段を利用できますか? 顧客の観点からこれを考慮してください。顧客のITスタッフは技術的な選択肢のみを検討する可能性が高いですが、顧客が同様に追求できる非技術的な選択肢が存在する可能性があります。また、契約条件などで混乱を最小限に抑えるために、顧客は事前にどのような合理的な手段を講じることができますか? 私が考えることができるもの: 予備のハードウェアを購入し、ソフトウェアが動作し続けることができる予備環境をセットアップする必要があります。 ベンダーの関与を必要としないさまざまなデータエクスポート方法。(これには、商品データベースのバックエンドに保存されているデータを調べるなどの簡単な手法、スクリーンスクレイピング、画像への印刷、再スキャンなどのより複雑な手法などが含まれます) スタッフが古いデータを手動または半自動で新しいシステムに複製する並列システム ベンダーが金銭的な問題を抱えている場合の法的手段(ソースコードエスクローの場合など) 他のアイデアはありますか? 「迂回」が関係しない(DRMなし、DMCAなし)と仮定すると、データリカバリまたはリバースエンジニアリングは合法/許容可能ですか? 編集したメモ: それは、いくつかの逸話的な、しかし実際の物語の組み合わせです。私はそれらのいずれにも直接関与していません。「ソフトウェアのサポート終了」状況が一般的にどのように処理されるかを知りたいのです。元のストーリーを解決するには「難しすぎる」と思わせるつもりはありません。

4
社内環境とソフトウェア開発環境[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 業界では、ソフトウェア開発者が会社自身が使用するコードを書いている「社内開発」環境と、ソフトウェアが販売/配布されるように構築されている適切な「ソフトウェア開発」環境との間で区別があります。一般に。 とりわけ、両者の明らかな違いの1つは、ソフトウェア開発志向の企業は通常、仕様作成、テスト、構築などのソフトウェア開発ライフサイクルを順守するのに対し、社内志向のショップは通常、彼ら自身がエンドユーザーであり、正しく行われなかった何かを常に修正できるため、よりカジュアルな方法で物事を行います。 学生として(他のほとんどの学生と同じように)、ソフトウェア開発環境で仕事をすることを期待していましたが、社内のやり方で運営する会社で最初の地位を得ました。 時には、本格的なソフトウェア開発の経験を逃していないのではないかと思います。この気持ちの根拠はありますか?適切なソフトウェア開発環境に参加しようとする必要がありますか?

5
ソフトウェアの脆弱性に対する攻撃/ツールのソフトウェアライフサイクルの固有の側面は何ですか?
私の地元の大学には、約20人の学生からなる小さな学生向けコンピューティングクラブがあります。クラブには、モバイル開発、ロボット工学、ゲーム開発、ハッキング/セキュリティなど、特定の分野に重点を置いた小さなチームがいくつかあります。 ユーザーストーリー、タスクの複雑さの見積もり、バージョン管理と自動ビルド/テストの継続的な統合など、いくつかのチームにいくつかの基本的なアジャイル開発コンセプトを紹介しています。 ウォーターフォール、スパイラル、RUP、アジャイルなど、いくつかの基本的な開発ライフサイクルに精通していますが、セキュリティをハッキング/侵害するためのソフトウェア開発ライフサイクルのようなものがあるのだろうかと思っています。確かに、ハッカーはコンピュータコードを書いていますが、そのコードのライフサイクルは何ですか?いったん違反が発見されてパッチが適用されると、その違反を悪用したコードは役に立たなくなるので、彼らがメンテナンスにあまり関心を持つことはないと思います。 ライフサイクルは次のようになると思います: セキュリティのギャップを見つける セキュリティのギャップを悪用する ペイロードの調達 ペイロードを利用する 製品の目的がセキュリティ違反である場合、ソフトウェアの開発ライフサイクルにはどのような違いがありますか(ある場合)?

9
人々がベンダーを嫌うのを防ぐために、ソフトウェア製品を管理する上でどのような間違いを避ける必要がありますか?
人々がマイクロソフトを嫌う理由についての以前の質問は締め切られました。これは、同じ一般的な線に沿って、もう少し建設的な質問への試みです。これは広いですが狭いです。マイクロソフトだけでなく、一般的なソフトウェアベンダーを対象とすることで、より一般的です。ソフトウェア製品の管理のみを扱うことで、より狭くなります。 それでは、個々のソフトウェア製品だけでなく、会社全体が尊敬/好意/見られることを確実にするために、個々のソフトウェア製品を管理する際にどのような手順を実行(または回避)する必要がありますか?


9
「それで、これはいつ行われるのですか?」を処理する最良の方法
スプリントの真ん中にある毎日のスタンドアップミーティング中に、デファクトプロジェクトマネージャー/スクラムマスターは通常、開発者に次のバージョンを尋ねます。 「それで、これはいつ行われるのですか?」 「では、今日の午後4時までにこのタスクを完了させることはできますか?」 「このサブタスクには何時間残っていますか?」 これは率直に言って非常に迷惑であり、物事をより速く終わらせません。その結果、開発者は多くのプレッシャーにさらされていると感じることが多く、スタンドアップはコラボレーションよりも戦場のように感じることがよくあります。 開発者として、これを処理する確かな方法は何ですか?

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