Лучшие инструменты для разработки программного обеспечения
Да, страшное слово "М".
У вас есть рабочая станция, контроль исходного кода и полмиллиона строк исходного кода, которые вы не написали. Документация устарела в тот момент, когда она была утверждена и опубликована. Первоначальные разработчики - LTAO, в следующем проекте / стартапе / дурдоме и не отвечающие на электронную почту.
Чем ты планируешь заняться?
{любимый редактор}, и Grep поможет вам в этом разобраться в изнурительных кишках базы кода, но какие еще инструменты должны быть в наборе инструментов для инженеров по обслуживанию?
Начать прокатку мяча; Я не думаю, что я мог бы жить без понимания источника для C/C++ spelunking. (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не работаю на них).
12 ответов
Одним из лучших инструментов в.Net пространстве является ReSharper. Этот инструмент сэкономил мне время во всех аспектах жизненного цикла разработки. Они также помогли мне выжить, присоединившись к недокументированным проектам / решениям.
- Рефакторинг кода
- Навигация по коду
- Анализ кода
Это некоторые из многих функций, которые помогают выполнять трудоемкие задачи.
Так же, как есть слона - один укус за раз:)
Иногда большая картина может быть настоящим демотиватором, и вам нужно выбрать место и заняться им по частям.
Конечно, все еще нужно выбрать бит, с которого нужно начинать... Обычно это происходит в основном за счет пользователей / бизнеса с необходимыми изменениями, относящимися к высшему приоритету (вчера...), но если у вас есть немного гибкости или времени для ознакомления, метрики часто полезно. Инструменты здесь различаются в зависимости от технологии и языка, но такие инструменты, как NDepend и JDepend, любые встроенные метрики кода (например, в Visual Studio Team System или различные доступные плагины Eclipse) или такой инструмент, как Simian, позволяют почувствовать размер проблема копирования и вставки.
Надеемся, что количество модульных тестов и охват больше нуля, и поэтому хорошим первым шагом всегда является получение любых тестов, которые вы можете запустить в среде непрерывной интеграции, в качестве основы для добавления большего количества тестов по мере обучения.
И как уже говорили другие - при условии наличия опций для языка - хорошая IDE с навигацией по коду и автоматическим рефакторингом обязательна (Eclipse, Visual Studio (с ReSharper или без него).
Пара книг для повышения морального духа:
- Майкл С. Перья: Эффективная работа с устаревшим кодом
- Мартин Фаулер: Рефакторинг: улучшение дизайна существующего кода
Удачи:)
Поисковые системы кода могут помочь вам найти путь к огромной исходной базе.
Поисковая система исходного кода, чувствительная к языку, может быть найдена в Поисковой системе исходного кода SD. Он может обрабатывать много языков одновременно. Поиск может быть выполнен для шаблонов в определенном языке или шаблонов по языкам (например, "найти идентификаторы, включающие TAX"). Благодаря чувствительности к токенам языка количество ложных срабатываний сокращается, что экономит время пользователя. Он понимает C, C++, C#, COBOL, Java, ECMAScript, Java, XML, Verilog, VHDL и ряд других языков.
(Я архитектор инструмента).
Я обычно начинаю с Emacs + CScope в Linux. В Visual Studio есть несколько инструментов проверки, которые предоставляют аналогичные возможности для Windows. Doxygen также может быть очень полезным - он генерирует документы, которые могут быть полезны, даже если источники не имеют комментариев к документации.
Использование процесса опроса подписей - это хороший способ понять код с высоты птичьего полета. Благодаря хорошему языку сценариев и некоторому умению использовать его, создайте специально настроенный опрос сигнатур для своей собственной базы кода, независимо от того, на каком языке вы не работаете.
Программное обеспечение для отслеживания ошибок, особенно если оно связано с вашим программным обеспечением для управления версиями, будет иметь неоценимое значение, поскольку оно может дать вам некоторое представление о том, почему были приняты некоторые неверные решения. Это еще более важно, если программист по обслуживанию планирует также провести некоторый рефакторинг.
Письменный журнал также полезен, так что вы можете документировать систему по мере продвижения.
Я буду запускать некоторый инструмент UML (может быть, простой блокнот с ручкой =)) и / или инструменты для построения классов, вызовов, иерархий методов (интегрированных в IDE). Затем я буду наблюдать за динамикой с помощью отладчика или простых юнит-тестов. С помощью этого материала я попытаюсь выполнить какое-то обратное проектирование, чтобы выяснить дизайн.
Вы должны быть в состоянии перемещаться по всей базе кода. Если ваша любимая среда разработки разрешает это, то вы можете использовать индексатор, такой как Understand для C++ (уже упоминалось), lxr или OpenGrok.
В спешке, вы можете положиться на grep(1 с) или - лучше - Ack.
Я считаю, что Reflector Лутца полезен для этого, особенно когда у вас есть смесь кода и двоичных файлов. Вы получаете графы вызовов и зависимостей (в зависимости от того, используются, предоставляются, создаются и т. Д.), Графы сборок и некоторые замечательные плагины.
NDepend - это инструмент, предназначенный для реинжиниринга унаследованного кода, особенно больших запутанных унаследованных кодов. Отказ от ответственности: я один из разработчиков инструментов
Цитируя Скотта Хансельмана, который однажды написал в своем блоге: "NDepend дает мне представление о моих приложениях, которых у меня не было раньше (...) Как только я осознал всю глубину и широту информации, которую я просматривал, я был как ребенок в кондитерской. "
Некоторые функции NDepend, полезные для реинжиниринга:
- Dependency Matrix / Dependency Graph, чтобы понять структуру кода.
- Правило кода над LINQ Query (CQLinq), чтобы попросить кодовую базу раскрыть мне свой лучший секрет. По умолчанию предлагается более 200 правил кода.
- Различаться в коде базы, чтобы увидеть, что было добавлено / реорганизовано / удалено между любыми 2 версиями кода.
Да, ударил гвоздь по голове. Оболочка Unix и удобный Notepad++ - это то, что я использовал, когда выполнял работы по обслуживанию в ColdFusion, PHP, Perl и т. Д. Приятно не переключать редакторы и отслеживать все ссылки на имя / параметр / переменную.
Теперь я просто щелкаю правой кнопкой мыши и нажимаю "Найти все ссылки" в Visual Studio, что, честно говоря, кажется обманом. Парни из PHP чрезвычайно ревнивы, поскольку они вынуждены использовать vi для редактирования.;)
Критическим инструментом будет то, что позволит вам перемещаться (и редактировать) базу кода, чтобы помочь вашему пониманию.
Очень полезно иметь что-то, что может отображать отношения классов (если используется язык OO). Возможность отображения (статических) деревьев вызовов также очень полезна, когда вы хотите измерить влияние изменений, которые вы будете вносить.
Вы упоминаете источник-понимание. Долгосрочный проект с открытым исходным кодом является навигатором исходного кода. Похоже, что развитие началось снова после некоторого застоя.