Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
Как помочь тестам находить баги? Что лучше: каждый новый запуск на новом наборе данных или же стабильность? Как сделать тестовые данные эффективными?
В докладе рассматривается Property based подход для написания unit-тестов.
На реальных примерах будет показано то, какими возможностями обладает FsCheck в связке с C#, какие есть плюсы и минусы у данного инструмента и стоит ли тратить время на его изучение.
05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
Как помочь тестам находить баги? Что лучше: каждый новый запуск на новом наборе данных или же стабильность? Как сделать тестовые данные эффективными?
В докладе рассматривается Property based подход для написания unit-тестов.
На реальных примерах будет показано то, какими возможностями обладает FsCheck в связке с C#, какие есть плюсы и минусы у данного инструмента и стоит ли тратить время на его изучение.
05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
Olexandra 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.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
Java 8, самой заметной фичей которой стало появление лямбд, вышла два года назад, а в этом году мы даже начали её использовать в продакшен коде Идеи. Такое заметное нововведение в языке вызывает множество вопросов. Какие возможности перед нами открываются и какие проблемы при неаккуратном использовании лямбд могут возникнуть, как лямбды устроены внутри, во что они компилируются и как исполняются — вот темы, которые мы обсудим на докладе.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Написание юнит-тестов большинству представляется занятием скучным и до некоторой степени бесполезным. Мое мнение — это всё оттого, что сама "классическая" схема юнит-тестов подразумевает непродуктивное написание унылого линейного кода.
В докладе я расскажу о том, как с помощью pytest начать писать тесты, которые приятно читать и поддерживать, почему setUp и tearDown — это прошлый век, как с помощью правильной организации fixtures ускорить исполнение тестов, а также какие ещё уловки могут помочь вам в вашей нелегкой борьбе с рутиной.
This document provides an introduction and overview of Moose, a modern object framework for Perl 5. It begins with background on the author and a brief history of object oriented programming in Perl 5. It then explains what Moose is, including that it handles object overhead, allows for introspection, and is used in production software. Examples are provided of basic class creation and usage with Moose as well as more advanced features like attributes, types, subclassing, roles, method modifiers, and introspection. The benefits of Moose are summarized as writing less code and avoiding implementation details to have a better object model.
Moose is an object framework for Perl that provides:
1) Full-featured object-oriented programming with attributes, inheritance, roles, and hooks
2) Powerful attribute features like types, defaults, builders, and more
3) A clean and stable API for defining and working with objects
Another Way to Attack the BLOB: Server-side Access via PL/SQL and PerlRoy Zimmer
The document discusses accessing and retrieving data from MARC records stored in a database using PL/SQL and Perl. It provides an overview of the MARC record format and how the data is stored in database tables with BLOB fields. It also outlines the process for retrieving MARC record data from the database tables and reassembling multi-row records into a single MARC record.
Olexandra 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.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
Java 8, самой заметной фичей которой стало появление лямбд, вышла два года назад, а в этом году мы даже начали её использовать в продакшен коде Идеи. Такое заметное нововведение в языке вызывает множество вопросов. Какие возможности перед нами открываются и какие проблемы при неаккуратном использовании лямбд могут возникнуть, как лямбды устроены внутри, во что они компилируются и как исполняются — вот темы, которые мы обсудим на докладе.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Написание юнит-тестов большинству представляется занятием скучным и до некоторой степени бесполезным. Мое мнение — это всё оттого, что сама "классическая" схема юнит-тестов подразумевает непродуктивное написание унылого линейного кода.
В докладе я расскажу о том, как с помощью pytest начать писать тесты, которые приятно читать и поддерживать, почему setUp и tearDown — это прошлый век, как с помощью правильной организации fixtures ускорить исполнение тестов, а также какие ещё уловки могут помочь вам в вашей нелегкой борьбе с рутиной.
This document provides an introduction and overview of Moose, a modern object framework for Perl 5. It begins with background on the author and a brief history of object oriented programming in Perl 5. It then explains what Moose is, including that it handles object overhead, allows for introspection, and is used in production software. Examples are provided of basic class creation and usage with Moose as well as more advanced features like attributes, types, subclassing, roles, method modifiers, and introspection. The benefits of Moose are summarized as writing less code and avoiding implementation details to have a better object model.
Moose is an object framework for Perl that provides:
1) Full-featured object-oriented programming with attributes, inheritance, roles, and hooks
2) Powerful attribute features like types, defaults, builders, and more
3) A clean and stable API for defining and working with objects
Another Way to Attack the BLOB: Server-side Access via PL/SQL and PerlRoy Zimmer
The document discusses accessing and retrieving data from MARC records stored in a database using PL/SQL and Perl. It provides an overview of the MARC record format and how the data is stored in database tables with BLOB fields. It also outlines the process for retrieving MARC record data from the database tables and reassembling multi-row records into a single MARC record.
Simple Photo Processing and Web Display with PerlKent Cowgill
I have a small photo gallery on my website and in this presentation, I share
some steps I used in creating a nearly automatic workflow of getting
pictures from my camera to his gallery using Perl.
The document discusses Perl and its suitability for enterprise computing. It covers why Perl is good for enterprises, including its high-level and dynamic nature, extensive module library, and support for multiple programming paradigms. It also addresses criticisms of Perl for enterprises and discusses the Perl Foundation and upcoming Perl 6, which will include many new features and be implemented on the Parrot virtual machine.
The document discusses perceptions of the Perl programming language and ways to promote it in a more positive light. It notes that the Perl community tends to communicate only within itself and needs to break out of this "echo chamber" by telling others about Perl's strengths. Some suggestions are promoting Perl's large CPAN module library, helpful community resources like Perl Monks, and by attending non-Perl conferences and meetings to spread awareness of the language. The overall message is that Perl is alive and capable, and its advocates should feel proud to use it and share this pride with the wider technical community.
A rather old talk that I gave to the London Perl Mongers back in the days when I was really concerned about the number of people learning Perl from bad CGI programs.
Building Scalable, Distributed Job Queues with Redis and Redis::ClientMike Friedman
This document discusses using Redis and the Redis::Client Perl module to build scalable distributed job queues. It provides an overview of Redis, describing it as a key-value store that is simple, fast, and open-source. It then covers the various Redis data types like strings, lists, hashes, sets and sorted sets. Examples are given of how to work with these types using Redis::Client. The document discusses using Redis lists to implement job queues, with jobs added via RPUSH and popped via BLPOP. Benchmark results show the Redis-based job queue approach significantly outperforms using a MySQL jobs table with polling. Some caveats are provided about the benchmarks.
This document provides an overview of building an app using Perl and MongoDB. It discusses what MongoDB is and its key features. It describes the modules needed from CPAN to interface with MongoDB from Perl. It outlines the structure of a sample "Library" app to demonstrate CRUD operations on books, authors, and other entities. The document walks through building this app and interacting with MongoDB documents and collections. It provides resources to learn more about MongoDB and the MongoDB Perl API.
Perl University: Getting Started with Perlbrian d foy
This document provides an overview and introduction to the Perl programming language. It discusses what Perl is, its history and origins, why it is useful, how to get and install Perl, where to find Perl documentation and information, the basics of Perl scripts and programs, Perl data types including scalars, numbers, strings, lists and arrays, variables, and control structures. The document is intended to give attendees of a two-day Perl University course a brief tour and foundation in the Perl language to build upon.
Linked lists can be useful in Perl for memory management , walking multiple lists, managing memory in long-lived tasks, or in threaded applications. This talk describes the basics of singly-linked lists, the basics of code that make up LinkedList::Single, and shows some applications of the lists.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Статический анализ кода: современный взглядAndrey Karpov
Статический анализ - это методология выявления ошибок в исходном тексте программы, основанная на просмотре кода программистом, помеченного статическим анализатором там, где потенциально может находиться ошибка. Многие относятся к статическому анализу как к устаревшему и не актуальному методу. Действительно, существует ряд моментов, из-за которых кажется, что статический анализ приносил пользу раньше, когда средства разработки были намного менее функциональны. Однако если отбросить устаревшее, то оказывается, что методология статического анализа по-прежнему позволят существенно сократить цену устранения многих дефектов, за счет их обнаружения еще на стадии конструирования (кодирования). Более того, развитие языков, появление таких технологий программирования как OpenMP, увеличение среднего размера проекта делают применение статических анализаторов все более привлекательным для контроля качества проекта.
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
Василий Соловей, Солигорск. PHP-разработчик в в «Электронном Солигорске».
«Минусы ООП на примере языка PHP». Development секция. Для разработчиков (начальный и средний уровень).
1. Что есть ООП (легкое повторение уже знакомого)
2. Лучше доверять авторитету мнения, чем мнению авторитета (во всем нужно разбираться основательно, а в ООП тем более)
3. Неизменная скупость в похвалах — верный признак посредственного ума (плюсы ООП)
4. Не все то солнышко, что блестит (основная часть доклада – минусы ООП)
5. Кто владеет информацией, тот владеет ситуацией (пояснение сути доклада:
доклад не принижает и не умоляет достоинств ООП он создан расширить кругозор)
«Начинать никогда не поздно!». Мотивационное выступление. На личном примере, я могу рассказать, что начинать никогда не поздно, и если есть желание – нет повода себе отказывать.
1. Путь в тысячу миль начинается с одного шага (с чего начать)
2. И на верном пути повстречаются распутья (как не сбиться с дороги начав)
3. Кто ты программист? (мой взгляд на программирование)
4. Успех – дитя настойчивости
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
Анализ кода — один из эффективных подходов к выявлению дефектов на этапе разработки программного обеспечения. Это позволяет избежать тривиальных и не очень ошибок, которые могут приводить к появлению уязвимостей. Существует ряд подходов, применяемых в анализаторах, на основании которых производится анализ, позволяющий снижать риски. Однако возникает ряд предубеждений, ведь не всегда предупреждение анализатора является реальным дефектом, тем более, что не всякий дефект является уязвимостью.
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python Meetup
Автор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
- Как создать презентацию не вылезая из любимого текстового редактора (notepad++, padre, vim).
- Как perl помогает автоматизировать работу без написания кода.
- Пара скриптов, которые облегчают работу на разных платформах.
- Те же скрипты на perl6.
- Автоматизация и тестирование Firefox.
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
Рассказ о истории и использовании в реальной жизни инструментов анализа кода на основе JavaChecker и TermWare
Сопустствующий текст: http://datacenter.gradsoft.ua/files/articles/OSDN2011/
Similar to модульное тестирование для Perl. алексей шруб. зал 4 (20)
The document summarizes the differences between Flash and HTML5 technologies for creating interactive charts and graphs. It discusses browser support for HTML5 technologies like SVG, Canvas, and JavaScript across various browsers. It also provides examples of DOM manipulation in SVG using JavaScript and event handling. The document mentions that AnyChart is a JavaScript library for creating charts with over 800 classes and 80,000 lines of code. It recommends using the Google Closure library and tools for JavaScript development. Finally, it poses some limitations of HTML5 compared to Flash and asks if anyone has any other questions.
IE9 and IE10 are focused on supporting HTML5 natively in Windows. The document discusses demos of real-world HTML5 applications running in IE9, patterns for progressing the web forward through standards support and community engagement, and emerging technologies being prototyped in the HTML5 Labs site and early previews of IE10 capabilities like CSS3 gradients and layout modes. Users are encouraged to take advantage of IE9 today, experiment with HTML5 Labs, and provide feedback on early looks at IE10.
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
модульное тестирование для Perl. алексей шруб. зал 4
1. Unit testing for Perl
Alexey Shrub
Российские интернет-технологии
2011-04-26
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 1/30
2. Модульное тестирование
Автоматизированное.
Изолированное.
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 2/30
3. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
4. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Борьба с ростом энтропии (регрессом) при изменениях (= легкость
рефакторинга).
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
5. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Борьба с ростом энтропии (регрессом) при изменениях (= легкость
рефакторинга).
Локализация ошибок (в отличие от интеграционных).
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
6. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Борьба с ростом энтропии (регрессом) при изменениях (= легкость
рефакторинга).
Локализация ошибок (в отличие от интеграционных).
Раннее обнаружение ошибок (чем раньше, тем дешевле исправление
ошибки).
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
7. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Борьба с ростом энтропии (регрессом) при изменениях (= легкость
рефакторинга).
Локализация ошибок (в отличие от интеграционных).
Раннее обнаружение ошибок (чем раньше, тем дешевле исправление
ошибки).
Раннее обнаружение неудобного интерфейса.
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
8. Зачем нужны модульные тесты
Необходимая верификация (+ двойная запись).
Борьба с ростом энтропии (регрессом) при изменениях (= легкость
рефакторинга).
Локализация ошибок (в отличие от интеграционных).
Раннее обнаружение ошибок (чем раньше, тем дешевле исправление
ошибки).
Раннее обнаружение неудобного интерфейса.
Документация.
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 3/30
9. Стандартные отмазки нежелающих писать тесты
Нет времени.
Код нетестируемый.
Не умею и боюсь, у меня и без тестов вроде/должно работать.
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 4/30
10. Тесты в Perl. Функциональное тестирование
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 5/30
11. use Test::More;
Базовые функции
ok
is
new_ok
is_deeply
...
Диагностика (diag/explain):
i s _ d e e p l y ( $got , $ e x p e c t e d , ’ R e s u l t must be . . . ’ )
or diag e x p l a i n $got ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 6/30
12. Минимальный пример
Пример положительного функционального теста
#! / u s r / b i n / p e r l −w
use s t r i c t ;
use T e s t : : More t e s t s => 1 ;
use E m a i l : : V a l i d ;
my $ e m a i l = ’ w o r l d . mind@yahoo . com ’ ;
my $ e x p e c t e d = $ e m a i l ;
my $ g o t = E m a i l : : V a l i d −>a d d r e s s ( $ e m a i l ) ;
i s ( $got , $ e x p e c t e d , " $ e m a i l must be v a l i d " ) ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 7/30
13. Запуск одного теста
TAP - Test Anything Protocol
Run test
$ perl t/simple-test.t
1..1
ok 1 - world.mind@yahoo.com must be valid
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 8/30
14. Запуск набора тестов
Run tests with Test:Harness
$ prove
t/simple-test.t .. ok
t/use.t .......... ok
All tests successful.
Files=2, Tests=2, 1 wallclock secs ( 0.02 usr 0.01 sys + 0.14 cusr
Result: PASS
Makefile - бывает удобнее
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 9/30
15. Тестирование исключений
Test::Exception
#! / u s r / b i n / p e r l −w
use s t r i c t ;
use F a t a l qw( open c l o s e ) ;
use T e s t : : More t e s t s => 1 ;
use T e s t : : E x c e p t i o n ;
my $ f i l e n a m e = ’ t h e _ n o t _ e x i s t e d _ f i l e ’ ;
throws_ok { open (my $fh , "<" , $ f i l e n a m e ) }
q r /No s u c h f i l e / ,
’ open ( ) w i t h bad f i l e name must throw e x c e p t i o n ’ ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 10/30
16. Генерация входных данных
Test::LectroTest::Compat
#! / u s r / b i n / p e r l −w
use s t r i c t ;
use T e s t : : More t e s t s => 1 ;
use T e s t : : L e c t r o T e s t : : Compat ;
my $ p r o p _ n o n n e g a t i v e = P r o p e r t y {
##[ x <− I n t ]##
cmp_ok ( abs ( $x ) , ’>= ’ , 0 ) ;
} , name => " a b s o u t p u t must be non− n e g a t i v e " ;
holds ( $prop_nonnegative ) ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 11/30
17. Что делать, если модуль взаимодействует с внешним миром?
Пишет/читает базу.
Обращается к web страницам/скриптам.
Пишет/читает memcache.
Вызывает SOAP/XML-RPC сервисы.
и т.п.
?
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 12/30
18. Mock/Stub/Fake
Mock модули общего назначения
Test::MockObject
Test::MockModule
Test::MockClass
Специализированные
DBD::Mock
Test::Mock::LWP
Cache::Memcached::Mock
и т.п.
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 13/30
19. Пример подмены модуля LWP I
#! / u s r / b i n / p e r l −w
use s t r i c t ;
use T e s t : : More t e s t s => 3 ;
use T e s t : : MockObject ;
use Cache : : Memcached : : F a s t ;
use l i b qw( l i b ) ;
my $server = ’ l o c a l h o s t :11211 ’ ;
my $key = ’ mykey ’ ;
my $value = ’ value ’ ;
my $newvalue = ’ newvalue ’ ;
BEGIN {
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 14/30
20. Пример подмены модуля LWP II
$_ = ’ MyMemcacheWrapper ’ ;
use_ok ( $_ ) ;
}
# moking Cache : : Memcached : : F a s t
my $memc_mock = T e s t : : MockObject −>new ( ) ;
T e s t : : MockObject −>fake_module ( ’ Cache : : Memcached : : F a s t ’ ,
new => sub { $memc_mock } ) ;
my $memcache = {
$key , $ v a l u e ,
};
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 15/30
21. Пример подмены модуля LWP III
$memc_mock−>mock (
’ get ’ ,
sub {
my ( $ s e l f , $ ke y ) = @_;
return $memcache −>{$ ke y } ;
}
);
$memc_mock−>mock (
’ set ’ ,
sub {
my ( $ s e l f , $key , $ v a l u e ) = @_;
$memcache −>{$ ke y } = $ v a l u e ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 16/30
22. Пример подмены модуля LWP IV
}
);
# g e t o u r w r a p p e r o b j e c t and memcached c o n n e c t i o n
my $mem_wrap = new_ok ( $_ , [ s e r v e r => $ s e r v e r ] ) ;
my $memcached = new Cache : : Memcached : : F a s t (
{ s e r v e r s => [ { a d d r e s s => $ s e r v e r } , ] , } ) ;
# check s e t
$mem_wrap−>s e t _ v a l u e ( $key , $ n e w v a l u e ) ;
i s ( $memcached−>g e t ( $ key ) , $n e w v a l u e ,
’ s e t _ v a l u e must s e t v a l u e i n memcache ’ ) ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 17/30
23. Нефункциональное тестирование
Автоматизированный code review
Почему?
Зачем?
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 18/30
24. Компилируется?
Test::Strict
#! / u s r / b i n / p e r l −w
use s t r i c t ;
use w a r n i n g s ;
use T e s t : : More ;
use T e s t : : S t r i c t ;
a l l _ p e r l _ f i l e s _ o k ( qw/ l i b t x t / ) ;
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 19/30
25. Соответствует соглашению о стиле кодирования?
Test::EOL
Test::NoTabs
Test::PerlTidy
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 20/30
26. Используются ли рекомендации из Perl Best Practice
Test::Perl::Critic
Test::Portability::Files
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 21/30
27. Не забыли ли чего? (инструменты в больном)
Test::Fixme
Test::NoBreakpoints
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 22/30
28. Метрики в норме?
Perl::Metrics::Simple
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 23/30
29. Есть ли документация?
Test::Pod
Test::Pod::Coverage
Test::Spelling
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 24/30
30. Есть ли нужное количество тестов?
Test::Strict (Devel::Cover)
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 25/30
31. Не стал ли код медленнее?
Test::Timer
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 26/30
32. Нет ли утечек памяти?
Test::Weaken
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 27/30
33. О чём говорит успешное прохождение таких тестов?
Код компилируется! Это уже успех!
Стиль кодирования соответствует заданному!
Выполняются хотя бы минимальные рекомендации из PBP!
Доделано всё, о чем были пометки!
Метрики сложности дают надежду на то, что код можно понять!
Была попытка написать документацию ко всем методам!
Есть тесты! И их количество соответствует запланированному!
Код ещё не самый тормозной!
Можно надеяться на то, что память не течёт!
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 28/30
34. Максимальный набор, все кроме последних двух не зависят от кода, можно
копипастить и запускать
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 29/30
35. Вопросы
QUESTIONS?
Исходники презентации (LaTeX, Beamer):
https://github.com/worldmind/perl-unit-testing-presentation-ru.git
Набор тестов:
https://github.com/worldmind/perl-test-code-quality-template.git
Feedback to:
ashrub@yandex.ru
Alexey Shrub, Российские интернет-технологии Unit testing for Perl 30/30