Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis TsvettsihПрезентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
Всё о статическом анализе кода для Java программистаAndrey KarpovЭтот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
Статический анализ кода: Что? Как? Зачем?Andrey KarpovМетодология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaeventsАлександр Петренко, ИСП РАН
Профессор, доктор физико-математических наук, заведующий отделом технологий программирования Института системного программирования (ИСП РАН), профессор ВМК МГУ. Основные работы в областях: формализация требований, генерация тестов на основе формализованных требований и формальных моделей (model based testing – MBT). Приложения: тестирование операционных систем и распределенных систем, тестирование компиляторов, верификация дизайна микропроцессоров, формализация стандартов на API операционных систем и телекоммуникационных протоколов. Сопредседатель оргкомитетов International MBT workshop (http://www.mbrworkshop.org/), Spring Young Researcher Colloquium on Software Engineering – SYRCoSE (http://syrocose.ispras.ru), городского семинара по технологиям разработки и анализа программ ТРАП/SDAT (http://sdat.ispras.ru/).
Тема доклада
Модели в профессиональной инженерии и тестировании программ.
Тезисы
Model Based Software Engineering (MBSE) является расширением подхода к разработке программ на основе моделей. В MBSE в отличие, например, от MDA (Model Driver Architecture) существенное внимание уделяется не только задачам собственно проектирования и разработки кода, но и задачам других фаз жизненного цикла – анализу требований, верификации и валидации, управлению требованиями на всех фазах жизненного цикла. Model Based Testing (MBT) хронологически возник гораздо раньше, чем MBSE и MDA, однако его место в разработке программ в полной мере раскрылось вместе с развитием MBSE. По этой причине MBT и MBSE следует рассматривать в тесной связке. В докладе будут рассмотрены концепции MBSE-MDA-MBT, основные источники и виды моделей, которые используются в этих подходах, методы генерации тестов на основе моделей, известные инструменты для
Статический анализ: вокруг Java за 60 минутAndrey KarpovСтатический анализ всё больше воспринимается как неотъемлемая часть процесса разработки качественного программного обеспечения. Разумеется, у этой технологии уже есть свои сторонники и противники, но, несмотря на это, тема статического анализа всё более актуальна и требует детального рассмотрения. Рассмотрим, что такое статический анализ, как он применяется и как влияет на качество и надёжность кода. Поговорим о важности раннего обнаружения ошибок и дефектов уязвимости. Рассмотрим существующие инструменты для Java, такие как Sonar Java, FindBugs и анализатор встроенном в среду разработки IntelliJ IDEA. Расскажем историю, почему несмотря на уже существующие инструменты, мы решили разработать PVS-Studio для Java, как мы это делали и что в итоге получилось. В конце затронем вопрос интеграции статических анализаторов кода в большие старые проекты. Другими словами, как увидеть 100500 срабатываний и не упасть духом.
Statis code analysischashnikovDevelopers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
Discovering Lambdas in Java 8Stfalcon MeetupsOlexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima DzubaОписываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Обзор RubyDigital-агентство МэйкЗанятие №3 в рамках Курсов программирования Ruby on Rails.
Группа курсов «ВКонтакте»: http://vk.com/ruby_school
Организатор — Агентство интернет-маркетинга Мэйк makeagency.ru. Курсы проводятся на базе Кузбасского государственного технического университета, кафедры «Информационные и автоматизированные производственные системы».
Всё о статическом анализе кода для Java программистаAndrey KarpovЭтот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
Статический анализ кода: Что? Как? Зачем?Andrey KarpovМетодология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaeventsАлександр Петренко, ИСП РАН
Профессор, доктор физико-математических наук, заведующий отделом технологий программирования Института системного программирования (ИСП РАН), профессор ВМК МГУ. Основные работы в областях: формализация требований, генерация тестов на основе формализованных требований и формальных моделей (model based testing – MBT). Приложения: тестирование операционных систем и распределенных систем, тестирование компиляторов, верификация дизайна микропроцессоров, формализация стандартов на API операционных систем и телекоммуникационных протоколов. Сопредседатель оргкомитетов International MBT workshop (http://www.mbrworkshop.org/), Spring Young Researcher Colloquium on Software Engineering – SYRCoSE (http://syrocose.ispras.ru), городского семинара по технологиям разработки и анализа программ ТРАП/SDAT (http://sdat.ispras.ru/).
Тема доклада
Модели в профессиональной инженерии и тестировании программ.
Тезисы
Model Based Software Engineering (MBSE) является расширением подхода к разработке программ на основе моделей. В MBSE в отличие, например, от MDA (Model Driver Architecture) существенное внимание уделяется не только задачам собственно проектирования и разработки кода, но и задачам других фаз жизненного цикла – анализу требований, верификации и валидации, управлению требованиями на всех фазах жизненного цикла. Model Based Testing (MBT) хронологически возник гораздо раньше, чем MBSE и MDA, однако его место в разработке программ в полной мере раскрылось вместе с развитием MBSE. По этой причине MBT и MBSE следует рассматривать в тесной связке. В докладе будут рассмотрены концепции MBSE-MDA-MBT, основные источники и виды моделей, которые используются в этих подходах, методы генерации тестов на основе моделей, известные инструменты для
Статический анализ: вокруг Java за 60 минутAndrey KarpovСтатический анализ всё больше воспринимается как неотъемлемая часть процесса разработки качественного программного обеспечения. Разумеется, у этой технологии уже есть свои сторонники и противники, но, несмотря на это, тема статического анализа всё более актуальна и требует детального рассмотрения. Рассмотрим, что такое статический анализ, как он применяется и как влияет на качество и надёжность кода. Поговорим о важности раннего обнаружения ошибок и дефектов уязвимости. Рассмотрим существующие инструменты для Java, такие как Sonar Java, FindBugs и анализатор встроенном в среду разработки IntelliJ IDEA. Расскажем историю, почему несмотря на уже существующие инструменты, мы решили разработать PVS-Studio для Java, как мы это делали и что в итоге получилось. В конце затронем вопрос интеграции статических анализаторов кода в большие старые проекты. Другими словами, как увидеть 100500 срабатываний и не упасть духом.
Statis code analysischashnikovDevelopers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
Discovering Lambdas in Java 8Stfalcon MeetupsOlexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima DzubaОписываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Обзор RubyDigital-агентство МэйкЗанятие №3 в рамках Курсов программирования Ruby on Rails.
Группа курсов «ВКонтакте»: http://vk.com/ruby_school
Организатор — Агентство интернет-маркетинга Мэйк makeagency.ru. Курсы проводятся на базе Кузбасского государственного технического университета, кафедры «Информационные и автоматизированные производственные системы».
Характерные черты функциональных языков программированияAlex.Kolonitsky
Автоматическая генерация тестов по комментариям к программному коду
1. Московский Государственный Университет им М.В Ломоносова
Факультет Вычислительной Математики и Кибернетики
Автоматическая генерация
тестов по комментариям к
программному коду
Носков А. А.
alexey.noskov@gmail.com
2. Проблемная область
Среди характеристик качественного ПО:
Надежность (достигается тестированием)
Наличие документации к коду
В тестах фиксируется поведение, ожидаемое
от элементов ПО
В документацию входит описание того, какое
поведение ожидается
Дублирование ?
2
3. Конкретизация области
Документация
Интерфейсные комментарии в элементам
кода (функциям, классам, методам, ...)
Предназначены для программиста,
использующего эти элементы
JavaDoc, RDoc, Doxygen, ...
Тесты
Модульные тесты, проверяющие корректность
поведения элементов кода
JUnit, CppUnit, Test::Unit
3
4. Задачи работы
Метод генерации модульных тестов
На основе описания поведения объектов кода
в комментариях
•
Ограниченный ЕЯ, удобный для человека и
автоматической обработки
НЕ включается:
‒ Построение тестов по произвольным
комментариям
‒ Генерация полного тестового покрытия
‒ Генерация регрессионных тестов
4
5. Реализация метода
Плагин для IDE Eclipse, осуществляющий
генерацию модульных тестов JUnit
Генерация тестов к коду на Java
Обрабатываемые комментарии – JavaDoc
Язык реализации – Java
Для выделения конструкций ЕЯ – LSPL
Язык лексико-синтаксических шаблонов
Для морфологического анализа – AOT
5
6. Схема метода
Комментарии на ЕЯ
Выделение
LSPL-шаблоны
именований
именований
объектов кода
Выделение
LSPL-шаблоны
описаний
свойств
свойств объектов
Генерация тестов
Тесты 6
7. Примеры комментариев
/**
* Вычислить факториал.
*
* Например, если аргумент равен 3, то факториал 6.
* А если аргумент 4, то 24
*
* @param value аргумент, больше 0
* @return значение факториала, не меньше аргумента
* @throws IllegalArgumentException если аргумент меньше 0
*/
public static int factorial( int value )
/**
* Нахождение наибольшего общего делителя двух чисел.
*
* @param a первое число
* @param b второе число
*
* Остаток от деления первого числа на результат равен 0.
* Остаток от деления второго числа на результат равен 0.
*
* @return наибольший общий делитель чисел
*/
public static int nod(int a, int b) 7
8. Выделение именований
Объекты кода именуются в комментариях
Эти имена используются человеком при описании
свойств в комментариях
Для выделения именований можно использовать
разметку комментариев в виде тэгов (JavaDoc,
Doxygen, Rdoc)
Выделяются по шаблонам именных групп,
описанным на LSPL (NG = {A|Num} N)
Стандартные именования (“аргумент”, “результат”)
8
9. Выделение именований
Примеры
/**
* Вычислить факториал.
*
* Например, если аргумент равен 3, то факториал 6.
* А если аргумент 4, то 24
*
* @param value аргумент, больше 0
* @return значение факториала, не меньше аргумента
* @throws IllegalArgumentException если аргумент меньше 0
*/
public static int factorial( int value )
/**
* Нахождение наибольшего общего делителя двух чисел.
*
* @param a первое число
* @param b второе число
*
* Остаток от деления первого числа на результат равен 0.
* Остаток от деления второго числа на результат равен 0.
*
* @return наибольший общий делитель чисел
*/
public static int nod(int a, int b) 9
10. Выделение описаний свойств
объектов
LSPL-шаблоны:
Объектов кода (аргументы, результат) –
генерируются на основе именований
Описаний свойств – описываются заранее
Распознование в тексте комментария
описания свойств объектов на основе
шаблонов
Результаты распознавания => внутреннее
представление свойств
10
11. Выделение свойств
Примеры
/**
* Вычислить факториал.
*
* Например, если аргумент равен 3, то факториал 6.
* А если аргумент 4, то 24
*
* @param value аргумент, больше 0
* @return значение факториала, не меньше аргумента
* @throws IllegalArgumentException если аргумент меньше 0
*/
public static int factorial( int value )
/**
* Нахождение наибольшего общего делителя двух чисел.
*
* @param a первое число
* @param b второе число
*
* Остаток от деления первого числа на результат равен 0.
* Остаток от деления второго числа на результат равен 0.
*
* @return наибольший общий делитель чисел
*/
public static int nod(int a, int b) 11
12. Генерация тестов
Выделение тестируемых наборов свойств:
Условия в конкретных примерах
Взаимосвязи между аргументами и
результатом
Выбор значений аргументов, если они не
заданы
Генерация кода тестов для выделенных
наборов свойств
12
13. Генерация тестов
Примеры
@Test public void factorial0() {
int value = 3;
если аргумент равен 3, int result = TestClass.factorial(value);
то факториал 6
assertEquals( 6, result );
}
@Test public void factorial1() {
int value = 4;
int result = TestClass.factorial(value);
если аргумент 4, то 24
assertEquals( 24, result );
}
@Test public void nod0() {
int a = 12;
Остаток от деления int b = 16;
первого числа int result = TestClass.nod( a, b );
на результат равен 0
assertEquals( 0, a % result );
}
@Test public void nod1() {
int a = 5;
Остаток от деления int b = 10;
второго числа int result = TestClass.nod( a, b );
на результат равен 0
assertEquals( 0, b % result ); 13
}
14. Ближайшие планы
Расширения множества описываемых
условий
Обработка условий порождения исключени
Описание изменения состояния объекта:
Доступ к полям
Вызов методов
Обработка условий, заданных в контексте
некоторого элемента
14