Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода по лабам.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
558.59 Кб
Скачать
  1. Лабораторная работа №4

Тема: Тестирование Web-приложений при помощи phpUnit

Цель работы: получить навыки установки библиотеки PHPUnit и написания с её использованием юнит-тестов для тестирования небольших Web-приложений.

    1. Теоретические положения

      1. Подготовка инструментов тестирования

  1. Установка PHP

Скачиваем дистрибутив php (installer): http://windows.php.net/download/. Запускаем установку. В поле выбора директории установки указываем директорию без пробелов в имени. Делаем custom тип установки, включаем PEAR раздел.

По завершению, проверяем установку: в cmd набираем php –v.

2)Установка PEAR

Заходим в директорию где был установлен php и выполняем  файл go-pear.bat

Устанавливаем, как system копию. Проверяем правильность всех 12-ти пунктов установки, путей к ресурсам. После установки запускаем сгенерированый в директории php PEAR_ENV.reg файл, для внесения изменений в реестр Windows.

Проверяем установлен ли PEAR: в cmd набираем pear version.

3)Установка phpUnit

Перед установкой обновляем PEAR библиотеки

pear update-channels

pear upgrade-all

Устанавливаем phpunit.

Добавляем новые каналы

pear channel-discover pear.phpunit.de

pear channel-discover components.ez.no

pear channel-discover pear.symfony-project.com

Устанавливаем: pear install phpunit/PHPUnit

Проверяем: phpunit --version

Подробнее: http://automated-testing.info/knowledgebase/article/ustanovka-selenium-phpunit

      1. Cоздание и запуск тестов в phpUnit

Название класса в тесте складывается из названия тестируемого класса плюс «Test». Класс для тестирования в большинстве случаев наследуется от PHPUnit_Framework_TestCase. Каждый тест является паблик-методом, название которого начинается с префикса «test».

Пример: Протестируем класс, вычисляющий степень числа.

MyClass.php

<?php

class MyClass {

public function power($x, $y)

{ return pow($x, $y);}

}

Для этого напишем тестовый класс

<?php

require_once 'PHPUnit/Framework.php';

require_once 'MyClass.php';

class MyClassTest extends PHPUnit_Framework_TestCase

{

public function testPower()

{ $my = new MyClass();

$this->assertEquals(8, $my->power(2, 3));

}}

Результаты выполнения теста:

$ phpunit MyClassTest

.

Time: 0 seconds

OK (1 test, 1 assertion)

Точка— это успешно пройденный тест. F(ailure) —тест не пройден.

      1. Провайдеры данных

PHPUnit предоставляет возможность выполнять тестирование на нескольких наборах данных с помощью провайдеров данных. Провайдер данных тоже является паблик-методом, который возвращает массив наборов данных для каждой итерации. Для использования провайдера необходимо указать его в теге @dataProvider к тесту.

MyClassTest.php

<?php

require_once 'PHPUnit/Framework.php';

require_once 'MyClass.php';

class MyClassTest extends PHPUnit_Framework_TestCase

{

/**

* @dataProvider providerPower

*/

public function testPower($a, $b, $c)

{

$my = new MyClass();

$this->assertEquals($c, $my->power($a, $b));

}

public function providerPower ()

{

return array (

array (2, 2, 4),

array (2, 3, 9),

array (3, 5, 243)

);

}

}

Результат запуска:

.F.

Time: 0 seconds

There was 1 failure:

1) testPower(MyClassTest) with data set #1 (2, 3, 9)

Failed asserting that <integer:8> matches expected value <integer:9>.

/home/user/unit/MyClassTest.php:14

FAILURES!

Tests: 3, Assertions: 3, Failures: 1.

      1. Assert-методы

Для проверки поведения тестируемых сценариев используется механизм утверждений, реализуемый assert-методами. Два самых простых — это assertFalse() и assertTrue(), они проверяют, является ли полученное значение false и true соответственно.

Базовые методы сравнения

  • assertTrue() / assertFalse()

  • assertEquals() / assertNotEquals()

  • assertGreaterThan()

  • assertGreaterThanOrEqual()

  • assertLessThan()

  • assertLessThanOrEqual()

  • assertNull() / assertNotNull()

  • assertType() / assertNotType()

  • assertSame() / assertNotSame()

  • assertRegExp() / assertNotRegExp()

Методы сравнения массивов

  • assertArrayHasKey() / assertArrayNotHasKey()

  • assertContains() / assertNotContains()

  • assertContainsOnly() / assertNotContainsOnly()

ООП специфичные методы

  • assertClassHasAttribute()/ assertClassNotHasAttribute()

  • assertClassHasStaticAttribute()/ assertClassNotHasStaticAttribute()

  • assertAttributeContains()/ assertAttributeNotContains()

  • assertObjectHasAttribute() / assertObjectNotHasAttribute()

  • assertAttributeGreaterThan()

  • assertAttributeGreaterThanOrEqual()

  • assertAttributeLessThan()

  • assertAttributeLessThanOrEqual()

Методы сравнения файлов

  • assertFileEquals() / assertFileNotEquals()

  • assertFileExists() / assertFileNotExists()

  • assertStringEqualsFile()/assertStringNotEqualsFile()

Методы сравнения XML

  • assertEqualXMLStructure()

  • assertXmlFileEqualsXmlFile() / assertXmlFileNotEqualsXmlFile()

  • assertXmlStringEqualsXmlFile() / assertXmlStringNotEqualsXmlFile()

  • assertXmlStringEqualsXmlString() / assertXmlStringNotEqualsXmlString()

Разное

  • assertTag()

  • assertThat()

      1. Механизм принадлежностей

Чтобы не создавать в каждом тесте экземпляр тестируемого класса, PHPUnit предоставляет механизм принадлежностей теста (fixtures). Установить их можно защищенным методом setUp(), который вызывается один раз перед началом каждого теста. После окончания теста вызывается метод tearDown(), в котором мы можем провести «сборку мусора».

MyClassTest.php

<?php

require_once 'PHPUnit/Framework.php';

require_once 'MyClass.php';

class MyClassTest extends PHPUnit_Framework_TestCase

{

protected $fixture;

protected function setUp()

{ $this->fixture = new MyClass (); }

protected function tearDown()

{ $this->fixture = NULL; }

/**

* @dataProvider providerPower

*/

public function testPower($a, $b, $c)

{

$this->assertEquals($c, $this->fixture->power($a, $b)); }

public function providerPower()

{

return array(

array(2, 2, 4),

array(2, 3, 8),

array(3, 5, 243));

}}

      1. Наборы тестов

Несколько связанных единой задачей тестов можно объединить в набор и запускать соответственно его. Наборы реализованы классом PHPUnit_Framework_TestSuite. Необходимо создать экземпляр этого класса и добавить в него необходимые тесты с помощью метода addTestSuite(). Так же с помощью метода addTest() возможно добавление другого набора.

SpecificTests.php

<?php

require_once 'PHPUnit/Framework.php';

// подключаем файлы с тестами

require_once 'MyClassTest.php';

class SpecificTests

{

public static function suite()

{

$suite = new PHPUnit_Framework_TestSuite('MySuite');

// добавляем тест в набор

$suite->addTestSuite('MyClassTest');

return $suite;

}

}

AllTests.php

<?php

require_once 'PHPUnit/Framework.php';

// подключаем файл с набором тестов

require_once 'SpecificTests.php';

class AllTests

{

public static function suite()

{ $suite = new PHPUnit_Framework_TestSuite('AllMySuite');

// добавляем набор тестов

$suite->addTest(SpecificTests::suite());

return $suite;

}}

      1. Дополнительные возможности

Часто возникает необходимость проверить не только расчеты и поведение сценария, но так же вывод и скорость отработки, для чего используются расширения PHPUnit_Extensions_OutputTestCase и PHPUnit_Extensions_PerformanceTestCase соответственно.

Некоторые тесты необходимо пропускать по каким-либо причинам. К примеру в том случае, когда на тестируемой машине отсутствует какое-либо расширение PHP, можно, убедившись в его отсутствии, пометить тест как пропущенный добавив к его коду следующее:

if (!extension_loaded('someExtension'))

{

$this->markTestSkipped('Extension is not loaded.'); }

В том случае, когда тест написан для кода, которого еще нет в сценарии (не редкая для TDD ситуация) его можно пометить как не реализованный с помощью метода markTestIncomplete().

      1. Тестирование приложений, работающих с базой данных

Для тестирования взаимодействия приложения с базой данных надо проделать следующие шаги:

• Очистка базы. При первом запуске мы не знаем в каком состоянии находится БД, поэтому мы обязаны «начать с чистого листа»;

• Вставка начальных данных (фикстур). Обычно приложению нужны какие-либо начальные данные, которые оно извлекает из базы для последующей обработки. именно их и надо вставить в только что очищенную базу;

• Собственно выполнение тестов и проверка результатов.

Если в случае обычного тест-кейса в PHPUnit Вы должны просто унаследовать класс PHPUnit_Framework_TestCase, то в случае с тестированием БД все несколько сложнее. Необходимо реализовать два абстрактных метода — getConnection() и getDataSet(). Первый необходим для установления соединения с базой, второй для заполнения базы таблицами и заполнения собственно таблиц.

Важно заметить, что getConnection() должен использовать PDO для подключения к базе, но Ваше приложение не обязано использовать PDO для запросов к базе. Соединение, устанавливаемое методом getConnection() используется лишь для подготовки БД к тестам и ассертов.

Начальное содержимое базы абстрагируется с помощью интерфейсов PHPUnit_Extensions_Database_DataSet_IDataSet и PHPUnit_Extensions_Database_ DataSet_IDataTable. Метод getDataSet() вызывается методом setUp() для получения и вставки фикстур. В примере мы использовали фабричный метод createFlatXMLDataSet() для получения датасета из XML-представления.

require_once "PHPUnit/Extensions/Database/TestCase.php";

class MyTest extends PHPUnit_Extensions_Database_TestCase

{

public function getConnection()

{ $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');

return $this->createDefaultDBConnection($pdo, 'testdb');

}

public function getDataSet()

{ return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/guestbook-init.xml');

}}

DataTables & DataSets — это абстракция для таблиц и записей в реальной БД. Довольно несложный механизм позволяет скрыть реальную БД за объектами, которые в свою очередь могут быть реализованы различными способами. Такая абстракция необходима для сравнения ожидаемого контента базы и реального. Ожидаемый контент может быть представлен в различных видах благодаря абстракции — например, XML, CSV, массивы PHP. Интерфейсы DataTable и DataSet позволяют проводить сравнение данных из источника ожидаемых с реальными из БД.

Также DataSet и DataTable используются для задания начального состояния базы данных перед выполнением теста.

Варианты датасетов:

1. Flat XML DataSet. Каждый элемент внутри корневого представляет собой одну запись из БД. Имя элемента должно соответствовать имени таблицы, а атрибуты и значения — поля и значения полей соответственно, например:

<?xml version="1.0" encoding="UTF-8" ?>

<dataset>

<post post_id="1" title="My First Post" date_created="2008-12-01 12:30:29" contents="This is my first post" rating="5" />

<post post_id="2" title="My Second Post" date_created="2008-12-04 15:35:25" contents="This is my second post" />

</dataset>

Это эквивалентно таблице post в БД с 2 записями.

Пустая таблица эквивалента пустому элементу. NULL-значения для записи представляются как отсутствие соответствующего атрибута (см. пример с blog, поле rating), однако, тут следует учесть один момент. Для flat XML DataSet структуру таблицы определяет первый элемент, т.е. если в первом элементе нет каких-либо атрибутов, а в последующих элементах для той же таблицы они есть, то эти атрибуты будут проигнорированы. Например, если в примере с таблице blog из первого элемента убрать атрибут date_created с его значением, то во втором элементе этот атрибут не будет учитываться и в таблице не будет поля date_created.

Использование с помощью метода createFlatXmlDataSet():

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function getDataSet()

{return $this->createFlatXmlDataSet ('myFlatXmlFixture.xml'); }}

2. XML DataSet. Таблица полностью представляется элементом <table>, в который вложены <column> для определения полей таблицы и <row> для представления записей. В свою очередь, в <row> могут быть вложены <value> для представления значащих полей и <null /> для NULL-значений.

<?xml version="1.0" encoding="UTF-8" ?>

<dataset>

<table name="post">

<column>post_id</column>

<column>title</column>

<column>date_created</column>

<column>contents</column>

<column>rating</column>

<row>

<value>1</value>

<value>My First Post</value>

<value>2008-12-01 12:30:29</value>

<value>This is my first post</value>

<value>5</value>

</row>

<row>

<value>2</value>

<value>My Second Post</value>

<value>2008-12-04 15:35:25</value>

<value>This is my second post</value>

<null />

</row>

</table>

</dataset>

Пустая таблица представляется как таблица без <row> элементов.

Использование с помощью метода createXMLDataSet():

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function getDataSet()

{ return $this->createXMLDataSet('myFlatXmlFixture.xml');

}}

3. CSV Data Set (Comma Separated Values — простейший формат для хранения таблиц).

post_id,title,date_created,contents,rating

1, My First Post,2008-12-01 12:30:29,This is my first post,5

2, My Second Post,2008-12-04 15:35:25,This is my second post,

Использование несколько сложнее чем в случае XML:

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function getDataSet()

{ $dataSet = new PHPUnit_Extensions_Database_DataSet_CsvDataSet();

$dataSet->addTable('post', 'post.csv');

return $dataSet;

}}

Для использования нам необходимо создать объект класса PHPUnit_Extensions_Database_DataSet_CsvDataSet. Конструктор принимает три аргумента, которые определяют формат CSV:

public function __construct($delimiter = ',', $enclosure = '"', $escape = '"'){}

После этого добавляем таблицы в датасет методом addTable — один файл — одна таблица.

4. PHP массивы

На данный момент нет стандартной реализации датасетов с помощью массивов, но ее нетрудно реализовать.

Предположим, что нам надо хранить датасеты в таком формате:

array(

'post' => array(

array(

'post_id' => 1,

'title' => 'My First Post',

'date_created' => '2008-12-01 12:30:29',

'contents' => 'This is my first post',

'rating' => 5

),

array(

'post_id' => 2,

'title' => 'My Second Post',

'date_created' => '2008-12-04 15:35:25',

'contents' => 'This is my second post',

'rating' => null

),

),

)

Реализация:

require_once 'PHPUnit/Extensions/Database/DataSet/AbstractDataSet.php';

require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableIterator.php';

require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTable.php';

require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableMetaData.php';

class ArrayDataSet extends PHPUnit_Extensions_Database_DataSet_AbstractDataSet

{ protected $tables = array();

public function __construct(array $data)

{

foreach ($data as $tableName => $rows) {

$columns = array();

if (isset($rows[0])) {

$columns = array_keys($rows[0]);

}

$metaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData ($tableName, $columns);

$table = new PHPUnit_Extensions_Database_DataSet_DefaultTable ($metaData);

foreach ($rows as $row) {

$table->addRow($row); }

$this->tables[$tableName] = $table;

} }

protected function createIterator($reverse = FALSE)

{

return new PHPUnit_Extensions_Database_DataSet_DefaultTableIterator ($this->tables, $reverse);

}}

Для своего датасета наследуем абстрактный датасет (который наследуют flat XML, XML, CSV и другие). В конструктор передаем оговоренный ранее массив. Как и в случае с flat XML структура таблицы определяется первой записью, но в данном случае это не критично, потому что имеется возможность явно указать NULL-значения. Структура определяется с помощью создания объекта PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData. После этого требуется создать собственно таблицу, передав в нее структуру и добавив записи в таблицу с помощью метода addRow(). Так же нам необходимо реализовать абстрактный метод createIterator, но в этом нет ничего сложного.

Использование:

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function getDataSet()

{

return new ArrayDataSet(array(

'post' => array(

array(

'post_id' => 1,

'title' => 'My First Post',

'date_created' => '2008-12-01 12:30:29',

'contents' => 'This is my first post',

'rating' => 5

),

array(

'post_id' => 2,

'title' => 'My Second Post',

'date_created' => '2008-12-04 15:35:25',

'contents' => 'This is my second post',

'rating' => null

),

),

));

}}

5. Query/Database Dataset

Для ассертов требуются не только ожидаемые датасеты, но и реальные из базы данных. В этом нам поможет QueryDataSet

$ds = new PHPUnit_Extensions_Database_DataSet_QueryDataSet ($this->getConnection());

$ds->addTable('post');

или с явным использованием запроса:

$ds->addTable('post', 'SELECT * FROM post ORDER BY post_id');

Также можно использовать существующее подключение для автоматического получения датасетов из существующих таблиц с помощью метода PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection::createDataSet() (это объект, создаваемого в getConnection()). Если не передавать параметр в createDataSet(), то будет создан датасет из всех существующих таблиц. Если передать в качестве параметра массив с именами таблиц в базе, то датасет будет создан только из этих таблиц.

      1. Replacement DataSet

Проблему NULL-значений для flat XML датасета (для CSV проблема та же — невозможно явно задать NULL-значение в фикстуре) можно решить с помощью специального декоратора — ReplacementDataSet:

require_once 'PHPUnit/Extensions/Database/DataSet/ReplacementDataSet.php';

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function getDataSet()

{ $ds = $this->createFlatXmlDataSet ('myFlatXmlFixture.xml');

$rds = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet ($ds);

$rds->addFullReplacement('##NULL##', null);

return $rds;

}}

Теперь можно использовать ##NULL## в XML для обозначения NULL-значения:

<?xml version="1.0" encoding="UTF-8" ?>

<dataset>

<post post_id="1" title="My First Post" date_created="2008-12-01 12:30:29" contents="This is my first post" rating="5" />

<post post_id="2" title="My Second Post" date_created="2008-12-04 15:35:25" contents="This is my second post" rating="##NULL##" />

</dataset>

      1. Фильтрация датасетов

В случае больших датасетов можно применить фильтрацию с помощью DataSetFilter:

require_once 'PHPUnit/Extensions/Database/DataSet/ReplacementDataSet.php';

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function testIncludeFilteredPost()

{

$dataSet =

$this->getConnection()->createDataSet();

$filterDataSet = new PHPUnit_Extensions_Database_DataSet_DataSetFilter ($dataSet);

$filterDataSet->addIncludeTables

(array('post'));

$filterDataSet->setIncludeColumnsForTable

('post', array('post_id', 'title'));

// ..

}

public function testExcludeFilteredPost()

{

$dataSet =

$this->getConnection()->createDataSet();

$filterDataSet = new PHPUnit_Extensions_Database_DataSet_DataSetFilter

($dataSet);

$filterDataSet->addExcludeTables(array('foo', 'bar', 'baz'));

$filterDataSet->setExcludeColumnsForTable

('post', array('date_created', 'rating'));

// ..

}}

В первом случае мы оставили в датасете только таблицу post и содержимое ее записей только для полей post_id и title. Во втором — мы исключили из датасета таблицы 'foo', 'bar' и 'baz', а из записей таблицы post убрали значения для полей 'date_created' и 'rating'.

Часто бывает необходимо проверить количество записей в таблице. Это можно сделать с помощью обычного assertEquals:

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function testAddEntry()

{

$this->assertEquals(2, $this->getConnection() ->getRowCount('post'));

$blog = new Blog();

$blog->addPost("My third post.", "This is my third post.");

$this->assertEquals(3, $this->getConnection() ->getRowCount('post'));

}}

Метод getRowCount() возвращает количество записей в указанной таблице.

Для сравнения таблиц используется метод assertTablesEqual():

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function testTables()

{

$queryTable = $this->getConnection()

->createQueryTable('post', 'SELECT * FROM post');

$expectedTable = $this

->createFlatXmlDataSet("myFlatXmlFixture.xml")

->getTable("post");

$this->assertTablesEqual($expectedTable, $queryTable); }}

Необходимо помнить о том, что тест может провалиться при проверке даты — если у вас в фикстуре есть установленная дата, а в базу записывается текущее время, то Вы получите фейл, если эти даты не совпадают. Поэтому зачастую из ожидаемого результат убирают даты и, соответственно, изменяют получение реального датасета:

$queryTable = $this->getConnection()

->createQueryTable('post', 'SELECT post_id, title, date_created, contents, rating FROM post');

И наконец, можно сравнивать непосредственно датасеты с помощью assertDataSetsEqual():

class MyTestCase extends PHPUnit_Extensions_Database_TestCase

{

public function testTables()

{

$dataSet = $this->getConnection()

->createDataSet(array('post'));

$expectedDataSet = $this

->createFlatXmlDataSet("myFlatXmlFixture.xml");

$this->assertDataSetsEqual($expectedDataSet, $dataSet);

}}

    1. Требования к выполнению работы

1. Установить расширение PEAR для PHP (считается, что пакет Денвер, содержащий Apache, PHP и MySQL, уже установлен).

2. Согласно варианту задания написать веб-приложение на языке php, работающее с базой данных. Приложение должно обеспечивать просмотр, добавление новых данных в базу, удаление и редактирование данных из базы.

3. Разработать тестовый класс для тестирования работы с базой данных веб-приложения.

4. Перейти в директорию с тестовым классом и выполнить тестирование (запускать команду в терминале):

phpunit.php <имя теста> (например, phpunit.php MessageTest)

5. Выполнить анализ полученных результатов

    1. Содержание отчёта

1. Титульный лист, цель, задание на лабораторную работу, требования к ее выполнению.

2. Спецификации входных переменных, тестовые классы и наборы.

3. Исходные коды тестируемого и тестового классов.

4. Результаты выполнения тестов.

5. Выводы или анализ результатов работы.

    1. Варианты заданий

1. Успеваемость студентов

Студенты: ФИО, факультет, группа, кафедра, изучаемые предметы, оценки, задолженности, стипендия.

Учебные курсы: название, описание, семестр(ы), форма отчётности, число часов.

2. Библиотека.

Книги: авторы, название, раздел УДК, место и год издания, издательство, количество страниц, вид издания (книги, учебники, брошюры, периодические издания).

Читатели: номер читательского билета, ФИО, год рождения, адрес, дата записи, вид (студент, аспирант, преподаватель, сотрудник), курс, номер группы, названия взятых книг и даты их выдачи.

3. Бухгалтерия компании.

Сотрудники: ФИО, паспортные отдел, должность, размер зарплаты, форма зарплаты (почасовая, фиксированная).

Начисления: дата, сотрудник, начислено, налоги.

4. Проекты

Проекты: название, дата начала, дата окончания, размер финансирования, тип финансирования (периодический, разовый), задачи и их исполнители.

Исполнители: ФИО, паспортные данные, фотография, дом. и моб. телефоны, отдел, комната, должность, размер зарплаты, форма зарплаты (почасовая, фиксированная).

5. Отдел поставок предприятия

Поставщики: название компании, ФИО контактного лица, расчётный счёт в банке, телефон, факс, поставляемое оборудование (материалы), даты поставок (по договорам и реальные), метод и стоимость доставки.

Поставки: тип, марка, время задержки, цена.

6. Расписание поездов

Рейс: номер, направление, время отправки, время прибытия на конечный пункт, категория поезда.

Поезда: рейс, количество вагонов общих, спальных, купейных, плацкартных, наличие ресторана, ФИО начальника.

7. Магазин (внутренний учет).

Продажи: товар, поставка из магазина или со склада, количество и общая стоимость товаров, размер скидки, тип скидки, форма оплаты (наличными, оплата счёта, по карточке), необходимость доставки, стоимость и тип доставки, адрес доставки.

Товары: категория, модель, название производителя, адрес производителя, цена, количество в магазине и на складе.

8. Электронный магазин (информация для клиентов).

Товары: категория, модель, производитель, цены, есть ли в наличии, описание, характеристики, внешний вид; магазины, где можно купить товар, их телефоны и адреса; аксессуары, их цены и где их купить.

Магазины: название, компания-владелец, её юридический адрес и home-site, контактные телефоны, адрес, схема проезда, эмблема; товары и цены на них).

9. Пункт проката видеозаписей (внутренний учет).

Видеокассеты: идентификационный номер видеокассеты, тип видеокассет, общая длительность записей; записи видеокассет.

Клиенты: ФИО, паспортные данные, адрес, телефон; заказы, т.е. взятые видеокассеты (сейчас и в прошлом): номер, дата выдачи, дата возвращения, общая стоимость заказа.

10. Кинотеатры (информация для зрителей).

Фильмы: название, описание, жанр (категория), длительность, популярность (рейтинг, число проданных билетов в Украине и в мире), показывается ли сейчас (сегодня, на текущей неделе), в каких кинотеатрах показывается, цены на билеты (в т.ч. средние).

Кинотеатры: название, адрес, схема проезда, описание, число мест, акустическая система, широкоэкранность, фильмы и цены на них: детские и взрослые билеты в зависимости от сеанса (дневной, вечерний и т.п.) и от категории мест (передние, задние и т.п.); сеансы показа фильмов (дата и время начала).

11. Ресторан (информация для посетителей).

Меню: дневное или вечернее, список блюд по категориям.

Блюда: цена, название, вид кухни, категории (первое, второе и т.п.; мясное, рыбное, салат и т.п.), является ли вегетарианским, время приготовления, есть ли в наличии.

12. Кулинарная книга

Блюда: цена, название, вид кухни, категории (первое, второе и т.п.; мясное, рыбное, салат и т.п.), компоненты блюда, время и способ приготовления.

Компоненты блюд: тип (гарнир, соус, мясо и т.п.), калорийность, цена, рецепт, время приготовления, есть ли в наличии, ингредиенты (продукты) и их расходы на порцию.

13. Компания по разработке и сопровождению программного обеспечения.

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

14. Ремонт товаров

Заказы: тип заказа (гарантийный ремонт, негарантийный ремонт), общая стоимость, скидка, товар(ы), их изготовители, модели (марки), серийные номера, описание неисправностей, необходимые ресурсы, клиент, дата получения заказа, срок завершения, дата выставления счёта и его оплаты, метод оплаты, дата поставки, метод и стоимость доставки.

Ресурсы: ФИО, отдел(ы) и телефон(ы) исполнителя(ей), число рабочих часов для выполнения заказа, ставка зарплаты, ответственный за выполнение заказа, необходимое оборудование и расходные материалы, их количество и стоимость, а также наличие материалов на складе.

15. Поселение в лечебный санаторий:

Путевки: название, продолжительность путевки (количество дней), дата заезда, тип места, отдыхающий, направления на процедуры.

Процедуры: название, краткое и полное описание, вид процедуры, показания(заболевания, при которых процедура показана), противопоказания (заболевания, при которых процедура противопоказана),

Отдыхающий: ФИО, паспортные данные, пол (мужской/женский), возраст, заболевания.

16. Расписание занятий для студентов:

Группа: название, факультет, кафедра, староста, количество человек в группе, форма обучения.

Дисциплина: название, факультет(ы), групп(ы), кафедра, семестр(ы), форма отчётности, число часов.

Занятия: день занятия, неделя (верхняя/нижняя), пара (1-я, 2-я, … 5-я), название дисциплины, ФИО преподавателя, вид занятия (лекция, лабораторная работа, практическое занятие).

17. Лечение в стационаре больницы:

Больной: ФИО, паспортные данные, диагноз, палата, процедуры, лечащий врач, анализы и обследования, переводы из палаты в палату.

Процедуры: название, место проведения процедуры, дата, больной, по назначению какого врача.

18. Штатное расписание предприятия.

Сотрудник: ФИО, дата рождения, образование, должность, отдел/цех, дата поступления, дата увольнения, причина увольнения.

Штат: должность, оклад, требуемый уровень образования.

19. Учет багажа в камере хранения.

Пассажир: ФИО, рейс, дата, время рейса.

Багаж: пассажир, вес, количество мест, время приема, время выдачи, состояние багажа.

20. Учет выполнения проектов

Проекты: название, дата начала, дата окончания, размер финансирования, тип финансирования (периодический, разовый).

Акты: Дата, исполнитель, объем работ (в грн.), проект.

21. Учет товара на складе

Товар: название, группа, единицы измерения, цена.

Документ дата, номер документа, предприятие, приход/расход/перемещение, товар, количество.

22. Нагрузка преподавателей

Преподаватели: ФИО, адрес, факультет, кафедра, читаемые дисциплины оценки, задолженности, стипендия.

Учебные курсы: название, описание, групп(ы), семестр(ы), форма отчётности, число часов.

23. Учет комплектующих.

Изделие: название, срок изготовления, код изделия,

Комплектующие: наименование, код, производитель, изделие, количество.

24. Отдел заказов некоторой фирмы.

Клиенты: название компании, ФИО контактного лица, адрес выставления счёта, адрес доставки, телефон, факс.

Заказы: тип заказа (покупка, гарантийный ремонт, негарантийный ремонт), общая стоимость, скидка, товар(ы), их изготовители, модели (марки), серийные номера, описание неисправностей, необходимые ресурсы, клиент, дата получения заказа, метод оплаты, дата поставки, метод и стоимость доставки.

25. Путеводитель.

Компании: название, телефоны и адреса; вид деятельности, схема проезда, эмблема.

Магазины: название, компания-владелец, адрес; схема проезда, товары и цены на них.

26. Учет видеозаписей.

Фильмы: название, вид фильма (боевик, комедия и т.п.), длительность, режиссер, кинокомпания, актеры.

Видеокассеты: идентификационный номер видеокассеты, тип видеокассет, общая длительность записей; фильмы.

27. Кулинарная книга.

Рецепты: название, килокалории, время приготовления, выход продукта, себестоимость.

Продукты: цена, название, калории, рецепт, количество.

28. Учет программного обеспечения.

Программы: наименование, разработчик, объем кода, время выполнения, дата выпуска.

Тесты: наименование, назначение, программа, тестовый набор, дата проведения, результаты прогона теста.

29. Учет проживающих в общежитии:

Жильцы: ФИО, пол (мужской/женский), возраст, семейное положение, количество детей, номер комнаты.

Комнаты: номер, этаж, площадь, мебель.

30. Учет больных в манипуляционном кабинете:

Больной: ФИО, диагноз, лечащий врач, дата начала процедур, дата окончания лечения.

Процедуры: название, место проведения процедуры, дата, больной, время, длительность процедуры.

31. Учет зарплаты

Сотрудник: ФИО, дата рождения, образование, должность, отдел/цех, дата поступления, оклад, дата увольнения, причина увольнения.

Зарплата: сотрудник, месяц, год, начислено, налоги.

32. Учет авиапассажиров

Пассажиры: ФИО, возраст, номер рейса, дата вылета.

Рейсы: номер, вид самолета, время вылета, дни недели, командир, члены экипажа.

33. Отдел кадров компании.

Сотрудники: ФИО, паспортные данные, фотография, дом. и моб. телефоны, отдел, комната, должность, размер зарплаты, форма зарплаты (почасовая, фиксированная).

Отделы: название, адрес, телефон(ы), начальник, размер финансирования.

34. Учет компьютеров

Компьютеры: номер, монитор, процессор, объем памяти, объем жесткого диска, аудитория.

Аудитории: номер, кафедра, ответственный, количество компьютеров, количество посадочных мест, площадь.

35. Нагрузка преподавателей

Преподаватель: фамилия, имя, отчество, паспортные данные, кафедра, факультет, должность, ученая степень, число ставок (0.5 ставки, 1 ставка, 1.5 ставки).

Учебный план: преподаватель, количество лекций, лабораторных, практических занятий, НИРС, консультаций, модульных контролей, зачетов, часов на руководство дипломниками и магистрами в весеннем и летнем семестре:

Дисциплины: название, группа(ы), вид контроля.

36. Учет тепличных растений

Растения: наименование, вид растения, режим ухода (периодичность полива, температура), дата посадки.

Урожай: растение, дата сбора, вес собранных фруктов (овощей).

37. Расписание поездов

Рейс: номер, направление, время отправки, время прибытия на конечный пункт, категория поезда.

Поезда: рейс, количество вагонов общих, спальных, купейных, плацкартных, наличие ресторана, ФИО начальника.

Список литературы

  1. Липаев В.В. Тестирование программ. – М.: Радио и связь, 1986. – 296с.

  2. Канер С., Фолк Дж., Нгуен Енг. Тестирование программного обеспечения. – К: ДиаСофт, 2000 – 544с.

  3. Шимаров В. А. Тестирование программ: цели и особенности инструментальной поддержки // Программное обеспечение ЭВМ / АН БССР. Институт математики. - Минск, 1994. - Вып. 100 - с. 19 – 43

  4. Вигерс Карл. Разработка требований к программному обеспечению/Пер, с англ. — М.: Издательсько-торговый дом . Русская Редакция, 2004. —576с.

  5. Роберт Калбертсон, Крис Браун, Гєри Кобб. Быстрое тестирование. Издательский дом «Вильямс».

  6. Майерс Г. Искусство тестирования программ // М.: Финансы и статистика, 1982. -176 с., Beizer B. Software testing techniques. (Second edit.) //International Thomson Computer Press, 1990. - 550p.

  7. Макгрегор Дж, Сайкс Д. Тестирование объектно-ориентированного программного обеспечения. – К: Диасофт, 2002. – 432с.