1

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

К ним относятся следующие:

  • Абстракция: сосредоточив внимание на «что» вместо «как».
  • Инкапсуляция: сокрытие «как».
  • Разделение проблем: деление на отдельные неперекрывающиеся структуры.
  • Низкое сцепление и высокая степень сцепления: использование любых разделов.

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

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

Я правильно определяю и обсуждаю эти общие проблемы во-первых, или я должен просто «придерживаться точки»?

ответ

2

Да, я сделал это один раз. Не помогло.

Я думаю, что разработка программного обеспечения сложна, и нет никакого способа, чтобы перечисление этих четырех концепций, независимо от того, насколько важно, улучшит качество кода в вашей организации. Вам действительно нужно наращивать знания и опыт. Если бы мне пришлось составить список, он будет содержать:

  • Accept, что правила 0 является для получения лучшего кода. Если один кодер не согласен с этим, у вас могут быть проблемы.
  • Просмотрите ли коды. Это позволит исправить большинство проблем, которые вы перечисляете, и имеет массу других преимуществ.
  • Сообщайте о том, что вы делаете - чем чаще, тем лучше. Отложите свое эго в сторону и не стесняйтесь спрашивать своих старших коллег за советом. Если вы старший разработчик, послушайте своих младших сверстников, которые часто больше соответствуют новейшим технологиям, идеям, практикам и идиомам.
  • Уважайте свою базу кода. Каждая строка кода важна и должна быть правильной.

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

+0

Я согласен, идея «заставить кого-то написать документ, который сделает всех других парней лучше кодеров», просто не будет делать эту работу. – NeedHack

+0

@Carl Хорошие баллы, но в группе 15+ вам нужна форма документации, как резервная копия, иначе все могут понравиться. Вам нужно заранее изложить некоторые правила, иначе вы просто будете обсуждать/исправлять вещи после фактов, что является более дорогостоящим. – eljenso

+0

@Chris Это не о других парнях, это о том, чтобы облегчить работу * моей *, поскольку я ленивый :) Я не пытаюсь улучшить мир, я просто хотел знать, если листинг некоторых общих принципов в документе будет быть полезными, чтобы избежать или разрешить некоторые обсуждения. – eljenso

0

Как архитектор, вы несете ответственность за то, чтобы эти вещи произошли, и если забивать с помощью фальшивых слов, так оно и есть.

На вашем уровне фактический код просто деталь реализации, это является точка.

+0

Моя основная роль остается разработчиком. И даже с архитектором, я не верю в строгое разделение арки/дизайна/кода. Код - это дизайн архитектуры. Я согласен, когда вы говорите, что это * точка. Вопрос в том, как это сделать? – eljenso

1

Это то, что нужно обучать и объяснять.

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

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

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

+0

Хорошая точка Shuggy, но указание на литературу просто делает ее «менее официальной». Если он находится в документе, и все согласны использовать его, то вы должны следовать ему. Кроме того, в литературе cs легко найти два источника, которые противоречат друг другу, и я стараюсь быть последовательным. Для этого вам нужен центральный документ. – eljenso

+0

Я тоже не в состоянии уволить кого-то.В большинстве случаев это хорошо :) – eljenso

+0

Вы бы полюбили его;) – ShuggyCoUk

1

Я был в похожей лодке: написав документацию для разработчиков. Лицевая реальность, они не будут читать ее, или если они это сделают, они не будут применять принципы. Вам нужно взять на себя инициативу и провести небольшие учебные занятия, чтобы показать им, что вы имеете в виду/ищете. Я сделал это с большим успехом. Небольшие 1-2-часовые сессии со старшими разработчиками. Мы посмотрели на хороший код, плохой код и поговорили через , почему было хорошо и плохо.

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

+0

На самом деле у нас будут презентации и построение образца приложения, которое будет использоваться в сеансах для обеспечения практического опыта. – eljenso

0

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

  • Написать блок автоматического испытание
  • имеет автоматическую систему сборки, которая строит весь продукт готовы к производству ночного
  • Aim для покрытия кода в испытаниях между 80% и 90%

Важное примечание: это принципы, а не правила. Руководящие принципы работают в изменяющейся среде, а правила - нет.

Рассуждение: Когда вы пишите тест, вам нужно отвлечь свои классы. Вы автоматически начинаете скрываться во внутренних деталях, потому что все остальное сделает ваши тесты более сложными.

Ночная система сборки поможет вам заметить ошибки в течение 24 часов или менее. Если вы обнаружите что-то сломанное утром, на котором вы работали вчера, возможно, вы все еще помните, над чем работали. Это облегчит поиск и устранение проблемы.

Что касается покрытия кода: вам потребуется 20% времени для написания тестов, которые покрывают 80% вашего кода и 80% для написания тестов на следующие 10% и 1000% времени (десять раз) до получают 100% (или, вернее, 99,999%). Если вы на самом деле так далеко, каждое изменение кода приведет к разрыву стольких тестов, что вы прекратите тестирование. В конце концов, охват 80-90% даст вам намного лучшую рентабельность инвестиций.

Я также предлагаю прочитать: Thoughts on Developer Testing

0

На мой взгляд, ваш вопрос слишком много внимания на исходном коде. Исходный код - это конечный результат процесса разработки. Я думаю, вы также должны сосредоточиться на -process, т. Е. О том, как разрабатывается программное обеспечение.

  • Каковы действия в процессе разработки и какие этапы и этапы могут быть определены?
  • Кто участвует в процессе разработки и какова их роль?
  • Сколько времени требуется для разных видов деятельности и каков будет период выпуска?
  • Каковы конечные поставки различных видов деятельности, например. проектные документы, диаграммы, презентации, руководства, исходный код, двоичные файлы и т. д.?
  • Кто несет ответственность за каждый этап?

Кроме того, для каждого из мероприятий по развитию некоторые инструменты могут быть определены для поддержки команды разработчиков, таких как:

  • Еженедельные встречи прогресс
  • презентации и обсуждения дизайнерских идей
  • списки Issue и отслеживание ошибок
  • Управление версиями
  • Контрольные списки
  • и т.д.

Мой опыт в том, что структурированный процесс разработки в конечном итоге также будет способствовать качеству исходного кода. Например, когда разработчики регулярно представляют свою работу всей команде разработчиков, они получат конструктивную обратную связь и узнают от своих коллег. Разработчик, который лучше понимает концепции OO (абстракция, разделение проблем, наследование и т. Д.), Получает возможность передать свои знания своим коллегам.

Смежные вопросы