Що ж, міра, яку я використовую, або як я думаю, я використовую:
Для кожної незалежної, однолінійної, однорядкової функціональної вимоги, прийняти або залишити її, проаналізуйте базу коду перед її реалізацією. Потім реалізуйте це, включаючи пошук та виправлення будь-яких помилок, введених у процесі. Потім запустіть diff
між базою коду до і після. У diff
заповіті з'явиться список усіх вставок, видалень та модифікацій, які впровадили зміни. (Як і вставлення 10 послідовних рядків коду - це одна зміна.) Скільки змін було? Чим менше це число, як правило, тим більш ретельним є код.
Я називаю це надмірністю вихідного коду, тому що це як надмірність коду, що виправляє помилки. Інформація містилася в 1 шматок, але була кодована як N шматки, які всі повинні бути зроблені разом, щоб бути послідовними.
Я думаю, що це ідея, що стоїть за DRY, але вона трохи більш загальна. Причина, що добре, що цей показник є низьким, це те, що для впровадження типової вимоги потрібно N змін, а як помилковий програміст, спочатку ви отримуєте лише N-1 або N-2 з них правильно, ви ставите 1 або 2 помилки. Крім помилок програмування O (N), ці помилки мають бути виявлені, розміщені та виправлені. Тому малий N - це добре.
Підтримуваний не обов'язково означає читабельність для програміста, який не дізнався, як працює код. Оптимізація N може вимагати виконання деяких дій, які створюють криву навчання для програмістів.
Ось приклад.
Одне, що допомагає, - це якщо програміст намагається передбачити майбутні зміни та залишить в коментарях програми інструкції.
Я думаю, коли N зменшується досить далеко (оптимальним є 1), вихідний код читає більше, як мова, що залежить від домену (DSL). Програма не стільки "вирішує" проблему, скільки "заявляє" проблему, тому що в ідеалі кожна вимога просто перезапускається як єдиний фрагмент коду.
На жаль, я не бачу, як люди дуже багато вчаться робити це. Швидше вони здаються, що ментальні іменники мають стати класами, а дієслова - методами, і все, що вони повинні зробити, - це повернути кривошип. Це призводить до коду з N 30 або більше, на мій досвід.