понедельник, 25 августа 2014 г.

Маниловщина. Пишем реализацию IStorage применяя TDD

По мотивам:

1. Ссылка. Пишем простой интерпретатор на C++ с помощью TDD
2. Коротко. О коде и "так бывает"
3. Что я хотел сказать о TDD, но всё как-то недосуг. "Дорога в тысячу ли начинается с одного шага"
4. Что я ещё хочу сказать о TDD (не закончено)

И моей "текущей работы" - хочется написать "серию" - "Пишем реализацию IStorage применяя TDD".

Дело только в чём? В том, что "оно уже написано", но "там есть проблемы".

Посему я это дело - покрываю тестами, которых не было.

Но при этом хочется написать - "как я бы писал с тестами".

Если осилю, то серия получится "постов на двадцать". Но - маниловщина...

Но хочется сделать прям в духе поста - "Ссылка. Пишем простой интерпретатор на C++ с помощью TDD":

1. Пустое хранилище. Открываем на чтение. Получаем ошибку.
2. Пустое хранилище. Открываем на запись. Получаем инициализированное хранилище.
3. Пустое хранилище. Открываем на запись. Потом открываем на чтение. Получаем инициализированное хранилище на чтение.
4. Пустое хранилище. Открываем на запись. Создаём поток в root'е. Проверяем, что поток создался.
5. Пустое хранилище. Открываем на запись. Создаём поддиректорию в root'е. Проверяем, что поддиректория создалась.
6. Пустое хранилище. Открываем на запись. Создаём поток в root'е. Создаём поддиректорию в root'е. Проверяем, что они ОБА создались.
7. Пустое хранилище. Открываем на запись. Создаём поддиректорию в root'е. Создаём поток в root'е. Проверяем, что они ОБА создались.
8. Повторяем предыдущие, два пункта, но при N != 1.
...
M+1. Пустое хранилище. Открываем на запись. Создаём поток в root'е. Проверяем, что поток создался. Удаляем поток. Проверяем, что поток удалился. Проверяем структуру хранилища.
M+2. Пустое хранилище. Открываем на запись. Создаём поддиректорию в root'е. Проверяем, что поддиректория создалась. Удаляем поддиректорию. Проверяем, что поддиректория удалилась. Проверяем структуру хранилища.
...
M1+1. НЕПустое хранилище. Открываем на запись. Создаём поток в root'е. Проверяем, что поток создался. Удаляем поток. Проверяем, что поток удалился. Проверяем структуру хранилища.
M1+2. НЕПустое хранилище. Открываем на запись. Создаём поддиректорию в root'е. Проверяем, что поддиректория создалась. Удаляем поддиректорию. Проверяем, что поддиректория удалилась. Проверяем структуру хранилища.
...
M2+1. Пустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось.
M2+2. НЕПустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось.
...
M3+1. Пустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Удаляем выборочно половину залитого. Проверяем как удалилось. Проверяем структуру хранилища.
M3+2. НЕПустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Удаляем выборочно половину залитого. Проверяем как удалилось. Проверяем структуру хранилища.
...
M4+1. Пустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища.
M4+2. НЕПустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища.
...
M5+1. Пустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища. Удаляем половину от оставшегося. Проверяем как удалилось. Проверяем структуру хранилища.
M5+2. НЕПустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища. Удаляем половину от оставшегося. Проверяем как удалилось. Проверяем структуру хранилища.
...
M6+1. Пустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища. Удаляем половину от оставшегося. Проверяем как удалилось. Проверяем структуру хранилища. Переименовываем половину от оставшегося. Проверяем как переименовалось. Проверяем структуру хранилища.
M6+2. НЕПустое хранилище. Заливаем в него структуру директории с диска. Проверяем как залилось. Переименовываем выборочно половину залитого. Проверяем как переименовалось. Проверяем структуру хранилища. Удаляем половину от оставшегося. Проверяем как удалилось. Проверяем структуру хранилища. Переименовываем половину от оставшегося. Проверяем как переименовалось. Проверяем структуру хранилища.
M6+3. Повторяем M6+1 пока хранилище не станет пустым.
M6+4. Повторяем M6+2 пока хранилище не станет пустым.
...

и т.д. и т.п.

- ну и "по индукции" - в итоге тесты должны покрыть 80% функциональности.

Понятное дело, что "где-то Це из Эн по Ка". Никуда не деться от этого.

P.S. Над одним только размышляю пока - писать "на основе реального кода" или "с нуля". И тот и другой вариант - имеет как свои плюсы, так и минусы.

P.P.S. Мне тут правильно товарищ указал - "никакое это не  TDD". Подумаю над этим.

Пора придумывать свой термин? Test-Not-Broken? TNB?

P.P.P.S. "Над одним только размышляю пока - писать "на основе реального кода" или "с нуля". " - тут есть и "третий вариант" - рассмотреть "написание с нуля" vs. "реальный код" - там по крайней мере есть что с чем сравнивать.

Комментариев нет:

Отправить комментарий