大規模なソフトウェア会社がコードを文書化またはリファクタリングしないのは一般的ですか?[閉まっている]


8

私は大規模なソフトウェア会社で働き始め、100万行を超えるコードのプロジェクトに割り当てられました。これはクライアント(社内プロジェクトではなく)に販売されるプログラムスイートの一部であり、必要に応じてソースコードを購入できます(ただし、それに関連する追加料金が発生することはまれです)。彼らは何年にもわたってソフトウェア設計を行っており、現在の製品は近い将来に継続することを目的としています。

驚いたことに、何百万行ものコードがドキュメントにほぼ完全に欠けています。さらに、コードの一部の領域は非常に厄介であり、理解しやすくなるようにリファクタリングを使用できる場合があります(たとえば、プログラミング言語の改善が10年ほど前に行われ、コードの大部分が大幅に増加します)バグが発生しにくいことは言うまでもありません)。これを修正するための努力はなさそうで、私が取り組んでいる部分が抵抗に遭遇したためにそうするようにとの私の申し出は、明確な答えを得ることはできませんでした。

これらのプラクティスは、ソフトウェア業界の大企業で一般的ですか?それとも、リファクタリングやドキュメントが不足しているという点で私の会社はユニークですか?

補遺:いくつかのコメントに基づいて、私が探しているものを明確にしたいと思います。私の会社には技術的な負債があることを理解していますが、これは悪いことです。これが原因で私の会社が悪化しているかどうかを判断するのではなく、このドキュメントの欠如とリファクタリングへの抵抗が、私が持つプログラミングの世界での現実であるかどうかを知りたいだけです。私がそれで働き続けるならば対処するために。


4
閉じる。これは答えではなく意見を集めると思います。
Michael Durrant 2013年

1
...そして、私の意見は、数十の異なる企業からの意見です。それは、現代(たとえば、過去5年間)の手法を使用して記述された新しいコードを使用する新しいスタートアップを除いて、標準です。
Michael Durrant 2013年

2
勉強?かなり健全な結論に至るのに調査は必要ありません。あなたがする必要があるのはあなたの周りを見回すことだけです。
Robert Harvey

2
また、最新の手法にはコメントを書かないことも含まれます-それらはすぐに古くなり、十分に維持されず、意味のあるクラスおよびメソッド名の方向に移動します( 'pool_of_currently_available_connections'と 'pool'を比較してください。また、「 xを入力するユーザーとして、x * 2が表示されるはずです」など
Michael Durrant

3
ime、はい、ほとんどの企業はこのようなものです。それに対処する方法を学ぶ必要があります。
GrandmasterB

回答:


13

技術的な負債の観点から、企業がプログラムを「より良く」するために投資できない理由はいくつかあります。

  1. 技術的負債を減らしても、ソフトウェアに新機能は追加されません。したがって、それは(ある程度正当な理由で)金銭的価値がないと経営陣によって認識されています。

  2. ソフトウェアビジネスの性質は、市場に最初に与えられるものであり、最高ではありません。

私は続けることができますが、他のすべての理由はこれら2つのバリエーションにすぎません。それらはすべて、基本的に短期的な思考になり、長期的な実行可能性ではなく即時の利益に焦点を当てます。

重要なソフトウェアプロジェクトを抱えているすべての企業には、ある程度の技術的負債があります。完全に無借金の会社はありません。

私が今までに働いてきたすべてのソフトウェアプロジェクトは、時間をかけて技術的負債を計上しているが - ジェフ・アトウッドを

特にドキュメントに関しては、少ないほど良いです。1ドル1ドル。ソフトウェアのドキュメントをより多く作成するよりも、ソフトウェアをより使いやすく維持しやすくすることで、より多くの利益を得ることができます。

技術的負債、および企業がそれをどのように管理するかについて、いくつかの非公式な調査があります。あなたがしなければならないすべてはそれらを探すことです。 ここに一つあります:

ここに画像の説明を入力してください

またはこれ

ここに画像の説明を入力してください

この問題を抱えているのはあなたの会社だけではないことは明らかです。それも少数派ではないかもしれません。

さらに読書
技術的負債を管理する上で第3回国際ワークショップ-概要
ソフトウェアリライアントシステムで管理する技術的負債


だから私の質問に答えるには、これは典型的な企業ですか?
Thunderforge 2013年

「典型的」とはどういう意味ですか?
Robert Harvey

ほとんどの企業は私が説明したように行動しますか?私は技術的な負債を理解していますが、これがほとんどの企業で発生する問題なのか、それとも少数の企業(私のような)だけが扱う問題なのかについては、あなたは本当に答えませんでした。
Thunderforge

1
投稿した人のほとんどが、数百万人のうち10〜15社未満で働いています。したがって、それを知るには正式な調査が必要です。私は誰も知りません。また、1人のクリーンなコードは別のスパゲッティなので、答えられないと思います。
Michael Durrant 2013年

1
私の経験では、営利vs非営利、ヘルスケアvsコンサルティングで、ボストン-ニューヨーク-サンフランvsハートランドの町は違いをもたらします。ymmv
マイケルデュラント

8

他の回答で(まだ)カバーされていないと私が信じていない視点は、3つの領域での変更のコストです。

  1. テスト
  2. 再習熟
  3. 機会費用

大きな製品を扱う企業は、すべての変更をテストする必要があります。これらのテスト手順は、さまざまなプラットフォーム、さまざまなワークロード、さまざまな視点(パフォーマンス、機能、使いやすさ、下位互換性)で追跡する必要があります。

変更するコードの領域で作業する人も、コードに慣れる必要があります。複数のバージョンがサポートされていると、特に面倒になります(「申し訳ありませんが、どのバージョンですか?ああ、それが新しいです。コードとそのためにボブと話す必要があります」)。同様に、単にコードを変更すると、変更ログ(差分、パッチなど)などが非常に複雑になり、バグが発生した特定の時点まで問題を追跡できます。すべてを変更するコード履歴に何かがある場合、非常に困難になる可能性があります。さらに、バグが長期にわたる(これらのことが発生する)場合、サポートされている複数のバージョンのコードにバグがある可能性があり、今度は非常に異なる方法で古いコードと新しいコードを修正する必要があります。

最後に、多くの場合、時間とお金をどこで使うかを決定する必要があります。これはあなたの時間以上のものですが、むしろあなたがあなたの時間でやるべきこと(そしてそれが下流のリソースに与える影響)です。より多くの売上を生み出し、新しい市場シェアを獲得し、利益を生み出すことができる機能に開発チームの時間を費やすことが望ましいのか、またはエンドユーザーが気付かないことに費やす時間/お金をかけることができないのかマーケティング資料(「ねえ、私たちの既存のコードはうんざりですが、私たちはそれをより良くしました」)であり、純粋なコスト(利益なし)です。

結論として、お金。常に(まあ、ほとんど常に)。


5

はい。私が従業員またはコンサルタントとして個人的に遭遇した50ほどの企業と、同僚を介して知っている200以上の企業に基づいています。

あなたが説明する種類の製品(150万行)は、構築するのに何年もかかり、多くの元の開発者は(またはマネージャーに)移行しました。

上級管理職と主要な継続顧客は、ほんの少しの変化を望んでいます。彼らは安定性を求めています。私たち技術者が改善だと考えるのは、彼らの目のリスクです。新しいバージョンが古いバージョンと同じように動作することを示すことができたとしても、古いシステムには正確に記述された特性があり、ドキュメント化されていないため、リスクが発生します。彼らにとって、クライアントが依存する文書化されていない動作があるかもしれません。

彼らの観点から:それは壊れていませんので、それを修正しないでください。また、そのための企業文化があることもわかります。あなたの「改善」に抵抗している人々は、彼らが始まったとき、おそらくあなたと同じことをしたでしょう。

「勝つ」ことを期待しないでください。これは文化的な問題であり、CEOレベルでの変更以外には変更できません。


上級管理職と主要な継続顧客は、ほんの少しの変化を望んでいます。彼らは安定性を望んでいます。-それについてはよくわかりません。クライアントは、コードと変更の大きさについて気にしませんが、100%バグフリーと無料という2つの魔法の「無料」に非常に興味があります。そうそう、昨日届けてください。彼らのほとんどは、スコープvsコストvsスケジュールについて聞いたことがないか、ソフトウェアに関する知識を突然忘れてしまいました。文化的問題壊れていない、いけない修正私は同意するが、私はまた、ビジネスの問題の背後を理解してください。
JensG 2013年

私にとって、製品とは、会社とクライアントの間に存在する(または存在しない)フィードバックループを通過する方法です。より強力なフィードバックを提供し、「より深い」要件を持つさまざまなクライアントは、ベンダーに変更を要求するか、競合他社(存在する場合)に進みます。
andy256 2013年

結局のところ、それは単に文化的なものを超えていると言える場合があります。ほとんどのバグの多いルーチンの上位10%に対処するために、管理がすべての新機能の開発を停止したとしましょう。シーシュポスの労力にならないように、慎重に管理する必要があります。
James Snell

@JamesSnell:それは良い点です。特定のコードを何年も前に一から再設計して書き直すべき例を知っています。今日でも、そのコードのメンテナーは、隔週でまだポップアップしている古いバグを修正するのに苦労しています。さらに、機能を追加することでその間に導入されたバグは言うまでもありません。何年も前に、古くてデザインが悪いバージョンを捨てることを決めていたとしたら、長期的にどれだけの時間を節約できたでしょうか。
JensG 2013年

@JensG同意します。技術的負債の管理は、適切に管理されたチーム/コードベースの運用方法です。ただし、技術的負債に対処することは、たとえコードベースを改善することを意図している場合でもコードベースを不安定にすることを意味します。リファクタリングを開始すると、それが終わりのないタスクになる可能性があるというリスクが伴います。コードはそれを必要としたかもしれませんが、短期的なコストは、長期的な利益が到着する前にプロジェクトを中止するのに十分であり、彼らがその中にいる間、マネージャがボートを揺り動かしたくないでしょう。
James Snell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.