ソースコードの行数はどのぐらいが適切か?【リファクタリング入門1】

このサイトの目的:ソースコードのサイズと管理方法

モノシリックなアプリケーションを移行する際には、コンポーネントを特定し、サイズを図ることが最初の手順となる

コンポーネントのサイズとは、コンポーネント保有する機能の数のことである。

例えば、チケットの販売システムで購入ボタンに紐ずくイベントハンドラSQLの発行を行うのは明らかにコンポーネントが担う役割の上を行っている。

その場合はイベントハンドラとDAOを別のコンポーネントとして分離しウェイトを減らさなければならない。

ここでのコンポーネントとは、Pythonであればディレクトリ構成による名前空間C#でのnamespace呼び出しによる名前空間のことである。

アプリケーション内のコードのサイズが一定の水準であることは重要であり、一般的にコンポーネントの平均値から偏差値1~2以内に収まっているべきである。

コンポーネントのサイズを図る方法

コンポーネントのサイズを図る指標はいくつかある。

コンポーネントのサイズを管理し続ける方法

コンポーネントを一定のサイズに分割し終えた後は、サイズが適度な状態で維持されるのが理想だ。

そのためには、CI/CDパイプラインの一部としてオープンソースやCOTSツールを使用して実装する方法が良い

そして、ソースコードが適切なサイズや健全な依存関係を持っているか確認する関数を適応度関数と呼ぶ。

適応度関数例:ファイルサイズ

一般的にコンポーネントの平均値から偏差値1-2以内に収まっているべきである。

例えば、ファイルサイズであれば、10,10,15などの外れ値があることは認めるべきではない。

ちなみに、標準偏差とは、次の様な式である。この値から1-2以内に収まっているのが適切な状態である。

from https://data-viz-lab.com/standarddeviation

そして、ファイルサイズの適応度関数は次の様になる。

# Walk the directory structure, creating namespaces for each complete path

LIST component_list = identify_components(root_directory)

# Walk through all of the source code to accumulate total statements and number

# of statements per component

SET total_statements TO 0

MAP component_size_map

FOREACH component IN component_list {

    num_statements = accumulate_statements(component)

    ADD num_statements TO total_statements

    ADD component,num_statements TO component_size_map

}

# Calculate the standard deviation

SET square_diff_sum TO 0

num_components = get_num_entries(component_list)

mean = total_statements / num_components

FOREACH component,size IN component_size_map {

    diff = size - mean

    ADD square(diff) TO square_diff_sum

}

std_dev = square_root(square_diff_sum / (num_components - 1))

# For each component calculate the number of standard deviations from the

# mean. Send an alert if greater than 3

FOREACH component,size IN component_size_map {

    diff_from_mean = absolute_value(size - mean);

    num_std_devs = diff_from_mean / std_dev

    IF num_std_devs > 3 {

        send_alert(component, num_std_devs)

    }

}

from https://dl.ebooksworld.ir/books/Software.Architecture.The.Hard.Parts.Neal.Ford.OReilly.9781492086895.EBooksWorld.ir.pdf

software arcitecture hardpartsより引用

このような関数を実装し、CI/CDパイプラインに組み込むことで、アーキテクチャは健全な状態を維持できる。

参考:ソフトウェアアーキテクチャハードパーツ

https://dl.ebooksworld.ir/books/Software.Architecture.The.Hard.Parts.Neal.Ford.OReilly.9781492086895.EBooksWorld.ir.pdf

備考

title:ソースコードの行数はどのぐらいが適切か?【リファクタリング入門1】

category_script:page_name.startswith("3")

description:アプリケーション内のコードのサイズが一定の水準であることは重要であり、一般的にコンポーネントの平均値から偏差値1~2以内に収まっているべきである

img:https://github.com/minegishirei/store/blob/main/0/inhouse_se/3063/breakdown.png?raw=true

page:https://minegishirei.hatenablog.com/entry/2024/04/26/221540