- •1. Роль ПО и компьютеров в производстве, социальной жизни и науке.
- •2. Инженерия ПО
- •3. Проблемы разработки ПО и пути их решения
- •4. Характеристики качества ПО
- •5. Факторы, влияющие на качество ПО
- •6. Системный подход к разработке ПО. Временной и "пространственный " аспекты системного подхода
- •7. Этапы жизненного цикла ПО. Каскадная модель жизненного цикла ПО.
- •8. Конструирование ПО
- •9. Стандарты по разработке ПО. Виды и значение стандартов, требования стандартов
- •10. Три группы процессов создания ПО
- •11. Жизненный цикл ПО и процессы верификации.
- •12. Тестирование, верификация, валидация. Различие в понятиях. V образная модель жизненного цикла ПО
- •13. Спиральная модель ЖЦ ПО.
- •14. «Тяжелые и легкие» технологии разработки ПО. Экстремальное (ХР) программирование
- •16. Виды документов, выпускаемых на ПО по этапам разработки системы.
- •17. Итеративный характер проектирования ПО. Стадии проектирования.
- •19. CASE технологии разработки ПО.
- •20. Технология Ration Rose,UML
- •21. Структура системы, иерархия управления и структура ПО
- •22. Цикличность решения задач управления в системах с ЦВМ
- •23. Временная диаграмма работы системы. Представления работы ПО СТС в виде набора «сечений», выполняемых последовательно.
- •24. Представление работы ПО СТС в виде набора параллельных процессов.
- •25. Задачи и процессы. Контекст процесса
- •26. Обобщенная схема возможных вариантов совместного использования информации взаимодействующими процессами
- •Закон Амдела
- •28. Критический ресурс ЦВМ. Основное правило защиты ресурсов ЦВМ
- •29. Синхронизация процессов
- •Взаимное исключение процессов. Использование мьютексов
- •30. Задача синхронизации «Читатели-писатели»
- •Задачи синхронизации. «Обедающие философы»
- •31. Технология синхронизации ПО. Система Intel Thread Checker (ITC) и типы обнаруживаемых ею ошибок.
- •32. Конструирование ПО
- •33. Минимизация сложности ПО. Стандартные приемы в конструировании
- •35. Особенности конструирования программ для встроенных ЦВМ критических систем. Фиксированное распределение памяти
- •36. Проектирование снизу-вверх и проектирование сверху-вниз. Программные заглушки и их использование
- •37. Основные понятия структурного подхода к проектированию ПО.
- •Основные понятия объектно - ориентированного подхода (ООП) к конструированию ПО.
- •38. Мультиагентные технологии
- •39. Классы реального мира предметной области и искусственные объекты. Чрезмерно большие и неправильно названные классы
- •40. Эвристические приемы конструирования методов, предотвращение дублирования кода
- •41. Сокрытие информации. Две категории секретов программ.
- •Избыточное распространение информации в программе
- •Опасность использования глобальных переменных
- •45. Сопряжение между модулями. Критерии оценки сопряжения. Виды сопряжения
- •46. Эталоны для контроля работы ПО
- •47. Низкоуровневые средства обнаружения ошибочного функционирования ПО
- •Исключительные ситуации (Исключения)
- •48. Выбор способа обработки некорректных входных данных
- •49. Способы обработки возможных ошибок
- •50. Утверждения и общие принципы их использования
- •51. Стратегии безопасности. Три уровня реакции ПО на обнаруженную ошибку. Отказоустойчивые системы
- •54. Ошибки ПО, отладка и тестирование ПО.
- •55. Анализ обнаруживаемых в ПО ошибок и важность его проведения
- •Классификация ошибок ПО
- •56. Статическая отладка и динамическая отладка
- •Функциональная отладка
- •57. Принцип «белого» и «черного» ящика при динамической отладке ПО.
- •58. Структурная динамическая отладка
- •59. Автономная отладка (АО) и комплексная отладка (КО) ПО
- •60. Тестовое окружение ПО. Драйверы и заглушки.
- •61. Последовательность действий при отладке ПО.
- •Принципы выделения маршрутов для отладки.
- •62. Приближенный метод оценки числа вариантов для отладки ПО для «широкого графа» программы. Графы деревья, как модели структуры ПО
- •63. Регулярное дерево и устойчивость его структурного параметра
- •64. Контроль отлаженности ПО в процессе отладки.
- •67. Метод наименьших квадратов для аппроксимации экспериментальных данных
Компилятор не имеет возможности проверять правильность использования мьютекса и согласованы ли операции Wait и Signal. Это – забота программиста. Неправильное использование мьютексов и семафоров может привести к тупикам.
30. Задача синхронизации «Читатели-писатели»
Задача также имеет много вариантов. Например, программы-читатели могут считывать информацию из зоны памяти (базы данных) асинхронно, по мере возникновения необходимости.
Программы – писатели могут записывать информацию в эту же зону памяти (базу данных), то есть в общем случае обновлять ее также асинхронно с программами-читателями.
Если одна задача читает информацию из зоны памяти (из базы данных) и будет прервана, переписав её к себе частично, а прервавшая её задача является задачей-писателем или задача – писатель лежит где то в цепочке последовательно исполняемых задач в данном прерывании, и заменит информацию в зоне памяти или базе данных, то после завершения прерывания и восстановления контекста задачи-читателя она продолжит чтение информации и завершит его.
Врезультате задача-читатель получит полный по номенклатуре объем информации, но состоящий из двух в общем случае разнородных частей, относящихся к разным моментам времени.
Втом случае, когда читаемые записи имеют внутреннюю связь между строками (например, компоненты вектора состояния объекта), то получение одной записи с компонентами, относящимися к разнесенным по времени записям, является семантической ошибкой, которая проявится при работе системы.
Распространенность подобных ошибок велика, хотя метод её избежания известен и прост: если програм- ма-читатель захватила ресурс (читает), то должен быть выставлен запрет прерывания до тех пор, пока зона памяти (база данных) не будет прочитана до конца. Либо писатель должен ждать пока читатели не прочитают БД, а затем только начать изменение базы данных.Эту работу можно реализовать , используя мьютексы.
Задачи синхронизации. «Обедающие философы»
За круглым столом сидят философы, их, например, пять. В центре стола блюдо со спагетти. Предполагается, что перед тем, как начать есть, каждый философ должен из общего блюда положить часть спагетти к себе в тарелку. Для этого каждому философу нужно две вилки. Одной он наматывает спагетти, а другой сбрасывает их к себе в тарелку. Они и лежат слева и справа от каждой тарелки. Наложив себе спагетти и закончив есть, каждый философ положит обе вилки на место – слева и справа от тарелки и начинает размышлять, как и положено философу, пока опять не проголодается. Таким образом, каждый из философов должен находиться в одном из двух состояний: либо он размышляет, либо ест. Вилки в данной ситуации выступают в качестве пересекающихся ресурсов Рис.12.
[Введите текст]