10 февраля 2013 в 13:17

Разное → Еще один шаг к автоматической инспекции кода: легкая оптимизация “на лету”

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




Об автоматической инспекции кода на ресурсе уже было несколько статей: вот тут, тут,и тут предыдущие статьи разработчиков нашего проекта. Как можно догадаться — речь пойдет о системе checkstyle и написании чеков (проверок), которые можно с её помощью произвести.

Вернемся к теме статьи: немного об оптимизации.
Речь пойдет о таком моменте в оптимизации, как порядок следования операндов в логическом выражении. Конечно это не ускорит работу Вашего приложения в десятки раз, однако немного времени это сэкономит.
Если кто-то не понял о чем идет речь — (немного теории) при использовании операторов && и || результат всего выражения может быть получен при неполном его просмотре, то есть в самом благоприятном случае Вам хватит первого операнда. Смысл данной простейшей оптимизации в том, что вызов метода наверняка более тяжеловесен, нежели проверка значения локальной логической переменной, или поля.

Пример:
if(isReady && isSelected()){}
if(isValid() && !isBusy){} //you’ll get warning here
if(hasError() && isReady || isReady && isSpecialMode()){} //you’ll get warning here

Одна из проверок, написанных мной как раз решает подобную проблему: LogicConditionNeedOptimization — уведомляет Вас о том, что возможно оптимизировать написанное Вами логическое выражение, переместив вызовы метода после проверки всех локальных переменных или полей, присутствующих в выражении. Конечно возможны случаи, когда предупреждение будет выведено напрасно. Например если метод, вызываемый в выражении, каким-то образом влияет на значение используемой в том же выражении переменной, однако это скорее всего будет свидетельствовать об ошибочном дизайне.
Данная оптимизация очевидна, однако многие не обращают внимания на подобные мелочи. С помощью автоматической инспекции Вы можете обратить внимание Вашей команды (да и не бояться, что своя память подведет) на подобные огрехи. Вы получите достаточно большой объем уже реализованных проверок и возможность без особого труда реализовать проверки, необходимые Вашей команде и лично Вам.

В заключение хотелось бы перечислить выгоды от практики в проекте sevntu.checkstyle которые получил я:

— Я являюсь автором моего кода, моё имя в javadoc.
— Проект простой, отличный старт для начинающих.
— Понимание и практика VCS (git).
— Опыт работы в команде, несколько студентов делают изменения в одно время.
— Всё это я могу делать в удобное для меня время не мешая учебе и личной жизни.
— Работу с куратором проекта.
— Code-review и ответы на вопросы “почему надо именно так?” в skype/mail.
— UTesting (100% покрытие кода тестами) и ручное тестирование на реальных проектах (Spring, Hibernate, ...).
— Изменение wiki страничек проекта для помощи новым членам команды.
— Получение опыта вклада в проект.
— Работа с issue tracking system (SourceForge, GitHub).
— Работа полностью осуществляется под Linux (Ubuntu). Куратор, при необходимости, помогает с возникшими при миграции с Windows вопросами. Дополнительно возможны советы по использованию Eclipse.
— Теперь у меня есть что приложить к моему резюме(CV). Я не боюсь показать мой код для оценки стиля написания и моего опыта.
— Я начинал с начального уровня знаний Java, руководитель проекта помог мне сфокусироваться на нужных книгах, статьях. Я могу задавать вопросы на интересующие меня темы. Также руководитель может задавать интересные вопросы, чтобы копнуть глубже.
— Мой код не применяют к общему репозиторию, пока руководитель видит его неидеальным — всё просто.
— Во время автоматизации я запомнил на всю жизнь (как на доске в 3-м классе прописать одно предложение много много раз) как не надо писать код, но теперь я помогу себе, как и другим людям не делать ошибки. Надеюсь эта работа не пропадет зря.
— Я могу использовать свои наработки в других проектах — код открыт.
— Моя работа используется дальше, а следовательно время потрачено не зря.
— Надеюсь я могу гордиться моим кодом.
— Надеюсь, что это поможет мне легче пройти собеседование в хорошие компании, так как я узнаю много нюансы Java (вопросы по которым могут быть заданы на собеседовании любому разработчику).
— Работа с утилитой статического анализа кода поможет мне избежать “Хорошо известных” проблем, знания о которых я мог бы получить за 3-5 лет опыта.
— В моем случае стало возможным работать на проекте во время летней практики университета в офисе с разработчиками компании Reveredata. Это увеличивало скорость решения проблем и ответов на вопросы.

В заключение хотелось бы сказать, что Open Source — это круто. Он помог мне в повышении моего уровня знаний и умений. Не бойтесь участвовать и помогать развиваться проектам. Хватит сомневаться и стесняться — выбери проект и сделай что то полезное!
Если кого-то заинтересовал наш проект — sevntu-Checkstyle.github.com/sevntu.Checkstyle/. Отсутствие у вас опыта — не проблема, вашего желания должно хватить. Даже маленький модуль будет очень полезен — ваша помощь нужна.