This commit is contained in:
gre-ilya 2026-05-25 09:43:42 +05:00
parent 2473131ee2
commit d1079e38ec
3 changed files with 0 additions and 7625 deletions

View File

@ -1,271 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Legacy Analyzer — Отчёт</title>
<style>
:root {
--font: 'Segoe UI', system-ui, sans-serif;
--bg: #f8fafc;
--card: #ffffff;
--border: #e2e8f0;
--text: #1e293b;
--muted: #64748b;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: var(--font); background: var(--bg); color: var(--text); padding: 24px; }
h1 { font-size: 1.75rem; margin-bottom: 4px; }
h2 { font-size: 1.25rem; margin: 24px 0 12px; border-bottom: 2px solid var(--border); padding-bottom: 6px; }
h3 { font-size: 1rem; margin-bottom: 8px; }
.subtitle { color: var(--muted); font-size: 0.875rem; margin-bottom: 24px; }
.card { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 20px; margin-bottom: 16px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.stat-card { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; text-align: center; }
.stat-value { font-size: 2rem; font-weight: 700; }
.stat-label { font-size: 0.75rem; color: var(--muted); margin-top: 4px; }
table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
th { background: #f1f5f9; text-align: left; padding: 8px 12px; border-bottom: 2px solid var(--border); }
td { padding: 8px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
tr:hover td { background: #f8fafc; }
.badge { display: inline-block; padding: 2px 8px; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; }
.module-card { margin-bottom: 12px; }
.module-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.reasons-list { margin: 0; padding-left: 20px; color: var(--muted); font-size: 0.8rem; }
.reasons-list li { margin-bottom: 2px; }
.func-table { margin-top: 8px; }
code { font-family: monospace; background: #f1f5f9; padding: 1px 4px; border-radius: 3px; }
.cycle-badge { background: #fca5a5; color: #7f1d1d; border-radius: 4px; padding: 2px 6px; font-size: 0.75rem; margin: 2px; display: inline-block; }
details summary { cursor: pointer; user-select: none; }
details summary:hover { color: #3b82f6; }
@media (max-width: 768px) { .grid-4 { grid-template-columns: repeat(2, 1fr); } }
</style>
</head>
<body>
<h1>📊 Legacy Analyzer</h1>
<p class="subtitle">
Проект: <code>/home/ilya/A</code> &nbsp;|&nbsp;
Сгенерировано: 21.05.2026 08:08 &nbsp;|&nbsp;
Системный риск: <strong style="color:#ef4444">Высокий</strong>
</p>
<h2>Сводка по системе</h2>
<div class="grid-4">
<div class="stat-card">
<div class="stat-value">126</div>
<div class="stat-label">Файлов</div>
</div>
<div class="stat-card">
<div class="stat-value">5,186</div>
<div class="stat-label">Строк кода (NLOC)</div>
</div>
<div class="stat-card">
<div class="stat-value">875</div>
<div class="stat-label">Функций</div>
</div>
<div class="stat-card">
<div class="stat-value">1.8</div>
<div class="stat-label">Средняя CCN</div>
</div>
<div class="stat-card">
<div class="stat-value">6</div>
<div class="stat-label">Модулей</div>
</div>
<div class="stat-card">
<div class="stat-value">1</div>
<div class="stat-label">Циклов зависимостей</div>
</div>
<div class="stat-card">
<div class="stat-value" style="color:#ef4444">Высокий</div>
<div class="stat-label">Системный риск</div>
</div>
<div class="stat-card">
<div class="stat-value" style="font-size:1.2rem">Реинжиниринг</div>
<div class="stat-label">Рекомендуемая стратегия</div>
</div>
</div>
<h2>Таблица решений по модулям</h2>
<div class="card" style="padding:0;overflow:auto">
<table>
<thead><tr>
<th>Модуль</th><th>Риск</th><th>Стратегия</th><th>Паттерн</th><th>Приоритет</th><th>Причины</th>
</tr></thead>
<tbody><tr>
<td><code>helpers/memenv</code></td>
<td><span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span></td>
<td>Реинжиниринг</td>
<td><span style="font-size:0.8rem;color:#1d4ed8">Anti-Corruption Layer: изоляция модуля от циклических зависимостей</span></td>
<td>390</td>
<td><ul class="reasons-list"><li>Высокая нестабильность: I=0.75 (порог 0.7)</li><li>Участвует в циклических зависимостях — признак архитектурной деградации</li></ul></td>
</tr><tr>
<td><code>table</code></td>
<td><span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span></td>
<td>Реинжиниринг</td>
<td><span style="font-size:0.8rem;color:#1d4ed8">Anti-Corruption Layer: изоляция модуля от циклических зависимостей</span></td>
<td>390</td>
<td><ul class="reasons-list"><li>Высокая нестабильность: I=0.75 (порог 0.7)</li><li>Участвует в циклических зависимостях — признак архитектурной деградации</li></ul></td>
</tr><tr>
<td><code>util</code></td>
<td><span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span></td>
<td>Реинжиниринг</td>
<td><span style="font-size:0.8rem;color:#1d4ed8">Anti-Corruption Layer: изоляция модуля от циклических зависимостей</span></td>
<td>470</td>
<td><ul class="reasons-list"><li>Участвует в циклических зависимостях — признак архитектурной деградации</li></ul></td>
</tr><tr>
<td><code>db</code></td>
<td><span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span></td>
<td>Реинжиниринг</td>
<td><span style="font-size:0.8rem;color:#1d4ed8">Anti-Corruption Layer: изоляция модуля от циклических зависимостей</span></td>
<td>480</td>
<td><ul class="reasons-list"><li>Участвует в циклических зависимостях — признак архитектурной деградации</li></ul></td>
</tr><tr>
<td><code>port</code></td>
<td><span class="badge" style="color:#22c55e;background:#dcfce7">Низкий</span></td>
<td>Оставить</td>
<td></td>
<td>960</td>
<td></td>
</tr><tr>
<td><code>include/leveldb</code></td>
<td><span class="badge" style="color:#22c55e;background:#dcfce7">Низкий</span></td>
<td>Оставить</td>
<td></td>
<td>1000</td>
<td></td>
</tr></tbody>
</table>
</div>
<h2>Циклические зависимости (1)</h2>
<div class="card"><p><strong>Цикл 1:</strong> <span class="cycle-badge">db</span><span class="cycle-badge">helpers/memenv</span><span class="cycle-badge">table</span><span class="cycle-badge">util</span></p></div>
<h2>Детализация по модулям</h2>
<div class="card module-card">
<div class="module-header">
<h3><code>db</code></h3>
<span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span>
</div>
<span style="color:#ef4444;font-size:0.8rem">⚠ Участвует в цикле зависимостей</span>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>2,664</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>455</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>1.7</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>12</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>3 / 2</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.60</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>CompareIterators</code></td><td>12</td><td>71</td><td>5</td><td><code>db_test.cc:1843</code></td></tr><tr><td><code>BuildTable</code></td><td>11</td><td>49</td><td>6</td><td><code>builder.cc:2</code></td></tr><tr><td><code>NewWritableFile</code></td><td>11</td><td>71</td><td>2</td><td><code>db_test.cc:116</code></td></tr><tr><td><code>ParseFileName</code></td><td>11</td><td>39</td><td>3</td><td><code>filename.cc:55</code></td></tr><tr><td><code>ScanTable</code></td><td>10</td><td>51</td><td>1</td><td><code>repair.cc:166</code></td></tr></tbody>
</table></details>
</div><div class="card module-card">
<div class="module-header">
<h3><code>helpers/memenv</code></h3>
<span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span>
</div>
<span style="color:#ef4444;font-size:0.8rem">⚠ Участвует в цикле зависимостей</span>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>176</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>31</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>1.8</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>6</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>3 / 1</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.75</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>Read</code></td><td>6</td><td>30</td><td>4</td><td><code>memenv.cc:39</code></td></tr><tr><td><code>Append</code></td><td>4</td><td>21</td><td>1</td><td><code>memenv.cc:85</code></td></tr><tr><td><code>Unref</code></td><td>3</td><td>12</td><td>0</td><td><code>memenv.cc:16</code></td></tr><tr><td><code>Skip</code></td><td>3</td><td>9</td><td>1</td><td><code>memenv.cc:139</code></td></tr><tr><td><code>GetChildren</code></td><td>3</td><td>10</td><td>2</td><td><code>memenv.cc:259</code></td></tr></tbody>
</table></details>
</div><div class="card module-card">
<div class="module-header">
<h3><code>include/leveldb</code></h3>
<span class="badge" style="color:#22c55e;background:#dcfce7">Низкий</span>
</div>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>43</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>41</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>1.0</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>1</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>0 / 0</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.00</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>Prune</code></td><td>1</td><td>0</td><td>0</td><td><code>cache.h:16</code></td></tr><tr><td><code>target</code></td><td>1</td><td>1</td><td>0</td><td><code>env.h:116</code></td></tr><tr><td><code>NewSequentialFile</code></td><td>1</td><td>1</td><td>2</td><td><code>env.h:116</code></td></tr><tr><td><code>NewRandomAccessFile</code></td><td>1</td><td>1</td><td>2</td><td><code>env.h:119</code></td></tr><tr><td><code>NewWritableFile</code></td><td>1</td><td>1</td><td>2</td><td><code>env.h:123</code></td></tr></tbody>
</table></details>
</div><div class="card module-card">
<div class="module-header">
<h3><code>port</code></h3>
<span class="badge" style="color:#22c55e;background:#dcfce7">Низкий</span>
</div>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>94</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>10</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>2.2</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>4</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>0 / 4</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.00</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>Zstd_Compress</code></td><td>4</td><td>24</td><td>4</td><td><code>port_stdcxx.h:93</code></td></tr><tr><td><code>Zstd_Uncompress</code></td><td>4</td><td>18</td><td>3</td><td><code>port_stdcxx.h:136</code></td></tr><tr><td><code>Zstd_GetUncompressedLength</code></td><td>3</td><td>11</td><td>3</td><td><code>port_stdcxx.h:123</code></td></tr><tr><td><code>Snappy_Compress</code></td><td>2</td><td>12</td><td>3</td><td><code>port_stdcxx.h:57</code></td></tr><tr><td><code>Snappy_GetUncompressedLength</code></td><td>2</td><td>8</td><td>3</td><td><code>port_stdcxx.h:74</code></td></tr></tbody>
</table></details>
</div><div class="card module-card">
<div class="module-header">
<h3><code>table</code></h3>
<span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span>
</div>
<span style="color:#ef4444;font-size:0.8rem">⚠ Участвует в цикле зависимостей</span>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>692</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>132</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>1.8</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>17</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>3 / 1</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.75</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>TestRandomAccess</code></td><td>17</td><td>61</td><td>3</td><td><code>table_test.cc:434</code></td></tr><tr><td><code>ReadBlock</code></td><td>13</td><td>79</td><td>4</td><td><code>format.cc:51</code></td></tr><tr><td><code>Seek</code></td><td>11</td><td>44</td><td>1</td><td><code>block.cc:110</code></td></tr><tr><td><code>DecodeEntry</code></td><td>7</td><td>15</td><td>5</td><td><code>block.cc:29</code></td></tr><tr><td><code>Init</code></td><td>6</td><td>22</td><td>1</td><td><code>table_test.cc:360</code></td></tr></tbody>
</table></details>
</div><div class="card module-card">
<div class="module-header">
<h3><code>util</code></h3>
<span class="badge" style="color:#ef4444;background:#fee2e2">Высокий</span>
</div>
<span style="color:#ef4444;font-size:0.8rem">⚠ Участвует в цикле зависимостей</span>
<table style="width:auto;margin:8px 0">
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Язык</td><td>cpp</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">NLOC</td><td>1,517</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Функций</td><td>206</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Avg CCN</td><td>2.0</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Max CCN</td><td>17</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">C_out / C_in</td><td>2 / 3</td></tr>
<tr><td style="padding:2px 16px 2px 0;color:var(--muted)">Нестабильность (I)</td><td>0.40</td></tr>
</table>
<details><summary>Топ функций по сложности</summary>
<table class="func-table">
<thead><tr><th>Функция</th><th>CCN</th><th>NLOC</th><th>Параметры</th><th>Расположение</th></tr></thead>
<tbody><tr><td><code>Extend</code></td><td>17</td><td>73</td><td>3</td><td><code>crc32c.cc:254</code></td></tr><tr><td><code>GetChildren</code></td><td>7</td><td>24</td><td>2</td><td><code>env_windows.cc:417</code></td></tr><tr><td><code>Logv</code></td><td>7</td><td>58</td><td>2</td><td><code>posix_logger.h:13</code></td></tr><tr><td><code>Logv</code></td><td>7</td><td>55</td><td>2</td><td><code>windows_logger.h:13</code></td></tr><tr><td><code>NewRandomAccessFile</code></td><td>6</td><td>27</td><td>2</td><td><code>env_posix.cc:372</code></td></tr></tbody>
</table></details>
</div>
<hr style="margin:32px 0;border:none;border-top:1px solid var(--border)">
<p style="color:var(--muted);font-size:0.75rem;text-align:center">
Legacy Analyzer — методический инструментарий модернизации унаследованных систем
</p>
</body></html>

File diff suppressed because it is too large Load Diff

Binary file not shown.