Особенности тестирования открытого ПО
DESCRIPTION
TRANSCRIPT
Специфика тестирования проектов с открытым исходным
кодомАлексей Лянгузов, Sun Microsystems SPB
План
• Введение• Понятия• Особенности тестирования• Минимизация усилий на тестирование• Польза открытости ПО для тестирования• Вопросы
Введение• Цели
– Поделиться опытом тестирования открытого ПО– Найти особенности тестирования открытого ПО– Рассказать “Чего избегать” и “К чему стремиться”– Показать, что тестирование зависит от ...– Обсудить высказывание: “Все ошибки становятся
заметны, если на них обращено достаточно много глаз”
– Разоблачить мнение, что свободные программы тестируют только разработчики и сообщество.
Спасибо интернету за картинки!Буду помечать особенности
Далее...
• Введение• Понятия• Особенности тестирования• Минимизация усилий на тестирование• Польза открытости ПО для тестирования• Вопросы
Свободное, бесплатное, открытое
Свободное, бесплатное, открытое
Свободное, бесплатное, открытое
Свободное, бесплатное, открытое
Собор vs Базар
Два типа разработки описанныхЭриком Реймондом в одноименном эссе.
http://lib.ru/LINUXGUIDE/bazar.txt_with-big-pictures.html
Наши продукты
https://cqme.dev.java.net/
https://jtharness.dev.java.net/
https://sigtest.dev.java.net/
JavaTest Harness Project
ME Framework Project
Signature Test Project
Рассматриваемая ситуация
Двойная лицензия
свободная коммерческая
Рассматриваемая ситуация
Двойная лицензия
свободная коммерческая
Нет функциональных различий (ну почти)
Рассматриваемая ситуация
Двойная лицензия
свободная коммерческая
Нет функциональных различий (ну почти)
Разработка прозрачна (принцип базара)
Далее...
• Введение• Понятия• Особенности тестирования• Минимизация усилий на тестирование• Польза открытости ПО для тестирования• Вопросы
Исходный код
1. Инспекция исходных текстов программы
2. Проверки, не зависящие от языка программирования и используемых технологий
3. Проверки, зависящие отязыка программированияи используемых технологий
Инспекция
Инспекция- Peer Review !
Написать кодНаписать код Сделать change logСделать change logОтправить рецензенту
и СС: email alias – для всех!
Отправить рецензенту и
СС: email alias – для всех!
ОК?ОК?Исправить кодИсправить код
Добавить кодв репозиторий
Добавить кодв репозиторий
ДАНЕТ
Проверки не зависящие от языка программирования
Опечатки
Плохие слова Непечатные символы
Унификация EOL
Одинаковыеимена файлов
Нежелательные словаи имена компаний
Проверки не зависящие от языка программирования
/* I write super kode !!! */c
Плохие слова Непечатные символы
Унификация EOLНежелательные словаи имена компаний
Одинаковыеимена файлов
Проверки не зависящие от языка программирования
Нажмите клавишу SHITF
/* I write super kode !!! */c
Непечатные символы
Унификация EOLНежелательные словаи имена компаний
Одинаковыеимена файлов
Проверки не зависящие от языка программирования
Нажмите клавишу SHITF
/* I write super kode !!! */c
Унификация EOLНежелательные словаи имена компаний
Одинаковыеимена файлов
Проверки не зависящие от языка программирования
Нажмите клавишу SHITF
/* I write super kode !!! */c
Нежелательные словаи имена компаний
Одинаковыеимена файлов
Проверки не зависящие от языка программирования
Нажмите клавишу SHITF
/* I write super kode !!! */c
Нежелательные словаи имена компаний
Проверки не зависящие от языка программирования
Нажмите клавишу SHITF
/* I write super kode !!! */c
/* Этот код закрывает уязвимость в коде компании Noname */
Проверки зависящие от языка программирования
Аудит исходного кода Check StyleFindBugs
XML Валидация документов против DTD, XSD, RNG.
Продукт,Репозиторий
Проверка правильности расположения исходных файлов и их целостность
Копирайты
х Отсутствие копирайта в файле
х Использование коммерческого копирайта вместо свободного копирайта
х Использование свободного копирайта вместо коммерческого копирайта
х Удаление или изменение чужого копирайта
1. Копирайты должны быть2. Копирайты должны быть правильными
Внутренняя информацияи инструменты
Proprietary Confidential
● Имена хостов или IP адреса● Имена пользователей, пароли● Сокращения и жаргон● Вещи имеющие трейдмарки (например лого, сплэш-скрин)● Инструменты “для внутреннего пользования”● Патентованые или “секретные” алгоритмы и сертификаты.
Инфраструктура
Новый дефект трэкер
Инфраструктура
Новый дефект трэкерНовые инструменты
Инфраструктура
Новый дефект трэкер
Осторожно, тормозит!
Новые инструменты
Инфраструктура
Новый дефект трэкер
Осторожно, тормозит!
Новые инструменты
Плохо контролируема
Культура
Контрибьютеры
Культура
Контрибьютеры
Нет группы поддержки (support)
Культура
Контрибьютеры
Нет группы поддержки (support)
Общение с комьюнити – форум, e-mail
Культура
Контрибьютеры
Нет группы поддержки (support)
Общение с комьюнити – форум, e-mailУ вашей фирмы есть секреты
Открытость тестирования
Нужно ли вам это?
Подготовка – Планирование – Инструменты – Результаты – Отчёты – Конфигурации - Данные
http://www.vocabahead.com/VocabularyVideos/Videos/TabId/59/VideoId/461/Default.aspx (unwieldy)
QAOpen Source
Готовы ли вы к этому?
Не касается модульных (unit) тестов!
Построение продукта (build)
Разные операционки
Построение продукта (build)
Разные операционки
Разные ключи запуска
Построение продукта (build)
Разные операционки
3rd party soft
Разные ключи запуска
Построение продукта (build)
Разные операционки
3rd party soft
Уникальное оборудование
Разные ключи запуска
Функциональное тестирование
При двойном лицензировании
Дано:1 лицензия → 1 продукт1 продукт → количество тестов Vи (объём тестирования)Vи = [v1, v2, … vn]
Надо:2 продукта → Vдл?
Функциональное тестирование
При двойном лицензировании
Ответ 1:Vдл = 2 * Vи
Ответ 2:Vдл = Va + Vb, где Va = [v1, v3, v5, …] , Vb = [v2, v4, v6, …]
Ответ 3:Vдл = ((Va1 + Vb1) + (Va2 + Vb2))/2, где Va1 = Va для продукта 1, Va2 = Va для продукта 2Vb1 = Vb для продукта 1, Vb2 = Vb для продукта 2
Функциональное тестирование
При двойном лицензировании
Мой Ответ:Vдл = Vобщ + Vx + Vy
Где:
Vобщ = [v1, v2, v3 … vk] # некий общий набор тестов
Vx = [vk+1, vk+2 … vm] # тесты для продукта 1
Vy = [vm+1, vm+2 … vn] # тесты для продукта 2
Специфика тестирования при двойной лицензии
Тестируйте разницу
Специфика продукта 1(свободный)
Специфика продукта 2(коммерческий)
Общее
Имена продуктов Номера версий Форма поставки (zip vs. installer) Наличие/отсутствие чего-нибудь (документация, примеры)
Специфика тестирования при двойной лицензии
Сдвигайте время релизов
tT1 = T2
tT1 ≠ T2
Поверьте, готовить к выпускудва очень похожих,но разных продукта
одновременнореально неудобно и ведет к ошибкам
Далее...
• Введение• Понятия• Особенности тестирования• Минимизация усилий на тестирование• Польза открытости ПО для тестирования• Вопросы
Минимизация усилий на тестирование
проще сложнее
Только свободный дистрибутив
Закрытость тестирования
Закрытость разработки
Закрытость исходного кодаи данных
Открытость исходного кода и данных
Открытость разработки
Открытость тестирования
Двойная лицензия и разные возможности
Далее...
• Введение• Понятия• Особенности тестирования• Минимизация усилий на тестирование• Польза открытости ПО для тестирования• Вопросы
Польза открытости ПОдля тестирования
Тестирование СообществоНаходит пробелы и ошибки в тестировании
Находит ошибки
Использует пользовательские данные, конфигурации
Предоставляет тестовые данные
Предоставляет описание тестов, сценарии и скрипты
Помогает проводить тестирование на своем
оборудовании
Приоритезирует и планирует тестирование
Предоставляет знание об использовании продукта
Закон Линуса
Given enough eyeballs, all bugs are shallow
Кто-то находит проблему. А кто-то еще ее понимает. И я часто замечаю, что поиск требует наибольшего навыка
Все ошибки становятсяВсе ошибки становятсязаметны, если на нихзаметны, если на нихобращено достаточнообращено достаточно
много глазмного глаз
Линус Торвальдс
Вопросы
Вопросы
• Сперва мои
Вопросы
• Сперва мои─Зачем проверять исходники?
Вопросы
• Сперва мои✔ Зачем проверять исходники?─Какие тесты невозможны?
Вопросы
• Сперва мои✔ Зачем проверять исходники?✔ Какие тесты невозможны?
• А теперь ваши !
Спасибо!
Alexey LyanguzovSoftware Quality SpecialistSun Microsystems, St. Petersburg