Причина, по которой вы находите это настолько трудным, заключается в том, что у вас есть идея, но вы не совсем понимаете, что вы хотите от нее сделать. Если вы делаете свой собственный проект, и у вас нет клиента, который бы сказал вам, чего он хочет, то это ваш собственный клиент. Поставьте себя на место клиента и начните составлять список невозможных желаний.
Другими словами, когда вы начинаете, не проектируйте НИЧЕГО !!! ,
Как только у вас будет большой список того, что вы хотите, чтобы система делала, расставьте приоритеты и решите, какой минимальный набор функций будет иметь работающая базовая система. Это может быть одна основная функция или целый экран, но это должно быть то, что вы чувствуете - как клиент - будет достаточно полезно для тестирования.
Итак, список пожеланий + основные приоритеты = требования .
Как только вы все это сделаете, сделайте дизайн очень высокого уровня. Просто сядьте и подумайте о том, что понадобится вашей системе, чтобы настроить первые несколько приоритетов. Измените свое мнение, если хотите, но здесь вы можете захотеть добавить некоторый код или конфигурацию системы, чтобы узнать больше о том, что возможно. Идите достаточно далеко, чтобы подтвердить свою основную идею дизайна.
Т.е.: СЕЙЧАС вы можете потакать своим дизайнерским убеждениям .
Когда вы закончите, вы начнете реализовывать свои функции. Создайте для каждой функции базовую функциональную спецификацию. Это может быть так же просто, как набор операторов функций. История карт, если хотите. Это позволяет вам немного развить свою идею и создать набор утверждений, которые станут спецификацией, с которой вы будете тестировать и строить свою реализацию.
Плачь хаос, пусть проскользнут собаки ... Код !!
Затем реализуйте свои тесты в соответствии со своими спецификациями, затем для каждого теста напишите свой код. Постройте, «отпустите», затем повторите со следующей функцией, пока вы не решите, что проект достаточно завершен.
Это действительно сводится к опыту, но этот подход, который я нашел, представляет собой простую формулу, которая поможет вам сосредоточить свое внимание на том, что нужно сделать, вместо того, чтобы увязнуть в бесконечном цикле проволочек из-за попыток сделать слишком много всего на один раз.