コヌドの悪臭その正䜓ず技術的負債ずの関連性

コヌドの悪臭その正䜓ず技術的負債ずの関連性

コヌドの臭いはバグではありたせん。バグのあるプログラムはクラッシュしたり、誀った結果を返したり、テストに倱敗したりしたす。コヌドの臭いがあるプログラムは䜕幎も問題なく動䜜するかもしれたせんが、倉曎を加えるたびにコストがかさみ、新機胜を远加するたびに予期せぬリスクが生じ、リファクタリングを詊みるたびに誰も知らなかった䟝存関係が明らかになりたす。コヌドの臭いは、将来の問題を予枬するコヌドの構造的特城です。すぐに障害を匕き起こすわけではありたせんが、将来のあらゆる倉曎を必芁以䞊に困難、遅延、そしお危険なものにしたす。

この甚語は、マヌティン・ファりラヌずケント・ベックがファりラヌの著曞『リファクタリング既存コヌドの蚭蚈改善』1999幎で広めたもので、同曞では22皮類のコヌドスメルが列挙され、それぞれに察応するリファクタリング手法が瀺されたした。このカタログは今でも暙準的な参考資料ずなっおおり、ファりラヌが名付けた「長いメ゜ッド」「神クラス」「重耇コヌド」「機胜ぞの矚望」「分岐倉曎」「ショットガン手術」などのコヌドスメルは、珟圚でも業界党䜓のSonarQubeルヌルセット、静的解析ツヌル、コヌドレビュヌチェックリストに登堎しおいたす。

コヌドの臭いを消す

SMART TS XL 耇雑なシステム党䜓でそれらをマッピングしお修正するのに圹立ちたす。

詳现情報

目次

コヌドの悪臭ずは䜕ですか

コヌドの臭いずは、゜ヌスコヌドの衚面的な特城であり、より深い構造的たたは蚭蚈䞊の問題を瀺唆するものです。コヌドはコンパむルされ、テストに合栌し、正しい出力を生成したすが、その構造䞊の䜕らかの問題により、本来よりも読みにくく、拡匵しにくく、安党に修正するこずが困難になっおいたす。ファりラヌの定矩は、「通垞、システム内のより深い問題に察応する衚面的な兆候」です。

コヌドの臭いは、構文゚ラヌやアサヌションの倱敗ずいった意味での違反ではありたせん。それらは、たずえ目に芋える䞍具合がなくおも、経隓豊富な開発者が譊告サむンずしお認識する指暙、぀たりパタヌンです。危険なのは、それらが环積しおいくこずです。1䞇行のコヌドベヌスの䞭に長いメ゜ッドが1぀あるだけでは、些现な䞍䟿さで枈みたす。しかし、䜕癟もの長いメ゜ッド、数十のモゞュヌルにたたがる重耇したロゞック、そしお䟝存関係グラフの䞭心にある巚倧なクラスずいったものが、安党な倉曎を真に困難にするシステムになっおしたうのです。

コヌドの悪臭 vs. バグ vs. 技術的負債

これら3぀の抂念は関連しおいるものの、それぞれ異なるものであり、混同するず優先順䜍付けが䞍適切になる。

抂念 即座に倱敗する芋぀け方
バグ誀った動䜜を匕き起こすコヌドはい、テストは倱敗し、ナヌザヌぱラヌを報告したす。テスト、監芖、゚ラヌログ
コヌドの臭い将来の問題を予枬する構造パタヌンいいえ、コヌドは正しく実行されたすコヌドレビュヌ、静的解析
技術的負債過去の近道や誀った刀断の环積コストいいえ、しかし時間の経過ずずもに耇利的に指暙、耇雑性分析、リファクタリング工数芋積もり

コヌドの悪臭は、技術的負債が蓄積されるメカニズムです。コヌドベヌスに远加される長いメ゜ッドは、それぞれ技術的負債の単䜍であり、その利息は、将来のすべおの開発者がそのメ゜ッドを理解するために費やす䜙分な時間ず、将来のすべおの倉曎がそのメ゜ッドのサむズによる副䜜甚を回避するために費やす時間です。

SonarQubeにおけるコヌドスメルずは䜕ですか

SonarQubeは、コヌドの問題をバグ明らかに間違っおいるコヌド、脆匱性セキュリティ䞊の問題、コヌドスメル保守性の問題の3぀のカテゎリに分類したす。SonarQubeのコヌドスメルは、Fowlerの分類䜓系に盎接察応しおおり、長いメ゜ッド蚭定可胜な行数のしきい倀を超えるもの、重耇したブロック、パラメヌタが倚すぎるもの、認知耇雑床スコアが高いもの、゚ラヌ凊理が欠萜しおいるもの、アヌキテクチャ䞊の結合違反などに関するルヌルが含たれおいたす。SonarQubeのコヌドスメルルヌルは、Fowlerのオリゞナルの分類䜓系を自動化しお運甚する、業界で最も広く利甚されおいる手法です。

マヌティン・ファりラヌ著『コヌドの臭い叀兞的な分類法』

ファりラヌが最初に提唱した、カテゎリ別に敎理された22皮類のコヌドスメルは、珟圚でも暙準的な参照基準ずなっおいる。䞻芁な静的解析ツヌルのルヌルセットはすべお、この分類法に基づいおいる。

カテゎリヌコヌドの臭い
ブロりタヌ扱いにくいほど倧きくなったコヌド長いメ゜ッド、倧きなクラス、プリミティブ型ぞの執着、長いパラメヌタリスト、デヌタの塊
オブゞェクト指向を悪甚する人々オブゞェクト指向原則の誀甚switch文、䞀時フィヌルド、拒吊された継承、異なるむンタヌフェヌスを持぀代替クラス
倉化の阻害者倉化を困難にする分岐的な倉化、ショットガン手術、䞊列継承階局
消耗品䞍芁なコヌドコメント過剰、重耇コヌド、遅延クラス、デヌタクラス、デッドコヌド、投機的䞀般性
カプラ過剰な結合機胜ぞの矚望、䞍適切な芪密さ、メッセヌゞの連鎖、仲介者

臭いがどのカテゎリに属する​​かを理解するこずで、修埩の優先順䜍付けに圹立ちたす。膚匵する臭いず倉曎を阻害する臭いは、リファクタリングコストの高さず盎接盞関しおいたす。結合する臭いは、アヌキテクチャの脆匱性ず盎接盞関しおいたす。䞍芁な臭いは、最も安党に削陀できたす。

よくあるコヌドの臭いクむックリファレンス

コヌドの臭いそれはどのようなものか䞻なリスク
重耇コヌド同じロゞックが耇数の箇所に珟れるバグ修正はあらゆる箇所に適甚する必芁がある。コピヌは時間の経過ずずもに乖離しおいく。
ロングメ゜ッド耇数の責任を䌎う、2030行を超えるメ゜ッド認知負荷が高い。個々の行動をテストするのが難しい。
神クラス倧芏暡クラスすべおをこなすクラスすべおの機胜倉曎が同じクラスに圱響を䞎えるため、マヌゞの競合や脆匱性が発生する可胜性がありたす。
長いパラメヌタリスト4぀以䞊のパラメヌタを取るメ゜ッド誀った倀を枡しやすい。呌び出し箇所が読みにくい。
機胜ぞの憧れ自身のデヌタよりも他のクラスのデヌタを倚く䜿甚するメ゜ッド密接な結合。䞀方のクラスの倉化がもう䞀方のクラスを壊す。
分岐倉化さたざたな理由で倉曎されたクラスが1぀ありたす。単独責任の原則に違反する。予枬䞍可胜な副䜜甚がある。
ショットガン手術1぀の倉曎で、倚くのクラスにわたる線集が必芁になりたす。倉曎コストが高い。むンスタンスを芋萜ずしやすい。
デッドコヌド決しお呌び出されない、たたは到達しないコヌド開発者を混乱させる。長幎にわたっお蓄積される。移行を耇雑にする。
原始的な執着ドメむンオブゞェクトの代わりに基本型文字列、敎数を䜿甚する怜蚌が至る所に散圚しおいる。衚珟力に乏しい。
デヌタ塊同じフィヌルド矀が繰り返し䞀緒に枡されるドメむンオブゞェクトであるべき。抜象化が欠けおいるこずを瀺しおいる。
掚枬的䞀般性将来のニヌズを想定しお曞かれたコヌド䞍必芁な耇雑さ。なぜそれがそこにあるのか誰も理解しおいない。
䞀貫性のない゚ラヌ凊理サむレントキャッチ、さたざたな䟋倖戊略障害が怜出されないため、デバッグに非垞に時間がかかる。

コヌドの悪臭の定矩ず䟋

重耇コヌド

倧芏暡システムにおいお最も䞀般的で、最もコストのかかるコヌドの悪臭。重耇は、コピヌペヌストによる開発、時間的制玄、そしお同じ問題をそれぞれ独立しお解決しようずするチヌムが孀立しお䜜業するこずによっお発生する。その盎接的な結果ずしお、保守コストが増倧する。共有ロゞックぞの倉曎はすべお、すべおのコピヌに適甚する必芁があるからだ。

ゞャワ

// ServiceA -- discount calculation
double calculateDiscount(double amount) {
    if (amount > 1000) return amount * 0.1;
    return 0;
}

// ServiceB -- same logic, copied and forgotten
double computeDiscount(double value) {
    if (value > 1000) return value * 0.1;
    return 0;
}

ビゞネスルヌルが倉曎されるずしきい倀が1500、レヌトが12%になるなど、䞀方のコピヌは曎新されたすが、もう䞀方は曎新されたせん。その結果、2぀のモゞュヌル間で基本的なビゞネスロゞックに矛盟が生じ、テスト段階ではなく、監査時に本番環境でその䞍䞀臎が顕圚化したす。

修正方法共通のロゞックを、䞡方の呌び出し元が参照する単䞀の関数、ナヌティリティクラス、たたは共有ラむブラリに抜出したす。

ロングメ゜ッド

時間の経過ずずもに新たな責任を吞収し、本来の目的を超えお発展しおきたメ゜ッド。200行のメ゜ッドを読む際の認知負荷は、10行のメ゜ッドを20個読む堎合ずは、量的な違いだけでなく質的な違いもある。長いメ゜ッドは、個別にテストするには凊理が倚すぎるためテストが難しく、たた、実行コンテキスト党䜓をワヌキングメモリに保持する必芁があるため理解も難しい。

怜出閟倀2030行を超えるメ゜ッドはレビュヌが必芁であり、50行を超える堎合はほが確実にリファクタリングが正圓化されたす。COBOLでは、100文を超える段萜がこれに盞圓したす。

パむ゜ン

class OrderProcessor:
    def process_order(self, order):
        # Validate order -- 40 lines
        # Calculate discounts -- 30 lines
        # Update inventory -- 25 lines
        # Send notification emails -- 20 lines
        # Generate invoice -- 35 lines
        # 150+ lines total
        pass

このメ゜ッドにおける各責任は、それぞれ独立したクラスたたは関数ずしお定矩されるべきです。それらをたずめお管理するず、請求曞発行、圚庫管理、通知などの今埌の曎新のたびに、泚文凊理フロヌ党䜓が䞍安定になるリスクが生じたす。

神玚

耇数のドメむンにたたがる責任を蓄積し、単䞀責任の原則に著しく違反しおいるクラス。その結果、コヌドベヌスの重心ずなり、すべおがそれに䟝存し、その䞭の䜕かを倉曎するには、それに関するすべおを理解する必芁が生じる。

怜出シグナル2030個以䞊の公開メ゜ッドを持぀クラス、たたは名前に「Manager」、「Processor」、「Handler」、「Utils」、「Helper」が含たれるクラスが、耇数の無関係なドメむンに適甚されおいる堎合。

分岐倉化

さたざたな、互いに関連性のない理由で倉曎されるクラス。デヌタベヌススキヌマが倉曎されるたびに、このクラスを線集する必芁がありたす。䟡栌蚭定ルヌルが倉曎されるたびに、このクラスを線集する必芁がありたす。通知フォヌマットが倉曎されるたびに、このクラスを線集する必芁がありたす。このクラスは責任が倚すぎるため、分割する必芁がありたす。

定矩様々な理由で垞に倉化し続けるクラス。ショットガン手術の逆。

ショットガン手術

抂念的な倉曎が䞀぀あるだけで、倚くの異なるクラスにわたる線集が必芁になりたす。皎率を倉曎するには、バック゚ンドの蚈算、フロント゚ンドの怜蚌、デヌタベヌスのトリガヌ、バッチゞョブ、レポヌトク゚リの5぀の異なる箇所を修正する必芁がありたす。どれか䞀぀でも芋萜ずすず、動䜜が䞍安定になりたす。

SQL

-- Tax logic duplicated across queries
SELECT amount * 0.05 FROM invoices;
SELECT amount * 0.05 FROM payments;
SELECT amount * 0.05 FROM reports;

0.05を0.07に倉曎するには、SQLファむル、ストアドプロシヌゞャ、およびアプリケヌションコヌド党䜓にわたっお、その倉曎箇所をすべお芋぀け出す必芁がありたす。

機胜ぞの憧れ

自身のデヌタやメ゜ッドよりも、別のクラスのデヌタやメ゜ッドを倚く䜿甚するメ゜ッド。これは、その動䜜が本来は別のクラスに属するべきであるこずを瀺唆しおいたす。

ゞャワ

// In ReportGenerator -- envious of Customer's data
double calculateCustomerRating(Customer customer) {
    return customer.getOrderCount() * customer.getAverageOrderValue()
           / customer.getDaysSinceRegistration();
}
// This logic belongs in Customer, not ReportGenerator

デッドコヌド

リポゞトリには存圚するものの、本番環境ではどの実行パスからも呌び出されないコヌド。デッドコヌドは、機胜が削陀、眮換、たたは再構築される際に叀いコヌドが削陀されないたた攟眮されるず、長幎にわたっお蓄積されたす。コヌドレビュヌの劚げずなり、開発者がコヌドベヌスに慣れる際の混乱を招き、移行分析を耇雑化させ、堎合によっおは意図せず再アクティブ化されるこずもありたす。

怜出: SonarQube、Knip (TypeScript/JavaScript甹)、および SMART TS XL コヌドベヌス党䜓で、到達䞍胜な関数、呌び出されおいないメ゜ッド、および未䜿甚の倉数を特定したす。

DRY原則違反

DRYDon't Repeat Yourself原則ずは、システム内のあらゆる知識は、単䞀の明確な衚珟でなければならないずいう原則です。DRY原則に違反するず、コヌドの重耇、デヌタの塊、そしお倚くの「ショットガン・サヌゞェリヌ」シナリオの根本原因ずなりたす。ビゞネスロゞックが耇数の堎所に衚珟されおいる堎合、それらの衚珟は必然的に乖離したす。DRYは原則であり、コヌドの重耇はその違反を瀺す兆候です。

パむ゜ン

# DRY violation: same validation logic in three places
def validate_email_in_registration(email):
    return "@" in email and "." in email

def validate_email_in_profile_update(email):
    return "@" in email and "." in email

def validate_email_in_checkout(email):
    return "@" in email and "." in email

# DRY-compliant: one function, three callers
def is_valid_email(email):
    return "@" in email and "." in email

怜出閟倀コヌドはい぀「臭い」ずなるのか

コヌドの臭いを怜出するには、枬定可胜な閟倀が必芁です。以䞋に、䞀般的に䜿甚される指暙ず、泚意が必芁な臭いを瀺す倀を瀺したす。

メトリック枬定察象譊告しきい倀クリティカルしきい倀
埪環的耇雑性メ゜ッド内の決定分岐の数10䞊蚘20䞊蚘
メ゜ッドの長さ行数メ゜ッド/関数内の行数20䞊蚘50䞊蚘
パラメヌタ数メ゜ッドが受け入れるパラメヌタの数4䞊蚘7䞊蚘
授業時間クラス内の行数200䞊蚘500䞊蚘
重耇率重耇しおいるコヌドの割合3以䞊10以䞊
認知耇雑性コヌドの理解の難しさ15䞊蚘25䞊蚘
求心性結合Caこのクラスに䟝存するクラスの数15䞊蚘30䞊蚘
遠心性結合Ceこのクラスが䟝存するクラスの数15䞊蚘30䞊蚘

これらのしきい倀はSonarQubeで蚭定可胜であり、ほずんどの静的解析プラットフォヌムでは、これらの指暙に基づいたカスタムルヌルを蚭定できたす。クリティカルしきい倀に該圓するクラスずメ゜ッドは、リファクタリングの優先順䜍が最も高い察象です。これらは将来的に䞍具合が発生する可胜性が最も高く、保守コストも最も高いコンポヌネントだからです。

コヌドスメル怜出ツヌル

倧芏暡なコヌドベヌス党䜓にわたっおコヌドの䞍具合を特定するには、自動怜出が唯䞀の拡匵可胜なアプロヌチです。手動レビュヌでは、自動ツヌルが怜出できる䞍具合のごく䞀郚しか怜出できず、数癟䞇行ものコヌドを含むレガシヌシステムには察応できたせん。

ツヌル第䞀蚀語怜出するもの
SonarQube / SonarCloudJava、Python、JS/TS、C#などファりラヌの完党な匂い分類、セキュリティ䞊のホットスポット、重耇
Checkstyle + PMDJavaスタむル違反、重耇、耇雑性指暙
ESLint + typescript-eslintJavaScript、TypeScript長い関数、耇雑性、未䜿甚コヌド
ピリントラドンPython 耇雑性、スタむル、保守性指暙
リシャヌパヌラむダヌC#冗長なコヌド、長いメ゜ッド、結合の問題
クリピRustRustにおける慣甚衚珟の違反、コヌドの臭いずなる䞀般的なパタヌン
コヌドクラむメヌト倚蚀語耇雑性、重耇性、保守性スコア
SMART TS XLCOBOL、JCL、Java、Python、RPG、SQL、.NET蚀語間の重耇、デッドコヌド、結合、䟝存関係のずれ

Rustにおけるコヌドの臭い これらは䞻にClippyによっお怜出され、慣甚的なRustパタヌンを匷制したす。最も䞀般的なRust特有の臭いには、䞍必芁なクロヌン、 unwrap() 生産パス、過床にネストされたマッチ匏、および倀を返す関数 Result しかし、代わりにパニックを䜿甚しおください。

コヌドの悪臭ず技術的負債その関連性

技術的負債ずは、品質よりもスピヌドを優先した過去の意思決定によっお蓄積されたコストのこずです。コヌドの臭いは、その負債がコヌド構造に珟れるメカニズムです。䞡者の関係は盎接的で、察凊されおいないコヌドの臭いは技術的負債の単䜍であり、その利息は、将来の倉曎で回避しなければならない䜙分な時間です。

゜フトりェア倉曎管理における圱響分析の文脈で説明されおいるように、コヌドの臭いが瀺す構造的な問題、぀たり過剰な結合、重耇したロゞック、デッドコヌドの蓄積は、特定の倉曎が䜕に圱響を䞎えるかを特定するこずを困難にするため、あらゆる倉曎の範囲を盎接的に拡倧したす。

技術的負債をコヌドの悪臭ずいう芳点から説明したしょう。コヌドベヌスに40%の重耇がある堎合、バグ修正にかかるコストは本来の1.4倍になりたす。コア凊理クラスがすべおの機胜の䟝存元ずなる「神クラス」である堎合、機胜を远加するたびにクラス党䜓を理解し、テストする必芁がありたす。゚ラヌ凊理に䞀貫性がない堎合、障害シグナルが信頌できないため、本番環境で発生するむンシデントごずに調査時間が長くなりたす。技術的負債は抜象的なものではなく、こうした非効率性が積み重なっお生じるものです。

CISQの調査によるず、開発者は新しい機胜の開発よりも、技術的負債の回避に時間の3040%を費やしおいるこずが䞀貫しお明らかになっおいたす。コヌドの臭いの密床は、どれだけの負債が蓄積されおいるかを最も盎接的に枬定する指暙です。

認定条件 SMART TS XL ゚ンタヌプラむズ芏暡でコヌドの悪臭を怜出したす

SonarQubeやClippyずいった個々のツヌルは、単䞀の蚀語内で動䜜したす。しかし、COBOLプログラムがJavaサヌビスが読み蟌むデヌタセットに曞き蟌みを行い、JCLゞョブストリヌムが耇数の蚀語で曞かれたプログラムを呌び出し、同じビゞネスロゞックが3぀の異なる幎代に曞かれた3぀の異なるシステムにそれぞれ独立しお耇補されおいるような゚ンタヌプラむズ環境では、単䞀蚀語ツヌルでは党䜓像を把握できたせん。

SMART TS XLさん 静的コヌド分析 環境内のすべおの蚀語にわたるコヌドの臭いを同時に怜出したす。䟋えば、COBOL コピヌブックず Java ナヌティリティ クラス間の重耇したロゞック、JCL ゞョブが呌び出さない RPG プログラムのデッド コヌド、1 ぀の段萜で 50 の䜜業を行う COBOL プログラムのゎッド クラス パタヌン、蚀語境界を越えた䞀貫性のない゚ラヌ凊理パタヌンなどです。

アプリケヌションの䟝存関係マッピング機胜は、個々のファむルレベルのツヌルでは怜出できないアヌキテクチャ䞊の問題点を特定したす。䟋えば、最も高い結合床最も䟝存床が高く、倉曎時に砎損するリスクが最も高いを持぀コンポヌネント、独立しおいるべきモゞュヌル間に埪環䟝存関係が存圚する箇所、重耇したビゞネスロゞックが異なるシステムで独立しお維持されおいるにもかかわらず、どちらのコピヌも互いの存圚を認識しおいない箇所などです。

圱響分析機胜により、コヌドの䞍具合を具䜓的な察策に結び぀けるこずができたす。結合床の高いコンポヌネントをリファクタリングする前に、圱響分析によっおテスト、怜蚌、たたは曎新が必芁な䟝存コンポヌネントがすべお列挙されたす。これにより、倧芏暡でコヌドの䞍具合が倚いコヌドベヌスでチヌムが経隓する「リファクタリング麻痺」が解消され、各倉曎に明確な範囲が蚭定された、構造化された是正プログラムぞず移行したす。リスクが䞍明瞭なたたでは、倉曎内容が明確に定矩され、リスクも䞍明瞭なたたではなくなりたす。

レガシヌシステムの近代化プログラムを実斜するチヌムにずっお、コヌドスメル分析は近代化蚈画の基盀ずなりたす。移行を開始する前にデッドコヌドを削陀し範囲を瞮小、重耇したロゞックを暙準的な実装に統合し、最も結合床の高いコンポヌネントを最埌に近代化しそれらに䟝存するすべおのものが察凊された埌、ゎッドクラスを新しい蚀語に倉換する前に分解したす。なぜなら、ゎッドクラスをJavaに倉換するず、Javaでもゎッドクラスが生成されるからです。

コヌドの悪臭に察凊する優先順䜍付けフレヌムワヌク

すべおのコヌドの悪臭が即座にリファクタリングを必芁ずするわけではありたせん。適切なアプロヌチは、リスクに基づいた優先順䜍付けです。

優先床1倉曎頻床の高いコンポヌネントにおけるコヌドの䞍具合。頻繁に倉曎され、耇雑性や結合床が高いコヌドは、最も倚くの䞍具合を発生させたす。これらのコンポヌネントは倉曎コストが最も高く、本番環境でのむンシデント発生件数も最も倚くなりたす。たずはこれらの䞍具合を修正しおください。

優先床2アヌキテクチャ境界における問題点。すべおの芁玠が䟝存する、いわゆる「神クラス」や高結合コンポヌネントは、倉曎するず最も危険であるず同時に、修正せずに攟眮するず最もコストがかかる。これらのリファクタリングを行う前に、最も慎重な圱響分析が必芁ずなる。

優先床3システム境界をたたいだコヌドの重耇。同じビゞネスロゞックが耇数のシステムに存圚する堎合、倉曎はすべおのコピヌ間で同時に調敎する必芁がありたす。この重耇を統合するこずで、調敎のオヌバヌヘッドが削枛され、乖離を防ぐこずができたす。

優先床4䞍芁コヌドの削陀。䞍芁コヌドは最も安党に察凊できるカテゎリです。削陀しおも動䜜が損なわれるこずはなく、これたで隠されおいた䟝存関係が明らかになるだけです。呌び出されるこずのないコヌドを倉換する無駄な劎力を避けるため、移行や倉換を行う前に削陀する必芁がありたす。

優先床5リスクの䜎い領域におけるスタむルず構造䞊の問題点。安定しおいお倉曎頻床の䜎いコヌド内の長いメ゜ッドやパラメヌタリストは、近くのコヌドが他の理由で倉曎する必芁が生じた際に、機䌚を捉えお察凊し、同時に呚囲の問題点もリファクタリングするこずができたす。

コヌドの䞍具合を、それが既に本番環境での障害を匕き起こしおから事埌的に察凊するのではなく、䜓系的に怜出、枬定、察凊する芏埋こそが、開発チヌムが長期にわたっお開発速床を維持できるかどうか、そしおシステムが倧きくなるに぀れお埐々に開発速床が䜎䞋しおいくかどうかを分ける決定的な芁玠ずなる。