Постановка задачи
Важнейшим этапом в разработке программного обеспечения является постановка задачи — от правильности постановки задачи будет зависеть конечный результат.
Составление технического задания.
Техническое задание это документ в котором описаны все возможности программного обеспечения, утрированный пример:
Создание интернет магазина
Написать интернет магазин с возможностью добавлять категории, добавлять товар по категории с картинкой и описанием.
Участники системы:
1) Администратор
2) Покупатель
Возможности пользователей
Возможности администратора:
1) Добавлять удалять и редактировать категории
2) Добавлять удалять и редактировать товары
3) Добавлять удалять и редактировать заявки на покупку товара
Возможности пользователя/покупателя
1) Добавлять товар в корзину
2) Оформлять покупку
Так выглядит тех задание со стороны заказчика, добавьте сюда обязательства и этом может стать дополнением к договору.
Давайте рассмотрим подробнее и разобьем на этапы:
1) Рисование и верстка дизайна.
2) Проектирование базы данных.
3) Проектировние архитектуры.
4) Написание программного кода.
5) Написание базы данных.а
6) Покупка хостинга и домена.
7) Продвижение сайта.
А если мы захотим, добавить еще 2 возможности:
1) Регистрация пользователя
2) Пользователь может добавлять товары
Вроде бы отличие в двух строчках, но это уже не интернет магазин, а задача может перерости в сервис на подобии avito, alibaba, а сроки и сложность возрасти в разы (таблиц станет не 5-10, а 100).
Ошибки в проектировании примеры:
Часто сроки сложность и стоимость разработки может увеличиваться из за ошибок в архитектуре и постановке задачи, примеры:
1) Был сервис который показывал геолокацию товара или услуги на карте при помощи API яндекс или гугл карт, а потом понадобились специфические вычисления которые сторонние сервисы не предоставляют в результате: нужно установить движок карты, сменить базу данных, сконвертировать данные, написать нужные формулы, адаптировать старый код под возможности модуля карт. Это повлечет за собой временные и денежные затраты.
2) Была неправильно смоделирована база данных, необходимо добавить несколько полей и изменить программный код.
3) Неправильно составлено техническое задание: необходимо полное переписывание.
4) Неправильно выбраны технологии для разработки: вы пишите многозадачное многопоточное приложение на языке в котором это непредусмотрено, в выбранном фреймворке нет необходимых возможностей.
Список можно продолжать бесконечно в зависмости от ситуации, лучше иметь грамотное техническое задание и представлять всю картину целиком.
Правильный выбор инструментов для разработки
1) IDE — во многих современных средах разработки предусмотрен: автокоплит (автоматическое дополнение кода), интеграция с системой контроля версий, сестемами сборки версий, подсказки об ошибках, интерграция с системами тестирования, интеграция с системами дебага.
2) Система контроля версий: снижает риски потерять программный код, дает возможность командной разработки, дает возможность разделять код на ветки, дате возможность восстанавливать старые версии кода.
3) Система управления проектами: дает возможность ставить задачи для команды, разделять задачи, контролировать процесс разработки.
4) Фреймворк: позволяет ускорить разработку, позволяет разделить логику, может иметь специфический набор возможностей для ваших задач.
5) Выбор языка и базы данных тут рассматриваться не будет — лично мое мнени их нужно выбирать от задачи.
Итеративная и командная разработка и ошибки
В команде есть три разработчика их обязанности разделены по частям кода, в понедельник они собрались и решили какие задачи будут выполнять в течении следующих двух недель:
1) Первый решил поменять модель, так что бы появилась возможность выводить и отслеживать дату создания.
2) Второй решил исправить регистрацию.
3) Третий менял дизайн.
В течении недели все трое писали код и вносили изменения в репозиторий, в результате первый разработчик изменил код так, что «отвалилась» часть за которую был ответственен второй программист. Части в которых были внесены изменения работают хорошо, а в других местах где он незаметил начали сыпаться ошибки.
Внедрение тестирования
Я начал писать свой фреймворк для разработки онлайн игры, определив набор возможностей начал его тестировать при помощи стандартных функций языка (java). Дальше что бы протестировать возможности фреймворка мне пришлось написать несколько более глобальных тестов которые иметируют пользователя. Конечно запускать кучу тестов неудобно и довольно накладно — поэтому мне придется сделать их автоматическими.
Выгоды рефакторинга
Рекомендую исправлять недочеты в архитектуре и программном коде сразу же как только ошибка будет замечена. Постоянный рефаторинг занимает больше времени во время разработки, но дает дает ощутимый прирост во временных затратах в целом, чем если бы вы начали вносить несколько глобальных изменений (серьезных переписываний) накопив кучу ошибок.
Правильная постановка сроков
За сколько вы создадите типовой интернет магазин? У вас все настроенное, вы давно работаете, в совершенстве владеете языками и системами управления контента и работаете командой. 5 дней может быть неделя (качественного отказоустойччивого приложения вы за этот срок неполучите)? Смело умножайте на 2, для того что бы учесть форсмажоры и избежать конфликтов.
Думаю не трудно себе представить экономию: сил, времени, денег и нервов. Учтя все вышеописанные нюансы, приемы и ошибки.
Комментарии (8)
lair
02.07.2016 22:08+11Была неправильно смоделирована база данных, необходимо добавить несколько полей и изменить программный код.
"Необходимо добавить несколько полей" — это не "неправильно смоделирована БД", это типовой случай на каждый день. Если вам такие изменения дорого стоят, у вас в других местах ошибка проектирования.
Выбор языка и базы данных тут рассматриваться не будет — лично мое мнени их нужно выбирать от задачи.
А все остальное не нужно выбирать от задачи? А то, что язык и IDE, и фреймворки — вас не волнует?
В течении недели все трое писали код и вносили изменения в репозиторий, в результате первый разработчик изменил код так, что «отвалилась» часть за которую был ответственен второй программист. Части в которых были внесены изменения работают хорошо, а в других местах где он незаметил начали сыпаться ошибки.
И как вы предлагаете с этим бороться?
Я начал писать свой фреймворк для разработки онлайн игры, определив набор возможностей начал его тестировать при помощи стандартных функций языка (java). Дальше что бы протестировать возможности фреймворка мне пришлось написать несколько более глобальных тестов которые иметируют пользователя. Конечно запускать кучу тестов неудобно и довольно накладно — поэтому мне придется сделать их автоматическими.
Ваши тесты уже были автоматическими, зачем что-то делать?
И вот так весь текст — безграмотный бессмысленный поток сознания.
kahi4
03.07.2016 20:16+2Что это за «макконел для бедных»? Я понимаю, что освоить книгу в 850 страниц может показаться сложноватым, но есть тоньше и проще для чтения, например, «ремесло программиста» Питера Гудлифа. Прочитайте хотя бы её. У вас же скомканные мысли без какого либо серьезного опыта. С таким «утрированным ТЗ» я бы советовал слать заказчика на дописывание. Часть «постановка задачи» просто эпична — когда в книге «совершенный код» под это чуть ли не 100 страниц отведено, у вас «постановка задачи важна». Как ее ставить, что это подразумевает под собой, что должно быть в этой части — видимо, плевать, главное, чтобы что-то было. Ну и все остальное в этом же духе. В общем, первый блин комом.
P.S. Вообще, откровенно говоря, выглядит, как будто бы вы накидали «рыбу», чтобы потом раскрыть свои мысли и переписать адекватно и случайно нажали «опубликовать».
Wilk
04.07.2016 12:22Здравствуйте.
Извините меня, пожалуйста, но лучше бы Вам прекратить писать статьи. В каждой статье Вы пишете глупости, каждый раз Вы делаете это с огромным количеством грамматических ошибок, каждый раз Вы пытаетесь представить себя экспертом предметной области. Не надо. Если Вам хочется самовыражения — пишите код. Старый добрый код. Или играйте на гитаре. Или вырезайте из слоновой кости статуэтки котиков. Но вот писать статьи на хабр не надо. По крайней мере до тех пор, пока у Вас не появится за плечами достаточно опыта и знаний русского языка за 5 класс.
junkerSchmidt
04.07.2016 12:23Простите меня, возможно, русский язык — не Ваш конек. Но разработчик, а тем более, «архитектор», — упаси меня процессор.
По прошлым публикациям: «Многопользовательская онлайн игра – передача пакетов и обмен сообщеями между клиентами и сером».
Зачем отнимать время у благородных донов? К чему все это? Эх…
Удачи в Вашем нелегком деле; найдите уже дзен.
napa3um
Резонёрство с грамматическими ошибками.