Какому рабочему процессу вы следуете при разработке программного обеспечения, которое собираетесь написать?

Я начал работать над довольно сложным программным обеспечением. Это для личного проекта, но, тем не менее, я вкладываю в него много усилий. Теперь я привык работать над решениями/проектами других людей или над проектами, которые растут очень контролируемым образом.

На этот раз я дважды начинал кодировать основы и быстро застрял. Поэтому я отдохнул и решил записать полное решение, прежде чем кодировать одну строку. Что я сделал (по порядку):

  1. написание вариантов использования в виде команд CLI (это приложение командной строки)
  2. напишите какую нибудь помощь
  3. спроектировать классы, структуру файлов данных и функциональный рабочий процесс для различных частей.

Теперь, я буду очень медленно во всей этой части. Я создал личную вики и использую ее для написания этих спецификаций, но я ясно чувствую недостаток опыта и четкой методологии.

Я знаю, что проектирование программного обеспечения — очень сложная тема, и что об этом написано множество книг, но я хотел бы, чтобы вы поделились своим опытом/советами/методологией.

Когда вы работаете над личными проектами среднего размера, что вы указываете перед тем, как начать программировать? Как?

заранее спасибо


person pistacchio    schedule 18.01.2009    source источник


Ответы (6)


Когда вы работаете над личными проектами среднего размера, что вы указываете перед тем, как начать программировать?

Я указываю функциональную спецификацию:

  • Я боялся, что, если я только начал программировать (то есть «как»), было бы слишком легко забыть «почему» и «что» я хотел кодировать (для «довольно сложного» программного обеспечения за месяцы или годы, которые может потребоваться разработка).
  • I also wanted to understand, more or less, the "scope" of what I would be developing: in order to assess approximately (to an order of magnitude):
    • How big it will be
    • Смогу ли я закончить
    • Стоило ли начинать
    • Какое его подмножество может быть разработано в первую очередь

Ради управления рисками я добавлю, что часть того, что я хотел разработать, подразумевало использование некоторого программного обеспечения, с которым я не был знаком; чтобы свести к минимуму риск, связанный с этим, я также сделал небольшое одноразовое прототипирование.

Как?

Я набросал функциональную спецификацию, используя ручку и бумагу. Что-то из того, что я написал, было высокоуровневым (документ «видение» бизнес-уровня), а что-то было более низкоуровневым, больше похожим на дизайн (некоторые детали пользовательского интерфейса). Иногда я останавливался и ломал голову над тем, как это организовать, но затем продолжал, рассуждая о том, что каждая страница более или менее связна по каждой теме, и что я могу позже ломать голову над тем, как организовать страницы. (возможно, так же, как ваша вики).

Я заранее указал и не указал архитектуру программного обеспечения:

  • Я начинаю разработку с базовой архитектуры (несколько небольших компонентов), а затем добавляю код; и, когда я добавляю код, если какой-либо компонент становится слишком большим и сложным, я разделяю его на несколько более мелких компонентов... это эволюционный процесс... как говорится в Систематике, A СЛОЖНАЯ СИСТЕМА, КОТОРАЯ РАБОТАЕТ, НЕИЗМЕННО ОБНАРУЖАЕТСЯ ИЗ ПРОСТОЙ СИСТЕМЫ, КОТОРАЯ РАБОТАЛА.
  • Я не документирую архитектуру; или, скорее, единственной документацией по архитектуре является сам код: например, способ, которым исходный код организован в исходные каталоги, пространства имен и библиотеки DLL.

У меня есть теоретическое обоснование архитектуры в ее нынешнем виде, но я не задокументировал эти причины:

  • я единственный разработчик
  • Фактическая архитектура документируется кодом
  • Причины такой архитектуры у меня в голове, и их можно [повторно] обнаружить по таким вещам, как соглашения об именах в исходном коде и зависимости различных компонентов.

Если бы (только если бы) я не был единственным разработчиком, то я мог бы подумать, что стоит задокументировать архитектуру и ее обоснование.

То, что я сказал выше об архитектуре программного обеспечения, справедливо и в отношении данных, которые оно обрабатывает.

Что касается тестирования, я немного кодирую, а затем тестирую; или напишите тест, а затем закодируйте функциональность, которая пройдет этот тест. Я не занимаюсь «интеграцией большого взрыва», то есть месяцами написания без какого-либо тестирования.

Одна из самых больших слабых сторон моего процесса (или что-то, что ему не хватает) — это оценка трудозатрат заранее, а затем отслеживание реализации по оценке… это одно из отличий этого «личного» процесса проекта. по сравнению с платным проектом, который я бы сделал для кого-то еще на коммерческой основе. Я сомневаюсь, что это хорошо: если оценка является лучшей коммерческой практикой, то, возможно, мне «следует» делать это и в личном проекте.

person ChrisW    schedule 18.01.2009
comment
И людям нравится то, что работает :). Они убьют вас, если вы дадите им отличное чудовище, но старая заметка Post-It работала довольно хорошо (за исключением запросов). - person johnny; 07.11.2016

Есть много людей с большим опытом, чем у меня, которые могут помочь вам с деталями здесь, но у меня есть один момент, который, я думаю, всегда стоит иметь в виду.

Вам не нужно делать это на 100% идеально с первого раза. На самом деле, если вы стремитесь к этому, вы, вероятно, никогда не закончите. Реальность такова, что вы не сможете полностью понять дизайн, пока не создадите систему один раз.

Просто начните, продолжайте продвигаться вперед, следите за покрытием модульными тестами, и, когда вы лучше поймете систему и ее тонкости, поэтапно рефакторируйте ее, чтобы улучшить ее.

person Andy Hume    schedule 18.01.2009
comment
+1, 100% совершенства просто не бывает, поэтому и были придуманы номера версий :о) - person Dale Reidy; 18.01.2009

В общем, экраны. Они являются интерфейсом между пользователем и программным обеспечением. Поэтому я пытаюсь определить каждый вариант использования (пользователь будет искать мой продукт — пользователь добавит продукт в свою корзину — пользователь проверит свою корзину) и создаю цепочку экранов для каждого из них.

С наилучшими пожеланиями.

person Sylvain Rodrigue    schedule 18.01.2009
comment
написание вариантов использования в виде команд CLI (это приложение командной строки) - person AgentConundrum; 18.01.2009

Я нахожу чистый лист бумаги, и ручка — лучшая отправная точка:

  • нарисуйте несколько грубых схем
  • записать некоторые идеи / заметки
  • написать какой-нибудь псевдокод
  • продумать основные варианты использования
  • думать о возможных проблемах

Не тратьте на это больше получаса и не увязайте в слишком большом количестве документации или предварительном проектировании. Начинайте программировать, как только у вас появится смутное представление о том, как вы хотите это сделать. По мере того, как вы продолжаете разработку, вы чувствуете, достаточно ли хорош код или нет. Если вы недовольны, подумайте о том, что вам не нравится, и начните заново с учетом этих уроков. Проводите рефакторинг часто и быстро, чем раньше, тем лучше. Если что-то «не кажется правильным», вероятно, это не так.

person armandino    schedule 18.01.2009

  1. Напишите варианты использования, как вы это сделали.
  2. Выберите 1 вариант использования и реализуйте его полностью, и больше ничего не реализуйте. Это включает в себя модульные тесты, помощь и обработку ошибок — все. Назовите эту версию 1.
  3. Реализуйте следующий вариант использования. Это может быть просто добавление кода или может потребоваться полная переработка. Все в порядке, теперь ты знаешь, что делаешь. Сделать новый выпуск.
  4. Повторите шаг 3.
person Mark Beckwith    schedule 27.01.2009

  1. Нарисуйте экраны
  2. Нарисуйте отношения данных (rdbms или в памяти)
  3. Начать кодирование
  4. Вспенить, промыть, повторить (или на программистском языке ПЕРЕЙТИ К 1)

Я бы начал с минимальной реализации и добавлял новые функции в каждой итерации.

person Osama Al-Maadeed    schedule 18.01.2009