Меню
Главная
Авторизация/Регистрация
 
Главная arrow Прочее arrow Государственный экзамен arrow
Типографика

Расширение функциональных возможностей библиотеки

Расширение возможностей библиотеки осуществляется посредством написания новых модулей, при необходимости наследующих функционал существующих модулей. Новый модуль должен удовлетворять ряду требований, перечисленных ниже.

Все файлы нового модуля должны находиться внутри каталога, название которого совпадает с именем класса этого модуля (листинг 3.2). Код класса модуля на языке PHPразмещается в этом каталоге в одноимённом файле. Сам каталог впоследствии будет размещён внутри папки с именем «Module». Описание параметров настроек модуля помещается в отдельный каталог «_config» вPHPфайл с именем «schema. php». Данные с примерами для модульных тестов также помещаются в отдельный каталог «_data» вJSONфайл с именем «tests. json».

  • 01.
  • 02.
  • 03.

./library/Typo/Module/NewModule/_config/schema. php

./library/Typo/Module/NewModule/_data/tests. json

./library/Typo/Module/NewModule/NewModule. php

Листинг 3.2. Список файлов для нового модуля NewModule

Сценарий с описанием параметров настроек модуля (листинг 3.3) возвращает массив, в котором указаны имена параметров, их текстовые описания, типы, значения по умолчанию, массив допустимых значений (опционально) и массив псевдонимов (опционально). В качестве типа может быть указан смешанный (mixed), логический (bool), целочисленный (int), вещественный (real) тип данных, строка (string) или массив (например, массив строкstring[]).

  • 01.
  • 02.
  • 03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

17.

18.

19.

20.

<?php

return array(

'options' => array(

// '<название параметра>' => array(

// 'desc' => '<Текстовое описание параметра>',

// 'type' => '<Тип параметра>',

// 'default' => '<Значение параметра по умолчанию>',

// 'aliases' => array(<Псевдонимы>),

// 'allowed' => array(<Допустимые значения>),

// ),

'param' => array(

'desc' => 'Примерпараметра',

'type' => 'bool',

'default' => true,

),

// ...

),

);

Листинг 3.3. Файл schema. phpс описанием параметров настроек нового модуля

Данные с примерами для модульных тестов, объединённые в группы, хранятся в формате JSON. Несмотря на происхождение отJavaScript, формат считается независимым и может использоваться практически с любым языком программирования. Каждый пример включает в себя текстовое описание (опционально), входные данные и ожидаемый результат их обработки (листинг 3.4).

  • 01.
  • 02.
  • 03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

17.

{

"tests": [

{

"desc": "<Описание группы тестовых примеров>",

"group": [

{

"desc": "<Описание тестового примера>",

"input": "<Пример входных текстовых данных>",

"expected": "<Ожидаемый результат обработки текста>"

},

...

]

},

...

]

}

Листинг 3.4. Файл tests. jsonс примерами дляunit-тестов нового модуля

Код класса модуля (листинг 3.5) на языке PHPразмещается в одноимённом файле. Класс нового модуля должен быть наследником классаModuleиз пространства имёнTypoModule. В свойстве классаModule::$_orderмогут быть заданы приоритеты выполнения стадий. Реализация самих стадий осуществляется внутри соответствующих «stage» методов.

  • 01.
  • 02.
  • 03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

<?php

namespace TypoModuleNewModule;

use TypoModuleModule;

class NewModule extends Module

{

// Приоритетывыполнениястадий

static protected $_order = array(

'A' => 0,

'B' => 0,

'C' => 0,

'D' => 0,

'E' => 0,

'F' => 0,

);

public function stageA() { }

public function stageB() { }

public function stageC() { }

public function stageD() { }

public function stageE() { }

public function stageF() { }

}

Листинг 3.5. Файл NewModule. phpс классом нового модуля

3.5. Тестирование

В любой современной методологии разработки ПО тестирование является неотъемлемой частью процесса, а значимость написания тестов не ниже значимости написания кода.

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

Модульное тестирование осуществлялось с использованием фреймворка phpUnit, созданного Себастьяном Бергманом. Для того чтобы написать минимальный набор тестов, используяphpUnit, необходимо:

  1. Подключить библиотеку, доступную бесплатно на официальном сайте фреймворка (www. phpunit. de).

  2. Создать подкласс базового класса TestCase.

  3. Добавить в него произвольное количество тестирующих методов, названия которых начинаются с «test», в которых будут вызываться методы тестируемого класса. На вход будут подаваться заранее известные параметры, а результат сравнивается с эталонным посредством семейства методов «assert», унаследованного тестовым классом отTestCase. Метод assertEquals проверяет ожидаемый и реально полученный результат на равенство;assertTrueпроверяет, имеет ли параметр значение «true» и т. д.

  4. Создать класс PHPUnit_TestSuite, передав в качестве параметра название класса с набором тестов.

  5. Запустить набор тестов и вывести результат.

Каждый модуль типографа дополнительно тестируется на специально подобранных группах тестовых примеров, подобных тем, что были представлены в таблице 2.5 и использованы для тестирования работоспособности существующих аналогов данного типографа. Тестовые данные примеров и ожидаемые результаты хранятся в JSONфайлах, которые считываются в момент запуска тестовых классов (листинг 3.6).

  • 01.
  • 02.
  • 03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

17.

18.

19.

20.

21.

22.

23.

24.

25.

{

"tests": [

...

{

"desc": "#B10 Расстановка апострофов",

"group": [

{

"input": "Жанна д'Арк, д'Артаньян",

"expected": "Жанна д&#700;Арк, д&#700;Артаньян"

},

{

"input": "Пользоваться E-mail'ом",

"expected": "Пользоваться E-mail&#700;ом"

},

{

"input": "Кот-д'Ивуар",

"expected": "Кот-д&#700;Ивуар"

},

...

]

},

...

]

}

Листинг 3.6. Фрагмент JSONфайла с тестовыми примерами для модуляPunct

Выводы по главе 3

В последней главе настоящей работы был описан процесс проектирования, разработки, использования и тестирования типографа – библиотеки для автоматизации подготовки текстов к публикации в Интернете. Целью данной разработки являлось создание нового инструмента, лишённого недостатков существующих аналогов. Созданный инструмент, в отличие от своих предшественников, имеет модульную структуру, позволяющую разработчикам независимо развивать данный типограф.

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

 
Оригинал текста доступен для загрузки на странице содержания
< Пред   СОДЕРЖАНИЕ СКАЧАТЬ   След >
 

СКАЧАТЬ ОРИГИНАЛ
Типографика
Введение1. Основные понятия экранной типографики1.2. Правила экранной типографики1.2.1. Общие правила оформления текста1.2.3. Правила расстановки пробелов и пробельных символов1.2.4. Правила расстановки дефисов, минусов и тире1.2.5. Правила расстановки переносов строки иобразования неразрывных конструкций1.2.6. Правила оформления гиперссылокВыводы по главе 12. Исследование средств автоматизацииподготовки текстов к публикации в Интернете2.1. Обзор средств автоматизацииподготовки текстов к публикации в Интернете2.1.1. Типограф студии Артемия Лебедева2.1.2. Типограф Евгения Муравьёва2.1.3. Типограф Евгения Лепёшкина2.1.4. Типограф студии «RMCreative»2.1.5. Типограф студии «Вито»2.1.6. Типограф «Jevix»2.1.7. Прочие типографы2.2. Сравнительный анализ средств автоматизацииподготовки текстов к публикации в ИнтернетеВыводы по главе 23. Разработка типографа3.1. Проектирование3.2. Системные требования3.3. Настройка параметров3.4. Расширение функциональных возможностей библиотекиВыводы по главе 3ЗаключениеБиблиографический список