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

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

  • Я делаю большую часть своих разработок в Eclipse на своем ноутбуке. Все сохранено локально на моем ноутбуке, и я не использую VCS, и я действительно не копирую свой код (за исключением того, что иногда отправляю его по электронной почте, чтобы я мог видеть его на другом компьютере - да, я сказал вам, что моя среда разработки нуждается в работе).

  • Когда я закончил проект и хочу его развернуть или если я просто хочу его протестировать, я использую встроенный инструмент Jar в Eclipse для создания исполняемого файла .jar моего проекта. Если я использую внешние библиотеки .jar, я использую плагин Fat-Jar, чтобы включить эти .jars в свой исполняемый файл .jar.

  • После того, как я создаю .jar, я вручную загружаю его на сервер через SFTP и тестирую его с помощью java -jar MyProject.jar.

О да, я упоминал, что я не unit test?

Наиболее очевидной проблемой, которую я хотел бы исправить, является отсутствие контроля источника. Мне нравится git из-за его распределенной природы, но он, похоже, не очень хорошо интегрируется с Eclipse, и я слышал, что он не очень хорошо работает в Windows, это моя основная ОС разработки. Итак, я склоняюсь к SVN, с которым у меня есть некоторый опыт. У меня есть свой личный сервер, и я думаю, что я буду использовать его для своего исходного контроля, потому что я предпочел бы быть моим собственным администратором, чем иметь дело с университетской бюрократией. У меня возникли проблемы с настройкой SVN раньше, но я дам ему еще один выстрел. Может быть, я также смогу установить что-то вроде Trac или Redmine для отслеживания ошибок, списка дел и т.д.?

Как насчет строительства и развертывания? Должен быть лучший способ, чем использовать Fat-Jar и вручную загружать мою банку на сервер. Я слышал о таких инструментах, как Ant и Maven - применимы ли они к тому, что я хочу сделать? Как я могу начать использовать их?

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

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


edit: Спасибо за отличные ответы. Я не хотел предлагать, чтобы я сделал свой рабочий процесс "enterpriseisey" только ради этого, но чтобы упростить мою работу и получить несколько технологий под моим поясом, которые обычно используются в средах разработки на предприятии. Это все, что я имел в виду.

Ответ 1

Мне кажется, что у вас действительно есть хорошая идея о том, что вам нужно делать.

Использование Subversion (или другого VCS) является обязательным. Хотя было бы разумно настроить отдельный SVN-репозиторий для вашего рабочего кода, а не использовать личный.

Вы можете интегрировать Subversion с Eclipse с помощью плагина, такого как Subclipse, который я нашел, работает очень хорошо.

Я бы определенно использовал Ant или Maven - мое предпочтение было Ant, потому что оно более гибкое, и я думаю, что он подойдет вашему стилю разработки больше, чем Maven. Но вы также можете посмотреть Apache Ivy, который обрабатывает управление зависимостями.

В основном вы настроили задачу Ant, которая запускает ваши шаги компиляции, сборки и развертывания, так что, когда вы создаете окончательный пакет JAR, вы можете быть уверены, что он был протестирован с помощью модуля, так как это часть вашего Ant script. Лучший способ начать с Ant - посмотреть на некоторые примеры и прочитать manual.

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

Возможно, вам стоит придумать что-то вроде Trac - важно иметь возможность отслеживать ошибки, а вики полезно для документации.

Другими словами, все это звучит так, будто вы на правильных строках, вам просто нужно начать использовать некоторые из этих инструментов!

Ответ 2

Если вы действительно настроены на управление распределенным источником, я бы рекомендовал вам посмотреть Bazaar. Его GIT -подобный распределенный источник управления, который разработан для выполнения очень высокого качества сливается. Из коробки он работает на всех платформах, включая Windows, и у них есть TortoiseBZR клиент.

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

Что касается модульного тестирования, вы должны ознакомиться с JUnit. Тот факт, что вы знаете об модульном тестировании и знаете, что вы должны делать это, по-прежнему остается на несколько шагов впереди большинства разработчиков ad-hoc.

Ответ 3

Использовать контроль версий. Период. SVN отлично взаимодействует с Eclipse и Windows. Получите клиент TourtisSVN для Windows и используйте плагин subclipse с Eclipse.

Я бы посоветовал получить внешний HD или использовать один из серверов ваших компаний для размещения вашего репозитория и часто делать резервные копии. Subversion отлично работает с развертыванием и обновлением. Просто узнайте, как это сделать, и вы никогда не оглядитесь назад:)

Что касается Unit Testing, некоторые люди скажут, что это путь, но я не нашел достаточных доказательств для начала практики. Если кто-то по этому вопросу может убедить меня иначе, пожалуйста, сделайте это!

Кроме того, не смотрите на "enterprise" ваш рабочий процесс - посмотрите, чтобы сделать его лучше. Практики, которые хорошо работают с огромными командами и командами, могут не сработать для вас. Я в значительной степени являюсь единственным разработчиком и знаю ситуацию, в которой вы находитесь. Просто попробуйте все и только сохраняйте то, что кажется естественным через некоторое время.

Но не забудьте попробовать SVN! Если у вашей компании есть сервер LINUX с apache, посмотрите, можете ли вы настроить свой сервер там, используя DAV-SVN.

:)

Ответ 4

Думаю, вы ответили на большинство своих вопросов.

  • Контроль источника: выберите SVN - простая установка, отличная интеграция с Eclipse (подзаголовок).
  • Используйте Ant для создания проекта и его развертывания (задача SCP/SFTP)
  • Сохраняйте все свои настройки (настройки проекта Eclipse, создайте xmls и т.д.) в SVN.
  • Используйте Bugzilla для отслеживания ваших ошибок/проблем/запросов/идей.

Ответ 5

Было бы очень полезно начать работу с контролем версий. Начните сейчас, не откладывайте! Git движется ДЕЙСТВИТЕЛЬНО быстро, и уже существует TortoiseGit. SVN по-прежнему является отличным стандартом для работы. И я не работал с Mercurial, но это еще один VCS, который стоит посмотреть.

Кроме этого, я не понимаю, почему ваш рабочий процесс должен быть бизнесмен. Это просто должно быть эффективным и комфортным. Тем не менее, я думаю, вам стоит попробовать работать с простым текстовым редактором и компилироваться из командной строки. Большинство лучших программистов мира по-прежнему используют это вместо IDE, и это поможет вам понять процессы под вашей любимой IDE.

Ответ 6

Проверьте прагматичные программисты Pragmatic Starter Kit.

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

Это даст вам прочную основу для продолжения оттуда.

Ответ 8

Как только у вас установлен контроль версий и несколько модульных тестов, я бы рассмотрел непрерывный сервер интеграции (вы хотели быть предпринимателем, верно?).

Даже если вы и остаетесь единственным разработчиком, это может помочь вам выявить несколько ошибок. Вещи, которые вы забыли проверить или понравилось. CI-сервер регулярно проверяет все ваши источники, выполняет ли чистая сборка все ваши тесты. Он также связывается с вами в случае ошибок.

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

Я бы рекомендовал взглянуть на Hudson

Ответ 9

Хотя вы считаете это последним, я думаю, вы должны начать использовать jUnit без задержки.

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

Создайте новую папку в своем проекте под названием "jUnit".

Скажем, у вас есть класс Employee, с методами setAnnualSalary() и getMonthlySalary().

Щелкните правой кнопкой мыши папку jUunit, новый → "jUnit test case". Это создаст новый класс. Назовите это TestEmployee. Как обычно, Eclipse генерирует для вас шаблонный материал.

Добавьте метод void с именем, начинающимся с 'test':

public void testSalaryCalc() {
    Employee emp = new Employee("John Doe");
    emp.setAnnualSalary(12000);
    assertEquals(1000,emp.getMonthlySalary());
}

Щелкните правой кнопкой мыши, "запустите как" → "jUnit test". (в первый раз Eclipse может предложить вам выполнить некоторую настройку для проекта. Просто выполните то, что он говорит.)

Если Сотрудник работает правильно, вы увидите зеленую полосу. Саботаж класса Employee, повторите тест, и вы увидите красную полосу, а также информацию о том, что произошло.

Поздравляем: вы тестируете устройство!

Щелчок правой кнопкой мыши по родительскому каталогу и выбор "Запуск как тест jUnit" будет запускать каждый класс Testcase в каталоге. Позже вы можете включить jUnit в свой процесс сборки, но не беспокойтесь об этом пока.

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

Ответ 10

Как и другие, вы уже ясно знаете, что вам нужно делать. VCS является обязательным, CI или отслеживание ошибок может быть чрезмерным (для одного разработчика может потребоваться электронная таблица для отслеживания ошибок).

Одна вещь, которая может принести вам большую пользу, - это сохранить организованный продукт. В сольном развитии я считаю, что сосредоточенность на высокоприоритетных функциях и предотвращение ползучести функции - одна из моих самых больших проблем. Сохранение отставания помогает. Это не должно быть намного больше, чем список приоритетов с некоторыми примечаниями о масштабах каждого из них. На моем рабочем месте мы сохраняем эту информацию в Trac, но здесь снова может быть все, что вам нужно.

И я хочу добавить пробку для модульного тестирования, особенно Test Driven Development (TDD). Книга Кента Бекка - хорошее место для начала. Я нахожу, что TDD помогает мне честно и сосредоточенно на том, что мне действительно нужно делать, особенно на проекте с одним разработчиком без QA. Иногда кажется, что код записывается сам.

Ответ 11

У вас есть очень хорошие ответы, поэтому короткая публикация добавлена ​​ссылка на статью о Test Driven Development, которая является гибкой практикой, которая будет хорошо смотреться на вашем резюме. TDD

Ответ 12

Если вы используете Windows Server, на котором вы хотите разместить свой SVN-сервер, используйте Visual SVN в качестве сервера. Он очень прост в настройке и использовании, он поддерживает как базовую аутентификацию, так и проверку подлинности Windows. Он также свободен в использовании.

Eclipse имеет довольно много модулей для интеграции с сервером SVN, поэтому используйте один из них или уже предложенный Tortoise SVN.

Ответ 13

Все предыдущие комментарии охватывали почти все, что вам когда-либо понадобилось:-)

Я хочу добавить еще один подход к разработке (рабочий процесс разработки).

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

http://nvie.com/posts/a-successful-git-branching-model/