
- •Життєвий цикл програмного забезпечення. Характеристика стадій життєвого циклу програмного забезпечення.
- •Основні поняття та підрозділи програмування.
- •Підходи щодо потрібних знань для програмування. Класи інструментальних засобів для мов програмування.
- •Платформи програмування. Архітектури обчислювальних систем.
- •Транслятор. Види трансляторів.
- •7. Трансляція програмного коду. Етапи та фази.
- •8. Регулярні вирази: призначення і галузі застосування.
- •9. Методології і парадигми програмування. Моделі, що зумовили розвиток методологій.
- •10. Класифікація методологій програмування.
- •11. Ядра методологій програмування.
- •12. Топологічна специфіка методологій програмування.
- •13. Реалізаційна специфіка методологій програмування.
- •14. Генеалогія мов програмування
- •15. Особливості імперативних та об’єктно-орієнтованих мов програмування.
- •16. Особливості функціональних і логічних мов програмування.
- •17. Шаблонізатори: принцип застосування і призначення при створенні програмного забезпечення.
- •18. Основні поняття технології програмування.
- •19. Класичні технологічні процеси.
- •20 Перелічім, стандартні технологічні процеси створення Пз
- •22 Основні технологічні підходи поділяють на такі групи:
- •23 Технологія асинхронного обміну повідомленнями у клієнт-серверній архітектурі.
- •24 Поняття Стиль в програмуванні
- •25 Колективна розробка пз
- •Тестирование «черного ящика»
- •Тестирование «белого ящика»
- •45. Основні поняття розподілених обчислень.
- •46. Поняття про паралельне програмування.
- •47. Закон Амдала для розподілених систем та його наслідки.
- •48. Класифікація паралельних комп’ютерів і систем. Класифікація Шора
- •49. Принципи побудови паралельних обчислювальних систем. Обчислювальні мережі окремий випадок розподілених систем
- •Мультипроцесорні комп'ютери
- •Багатомашинні системи
- •Обчислювальні мережі
- •50. Концепція Grid.
Тестирование «черного ящика»
Известны: функции программы.
Исследуется: работа каждой функции на всей области определения.
Как показано на рис. 6.2, основное место приложения тестов «черного ящика» — интерфейс ПО.
Рис. 6.2. Тестирование «черного ящика»
Эти тесты демонстрируют:
-
как выполняются функции программ;
-
как принимаются исходные данные;
-
как вырабатываются результаты;
-
как сохраняется целостность внешней информации.
При тестировании «черного ящика» рассматриваются системные характеристики программ, игнорируется их внутренняя логическая структура. Исчерпывающее тестирование, как правило, невозможно. Например, если в программе 10 входных величин и каждая принимает по 10 значений, то потребуется 1010 тестовых вариантов. Отметим также, что тестирование «черного ящика» не реагирует на многие особенности программных ошибок.
Тестирование «белого ящика»
Известна: внутренняя структура программы.
Исследуются: внутренние элементы программы и связи между ними (рис. 6.3).
Рис. 6.3. Тестирование «белого ящика»
Объектом тестирования здесь является не внешнее, а внутреннее поведение программы. Проверяется корректность построения всех элементов программы и правильность их взаимодействия друг с другом. Обычно анализируются управляющие связи элементов, реже — информационные связи. Тестирование по принципу «белого ящика» характеризуется степенью, в какой тесты выполняют или покрывают логику (исходный текст) программы. Исчерпывающее тестирование также затруднительно. Особенности этого принципа тестирования рассмотрим отдельно.
39 Групи інструментальних систем розробки програм
Инструментальной системой будем називать некоторую логически связан- ную совокупность программньїх инструментов, поддерживающую разработку и сопровождение программньїх систем на данном язьіке программирования или ориентированньїх на какую-либо конкретную предметную область,
Зту фуппу характеризует в первую очередь интеграция нескольких инструментов под единой оболочкой и использование общего репозитория.
Вьіделяют три группьі инструментальньїх систем.
-
Инструментальньїе средьі программирования.
-
Средства автоматизации разработки программ.
-
Интефированньїе средьі.
В идеальном варианте инструментальньїе системи должньї распространяться на максимально возможное количество процессов и покривать максимум стадий жизненного цикла. Однако исторически сложилось так, что инструментальньїе ередн в большей степени связаньї с процессами профаммирования, тестирования и отладки, а средства автоматизации разработки профамм — с анализом и проектированием, т. е. с более творческими процессами (рис. 5.9).
Инструментальньїе средьі программирования обьічно содержат текстовий редактор, компилятор, отладчик и средства подсказки. Кроме того, в них могут бьіть включеньї и другие инструментьі, позволяющие вьіполнять статический и динамический анализ профамм. Зти инструментьі взаимодействуют между собой через обьічньїе файльї с помощью стандартних возможностей фай- ловой системи.
Средства автоматизации разработки программ (Computer-Aided Software Engineering — CASE) — зто инструментарий для системних аналитиков', разработчиков и профаммистов, позволяющий автоматизировать процесс проектирования и разработки профаммного обеспечения. Первоначально под CASE-средствами понимались средства, применяемие на ранних процессах жизненного цикла, и в первую очередь — на наиболее трудоемких процессах анализа и проектирования. Международньїй стандарт [ISO/IEC 14102:1995]
Интегрированная среда — зто совокупность программньїх инструментов, поддерживающая все процессьі жизненного цикла программного обеспечения в рамках определенной технологии. Компонентами интегрированньїх сред являются:
-
инструментьі управления процессами;
П инструментьі управления проектом;
П инструментьі конфигурационного управления;
-
инструментьі верификации;
-
инструментьі поддержки разработки документации.
41 функціональне програмування
В основі ФП покладено L(лямбда)- числення. ФП відноситься до декларативного програмування. Це коли програма представлена як формулювання бажаного результату обчислень в термінах залежності функцій одна від одної, адеталі обчислення бере на себе компілятор.
На відміну від імперативного програмування, в яких обчислювальний процес зводиться до послідовного виконання інструкцій, то у функціонального програмування потрібно описати як має виглядати результат через математичну функцію.
ФП не змінює стан обчислення системи, а лише змінює обробку вх. Даних(аргументів функції)
Основні властивості функціональних мов:
1 лаконічність
2 строга типізація
3 перевага в оптимізації і читабельності
4 модульність(декілька незалежних)
5 чистота (відсутність побічних об’єктів)
6 Відкладні обчислення
Задачі які вирішуються у ФП:
-
задачі які важко сформувати в термінах послідовних операцій
-
пов’язані із штучним інтелектом
-
експертні системи
-
проблеми розпізнавання об’єктів
42. Основні властивості функціональних мов прогр
Основні властивості функціональних мов:
1 лаконічність
2 строга типізація
3 перевага в оптимізації і читабельності
4 модульність(декілька незалежних)
5 чистота (відсутність побічних об’єктів)
6 Відкладні обчислення
7 функції
Большинство современньїх функциональньїх язьїков программирования имеют совершенно простой синтаксис, которьій позволяет записьівать короткие опреде- ления.
Программьі на функциональньїх язьїках обьічно намного ко- роче и проще, чем программьі, вьіполняющие те же самьіе действия, но написан- ньіе на императивньїх язьїках.
Строгая типизация обьектов, которьіми оперирует програм- мист во время работьі над программой, обеспечивает безопасность. Программа, прошедшая проверку типов, просто не может вьіпасть в операционную систему с сообщением, подобньїм «access violation» (ошибка доступа к памяти), особен- но зто касается таких язьїков, как С или C++ и Object Pascal, где применение указателей является типовим методом использования язьїка. В функциональньїх язьїках большая часть ошибок может бить исправлена на стадии компиляции, позтому стадия отладки и общее время разработки программ сокращаются. Вдо- бавок к зтому строгая типизация позволяет компилятору генерировать более зффективний код и тем самим ускорять вьшолнение программи.
Механизм модульности позволяет разделять программьі на несколько срав- нительно независимьіх частей (модулей) с четко определенньїми связями между ними. Тем самьім облегчается процесс проектирования и последующей поддерж- ки больших программньїх систем. Поддержка модульности не является свой- ством именно функциональньїх язьїков программирования, однако поддержива- ется большинством таких язьїков.
Известно, что в процессе работьі функция принимает на вход набор опре- деленньїх параметров (аргументов), вьіполняет заданньїй вьічислительньїй процесе, которьій использует переданньїе аргументи, после чего функция возвраща- ет вичисленное значение. Зто обичное понимание функции, которое позволяет визивать функции в любом месте, где необходимо иметь вичисленное значение. В том числе и при передаче аргументов в иние функции — в качестве аргументов может стоять и визов других функций.
Побочньїй зффект функции — возможность в процессе вьшолнения своих вичислений чтения и модификации значений глобальних переменннх, осуществ- ления операций ввода/внвода, реагирования на исключительнне ситуации, ви- зова их обработчиков. Позтому, если вьізвать такую функцию дваждьі с одним и тем же набором значений входних аргументов, может случиться так, что в качестве результата вичисляются разние значення. Такие функции и назьіваются недетерминированними функциями с побочними зффектами.
43 Методи та концепції функціонального програмування
Методология функционального программирования — способ составления программ, в которьіх единственньїм действием является вьізов функции, един- ственньїм способом расчленения программьі на части — введение имени для функции и задание для зтого имени вьіражения, вьічисляющего значення функции, а единственньїм правилом композиции — оператор суперпо- зиции функции.
Методьі и концепции
Метод аппликативности заключается в том, что программа єсть вьіражение, составленное из применения функций к аргументам. Программа состоит из совокупности определений функций, представляющих собой вьізовьі других функций и вложенньїх друг в друга. Метод поддерживается концепцией функции.
Метод рекурсивного поведения заключается в самоповторяющемся поведении, возвращающемся к самому себе. Метод поддерживается концепцией рекурсии.
Метод настраиваемости заключается в том, что можно легко порождать но- вьіе программньїе обьектьі по образцу, как значення соответствующих виражений (применение порождающей функции к параметрам образца). Зтому способствует то, что не только программа, но и любой программньїй обьект (в идеале) является вьіражением.
44, Функціональні мови програмування
Lisp. Первий язик программирования, поддерживающий функциональную парадигму программирования. Нетипизирован, содержит массу императивних свойств, однако в общем поощряет именно функциональньш стиль программирования. При вичислениях использует вьізови по значенню. Существует обьектно- ориентированное расширение язьїка — CLOS. Основной структурой для хранения и манипулирования информацией в язьіке Lisp служит список.
Erlang. Краткие характеристики язьїка: простая и мощная модель для обработки ошибок и устойчивости к отказам и авариям программного обеспечения, параллелизм и взаимодействие между процессами, возможность переноса между платформами исполнения программ, большинство задач из области сетевого взаимо- действия и телекоммуникаций решено в библиотеке ОТР.
Unlambda. Минимальньїй функциональньш язьїк программирования, разра- ботанньїй на основе комбинаторной логики. В нем существуют две встроенньїе функции — k и s, которьіе соответствуют двум базовьім комбинаторам К и S соответственно. Кроме того, в зтом язьіке имеется оператор применения. Все зто делает язьїк Unlambda полньїм в смьісле А. Тьюринга. в дополнение к ба- зовьім функциям и оператору добавленьї некоторьіе методьі для осуществления ввода/вьівода и ленивьіх вьічислений.
Haskell. Один из самих распространенних нестрогих язьїков программирования. Имеет очень развитую систему типизации, однако система модулей разрабо- тана несколько хуже. Последний стандарт язьїка, ставший стандартом функционального программирования, — Haskell-98.
Характеристики язьїка: возможность использования А-абстракции, наличие функций вьісшего порядка, чистота, ленивьіе вьічисления, параметрический полиморфизм и полиморфизм классов типов, статическая типизация, автоматическое вьіведение типов (основано на модели типизации Хиндли — Милнера), возможность писать программьі с побочньїми зффектами без нарушения парадигми функционального программирования с помощью монад, возможность ин- теграции с программами, реализованньїми на императивньїх язьїках программирования, посредством открьітьіх интерфейсов.