Курсовая работа студента 345 группы

Курсовая работа студента 345 группы



Санкт-Петербургский Муниципальный Институт

Математико-Механический факультет

Кафедра системного программирования


Статический анализ кода

языка Ruby


Курсовая работа студента 345 группы

Денисона Юрия Борисовича


Научный управляющий Д.С. Ушаков


Санкт-Петербург

2012

Оглавление

1. Введение....................................................................................................................................3

2. Обзор имеющихся средств.................................................................................................5

3. Описание решения....................................................................................................................6

3.1 Общий метод....................................................................................................................6

3.2 PSI дерево...............................................................................................................................6

3.3 Инспекция..............................................................................................................................7

3.4 Предложение..........................................................................................................................9

4. Перечень Курсовая работа студента 345 группы проверок.....................................................................................................................10

5. Заключение..............................................................................................................................13

6. Перечень источников.................................................................................................................14

1. Введение

Язык Ruby - динамический высокоуровневый язык программирования для резвого и комфортного объектно-ориентированного программирования.

Некие способности Ruby:

По состоянию на май 2012 года, Ruby занимает 11 позицию в международном рейтинге Курсовая работа студента 345 группы Tiobe [1]. Также, увлекательную статистику представляет рейтинг языков программирования на GitHub [2], в каком Ruby занимает 2 строку, обгоняя Python. Посреди проектов, написанных на Ruby можно выделить узнаваемый в мире сервис микроблогов Twitter, написанный с внедрением пользующегося Курсовая работа студента 345 группы популярностью фреймворка Ruby on Rails.


RubyMine - IDE от компании Jetbrains для резвой и комфортной разработки на Ruby, написанная на базе платформы IntelliJ, бесплатной программной платформы с открытым начальным кодом, созданной Курсовая работа студента 345 группы для написания комфортных и функциональных сред разработки. Платформа написана на языке Java, а означает, построенные на ее базе среды разработки могут работать в хоть какой операционной системе, для которой существует среда выполнения Курсовая работа студента 345 группы виртуальной машины Java. Этот перечень содержит в себе по последней мере все три главные семейства операционных систем, имеющихся в текущее время: Windows, Linux, Mac OS.


Согласно принципу Парето, в работе над проектом только 20% времени Курсовая работа студента 345 группы занимает написание начального кода, тогда как 80% занимает исправление ошибок, оптимизации и различного рода дополнения кода. Для увеличения производительности программера методом предупреждения обычных ошибок и нахождении участков кода, не соотвествующих принятым эталонам Курсовая работа студента 345 группы (code smells [3]), употребляются разные инструменты анализа кода.

Анализ начального кода может производиться 2-мя методами:

В контексте RubyMine, инструментами для статического анализа начального кода, являются:


^ Цель моей Курсовая работа студента 345 группы курсовой работы - анализ имеющихся решений для статического анализа кода Ruby, анализ принятых в обществе разработчиков эталонов дизайна начального кода, на базе собранной инфы составление перечня нужных инспекций и предложений и, конкретно, реализация Курсовая работа студента 345 группы их в RubyMine.


2. Обзор имеющихся средств

На этот момент, в качестве эталона дизайна начального кода Ruby в обществе принят Ruby style guide [4]. В данном документе собраны советы по последующим разделам:


Существует несколько Курсовая работа студента 345 группы фаворитных средств для анализа кода Ruby, к которым можно отнести:


Исследовав документацию по этим средствам, было решено воплотить в рамках курсовой работы функциональность Reek и Roodi в силу Курсовая работа студента 345 группы большей популярности этих средств анализа.


В качестве обычного примера проверки можно привести ^ Class Variable Check из Reek, предупреждающей об использовании глобальных переменных, приводящему к вероятным дилеммам, когда одна часть программки Курсовая работа студента 345 группы ненамеренно меняет переменную, использующуюся в другой части, либо к дилеммам с написанием тестов, покрывающих данный участок кода.


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

3. Описание решения


3.1 Общий метод анализа начального кода

Общий метод анализа состоит из 4 главных фаз:

  1. лексический Курсовая работа студента 345 группы и синтаксический разбор начального кода

  2. семантический разбор

  3. построение промежного представления начального кода

  4. выявление определенных заморочек на базе промежного представления


1-ые два пт выходят за рамки данной работы, потому их рассматривать мы не будем. В Курсовая работа студента 345 группы RubyMine существует собственное представление кода в виде дерева синтаксического разбора, которое именуется PSI-tree, которое и будет употребляться в качестве промежного представления.


3.2 PSI-дерево

PSI-tree является базисным понятием в платформе IntelliJ. PSI расшифровывается как Курсовая работа студента 345 группы Program Structure Interface (интерфейс программных структур). Его построением занимается парсер. Обычно малой единицей построения PSI-дерева является файл. К примеру, для файла с одним классом будет выстроено дерево с корнем «файл Курсовая работа студента 345 группы» с одним дочерним узлом «класс». У «класса» дочерними узлами будут поля, способы, конструкторы, инициализаторы. При всем этом PSI-дерево «знает» о семантике языка. У соответственных узлов дерева (ASTNode) находятся способы для доступа и Курсовая работа студента 345 группы обработки специфичных для языка конструкций. К примеру, у класса есть способы для получения всех полей, перечня имплементированных интерфейсов, поиска способа по имени, сигнатуре и т. д. У всех узлов, являющихся Курсовая работа студента 345 группы выражениями, есть способ для получения типа.


3.3 Инспекция (Inspection)

При каждом вносимом в редакторе изменении, перестраивается PSI-дерево и по нему запускаются все зарегистрированные инспекции, которые регистрируют отысканные ошибки, которые после чего подсвечиваются Курсовая работа студента 345 группы в редакторе.


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


Highlighting Level:


3.3.1 Ruby Element Visitor

Класс, содержащий способы для посещения определенных PsiElement’ов в PSI-tree, по дефлоту, ничего не делающих. Для каждой инспекции Курсовая работа студента 345 группы реализуется собственный Visitor, который переопределяет только нужные способы, в согласовании с целью инспекции.


К примеру, для посещения узла дерева, соответственному конструкции if, необходимо переопределить способ void visitRIfStatement(RIfStatement ifStatement). Для каждой Курсовая работа студента 345 группы конструкции языка есть соответственный способ класса Visitor.


При нахождении ошибки, она может региться с предложением конфигураций для ее устранения, либо же без него, если инспекция только информирует программера о отысканной дилемме. К примеру, RubyIfCanBeCaseInspection Курсовая работа студента 345 группы предлагает, если это может быть, поменять if блок на case блок (аналог switch в Ruby), а RubyArgCountInspection только информирует о несоответствии количесва передаваемых характеристик сигнатуре способа.

3.3.2 Ruby Fix

Класс, перестраивающий Курсовая работа студента 345 группы соответственных узлов PSI-дерева для устранения препядствия, выявленной инспекцией.

Пример работы RubyInstanceVariableNamingInspection можно созидать на последующих рисунках.




3.4 Предложение (Intention)

Каждое предложение наследуется от класса IntentionAction и переопределяет последующие способы:


Таким макаром, при Курсовая работа студента 345 группы вызове предложений программером, для каждого зарегистрированного предложения вызывается isAvailable() и составляется перечень доступных предложений.

Пример работы AllHashRocketToNewStyleIntention можно созидать на последующих рисунках.



4. Перечень проверок

Syntax Inspections


Naming Inspections

Инспекции, реагирующие на элементы, имена которых не соответствуют принятому style guide’у.


Collections inspections


Strings inspections


Percent literals


5. Заключение

6. Перечень источников

  1. Рейтинг языков программирования Tiobe http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

  2. Рейтинг языков программирования на GitHub https://github.com/languages

  3. Презентация “Fighting code smells in RubyMine” с конференции RuPy2011 http Курсовая работа студента 345 группы://www.slideshare.net/olegshpynov/fighting-ruby-code-smell

  4. Ruby Style Guide https://github.com/bbatsov/ruby-style-guide

  5. Reek https://github.com/kevinrutherford/reek/wiki/code-smells

  6. Roodi https://github.com/martinjandrews/roodi Курсовая работа студента 345 группы#readme

  7. Перечень инспекций в Rubymine http://confluence.jetbrains.net/display/RUBYDEV/RubyMine+Inspections

  8. Багтрекер RubuMine http://youtrack.jetbrains.com/issues?q=RubyMine

  9. Статья про инспекции в блоге RubyMine http://blog.jetbrains.com/ruby/2011/11/whats-mining-new Курсовая работа студента 345 группы-ruby-inspections-for-better-code/

  10. Официальная страничка RubyMine http://www.jetbrains.com/ruby/




kvalifikacionnaya-harakteristika-vracha-terapevta-11-kvalifikacionnoj-kategorii-i-n-denisov-31-yanvarya-2001-g.html
kvalifikacionnaya-komissiya-dlya-priema-kvalifikacionnih-ekzamenov-u-lic.html
kvalifikacionnie-harakteristiki-rabotnikov-osushestvlyayushih-gostinichnuyu-deyatelnost.html