Как сделать рабочий процесс разработки более «корпоративным»?

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

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

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

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

О да, я упоминал, что не занимаюсь модульным тестированием?

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

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

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

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


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

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

orip 05.01.2009 20:07

Я шел по тому же пути, что и вы, и мне очень интересны ответы здесь, поскольку я уже пробовал (в некоторых частях не удалось, но другие сработали отлично, как SVN), и хотел бы услышать, как некоторые люди объясняют их более подробно. на случай, если я что-то пропустил. Спасибо за вопрос! :) +1

user19302 05.01.2009 20:15

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

Brian Knoblauch 05.01.2009 20:30

Ищите SO для Ant, Maven, Subversion, Git, DVCS и т. д. Я настоятельно не рекомендую Maven (как вы увидите, если будете искать). Я предлагаю исследовать Базар на предмет контроля версий.

Rob Williams 05.01.2009 23:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
4
1 888
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

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

Назовите 5 великих программистов, которые используют исключительно текстовые редакторы. Серьезные программисты используют IDE, чтобы работать быстрее. Мелкие элиты говорят, что используют текстовые редакторы, чтобы усилить свое гигантское незаслуженное эго.

Echostorm 05.01.2009 20:22

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

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

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

Trac - это БОЛЬНАЯ установка. Если вы можете подробно рассказать о том, как настроить его на сервере Vista X64 или LINUX (CentOS и Ubuntu Server), я был бы признателен. Я наконец-то заставил его работать с LINUX, но до сих пор не смог заставить его работать на моих ящиках с Windows.

user19302 05.01.2009 19:58

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

user7094 05.01.2009 20:00

Peal - это прогулка по парку по сравнению с Python. Буквально на днях я попытался запустить скрипт, который зависел только от одной графической библиотеки. Потребовались часы, чтобы просто потерпеть неудачу. Бьюсь об заклад, это моя собственная глупость и незнание языка, но он, безусловно, мог бы быть более интуитивным. CPAN совсем несложно :)

user19302 05.01.2009 20:11

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

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

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

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

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

:)

Модульное тестирование пару раз спасало мне жизнь (не буквально). Определенно того стоит.

user7094 05.01.2009 19:57

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

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

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

user19302 05.01.2009 20:13

С Bugzilla я делаю только «Новая задача», «Поиск» и «Отметить как исправленное». Каждый из них выполняется одним щелчком мыши. Контрольные точки отслеживаются с помощью поля «версия» при назначении новой задачи. Я действительно не знаю, как это может быть проще.

Yoni Roit 05.01.2009 20:19

Взгляните на Appfuse @ Мэтта Рэйбла.

Он включает в себя Maven и модульное тестирование.

http://raibledesigns.com/rd/tags/appfuse

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

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

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

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

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

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

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

CruiseControl - еще один популярный CI-сервер. Он может быть интегрирован с Ant, Coberatura, jUnit и т. д. (Как, наверное, может Hudson, я уверен).

slim 05.01.2009 20:23

Cruisecontrol, вероятно, самый популярный CI-сервер. Но настройка в первый раз может быть сложной задачей (особенно без надлежащего опыта). Поэтому я рекомендовал Хадсон. На мой взгляд, он более «удобен для пользователя».

Mo. 06.01.2009 00:00

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

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

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

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

Щелкните правой кнопкой мыши папку jUunit, новое -> «Тестовый пример jUnit». Это создаст новый класс. Назовите это 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 test» запускает каждый класс Testcase в каталоге. Позже вы можете включить jUnit в процесс сборки, но пока не беспокойтесь об этом.

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

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

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

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

Я много слышу о TDD: «... кажется, что код пишет сам». Я научился использовать JUnit во второй половине вводного курса CS, но так и не смог интегрировать его в свои собственные проекты. Возможно, мне пора это сделать.

dancavallaro 05.01.2009 22:57

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

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

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

Мой личный сервер разработки - это Ubuntu Server, а мой рабочий сервер - RHEL, но спасибо за предложение.

dancavallaro 05.01.2009 23:22

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

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

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

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

Другие вопросы по теме