Диссертация (1090660), страница 19
Текст из файла (страница 19)
Для него был такжеподготовлен набор этих рецептов. Стоит особо отметить, что все рецепты отражаютнепосредственно серверную логику работы приложений и не содержат исходного кода, отвечающего за представление (а в BML это и вовсе не предусмотрено). Такимобразом, все рецепты следуют методологии MVC. Исходный код рецептов на языкеBML представлены в приложении B.Наименьший по количеству строк кода рецепт гостевой книги (53 строки на BML),следом за ним идёт система конференций (240 строк кода на BML) и самым громоздким получился форум (791 строка исходного кода на BML). Безусловно, на языке PHPколичество строк кода оказалось на порядок больше, но пропорционально каждомурецепту. Кратко поясним функционал каждого рецепта.Гостевая книга (приложение B.1) имеет систему авторизации для администраторов, разграничением прав доступа на управление записями для администраторов и114пользователей, ленту записей.
Любой пользователь может оставлять в гостевой книгесообщения.Система обработки заявок на конференции (приложение B.2) имеет разделениебольшого мероприятия на секции, каждая секция содержит некоторое количество заявок, а у каждой заявки есть определённое количество прикрепляемых файлов. Любаязаявка имеет свой статус (отклонена, одобрена, на доработку и т.п.), а также историюего изменений. Заявка может быть подана только авторизованным пользователем. Разграничены права доступа для администраторов, секретарей и участников. Есть страницы регистрации пользователя, подачи заявки, вывода программы конференции посекциям, различные служебные страницы редактирования информации.Форум (приложение B.3) имеет категории, каждая категория имеет темы, а в темахприсутствуют сообщения. Теме можеть быть присвоен статус «важная».
В сообщениях допустимо использовать «смайлы», коды которых автоматически преобразуются всоответствующие ссылки на графические изображения. Для любой темы может бытьсоздано голосование. Любому пользователю доступна система личных сообщений,реализованная нестандартными методами языка BML. Отличительная особенностьфорума заключается в его разветвлённой системе прав доступа. Реализованы следуюище разграничения: отдельные разрешения стоят на страницы администраторов,создание и редактирование сообщений, видимость категорий, административные категорий, отправку почты, изменение личных данных, полную блокировку доступа кресурсу.Проведение тестированияКак уже было сказано ранее, входными данными для метрик Холстеда являетсячисло операндов и операторов, причём отдельно считаются различные и отдельноповторяющиеся операторы и операнды. Значения для трёх рецептов представлены втаблице 3.5.Мы будем рассчитывать теоретическую длину программы по Холстеду, поскольку эта же характеристика по формуле Вайравана не предназначена для вычисленияпрограмм с большим объёмом.
На рисунке 3.2 показаны основные метрики, полученные в ходе подсчёта исходного кода каждого рецепта. Уже по ним можно понять,что рецепты на языке BML меньше, чем аналогичные рецепты на языке PHP. Стоитотметить, что на графике используется логарифмическая шкала и в проекте форумапоказана разница в 10 раз по объёму задействованных операторов и операндов. Этот115Таблица 3.5.
Вычисленные метрики ХолстедаПарам.1212′ОписаниеУникальные операторыУникальные операндыВсего операторовВсего операндовСловарь программыДлина программыТеоретическая длинаПравильностьОбъем программыУровень программыСложность программыИнформ. содержаниеУровень языкаГостевая книга КонференцииФорумPHPBMLPHP BMLPHPBML47201052916047493634093147025028187217731388481257207691783394878088196564451229008297488156396070717628213853627335647491663822531,101,750,901,060,941,05321390634839 4900 231579 175620,010 0,0520,004 0,016 0,0020,01299,28 19,17 275,32 61,43 477,82 82,8132,37 47,27 126,54 79,77 484,65 212,070,332,470,461,301,012,56показатель говорит о минимизации избыточности в исходном коде BML, что такжеувеличивает восприятие кода.100001000Гостевая книга (PHP)Конференции (PHP)Форум (PHP)Гостевая книга (BML)Конференции (BML)Форум (BML)100101Число уникальныхоператоровЧисло уникальныхоперандовОбщее числооператоровОбщее число операндовРисунок 3.2.
Начальные характеристики исходного кода рецептовНа рисунке 3.3 показаны сравнения фактических и расчётных длин программ. Данные характеристики идентичны между собой в пределах допустимой погрешности,что говорит о корректности написанных программ. Единственный случай, когда возникло расхождение – рецепт гостевой книги. Это объясняется тем, что язык BML116предназначен для бо́льших проектов и задействует избыточное количество сущностейс точки зрения небольшого рецепта.180001600014000Расчётные и фактическиедлины программ12000PHP (N)PHP (N’)10000BML (N)BML (N’)80006000400020000Гостевая книгаКонференцииФорумРисунок 3.3.
Сравнение расчётных и фактических длин рецептовНесмотря на то, что рецепт гостевой книги не прошёл проверку на корректность(оптимальность), он также показал приемлемый результат по сложности кодированияпрограммы и объёму. Стоит обратить внимание, что чем больше размер проекта, тембольше разница в метриках между двумя языками (рис. 3.4 и рис.
3.5).600500Сложность кодированияпрограммы400PHP (D)BML (D)3002001000Гостевая книгаКонференцииФорумРисунок 3.4. Вычисленная сложность кодирования программыБольшой интерес в рамках представленной работы вызывает характеристика уровня языка ( ). Высокий уровень языка говорит о его выразительности (рис. 3.6).117250000Объём программы200000PHP (V)BML (V)150000100000500000Гостевая книгаКонференцииФорумРисунок 3.5. Вычисленные объёмы рецептов3,00Уровень языка2,50PHP (Lяз.)BML (Lяз.)2,001,501,000,500,00Гостевая книгаКонференцииФорумРисунок 3.6.
Вычисленный уровень языка в зависимости от рецептаС другой стороны, высокая выразительность обеспечивается за счёт узкой специализированности, что характерно для DSL [33]. При этом излишне специфичныезадачи язык может не решить, хотя сам язык BML протестирован именно на тех рецептах, части которых могут использоваться в большинстве других, в меру типовыхпроектах.1183.4Выводы по главе 3В рамках исследования разработан комплексный метод оценки качества программного кода, применимый как для декларативного, так и для императивного программирования. Предлагается задействовать множество методик: с применением классических метрик, с проведением экспертной оценки, а также с измерением затрачиваемыхсистемных ресурсов.Для выявления важнейших критериев оценки предлагается использование метода анализа иерархий.
По результатам составленной модели и проведенному анализустановится ясно, что, хотя «набор рецептов» и не является наиболее важным критерием критерием, он служит основой для дальнейших экспериментов, включающихколичественную и качественную оценки.Таким образом, принято решение разработать три типовых рецепта и применитьк ним метрику Холстеда. Рецепты составлены на основе многолетнего опыта Webразработки и представления о востребованности подобных проектов в реальной жизни.
К таким рецептам были отнесены: гостевая книга, форум, научная конференция.В ходе разработки была продемонстрирована эффективность и выразительностьязыка BML по отношению к языку PHP. И несмотря на то, что выразительностьбыла показана на типовых рецептах, отдельные их части могут быть использованыдля реализации проектов другой конфигурации, что делает язык достаточно гибким,чтобы реализовать приемлемое количество разноплановых случаев в отрасли Webразработки.Разработан визуальный редактор, представляющий собой надстройку над языкомBML и предоставляющий следующий функционал: мастер создания проекта, редактор локаций и модели, редактор наборов, редактор блоков, конструктор прав доступа.119Глава 4Разработка программногокомплекса интерпретатораязыка BML и визуальногоредактора BlockSet4.0.1Требования к языку программирования и динамическойплатформеПри выборе языка программирования, мы руководствовались следующими основными критериями: быстродействие, минимальный расход памяти и эффективностьразработки.
Поскольку речь идет о разработке интерпретатора – программы, обрабатывающей большие объемы однотипных данных, решено было использовать компилируемый язык программирования как наиболее производительный. Следовательно,интерпретируемые языки вроде Perl, PHP, Python или Ruby для решения поставленной задачи не подходят, так как эффективность исполнения кода у них на несколькопорядков ниже.
Помимо этого, важным аспектом является гибкость в использовании протокола HTTP, прямая работа с системными вызовами, потоками и другиминизкоуровневыми сущностями. Выбор сократился до двух претендентов: C++ и Java.Последний имеет относительно низкий порог вхождения и высокую эффективностьразработки. Если говорить о скорости выполнения программ, то большая часть алгоритмов на C++ выполняется так или иначе быстрее, а в некоторых случаях сопоставимо по затрачиваемому времени. Однако Java значительно проигрывает C++120по критерию потребляемой памяти [29] за счет вовлечения дополнительного звена –Java-машины. В итоге программный модуль интерпретатора решено было исполнитьна языке C++.На этапе проектирования модуля возник ряд вопросов касаемо его места в архитектуре Web-сервера.
Перечень возможных вариантов невелик и ограничиваетсявыбором динамической Web-платформы [23]: CGI или FastCGI. Также существуеттехнология создания собственного модуля для Web-сервера, однако мы ее оставимза рамками данного исследования по причине отсутствия универсальности решения.Это означает, что при смене Web-сервера придется перестраивать архитектуру проекта заново, а учитывая тот факт, что каждый Web-сервер имеет свой собственный специфичный программный интерфейс (API), порог вхождения в технологию снижаетсядо минимума. Следовательно, могут возникнуть трудности при поиске специалистовсоответствующего профиля, способных поддержать программный код.4.0.2Анализ динамической платформы CGIИнтерфейс CGI (англ.
Common Gateway Interface) [70] является одним из первыхрешений, позволивших сделать Web-сервер динамическим. Он обеспечивает связьмежду внешней программой операционной системы и Web-сервером. Интерфейс исейчас является одним из самых распространенных для взаимодействия с внешнимиприложениями сервера. В числе его достоинств — относительная простота разработки. Входные данные подаются через стандартный поток ввода, а выходные возвращаются через стандартный поток вывода. Потоки данных и переменные окруженияможет обрабатывать любой распространенный язык программирования.
Запуск CGIпрограмм полностью поддерживается большинством серверов.Основной недостаток CGI обнаруживается на этапе исполнения: для обслуживания каждого пользователя создается отдельный экземпляр процесса, завершающийсяпо окончании работы приложения. Порождение нового экземпляра приложения сопровождается клонированием процесса Web-сервера (большой процесс), затем запускается внешняя программа в адресном пространстве клона.