Создание цикла разработки прикладного программного обеспечения: концептуализация, анализ, проектирование, кодирование, тестирование, эволюция, сопровождение.

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

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

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

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

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

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

Проектирование - (от латинского projectus, что означает "брошенный вперед") - это процесс составления описания, необходимого для создания в заданных условиях еще не существующего объекта по первичному описанию этого объекта путем его детализации, дополнения, расчетов и оптимизации.

Описание объекта может быть задано по-разному: в виде текста, алгоритма, программы, чертежа, таблицы или, что чаще всего, комбинировано в традиционно бумажном или электронном виде.

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

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

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

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

Когда мы представляем информацию в разных формах или преобразуем ее из одной формы в другую, мы информацию кодируем.

Код - это система условных знаков для представления информации.

Кодирование - это операция преобразования символов или группы символов одного кода в символы или группы символов другого кода.

Человек кодирует информацию с помощью языка. Язык - это знаковая форма представления информации.

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

Одну и туже информацию можно кодировать разными способами. Например, объект КОМПЬЮТЕР: можно представить в виде текстовой информации - написать на русском языке, на английском. Можно представить в виде графической информации - фото и видео. Можно в виде звука - произнести это слово. И т.д. Это разные способы кодирования одного и того же объекта.

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

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

Уровни тестирования. Модульное тестирование - это процесс исследования ПО, при котором тестируется минимально возможный компонент, например, отдельный класс или функция. Часто модульное тестирование осуществляется разработчиками ПО. Интеграционное тестирование - это процесс исследования ПО, при котором тестируется интерфейсы между компонентами или подсистемами. Системное тестирование - это процесс исследования ПО, при котором тестируется интегрированная система на её соответствие требованиям заказчика. Альфа и Бета тестирование относятся к подкатегориям системного тестирования.

Существует несколько признаков, по которым принято производить классификацию видов тестирования.

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

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

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

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

Технология программирования включает:

- указание последовательности выполнения технологических операций;

- перечисление условий, при которых выполняется операция;

- описание самих операций;

- способы описания моделей, используемых на различных этапах разработок.

Рассмотрим этапы становления технологии программирования.

1. Стихийное программирование (С момента появления первых вычислительных машин до середины 60-х годов ХХ в.)

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

Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм. Недостаток такой архитектуры˸ при увеличении количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой.

Чтобы сократить количество ошибок предложено использовать локальные данные в подпрограммах.

Появление средств поддержки подпрограмм позволило разрабатывать программное обеспечение нескольким программистам параллельно.

2. Структурное программирование (60 — 70-е годы ХХ в.) — совокупность рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки программного обеспечения. В корне подхода — декомпозиция сложных систем с целью последующей реализации в виде отдельных небольших (до 40 — 50 операторов) подпрограмм. Это процедурная декомпозиция.

Структурный подход — представление задачи в виде иерархии подзадач простейшей структуры. Проектирование проводилось ʼʼсверху-внизʼʼ. Вводились ограничения на конструкции алгоритмов, рекомендовались формальные модели их описания, специальный метод проектирования алгоритмов — метод пошаговой детализации.

3. Объектный подход (с середины 80-х до конца 90-х годов ХХ в.).

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

Поддерживается в языках программирования Pascal, C++, Modula, Java. Объектный подход предлагает новые способы организации программ, основанные на механизмах наследования, полиморфизма, композиции, наполнения. Эти механизмы позволяют конструировать сложные объекты из сравнительно простых. Создаются среды, поддерживающие визуальное программирование (Delphi, Visual C++).

4. Компонентный подход и CASE-технологии. Компонентный подход— построение программного обеспечения из отдельных компонентов — физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты — компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию.

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

Отличительная особенность современного этапа развития технологии программирования — создание и внедрение автоматизированных технологий разработки и сопровождения программного обеспечения, которые названы CASE-технологиями. Существуют CASE-технологии, поддерживающие структурный и объектный (в том числе компонентный) подходы к программированию.

Сопровождение

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

Существует три вида сопровождения системы.

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

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

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

Наши рекомендации