Средства реализации программного кода

На этапе реализации программного кода выполняется кодирование отдельных компонент программы в соответствии с разработанным техническим проектом. Средства, которые могут быть применены, в значительной степени зависит от того, какие подходы были использованы во время проектирования и, кроме этого, от степени проработанности технического проекта. Тем не менее, среди средств разработки программного кода необходимо выделить следующие основные виды средств (в скобках приведено примеры средств): • методы и методики алгоритмирования.

· языки программирования (C++,Си, Java, C#, php и многие другие);

· средства создания пользовательского интерфейса (MFC, WPF, QT, GTK+ и т.д.)

· средства управления версиями программного кода (cvs, svn, VSS).

· средства получения исполняемого кода (MS Visual Studio, gcc и многие другие).

· средства управления базами данных (Оracle, MS SQL, FireBird, MySQL и многие другие).

· отладчики (MS Visual Studio, gdb и т.д.).

Средства тестирования программ

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

· Тестирование на отказ и восстановление.

· Функциональное тестирование.

· Тестирование безопасности.

· Тестирование взаимодействия.

· Тестирование процесса установки.

· Тестирование удобства пользования.

· Конфигурационное тестирование.

· Нагрузочное тестирование.

Среди основных видов средств, которые могут быть применены для выполнения поставленных работ можно привести следующие:

· средства анализа кода, профилирования (Code Wizard – ParaSoft, Purify – Rational Softawre. Test Coverage – Semantic и т.д.);

· средства для тестирования функциональности (TEST – Parasoft, QACenter – Compuware, Borland SilkTest и т.д.);

· средства для тестирования производительности (QACenter Performance – Compuware и т.д).

2.Группы инструментальных средств.

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

a) необходимые – те, без которых невозможно в принципе получить исполняемый код;

К необходимым можно отнести:

- редакторы текстов;

- компиляторы и ассемблеры;

- компоновщики или редакторы связей (linkers);

b) часто используемые – средства, использования которых, в отличие от необходимых, можно избежать. Но без них процесс разработки весьма затрудняется и удлиняется;

Из часто используемых средств стоит назвать:

- утилиты автоматической сборки проекта;

- отладчики;

- программы создания инсталляторов;

- редакторы ресурсов;

- профилировщики;

- программы поддержки версий;

- программы создания файлов помощи (документации).

c) специализированные – используются в исключительных случаях, решают довольно специфичные задачи:

- программы отслеживания зависимостей;

- дизассемблеры;

- декомпиляторы;

- hex-редакторы;

- программы отслеживания активности системы и изменений, происходящих в системе;

- программы-вериферы и контейнеры (создают виртуальную среду для отдельных классов программ, в которой можно исследовать поведение программы)

- и т.д.

d) интегрированные среды – содержат большую часть из приведенных выше программ и позволяют осуществлять

В каждом классе существуют огромное число продуктов, каждый со своими особенностями, достоинствами и недостатками.

Дадим краткую характеристику названным классам программ и приведем некоторые критерии оценки, по которым можно сравнивать программы из одного класса.

Но сначала укажем на характеристики, универсальные для всех программ:

- фирма-производитель, автор (зачастую имя производителя значит больше, чем все остальное).

- название продукта;

- номер последней версии;

- класс продукта, который установил для него производитель (например, HackersViewer, который включает в себя неплохой дизассемблер и редактор PE-файлов, поставляется просто как hex-редактор);

- тип дистрибьюции программы (с открытыми кодами/бесплатная (freeware)/условно-бесплатная (shareware)/платная) и стоимость;

- наличие и тип поддержки, ее стоимость;

- доступность и качество документации;

- простота и понятность интерфейса;

- наличие пробных версий (для платных программ);

- сайт программы и возможность ее скачки;

- размер дистрибутива и его состав;

- дополнительные (не основные) возможности, предоставляемые программой;

Обычные программы (не интегрированные среды)

Компиляторы (ассемблеры) и редакторы связей

Эти два класса программ следует объединить, т.к. в поставку любого современного компилятора входит и редактор связей.

Компилятор (ассемблер) формирует объектный код, переводя программу с языка программирования (языка ассемблера), а редактор формирует исполнимый файл, собирая объектные и библиотечные файлы и редактируя перекрестные ссылки.

Для компиляторов можно указать следующие характеристики:

- язык, с которого производится компиляция;

- диалект/стандарт языка;

- аппаратные платформы и ОС, для которых может формироваться объектный и исполнимый файл;

- наличие возможности и качество оптимизации кода;

- форматы поддерживаемых объектных, библиотечных и исполнимых файлов;

Представители.

C/C++: Intel C++ Compiler (Intel), Borland C++ Compiler, Watcom C++, GNU C.

Pascal: Free Pascal, GNU Pascal

Редакторы текстов

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

Характеристики:

- формат и кодировка обрабатываемых файлов;

- возможность выделения лексем в тексте;

- возможность поддержки оформления текста в соответствии с парадигмами языка;

- возможность вызывать процесс компиляции прямо из редактора;

- возможность генерации части текста программы (чаще бывает не у редакторов, а у сред).

Отладчики

Предназначены для пошагового отслеживания работы программы, слежения за изменением ее и системных переменных, изменением состояния процессора во время работы программы и т.д.

Различают два основных типа отладчиков:

- отладчики пользовательского режима;

- отладчики режима ядра;

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

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

Характеристики:

- тип (режима ядра/пользовательский);

- поддержка символьной отладки (способность читать исходные коды программы и работать с ними). Набор поддерживаемых языков (сред/диалектов);

- набор отображаемой информации: регистры процессора, стек, память (режимы отображения содержимого памяти);

- поддерживаемые режимы отладки: пошаговый, с точками останова, с реакцией на события в системе;

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

- (обычно для отладчиков режима ядра) требования к аппаратной поддержке, возможность работы на «живой» системе;

- возможность анализа файлов дампа.

Представители.

Отладчики пользовательского режима: Turbo Debugger (Borland Software Corporation), Cool Debugger (Wei Bao), W32Dasm

Отладчики режима ядра: i386kd/alphakd/ia64kd и WinDbg (Microsoft Corporation) (для работы в “живую” требуют 2 машины. Для обхода этого ограничения существует надстройка LiveKd (Mark E. Russinovich)), SoftIce (NuMega).