Технология программирования
1. Требования к современным технологиям программирования.
2. Метод технологии программирования от данных.
3. Технология настройки тестирования программ.
Список использованной литературы..
1. Требования к современным технологиям программирования
В настоящее время уровень проникновения вычислительной техники во все сферы деятельности человека повысился настолько, что для создания программного обеспечения новых типов АСУ, САПР, ГАП, для создания пакетов прикладных программ, программ микропроцессорной техники, сетей ЭВМ, а главное, для их эффективного использования широкими слоями пользователей нужна программная продукция другого типа, более высокого уровня организации ее производства. Создание такого производства является в настоящее время наиболее актуальной и основной задачей теории и практики нового направления в программировании — технологии программирования.
Под технологией (от греч.— искусство, ремесло, науки и— понятие, учение) программирования понимается совокупность обобщенных и систематизированных знаний, или наука, об оптимальных способах (приемах и процедурах) проведения процесса программирования, обеспечивающего в заданных условиях получение программной продукции с заданными свойствами.
Технология программирования определяет некоторую профессиональную культуру работы специалистов (не только программистов), обеспечивающую заданный уровень производительности труда и качества получаемой в результате программной продукции. Она охватывает содержание процесса программирования в его широком значении от появления потребности в создании некоторой программы до ее изготовления, передачи пользователю, модификации в процессе эксплуатации и прекращения использования вследствие морального старения.
Технология программирования — это некоторое общее базовое понятие, компоненты которого могут использоваться по-разному, в разных сочетаниях, в зависимости от условий их применения. Например, в технологическом комплексе программиста может быть несколько редакторов текстов — пакетный, диалоговый, директивный, бездирективный с использованием функциональной клавиатуры и т. д. Каждый редактор может иметь несколько вариантов реализации, учитывающих особенности операционной системы, в которой он работает, или особенности и квалификацию его разработчика. Для каждого из этих редакторов существует своя технология работы, свои регламентирующие инструкции. Поэтому на практике наряду с понятием технологии лрограммирования широко используется понятие технологической линии (программирования, программиста или производства программ)
Технологическая линия имеет единую регламентированную технологию программирования, все компоненты которой на заданном рабочем интервале согласованы и настроены на конкретные условия конкретного коллектива специалистов. В технологической линии четко указано оборудование, на котором надо работать, и технология его использования — «делай так, а не иначе».
С этой целью в программирование вводится новый этап — этап технологической подготовки работ, который предшествует традиционно известным и продолжается до этапа проектирования включительно. Длительность его может быть больше этапа изготовления соответствующего программного изделия.
На этапе технологической подготовки работ применительно к конкретным условиям конкретного коллектива с учетом его предшествующего опыта и характера решаемых им задач и на базе существующей в коллективе технологии программирования и накопленных технологических фрагментов создается полностью регламентированная технологическая линия, все компоненты которой настроены на разработку определенного типа программных изделий. На этом же этапе осуществляется большой комплекс проводимых по определенному календарному плану и в определенной взаимосвязи мероприятий по организации коллектива программистов и процесса его функционирования, по обеспечению этого коллектива соответствующими справочными методическими материалами и инструментальными технологическими средствами автоматизации всех этапов работы. Разрабатываются прогрессивные нормативы для определения трудоемкости и времени создания типичных составляющих программных систем, потребности производства в рабочей силе различной квалификации, машинном времени, редакционном обслуживании и т. д.
Подготовительные работы по организации процесса программирования включают создание новых и совершенствование старых методов управления, упрощение и повышение надежности документооборота процесса программирования, совершенствование методов планирования и контроля за выпуском продукции, оптимизацию планово-экономических и хозяйственных механизмов, создание информационно-справочных систем обслуживания управляющего звена и автоматизированных систем организационного управления процессом программирования.
Анализ известных и широко распространенных технологий и методов программирования позволяет сформулировать следующие основные требования к ним.
1. Технология программирования должна обеспечивать отторжимость программного изделия от его разработчика, т. е. человеческий фактор в программировании должен быть сведен к минимуму.
Это необходимо как для разработки программного изделия, так и для грамотного сопровождения, модификации и воспроизводства его на других ЭВМ в других условиях эксплуатации.
2. Технология программирования и средства ее поддержки (автоматизации) должны обеспечивать целенаправленную работу прежде всего коллектива программистов, а не отдельных личностей. Она должна побуждать коллектив работать только правильно и должна автоматически, блокировать любые не санкционированные технологией действия. Сетевое планирование, система формализованных поручений и эффективный контроль за исполнением должны быть составной частью любой современной технологии.
3. Технология программирования должна быть безбумажной. Это значит, что весь процесс изготовления программного изделия и управления деятельностью коллектива программистов должен быть максимально дебюрократизирован и выполняться за пультом экрана с минимальным расходом бумаги. Документация на программное изделие (техническое описание, инструкции пользователю, инструкции по эксплуатации т. п.) должна заноситься и храниться в основном на магнитных носителях (лентах, дисках). Доступ к этой информации должен быть простым и автоматизированным. Работа пользователя должна обеспечиваться развитой информационно-справочной системой.
4. Средства автоматизации технологии должны охватывать все этапы работы коллектива программистов. Они должны учитывать существующий опыт, отраженный в отечественных стандартах, а также должны обеспечивать возможность гибкой и простой их перенастройки на основе постоянно накапливаемого опыта разработчиков.
5. Технология программирования не должна быть связана с языком программирования, так как по современным представлениям неон является определяющим звеном в технологии программирования.
6. Технология программирования должна быть простой в освоении, с автоматически включаемыми средствами подсказки и обучения универсального применения. Эти средства должны быть иерархическими и оперативно привязанными к изготовляемому программному изделию, а не «раз и навсегда сделанными». Должна быть предусмотрена система автоматической генерации средств подсказки и обучения применительно к изготавливаемому (не изготовленному) программному изделию.
7. Технология программирования должна иметь средства автоматической фиксации в хронологическом порядке всех действий, выполняемых в процессе коллективного изготовления программного изделия — должны вестись и храниться в системе журналы (протоколы, дневники) разработки. Эти средства должны позволять восстанавливать любые состояния процесса на любом интервале изготовления программного изделия, я также использоваться в процессе его эксплуатации.
2. Метод технологии программирования от данных
Практически в любой современной программе есть какая-нибудь база данных. А создание таких приложений уже давно является отдельным направлением как в теоретическом, так и в практическом программировании. В общем, знание баз данных необходимо любому программисту.
База данных — это информационная модель предметной области, совокупность взаимосвязанных, хранящихся вместе данных при наличии такой минимальной избыточности, которая допускает их использование оптимальным образом для одного или нескольких приложений. Данные (файлы) хранятся во внешней памяти и используются в качестве входной информации для решения задач. СУБД — это программа, с помощью которой реализуется централизованное управление данными, хранимыми в базе, доступ к ним, поддержка их в актуальном состоянии. Системы управления базами данных можно классифицировать по способу установления связей между данными, характеру выполняемых ими функций, сфере применения, числу поддерживаемых моделей данных, характеру используемого языка общения с базой данных и другим параметрам.
Классификация СУБД:
— по выполняемым функциям СУБД подразделяются на операционные и информационные;
— по сфере применения СУБД подразделяются на универсальные и проблемно-ориентированные;
— по используемому языку общения СУБД подразделяются на замкнутые, имеющие собственные самостоятельные языки общения пользователей с базами данных, и открытые, в которых для общения с базой данных используется язык программирования, расширенный операторами языка манипулирования данными;
— по числу поддерживаемых уровней моделей данных СУБД подразделяются на одно-, двух-, трехуровневые системы;
— по способу установления связей между данными различают реляционные, иерархические и сетевые базы данных;
— по способу организации хранения данных и выполнения функций обработки базы данных подразделяются на централизованные и распределенные. Системы централизованных баз данных с сетевым доступом предполагают две основные архитектуры — файл-сервер или клиент-сервер.
Архитектура файл-сервер.
Предполагает выделение одной из машин сети в качестве центральной (главный сервер файлов), где хранится совместно используемая централизованная база данных. Все другие машины исполняют роль рабочих станций. Файлы базы данных в соответствии с пользовательскими запросами передаются на рабочие станции, где в основном и производится их обработка. При большой интенсивности доступа к одним и тем же данным производительность информационной системы падает.
Архитектура клиент-сервер.
Эта модель взаимодействия компьютеров в сети для современных СУБД фактически стала стандартом. Каждый из подключенных к сети и составляющих эту архитектуру компьютеров играет свою роль: сервер владеет и распоряжается информационными ресурсами системы, клиент имеет возможность пользоваться ими. Помимо хранения централизованной базы данных сервер базы данных обеспечивает выполнение основного объема обработки данных. Запрос на данные, выдаваемый клиентом (рабочей станцией), порождает поиск и извлечение данных на сервере. Извлеченные данные транспортируются по сети от сервера к клиенту. Спецификой архитектуры клиент-сервер является использование языка запроса SQL. Сервер базы данных представляет собой СУБД, параллельно обрабатывающую запросы, поступившие со всех рабочих станций. Как правило, клиент и сервер территориально отделены друг от друга, и в этом случае они образуют систему распределенной обработки данных.
Характеристиками СУБД являются:
— производительность;
— обеспечение целостности данных на уровне баз данных;
— обеспечение безопасности данных;
— возможность работы в многопользовательских средах;
— возможность импорта и экспорта данных;
— обеспечение доступа к данным с помощью языка SQL;
— возможность составления запросов;
— наличие инструментальных средств разработки прикладных программ.
Производительность СУБД оценивается:
— временем выполнения запросов;
— скоростью поиска информации;
— временем импортирования баз данных из других форматов;
— скоростью выполнения операций (таких как обновление, вставка, удаление);
— временем генерации отчета и другими показателями.
Безопасность данных достигается:
— шифрованием прикладных программ;
— шифрованием данных;
— защитой данных паролем;
— ограничением доступа к базе данных (к таблице, к словарю и т.д.).
Обеспечение целостности данных подразумевает наличие средств, позволяющих удостовериться, что информация в базе данных всегда остается корректной и полной. Целостность данных должна обеспечиваться независимо от того, каким образом данные заносятся в память (в интерактивном режиме, посредством импорта или с помощью специальной программы). Используемые в настоящее время СУБД обладают средствами обеспечения целостности данных и надежной безопасности. Система управления базами данных управляет данными во внешней памяти, обеспечивает надежное хранение данных и поддержку соответствующих языков базы данных. Важной функцией СУБД является функция управления буферами оперативной памяти. Обычно СУБД работают с базами данных больших размеров, часто превышающими размеры оперативной памяти ЭВМ. В развитых СУБД поддерживается свой набор буферов оперативной памяти с собственной дисциплиной их замены. Наибольшее распространение в настоящее время получили системы управления базами данных Microsoft Access и Oracle.
Этапами работы в СУБД являются:
— создание структуры базы данных, т.е. определение перечня полей, из которых состоит каждая запись таблицы, типов и размеров полей (числовой, текстовый, логический и т.д.), определение ключевых полей для обеспечения необходимых связей между данными и таблицами;
— ввод и редактирование данных в таблицах баз данных с помощью представляемой по умолчанию стандартной формы в виде таблицы и с помощью экранных форм, специально создаваемых пользователем;
— обработка данных, содержащихся в таблицах, на основе запросов и на основе программы;
— вывод информации из ЭВМ с использованием отчетов и без использования отчетов.
Реализуются названные этапы работы с помощью различных команд. Централизованная база данных обеспечивает простоту управления, улучшенное использование данных на местах при выполнении дистанционных запросов, более высокую степень одновременности обработки, меньшие затраты на обработку. Распределенная база данных предполагает хранение и выполнение функций управления данными в нескольких узлах и передачу данных между этими узлами в процессе выполнения запросов. В такой базе данных не только различные ее таблицы могут храниться на разных компьютерах, но и разные фрагменты одной таблицы. При этом для пользователя не имеет значения как организовано хранение данных, он работает с такой базой, как с централизованной.
Известны три типа моделей описания баз данных — иерархическая, сетевая и реляционная, основное различие между которыми состоит в характере описания взаимосвязей и взаимодействия между объектами и атрибутами базы данных. Иерархическая модель предполагает использование для описания базы данных древовидных структур, состоящих из определенного числа уровней. "Дерево" представляет собой иерархию элементов, называемых узлами. Под элементами понимается список, совокупность, набор атрибутов, элементов, описывающих объекты. В качестве примера простой иерархической структуры можно привести административную структуру высшего учебного заведения, элементами которой являются: "Университет — Факультет — Группа". На каждом уровне иерархии данной структуры могут быть использованы различные атрибуты. Например, атрибутами третьего уровня могут быть: специализация группы, численный состав, фамилия старосты группы и другие. В данной модели имеется корневой узел или просто корень — "Университет", который находится на самом верхнем уровне иерархии, а потому не имеет узлов, стоящих выше его. Каждый узел модели имеет только один исходный, находящийся по отношению к нему на более высоком уровне, а на последующих уровнях классификации он может иметь один, два или большее количество узлов, либо не иметь их вообще.
3. Технология настройки тестирования программ
Общие принципы тестирования программ. Для создания любых изделий применяются соответствующие технологии. При этом в понятие технология включаются совокупность производственных процессов, методов и средств, предназначенных для создания определенных видов изделий с заданными показателями качества. Одним из самых сложных и трудоемких этапов технологического процесса разработки программ является их отладка. На отладку приходится около 50 % трудоемкости из общих затрат на создание сложных комплексов программ. Под отладкой понимается процесс, позволяющий получить программу, функционирующую с требующимися характеристиками в заданной области изменения входных данных. Таким образом, в результате отладки программа должна соответствовать некоторой фиксированной совокупности правил и показателей качества, принимаемой за эталонную для данной программы.
Процесс отладки программ включает (рис. 1.): создание совокупности тестовых эталонных значений и правил, которым должна соответствовать программа по выполняемым функциям, структуре, правилам описания, значениям исходных и соответствующих им результирующих данных; статическое тестирование текстов разработанных программ и данных на выполнение всех заданных правил построения и описания без исполнения объектного кода;
тестирование программы с ее исполнением в объектном коде и с разными уровнями детализации: детерминированное, стохастическое и тестирование в реальном масштабе времени; диагностику и локализацию причин отклонения результатов тестирования от заданных эталонных значений и правил; разработку изменения программы с целью исключения причин отклонения результатов от эталонных;
реализацию корректировки программы, обеспечивающую соответствие программы заданному эталону.
Контроль правил построения и описания программ и данных предполагает точную формализацию этих правил и проверку степени их выполнения. Относительно небольшое число используемых правил описания и построения программ и данных, а также четкая их формализация позволяют построить высокоавтоматизированные методы и средства контроля, и автоматически выявлять отклонения от таких эталонов. Эти методы включают синтаксический и семантический контроль текстов программ и данных.
Основным методом обнаружения ошибок при отладке программ является их тестирование. При этом затраты на тестирование для обнаружения ошибок являются наибольшими, достигают 30—40 % общих затрат на разработку программ и в значительной степени определяют качество созданного программного продукта. Высокая доля затрат на тестирование приводит к необходимости создания методов и средств, позволяющих достигать максимального качества программ при реальных ограничениях на длительность тестирования и на связанные с этим затраты. Эффективность тестирования является важнейшим фактором, определяющим стоимость и длительность разработки сложных КП с заданным качеством. Вследствие этого создаются различные методы систематического и регламентированного тестирования, обеспечивающие наилучшее использование ресурсов проектирования с учетом особенностей создаваемых программ.
Имеются некоторые трудности определения сути и задач тестирования программ. Эти трудности связаны с изменением задач тестирования на разных стадиях отладки программ (см. рис. 2) и с попытками дать короткое единое определение, пригодное для всех стадий. Для определения задач тестирования целесообразно выделить три стадии:
- тестирование для обнаружения ошибок в программе;
- тестирование для диагностики и локализации причин обнаруженных искажений результатов;
- тестирование для контроля выполненных корректировок программ и данных.
Основной целью тестирования для обнаружения ошибок является выявление всех отклонений результатов функционирования реальной программы от заданных эталонных значений. При этом задача состоит в обнаружении максимального числа ошибок, в качестве которых принимается любое отклонение от эталонов. На этой стадии успешным является тестирование, которое приводит к обнаружению ошибок. Если в результате тестирования ошибки не выявлены, то проведенные операции не дали сведений, позволяющих повысить качество программ и тем самым не оправдали затрат. Таким образом, эффективными являются операции тестирования, обладающие высокой способностью по обнаружению ошибок в программе. Чем больше ошибок выявляется на этой стадии при каждой операции тестирования, тем выше их эффективность и обоснованность затрат на их выполнение. С этих позиций тесты, не способствующие обнаружению ошибок и только подтверждающие корректность функционирования программ, являются неэффективными, так как приводят к бесполезным затратам. Например, можно многократно подтверждать правильность исполнения программы при всех промежуточных значениях переменных, когда проверены предельные и особые значения. Однако такое тестирование характеризуется практически нулевой обнаруживающей способностью, и поэтому бесполезно.
После тестирования для обнаружения ошибок применяется тестирование для их диагностики и локализации. Его цели и методы несколько отличаются от тех, которые соответствуют первой стадии тестирования. На этой стадии важнейшая задача — точно установить место искажения программы или данных, явившегося причиной отклонения результатов от эталонных при тестировании для обнаружения ошибок. Тем самым определяется часть программы, подлежащая корректировке. Эффективными являются тесты, способствующие быстрой и точной локализации первичных ошибок. На этой стадии затраты оправданы и тестирование можно считать успешным, если оно приводит к полной локализации ошибки, подлежащей исправлению
После локализации и устранения обнаруженных ошибок применяется контрольное тестирование, задача которого состоит в подтверждении правильности выполненной корректировки программы и в отсутствии проявления ранее обнаруженных ошибок. В этом случае успешность тестирования определяется отсутствием проявления ранее обнаруженной, локализованной и устраненной ошибки, а также отсутствием вторичных ошибок, которые могут появиться при корректировке.
Упорядочение при тестировании. Для тестирования применяются методы, предусматривающие упорядочение и систематизацию тестов, по различным стратегиям и параметрам, и методы неупорядоченного тестирования. При неупорядоченном тестировании исходные данные, имитирующие внешнюю среду, случайным образом генерируются во всем диапазоне возможного изменения параметров, производится случайный перебор значений в произвольных сочетаниях различных величин. При этом многие значения исходных данных характеризуются малой вероятностью обнаружения ошибок и не оправдывают затраты на выполнение тестирования. Кроме того, возможно появление данных, логически противоречивых. В то же время данные, наиболее важные с позиции реального использования программ и возможности обнаружения ошибок, могут оказаться не охваченными в процессе тестирования. При реально существующих ограничениях на объемы тестирования его неупорядоченное применение оказывается малоэффективным и почти не находит применения.
Стремление к рациональному использованию ограниченных ресурсов приводит к систематизации процесса и методов тестирования. Методы упорядоченного тестирования базируются на выделении факторов и параметров, позволяющих эффективно распределять ресурсы тестирования с учетом их влияния на качество программ. Систематизация может значительно изменяться в зависимости от этапов тестирования, однако можно выделить несколько общих принципов, на базе которых строятся основные методы тестирования. Для упорядочения операций тестирования используется информация о структуре программы и процессе обработки информации, о характере изменения и взаимосвязи переменных, о наиболее вероятных и важных сочетаниях исходных данных, о характеристиках ошибок и вероятности их проявления и т. д. В результате ограниченные ресурсы тестирования используются прежде всего для обнаружения наиболее опасных ошибок в наиболее важных режимах функционирования программ. С этой целью последовательно применяются методы тестирования: статический, детерминированный, стохастический и в реальном масштабе времени.
Статическое тестирование является наиболее формализованным и автоматизируемым методом проверки корректности программ. В качестве эталонов применяются правила структурного построения программных модулей и обработки данных, конкретизированные для проекта КП в целом. Кроме того, могут использоваться некоторые частные правила обработки данных, зафиксированные в спецификациях на отдельные компоненты программ. Проверка степени выполнения этих правил проводится без исполнения объектного кода программы путем формального анализа текста программы на языке программирования. Операторы и операнды текста программ при этом анализируются в символьном виде, поэтому такой метод называют также символическим тестированием. Развитие и углубление символического тестирования может доводиться до уровня формальной верификации программы на соответствие ее текста детальной спецификации совокупности утверждений, полностью определяющей связи между входными и выходными данными этой программы.
Наиболее трудоемкими и детализирующими являются методы детерминированного тестирования. При детерминированном тестировании контролируется каждая комбинация исходных эталонных данных и соответствующая ей комбинация результатов функционирования программы. Это позволяет выявлять отклонение результатов от эталона с конкретным фиксированием всех значений исходных и результирующих данных, при которых это отклонение обнаружено.
В сложных программах невозможно перебрать все комбинации исходных данных и проконтролировать результаты функционирования программы на каждой из них. В таких случаях применяется стохастическое тестирование, при котором исходные тестовые данные задаются множествами случайных величин с соответствующими распределениями и для сравнения полученных результатов используются также распределения случайных величин. В результате при стохастическом тестировании возможно более широкое варьирование исходных данных, хотя отдельные ошибки могут быть не обнаружены, если они мало искажают средние статистические значения или распределения. Стохастическое тестирование применяется в основном для обнаружения ошибок, а для диагностики и локализации ошибок приходится переходить к детерминированному: тестированию с использованием конкретных значений параметров из области изменения ранее использовавшихся случайных величин.
Последующее расширение области изменения исходных данных возможно при применении тестирования в реальном масштабе времени. В процессе такого тестирования проверяется исполнение программ и обработка исходных данных с учетом времени их поступления, длительности и приоритетности обработки, динамики использования памяти и взаимодействия с другими программами и т. д. При обнаружении отклонений результатов исполнения программ от предполагавшихся эталонных для локализации ошибки приходится фиксировать время и переходить к детерминированному тестированию.
Основное внимание при упорядоченном тестировании сосредоточивается на обнаружении ошибок при исходных данных и условиях функционирования, заданных требованиями технического задания. Однако в реальных условиях на вход программы могут попадать сильно искаженные или ложные данные. Программы должны сохранять свою работоспособность после поступления таких данных или восстанавливать работоспособность при последующем поступлении данных, изменяющихся в заданных пределах. Для этого тестирование необходимо проводить не только при корректных исходных данных, но и при искаженных. В связи с этим упорядоченный подход к тестированию может базироваться на критериях достижения максимальной корректности или максимальной надежности программ.
На этапе комплексной отладки и испытаний доминирующим может стать критерий надежности функционирования. При этом в максимальной степени учитывается статистика внешних ситуаций исходных данных и статистика исполнения компонент программы. Основное внимание сосредоточивается на обнаружении ошибок, нарушающих работоспособность программ, и могут не выявляться ошибки, искажающие результаты, но не вызывающие отказовые ситуации. Переход на критерий обеспечения надежности функционирования подготавливается при тестировании модулей и групп программ, для чего используются характеристики динамики их функционирования.
Данные о вероятности или частости исполнения маршрутов или операторов помогают выделить интенсивно используемые компоненты программ, которые целесообразно подвергать наиболее тщательной проверке. Априорно на базе представлений разработчика о динамике функционирования создаваемой программы или по характеристикам, полученным в процессе рабочего функционирования, может быть составлен профиль программ. В профиле программы обычно содержится информация о частости и длительности выполнения каждого оператора, вероятность выполнения каждого логического условия, предельные значения некоторых переменных, количество итераций в циклах и т. д. Эти данные для каждой программы могут получаться автоматически в процессе ее исполнения или обобщаться и уточняться по мере развития тестирования программ, в результате чего:
- выделяются наиболее активные компоненты программы, прошедшие тщательную проверку, а также компоненты, требующие повышенного внимания, с малой или нулевой частотой проверки исполнения, подлежащие дополнительному тестированию;
- статистика условных переходов и итераций циклов дает информацию для обнаружения некоторых типов ошибок;
- длительность исполнения маршрутов позволяет оценивать длительности исполнения модулей или групп программ, что особенно важно для систем реального времени.
Список использованной литературы
1. Бєгун А. Технологія програмування: об'єктно-орієнтований підхід : Навч. посібник для самостійн. вивч. дисципл./ Анатолій Бєгун,; М-во освіти України; КНЕУ. -К.: КНЕУ, 2000. -199 с.
2. Вельбицкий И. Технология программирования/ И.В.Вельбицкий,. -К.: Техніка, 1984. -279 с.
3. Липаев В. Тестирование программ/ Владимир Липаев,. -М.: Радио и связь, 1986. -293 с.
4. Майерс Г.Дж. Искусство тестирования программ. – М., 1982
5. Гонца М.Г. Что такое технология программирования. – К., 1989