- •Содержание (Технология программирования)
- •2. Определение алгоритма. Пример алгоритма. Пять основных свойств алгоритма. Сущность алгоритмизации.
- •3. Понятие алгоритмического языка. Основные достоинства и недостатки программирования на алгоритмическом языке
- •4. Языки программирования высокого уровня. Поколения и топология языков программирования высокого уровня с примерами (по г. Бучу).
- •5. Интерпретаторы и компиляторы. «За» и «против». Структура. Понятие Байт-кода (p-Code) в языке Java. Языки 4gl.
- •6. Транслятор. Редактор связей. Загрузчик. Назначение и принципы функционирования.
- •7. Понятие исходного, объектного, загрузочного модулей. Назначение.
- •8. Понятие программы, подпрограммы, функции. Способы передачи и возврата параметров в подпрограммы и функции.
- •9. Основные принципы структурного программирования.
- •10. Модели управления в программных системах: централизованное управление, управление, основанное на событиях.
- •11. Структура событийно-управляемой программы для платформы Win32
- •25. Понятие интерфейса. Язык описания интерфейсов idl (midl).
- •26. Стандартная библиотека шаблонов stl. Основные концепции: контейнер, алгоритм, итератор, поток.
- •27. Представление в машине символьной информации. Кодировки ascii, mbcs, ansi, Unicode. Строки ascii-z, Pascal, bstr.
- •28. Признаки сложных систем согласно общей теории систем. Примеры систем (выделить в них признаки).
- •29. Сложность, присущая программному обеспечению. Составляющие сложности программного обеспечения по ф. Бруксу.
- •3 0. Эволюция системного программного продукта. Понятие и составляющие программы, программного комплекса, программного продукта, системного программного продукта (по ф. Бруксу)
- •31. Борьба со сложностью в программном обеспечении. Эволюция методов анализа и разработки (sa/sd, ooa/ood).
- •32. Жизненный цикл программного обеспечения. Фазы жц, их характеристики артефакты.
- •33. Модели жизненного цикла разработки программного обеспечения. Сравнение моделей.
- •35. Производительность труда программиста. Различия в прогах опытного программиста и новичка по ф. Бруксу.
- •36. Распределение стоимости разработки программного обеспечения по технологическим стадиям создания.
- •37. Язык uml. История создания. Область применения. Виды диаграмм uml для описания системы.
- •38. Программирование на основе шаблонов (паттернов). Роль шаблонов проектирования в борьбе со сложностью программного обеспечения. Будущее шаблонов.
- •39. Понятия связанности (Coupling) и зацепления (Cohesion) в сложных программных системах. Связанность и зацепление классов, модулей, компонентов.
- •40. Ошибки программирования: переполнение буфера. Понятие безопасного программного кода.
- •41. Оптимизация программного кода. Основные возможности оптимизации кода программистом и компилятором.
- •42. Оформление программ: основные пункты.
- •43. Процесс отладки программного обеспечения. Сложность отладки по. Методы поиска и устранения ошибок. Связь отладки с тестированием.
- •44. Понятие качества программного обеспечения. Составляющие и критерии качества. Обеспечение качества как процесс, а не этап. Международный стандарт iso 9000/9001.
- •46. Основы тестирования программного обеспечения методом «чёрный ящик» (функциональное тестирование). Роль прецедентов в функциональном тестировании.
- •47. Основы тестирования программного обеспечения методом «белый ящик» (структурное тестирование).
- •48. Понятие надежного по. Различие между надежностью аппаратуры и по.
- •49. Модели надёжности по. Сравнение моделей оценки надежности по. Перспективы построения «хороших» моделей оценки надежности по.
- •50. Динамические модели надежности программного обеспечения (Шумана).
- •51. Статические модели надежности программного обеспечения (Миллса).
- •52. Case - технологии (инструменты, системы, средства). Эволюция case - средств, их классификация, характеристики современных case - инструментов. Перспективы развития. (По Вендрову, Калянову).
- •53. Классификация средств разработки (case - инструментов).
- •54. Технологический скачок (тс) в программировании. Признаки технологического скачка. Исторические факты технологических скачков.
44. Понятие качества программного обеспечения. Составляющие и критерии качества. Обеспечение качества как процесс, а не этап. Международный стандарт iso 9000/9001.
Качественное ПО. Качество — совокупность характеристик объекта, относящихся к его способности удовлетворить установленные и предполагаемые потребности. В рамках ПО, под данным понятием подразумевается способность программы выдавать ожидаемые пользователем результаты. Многократное нарушение данного принципа за достаточно непродолжительный период времени говорит об отсутствии качества в ПО. Следовательно, для ПО, критерием качества является ее работа (отсутствуют или присутствуют ошибки в системе).
Обеспечение качества как процесс, а не этап. Обеспечение качества нельзя рассматривать как вполне самостоятельный этап ЖЦ, который осуществляется в строгой последовательности выполнения этапов. На каждом этапе ЖЦ, в систему закладывается элементы, которые придадут системе заданный уровень качества. Например, на этапе проектирования, это архитектура системы. Если архитектура спроектирована верно, то система будет более стабильно функционировать и эффективнее (оперативно) выполнять функции, что говорит о высоком качестве. На этапе сопровождения системы, необходимо поддерживать требуемое для системы окружение (условия функционирования). Обеспечивая такое окружение, система покажет лучший результат своей работы: снизится количество сбоев, внезапных остановов, потери информации и т.д. Это так же определяет качество функционирования ПО.
Стандарт ISO. Международные стандарты серии ISO 9000 регламентируют создание системы управления качеством. Однако они являются общими, лишь рекомендательными. Каждая компания, производящая ПО и желающая внедрить у себя действенную систему управления качеством на основе стандартов ISO 9000-й серии, должна учесть специфику своей отрасли и разработать систему показателей качества, которая бы отражала реальное влияние факторов качества на программный продукт.
45. Задачи тестирования программного обеспечения. Тестирование как процесс, а не этап. Тестирование модулей, интерфейсов, сборки. Нисходящее и восходящее тестирование. Метрики тестирования и окончание тестирования.
Тестирование — процесс выполнения программы, с целью обнаружения ошибок. В тестировании участвуют представители Заказчика (конечные пользователи) и разработчики. Тестирование ПО производится на заранее подготовленных тестах.
Каждый тест определяет: 1). свой набор исходных данных и условий для запуска, программы; 2). набор ожидаемых результатов работы программы.
Тестирование обеспечивает: 1). обнаружение ошибок; 2). демонстрацию соответствия функций программы ее назначению; 3). демонстрацию реализации требований к характеристикам программы; 4). отображение надежности как индикатора качества программы.
Процесс тестирования состоит из трёх этапов: проектирование тестов (решается вопрос о выборе некоторого подмножества множества тестов); исполнение тестов (проводят, запуск тестов и отлавливают ошибки в тестируемом программном продукте) и анализ полученных результатов.
Тестирование как процесс, а не этап. Тестирование нельзя рассматривать как вполне самостоятельный этап ЖЦ, который осуществляется в строгой последовательности выполнения этапов. Скорей, процедуры, предусмотренные в тестировании, применяются на всех других этапах ЖЦ. Например, после проектирования и анализа, можно производить тестирование спецификаций. По завершению этапа реализации и отладки, возможно проведение тестирование работоспособности системы. На конечном этапе (приемка) производятся приемочные испытания, которые так же являются элементами тестирования.
Тестирование модулей, интерфейсов, сборки. Тестирование модулей – применяется для выявления ошибок в работе группы методов, объединенных в модули или отдельные подсистемы. Тестирование можно проводить методами “черного ~” и “белого ящика”. Тестирование интерфейсов – применяется, когда модули или подсистемы интегрируются в большие системы. Каждый модуль или подсистема имеет заданный интерфейс, который вызывается другими компонентами системы. Цель тестирования – выявить ошибки, возникающие в системе, вследствие ошибок в интерфейсах или неправильных предложениях об интерфейсах. Тестирование сборки – осуществляется после тестирования всех компонентов, когда система собирается из компонентов. Во время сборки системы возникает проблема локализации выявленных ошибок. Между компонентами существуют сложные взаимоотношения, где и могут возникать ошибки. Такое тестирование выявляет ошибки при интеграции компонентов.
Нисходящее и восходящее тестирование. Известны два подхода к совместному тестированию модулей: пошаговое и монолитное тестирование. При монолитном тестировании сначала по отдельности тестируются все модули программного комплекса, а затем все они объединяются в рабочую программу для комплексного тестирования.
При пошаговом тестировании каждый модуль для своего тестирования подключается к набору уже проверенных модулей. В целом более целесообразным является выбор пошагового тестирования. При его использовании возможны две стратегии подключения модулей: нисходящая и восходящая.
Нисходящее тестирование начинается с главного (или верхнего) модуля программы, а выбор следующего подключаемого модуля происходит из числа модулей, вызываемых из уже протестированных. Одна из основных проблем, возникающих при нисходящем тестировании, - создание заглушек. Другая проблема, которую необходимо решать при нисходящем тестировании, - форма представления тестов в программе, так как, как правило, главный модуль получает входные данные не непосредственно, а через специальные модули ввода, которые при тестировании в начале заменяются заглушками. Для передачи в главный модуль разных тестов нужно или иметь несколько разных заглушек, или записать эти тесты в файл во внешней памяти и с помощью заглушки считывать их.
При восходящем тестировании проверка программы начинается с терминальных модулей (т.е. тех, которые не вызывают не каких других модулей программы). Эта стратегия во многом противоположна нисходящему тестированию. Основными недостатком восходящего тестирования является то, что проверка всей структуры разрабатываемого программного комплекса возможна только на завершающей стадии тестирования.
Метрики и окончания тестирования.
Чтобы принять решение о прекращении тестирования, чтобы выбрать оптимальный набор тестов и для многих других целей используются метрики тестирования и качества. Они позволяют оценить покрытие кода продукта тестами, спрогнозировать число ненайденных дефектов, оценить характеристики тестируемой системы.
В качестве метрик могут использоваться такие количественные характеристики, как количество проведенных тестов, из них количество успешных и не успешных, процентное соотношение данных показателей. Можно рассматривать так же динамику результатов тестов, как показатели меняются – увеличиваются или уменьшаются. На основе анализа данных показатели можно принять решение о завершении, или продление этапа тестирования.
