Теория и практика разработки программ и информационных систем

Главная страница
Контакты

    Главная страница



Теория и практика разработки программ и информационных систем



страница14/17
Дата04.11.2017
Размер2,09 Mb.
ТипЛекция


1   ...   9   10   11   12   13   14   15   16   17

Теория и практика разработки программ и информационных систем


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

Устойчивость слабо предсказуемых трудностей программирования достаточно высока. Так, Ф.П. Брукс почти 30 лет назад отмечал неизбежность повторного программирования, морального устаревания результата за время его получения и влияния структуры программистской группы на эффективность трудозатрат. Впечатления от трудного опыта разработки OS IBM 360 Ф. Брукса можно характеризовать следующими цитатами из его знаменитой книги:


Система начинает работать как следует только после создания нескольких вариантов, последовавших за первым”.

Неполнота и противоречивость новых идей становится ясной только в процессе реализации”.

На практике оказывается, что все этапы могут начинаться одновременно и проходить параллельно”.

Вторая система - самая опасная из всех, которые проектирует человек”.

Диалоговые интерпретаторы обеспечили наиболее фундаментальные преимущества в отладке”.

Нам не удалось воспитать в программистах походящее отношение к документации”.7


При повторном издании (через четверть века!) своей книги Ф. Брукс отметил, что основные трудности практического программирования для сложных систем почти не изменились. Современные подходы к разработке ИС скорее являются методами “уклонения от сложностей”.

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

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

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

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

По мнению Э. Йодена, истинное предназначение программирования – это трудно выполнимые миссии, т.е. проекты, выполняемые при недостаточных условиях, что активизирует творческий потенциал программистов, заставляет быстро находить эффективные и надежные решения. Эту мысль убедительно подтверждает практика разработки игровых программ. В пользу этого говорит и оценка трудоемкости проектов по классическим схемам ЖЦ программ. Как правило такие оценки завышены во много раз в сравнении с реальными трудозатратами.


Проектирование, макетирование и разработка программ также обрели языковую поддержку. Примеры – язык UML и проекты в рамках .Net-технологии.

Организация параллельных процессов и параллельное программирование


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

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



Независимая разработка специализированных языков параллельного программирования и языков управления процессами дала ряд интересных идей по представлению и масштабированию параллельных вычислений, с которыми можно ознакомиться по материалам о языках APL, Symula-67, Sisal, БАРС, Occam, Поляр и др.

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

Появились универсальные языки сверх высокого уровня, такие как SETL, Planner, Eiffel, Haskel, Python, Cw и т.п., абстрагирование данных и процессов в которых нацеливает на активное использование математических и функциональных моделей, приспособленных к гибкому и строгому структурированию, удобному для доказательных построений.

Заметное место среди языков функционального программирования занимают языки параллельного программирования. Довольно известен язык функционального программирования Sisal. Название языка расшифровывется как “Streams and Iterations in a Single Assignment Language”, сам он представляет собой дальнейшее развития языка VAL, известного в середине 70-х годов. Среди целей разработки языка Sisal следует отметить наиболее характерные, связанные с функциональным стилем программирования.


- Создание универсального функционального языка.

- Разработка техники оптимизации для высокоэффективных параллельных программ.

- Достижение эффективности исполнения, сравнимой с императивными языками типа Fortran и C.

- Внедрение функционального стиля программирования для больших научных программ.


Функциональная программа является безусловно параллельной, если ее можно писать, освободившись от большинства сложностей параллельного программирования, связанных с выражением частичных отношений порядка между отдельными операциями уровня аппаратуры. Пользователь Sisal-а получает возможность сконцентрироваться на конструировании алгоритмов и разработке программ в терминах крупноблочных и регулярно организованных построений, опираясь на естественный параллелизм уровня постановки задачи.
В конце 70-х годов основные идеи языков параллельного программирования APL и VAL, предшественника языка Sisal, были интересно обогащены в языке БАРС в трех направлениях:


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

  2. описание элементов памяти могло сопровождаться предписанием дисциплины доступа к памяти,

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

Синхросети позволяют независимые описания процессов синхронизовать в терминах разметки. Узлы с одинаковой разметкой срабатывают одновременно.




Телекоммуникации и информационные сервисы


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

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

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

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

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

Развитие компонентов осуществляется достаточно свободно, но подчинено некоторым интуитивным закономерностям ЖЦ, связанным с динамикой представления и накопления знаний человеком, пока не превышен некоторый приемлимый предел, достижение которого ставит границы в их развитии. После этого происходят шаги декомпозиии на более простые компоненты или обобщения до более факторизуемых форм. В этом процессе компоненты подвергаются систематическому анализу, параметризации, оптимизации, таким образом повышается качество и потенциал компонентов, их изученность, организованность, эфективность и надежность.


Средства и методы искусственного интеллекта

Взволнованные дискуссии на тему “может ли машина мыслить?” сменились массовым применением информационных технологий в области гуманитарного знания. Средства и методы искусственного интеллекта привели к достаточно точной постановке вопроса о компьютерном разуме, на которую в середине 60-х годов дал ответ Вейценбаум, и предоставили специалистам разнообразные усилители интеллекта, обеспечившие исследования важнейших особенностей мыслительного процесса и роли интеллекта в коллективной деятельности. Очень интересные результаты получены применением электронных роботов при исследовании поведения животных.



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

Алгоритмы, учебное и любительское программирование


Программирование как искусство начинается с алгоритмов. Многочисленные изобретения структур данных и методов их эффективной обработки выдержали проверку временем и теперь доступны не только их описания в публикациях, но их реализации в виде хорошо отлаженных библиотечных компонент. Тем не менее, успешность применения таких компонент весьма зависит от понимания алгоритмической природы программирования. Учебное программирование позволяет, начиная с небольших задач и тщательно созданных учебных миров, ознакомить с проблемами программирования и дать полезные навыки программирования. Целенаправленная работа в этом направлении началась с языка Паскаль (Вирт - 1970), продолжена в работах на базе языка Лого (Пайперт - 1974), весьма интересно представлена в описании языка Grow (Калифорнийский университет), а в нашей стране получила весьма результативный опыт в виде языков Робик и Рапира (Звенигородский - 1977, 1980), послуживший основанием введения предмета “информатика” в школьный регламент.
Всю историю программирования пронизывает нечто вроде дуэли между коммерческим и любительским программированием. При очевидных преимуществах ответственного профессионального программирования в рамках солидных фирм в последние двадцать лет на базе Интернет сложились клубные формы программисткой деятельности, достижения которых вполне сравнимы, а кое в чем превосходят, аналогичные продукты фирм. Наиболее известный результат такого рода – движение свободно распространяемых программ GNU (Столмен), давшее миру операционную систему Linux (Торвальд) и целый ряд других не менее интересных информационных систем, а главное создавший убедительный прецедент профессионального творческого международного проекта предельно широкого масштаба.

Каталог: files -> course
course -> Курс «Риторика и стилистика»
course -> В компьютерном классе
course -> И. А. Мельничук 2012 г
course -> Социология духовной безопасности российского общества
course -> Методические рекомендации по изучению дисциплины «Социология конфликта в условиях социокультурных изменений»
course -> Методические рекомендации по изучению дисциплины «Социальная безопасность молодежи»
course -> Кадровая политика и безопасность
course -> Программа по микроэкономике распределение часов по темам и видам работ
course -> Курсовая работа «Корпоративная культура Иркутского диагностического центра»
course -> Программа наименование дисциплины Компьютерные технологии в науке и образовании
1   ...   9   10   11   12   13   14   15   16   17

  • Организация параллельных процессов и параллельное программирование
  • Телекоммуникации и информационные сервисы
  • Алгоритмы, учебное и любительское программирование