Процесс разработки программы, называемый жизненным циклом программы, включает в себя шесть этапов, на каждом из которых выполняется определенная последовательность действий. Это — следующие этапы:
Анализ требований. При разработке программного обеспечения этот этап исключительно важен. Ошибки, допущенные на нем, даже при условии безупречного выполнения последующих этапов могут привести к тому, что разработанный программный продукт не будет соответствовать требованиям практики, сферы его применения. Для создания конкурентоспособных продуктов в ходе выполнения этого этапа должны быть получены четкие ответы на следующие вопросы:
Что должна делать программа?
В чем состоят реальные проблемы, разрешению которых она должна способствовать?
Что представляют собой входные данные?
Какими должны быть выходные данные?
Какими ресурсами располагает проектировщик?
Определение спецификаций. В определенной степени этот этап можно рассматривать как формулировку выводов, следующих из результатов предыдущего этапа. Требования к программе должны быть представлены в виде ряда спецификаций, явно определяющих рабочие характеристики будущей программы. В число таких характеристик могут входить скорость выполнения, объем потребляемой памяти, гибкость применения и др.
Ты Должен ЭТО Совмещать! ПРИНЦИПЫ и ОСНОВЫ Технического Анализа! Обучение Трейдингу!
Проектирование. На этом этапе создается общая структура программы, которая должна удовлетворять спецификациям; определяются общие принципы управления и взаимодействия между различными компонентами программы.
Кодирование. Заключается в переводе на язык программирования конструкций, записанных на языке проектирования.
Тестирование. На этом этапе производится всесторонняя проверка программы. Тестирование более подробно будет рассмотрено ниже.
Сопровождение. Это этап эксплуатации системы. Каким бы изощренным ни было тестирование программ, к сожалению, в больших программных комплексах чрезвычайно тяжело устранить абсолютно все ошибки. Устранение обнаруженных при эксплуатации ошибок – первейшая задача этого этапа. Однако это далеко не все, что выполняется при сопровождении.
Выполняемый в ходе сопровождения анализ опыта эксплуатации программы позволяет обнаруживать «узкие места» или неудачные проектные решения в тех или иных частях программного комплекса. В результате такого анализа может быть принято решение о проведении работ по совершенствованию разработанной системы. Кроме описанного выше сопровождение может включать в себя проведение консультаций, обучение пользователей системы, оперативное снабжение пользователей информацией о новых версиях системы и т.п. Качественное проведение этапа сопровождения в большой степени определяет коммерческий успех программного продукта.
16.5.2. Тестирование программы
Рассмотрим этап тестирования программ более подробно. Существуют три аспекта проверки программы на:
Проверка правильности удостоверяет, что программа делает в точности то, для чего она была предназначена. Математическая безупречность алгоритма не гарантирует правильности его перевода в программу. Аналогично, ни отсутствие диагностических сообщений компилятора, ни разумный вид получаемых результатов не дают достаточной гарантии правильности программы.
Анализ рынка перед запуском бизнеса. На что обратить внимание?
Как правило, проверка правильности заключается в разработке и проведении набора тестов. Кроме этого, для расчета программ иногда можно сверить получаемые решения с уже известным решением. В общем случае, нельзя дать общего решения для проведения проверки на правильность программы.
Проверка вычислительной сложности, как правило, заключается в экспериментальном анализе сложности алгоритма или экспериментальном сравнении двух алгоритмов и более, решающих одну и ту же задачу.
Проверка эффективности реализации направлена на отыскание способа заставить правильную программу работать быстрее или расходовать меньше памяти. Чтобы улучшить программу, пересматриваются результаты реализации в процессе построения алгоритма. Не рассматривая все возможные варианты и направления, приведем здесь некоторые полезные способы, направленные на увеличение скорости выполнения программ.
Первый способ основан на следующем правиле. Сложение и вычитание выполняются быстрее, чем умножение и деление. Целочисленная арифметика быстрее арифметики вещественных чисел. Таким образом, x+x лучше, чем 2*х, а i+0.5*j хуже, чем (2*i+j)*0.5. При выполнении операций над целыми числами следует помнить, что благодаря применению двоичной системы счисления умножение на числа, кратные двум, можно заменить соответствующим количеством сдвигов влево.
Второй способ заключается в удалении избыточных вычислений. Например, при вычислении корней квадратного уравнения можно искать x1,2 обычным способом:
Второй способ с использованием теоремы Виета экономит число извлечений корня, возведений в квадрат и умножений:
Третий способ проверки эффективности реализации основан на способности некоторых компиляторов строить коды для вычисления логических выражений так, что вычисления прекращаются, если результат становится очевидным. Например, в выражении АВС, если А имеет значение «истина», то переменные В и С уже не проверяются. Таким образом, можно сэкономить время, разместив переменные А, В, С так, чтобы первой стояла переменная, которая вероятнее всего будет истинной, а последней та, которая реже всего принимает истинное значение. Однако если роль переменной А будет играть вызов некоторой функции, то лучше было бы на первое место ставить переменную В (особенно если функция выполняет сложные и длительные вычисления).
Четвертый прием– исключение циклов:
Например, фрагмент (вычисление произведения матриц)
может быть заменен на следующий:
В данном примере выигрыш достигается, во-первых, за счет уменьшения количества циклов (два вместо трех), а во-вторых, за счет того, что введением временной переменной s уменьшено количество операций вычисления адресов элементов массива.
Пятый прием– развертывание циклов. Запись
можно переписать так:
Выигрыш в скорости вычислений вполне очевиден.
Это далеко не полный перечень способов оптимизации. Здесь приведены лишь самые очевидные из них. Следует, кроме того, заметить, что не всегда стоит увлекаться погоней за быстродействием, так как при этом чаще всего ухудшается удобочитаемость программ. В том случае, когда выигрыш получается «мизерный», вряд ли стоит предпочитать его ясности и читабельности программы.
Источник: studfile.net
Анализ производительности программного обеспечения при помощи математического планирования эксперимента
Приветствую всех пользователей Хабра!
Данная статья возникла как полезный побочный продукт моих научных изысканий. Буду рад, если идеи, изложенные ниже, покажутся для вас интересными и полезными, а еще лучше, если получат своё применение и дальнейшее развитие в реально существующих проектах.
- в инженерных и научных разработках, где часто производятся сложные длительные вычисления, а процессорное время на кластерных системах дорого и ограничено;
- в web-приложениях, в которых время генерации страницы критично для пользователя и напрямую зависит от объемов серверных мощностей;
- в встраиваемых программных продуктах, и т.д.
- продуктивность – объем информации, обрабатываемой системой в единицу времени;
- реактивность – время между предъявлением системе входных данных и появлением соответствующей выходной информации.
- – время обработки информации;
- – все параметры (факторы или влияющие факторы), которые прямым или косвенным образом могут влиять на производительность системы;
- – область определения i-го фактора, являющаяся ограничением задачи.
- объем оперативной памяти компьютера;
- скорость доступа к жесткому диску;
- максимальная частота работы и средняя загрузка процессора;
- настройки СУБД, и т.д.
Для поиска оптимальных значений влияющих факторов, т.е. для решения задачи оптимизации (1) можно предложить следующие варианты:
- полный перебор всех возможных комбинаций значений влияющих факторов;
- случайный выбор некоторого числа комбинаций и последующий выбор самого лучшего варианта;
- аналитическое исследование системы;
- применение специализированных программных средств;
- использование математических моделей.
Все перечисленные варианты имеют свои преимущества и недостатки. Используя полный перебор можно утверждать, что искомые параметры будут найдены, однако, при большом числе факторов и вариантов их значений число всех возможных комбинаций может быть слишком велико, а проведение экспериментов займет слишком много времени. Число всех возможных комбинаций N можно найти по комбинаторным правилам:
, где (2)
- – число вариантов значений i-го фактора.
Тогда уже при 5 факторах и 5 возможных значениях каждого фактора получим комбинаций.
При случайном выборе оптимальной комбинации велика вероятность того, что полученное решение будет очень далеко от глобального оптимума.
Аналитическое исследование системы часто или сложно или невозможно при анализе уже существующих продуктов, без исходного кода. К тому же, подобный подход требует полного понимания исследователем всех используемых в ПО алгоритмов, связей и зависимостей компонентов.
Специальные программные средства, такие как профилировщики [5] позволяют получить лишь некоторую статистическую информацию о выполнении программного кода: число вызовов методов, среднее время выполнения методов и т.д. Оптимизация в данном случае сводится к выявлению т.н. «узких мест» и оптимизации используемых алгоритмов. Подобный подход является достаточно популярным, но не позволяет получить искомое решение задачи (1).
Математические модели анализа производительности ПО неоднократно рассматривались зарубежными и отечественными авторами. Так в работах [1], [2] предложены оригинальные подходы к решению этой задачи на разных этапах разработки ПО.
Подводя итог, следует отметить, что основными недостатками предложенных методов решения являются:
- чрезмерно большое время проведения измерений;
- опора на способности исследователя, делающего выводы на основе анализа программы;
- сложность применения и использования.
Для преодоления перечисленных выше сложностей и решения поставленной задачи предлагается использовать аппарат, разработанный в теории математического планирования эксперимента (МПЭ).
Остановимся подробнее на вопросе применимости МПЭ к анализу производительности ПО. Одна из основных идей планирования эксперимента состоит в использовании для исследуемого объекта кибернетической абстракции черного ящика [3] (см. рис. 1).
Рис. 1. Абстракция черного ящика.
- воспроизводимость опытов;
- управляемость факторов;
- измеримость выходных характеристик и возможность выразить её одним числом;
- однозначность и совместимость факторов и т.д.
Этап 1. Анализ априорной информации.
- ПО является web-приложением, написанным на языке программирования PHP;
- ПО выполняется на web-сервере Apache, интерпретатор PHP подключен в качестве модуля;
- ПО использует СУБД MySQL для хранения данных;
- существует возможность включения кэширования данных средствами самого приложения.
Факторы с самыми большими значениями будут наибольшим образом влиять на выходную характеристику.
Этап 2. Выбор влияющих факторов.
В таблице 1 представлен набор влияющих факторов, выбранных в результате анализа априорной информации о ПО.
- web-сервер Apache + модуль PHP;
- web-сервер Nginx + php-fpm.
Этап 3. Выбор верхнего и нижнего уровня для факторов.
- +1 соответствует верхнему уровню фактора;
- -1 соответствует нижнему уровню фактора.
Этап 4. Составление матрицы планирования и проведение экспериментов.
В таблице 3 представлены результаты проведения серии экспериментов.
Таблица 3.
-1 | -1 | -1 | -1 | -1 | 6,909456902 | +1 | -1 | -1 | -1 | -1 | 6,956250343 |
-1 | -1 | -1 | -1 | +1 | 6,265920885 | +1 | -1 | -1 | -1 | +1 | 6,27117213 |
-1 | -1 | -1 | +1 | -1 | 1,046864681 | +1 | -1 | -1 | +1 | -1 | 1,049605346 |
-1 | -1 | -1 | +1 | +1 | 0,959287777 | +1 | -1 | -1 | +1 | +1 | 0,960128005 |
-1 | -1 | +1 | -1 | -1 | 6,922491238 | +1 | -1 | +1 | -1 | -1 | 6,94905457 |
-1 | -1 | +1 | -1 | +1 | 6,292138541 | +1 | -1 | +1 | -1 | +1 | 6,288483698 |
-1 | -1 | +1 | +1 | -1 | 1,047327693 | +1 | -1 | +1 | +1 | -1 | 1,048429732 |
-1 | -1 | +1 | +1 | +1 | 0,959178464 | +1 | -1 | +1 | +1 | +1 | 0,959984639 |
-1 | +1 | -1 | -1 | -1 | 6,947828159 | +1 | +1 | -1 | -1 | -1 | 6,944574752 |
-1 | +1 | -1 | -1 | +1 | 6,269961421 | +1 | +1 | -1 | -1 | +1 | 6,281574535 |
-1 | +1 | -1 | +1 | -1 | 1,047032595 | +1 | +1 | -1 | +1 | -1 | 1,047937875 |
-1 | +1 | -1 | +1 | +1 | 0,960076244 | +1 | +1 | -1 | +1 | +1 | 0,960813348 |
-1 | +1 | +1 | -1 | -1 | 6,954160943 | +1 | +1 | +1 | -1 | -1 | 6,952602925 |
-1 | +1 | +1 | -1 | +1 | 6,278223336 | +1 | +1 | +1 | -1 | +1 | 6,284795263 |
-1 | +1 | +1 | +1 | -1 | 1,048019483 | +1 | +1 | +1 | +1 | -1 | 1,047952991 |
-1 | +1 | +1 | +1 | +1 | 0,960559206 | +1 | +1 | +1 | +1 | +1 | 0,960591927 |
Этап 5. Анализ результатов.
Коэффициенты уравнения регрессии (3) могут быть найдены как
Результаты представлены в таблице 4 и на рис. 2.
Таблица 4.
3,97361211 | 0,0519711 | 0,0245041 | 0,0034686 | -2,9182692 | -0,2483070 |
Рис. 2. Коэффициенты уравнения регрессии.
Этап 6. Вывод.
Из рис. 2 видно, что основной вклад в время генерации web-страницы вносит фактор , характеризующий кэширование данных в приложении. Отрицательное значение коэффициента регрессии означает, что данный параметр уменьшает функцию отклика черного ящика. В нашем примере это означает уменьшение времени генерации страницы.
Строго говоря, такие результаты являются очевидными, так как включение кэширования данных приложением влечет за собой минимальное число запросов к СУБД. Таким образом, влияние параметров настройки СУБД становится несущественным. Полученные результаты подтверждают возможность использования МПЭ применительно к анализу производительности ПО.
В данной статье я попытался рассмотреть возможность применения существующего уже давно метода математического планирования эксперимента применительно к анализу производительности ПО. Такой подход позволяет преодолеть ряд трудностей, возникающих при анализе программных систем, выявить факторы, наиболее сильно влияющие на анализируемую характеристику, выявить зависимости между факторами.
Разумеется, представленная методология не претендует на замену существующих методов анализа производительности, например, профилирования. Однако существует ряд задач, в которых применение подобной техники способно существенно облегчить задачи исследователя.
Спасибо за внимание!
Список литературы
- Дубаков С.А. Информационная технология анализа производительности в процессе разработки программного обеспечения: дис. канд. техн. наук / Дубаков С.А. – Томск, 2005. – 135 с.
- Мойсейчук Л.Д. Разработка моделей и методов анализа производительности программного обеспечения на основе строго иерархических стохастических сетей Петри: дис. канд. техн. наук / Мойсейчук Л.Д. – Санкт-Петербург, 2002. – 152 с.
- Адлер Ю.П., Маркова Е.В., Грановский Ю.В. Планирование эксперимента при поиске оптимальных условий. – М.: Наука, 1976. – 279 с.
- ООО «Профессиональные Клубы». – URL:http://prof-club.ru/. Дата обращения: 25.09.2011.
- Касперски К. Техника оптимизации программ. Эффективное использование памяти. – СПб.: БХВ-Петербург, 2003. – 464 с.
- MySQL Server System Variables. – URL:http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html. Дата обращения: 25.09.2011.
Источник: habr.com
Основные этапы выполнения аналитической работы
Организация и проведение любой научно-исследовательского проекта обязательно сопровождается анализом конкретной проблемы, ситуации. Именно результаты аналитической работы служат основой для разработки эффективного решения, рекомендаций автора, обоснованием его позиции.
Организация и проведение любой научно-исследовательского проекта обязательно сопровождается анализом конкретной проблемы, ситуации. Именно результаты аналитической работы служат основой для разработки эффективного решения, рекомендаций автора, обоснованием его позиции.
Аналитическая работа свойственна не только студентам, но и уже практикующим специалистам. От правильной организации, точности действий и прогнозов может зависеть судьба предприятия в целом. Поэтому важно знать все нюансы, наиболее эффективные методики и пр.
Основные стадии аналитической работы
Любой научно-исследовательский проект имеет свои ограничения, ориентиры, а его результат должен способствовать решению актуальной и значимой проблемы. Для этого необходимо тщательно планировать каждый шаг.
Этап №1. Планирование аналитической работы.
Еще до проведения анализа ситуации необходимо ответить на ряд вопросов:
- Для чего необходимо провести анализ ситуации? (цель)
- Что именно будет исследоваться? (объект, предмет)
- Какие действия необходимо предпринять, чтобы оценить ситуацию/проблему? (задачи анализа)
- Какие данные необходимы для проведения анализа? (виды информации)
- Продолжительность аналитической работы (в какие сроки необходимо уложиться исследователю).
На этой стадии аналитик ставит ориентир, намечает основные мероприятия, которые будут способствовать прояснению и оценке ситуации, формирует график проведения аналитической работы, определяет необходимость привлечения дополнительных экспертов (делегирование полномочий), определяет подходящую методику анализа и пригодную для нее информационную базу. Важно учитывать период деятельности организации/объекта исследования, подвергаемый анализу (1 год, 2 года и пр.).
Нужна помощь преподавателя?