Как жить с техническим долгом
Как жить с техническим долгом
Как жить с техническим долгом
Как я живу с техническим долгом
|
Золотых Алексей
@zolotyh Github | Telegram | Twitter |
МойОфис
это метафора программной инженерии, обозначающая накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству при разработке программного обеспечения и вызывающие дополнительные затраты труда в будущем
накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству
Срезаем углы => берем технический долг
это метафора программной инженерии, обозначающая накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству при разработке программного обеспечения и вызывающие дополнительные затраты труда в будущем
это метафора программной инженерии, обозначающая накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству при разработке программного обеспечения и вызывающие дополнительные затраты труда в будущем
Не жаль мне лет, растраченных напрасно,
Не жаль души сиреневую цветь.
В саду горит костер рябины красной,
Но никого не может он согреть.
Не жаль мне лет, растраченных напрасно,
Не жаль души сиреневую цветь.
В саду горит костер рябины красной,
Но никого не может он согреть.
Не жаль мне лет, растраченных напрасно,
Не жаль души сиреневую цветь.
В саду горит костер рябины красной,
Но никого не может он согреть.
Второе начало термодинамики
Энтропия изолированных систем стремится к максимуму.
Энтропия изолированных систем стремится к максимуму.
Любой ваш код или решение рано или поздно превратиться в давнокод и легаси
— Сейчас у нас другие приоритеты,
вернемся к этому разговору чуть позже
Мы не можем бороться с проблемой, если мы о ней не знаем
1 of 100 000 tasks
Мы не можем бороться с проблемой, если мы о ней не знаем
Мы не можем бороться с проблемой, если мы о ней не знаем
| необоснованный управляемый |
обоснованный управляемый |
| необоснованный неуправляемый |
обоснованный неуправляемый |
| необоснованный управляемый |
обоснованный управляемый |
| необоснованный неуправляемый |
обоснованный неуправляемый |
План
Что ищем?
Low Coupling (низкая связанность) и High Cohesion (высокое зацепление)
1. Идеальная ситуация
2. Все в одном
3. Неправильные границы
4. Мастер SOLID
Как можно найти?
Chidamber & Kemerer object-oriented metrics suite (shorturl.at/kOS28)
$ npx code-complexity . --sort=score --limit=3
┌──────────────────────────────┬────────────┬───────┬───────┐
│ file │ complexity │ churn │ score │
├──────────────────────────────┼────────────┼───────┼───────┤
│ src/cli.ts │ 103 │ 8 │ 824 │
├──────────────────────────────┼────────────┼───────┼───────┤
│ test/code-complexity.test.ts │ 107 │ 7 │ 749 │
├──────────────────────────────┼────────────┼───────┼───────┤
│ .idea/workspace.xml │ 123 │ 6 │ 738 │
└──────────────────────────────┴────────────┴───────┴───────┘
/**
* @deprecated Please use {@link NonDeprecatedComponent}
*/
export const DeprecatedComponent = () => {
const callback = useCallback(() => {}, []);
return <div onClick={callback}></div>;
}
Структурный поиск по коду
rules:
- id: legacy_metrics.angular_modules
pattern-regex: angular(?:(?:\n\s*)|)\.module|ngInject
message: Angular module was found
languages:
- javascript
- typescript
severity: WARNING
План
Упавление рисками
План
Планируем (Big Design Up Front)
План
https://github.com/mc1arke/sonarqube-community-branch-plugin
version: "3.8"
services:
sonarqube:
depends_on:
- db
image: mc1arke/sonarqube-with-community-branch-plugin:${SONARQUBE_VERSION}
build:
context: .
dockerfile: ${DOCKERFILE}
args:
SONARQUBE_VERSION: ${SONARQUBE_VERSION}
PLUGIN_VERSION: ${PLUGIN_VERSION}
container_name: sonarqube
ports:
- 9000:9000
networks:
- sonarnet
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
db:
image: postgres:11
container_name: postgres
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_conf:
sonarqube_data:
postgresql:
postgresql_data:
networks:
sonarnet:
Бас фактор
github.com/onigoetz/absorption
absorption /Users/onigoetz/Sites/Libs/crafty --weights weights.json --contributors contributors.json
Scanning ████████████████████████████████████████ | 100% | 492/492 files
The repository's absorption score is 16% fresh, 84% fading and 0% lost
Fresh/Fading knowledge
Name │ Total │ Fresh │ Fading
────────────────────┼──────────┼──────────┼──────────
Stéphane Goetz │ 99.51 % │ 15.67 % │ 83.83 %
Vitalii Shapovalov │ 0.14 % │ 0.14 % │ 0.00 %
Работаем с JSON
Другие тулы для структурного поиска
Zoomable Treemap
Спасибо!
|
Золотых Алексей
@zolotyh Github | Telegram | Twitter |