
- •Содержание (Технология программирования)
- •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. Технологический скачок (тс) в программировании. Признаки технологического скачка. Исторические факты технологических скачков.
3 0. Эволюция системного программного продукта. Понятие и составляющие программы, программного комплекса, программного продукта, системного программного продукта (по ф. Бруксу)
Эволюция системного программного продукта ->
Программа – завершенный продукт, пригодным для запуска своим автором на системе, на которой она была разработана. Это тот объект, посредством которого программист оценивает свою производительность.
При пересечении горизонтальной границы программа превращается в программный продукт.
Программный продукт – это программа, которую любой человек может запускать, тестировать, исправлять и развивать. Она может использоваться в различных операционных средах и со многими наборами данных. Чтобы стать общеупотребительным программным продуктом, программа должна быть написана в обобщенном стиле. В частности, диапазон и вид входных данных должны быть настолько обобщенными, насколько это допускается базовым алгоритмом. Затем программу нужно тщательно протестировать, чтобы быть уверенным в ее надежности. Для этого нужно подготовить достаточное количество контрольных примеров для проверки диапазона допустимых значений входных данных и определения его границ, обработать эти примеры и зафиксировать результаты. Наконец, развитие программы в программный продукт требует создания подробной документации, с помощью которой каждый мог бы использовать ее, делать исправления и расширять. Следовательно, программный продукт стоит, по меньшей мере, втрое дороже, чем просто отлаженная программа с такой же функциональностью.
При пересечении вертикальной границы программа становится компонентом программного комплекса. Последний представляет собой набор взаимодействующих программ, согласованных по функциям и форматам, составляющих полное средство для решения больших задач. Чтобы стать частью программного комплекса, синтаксис и семантика ввода и вывода программы должны удовлетворять точно определенным интерфейсам. Программа должна быть также спроектирована таким образом, чтобы использовать заранее оговоренный бюджет ресурсов – объем памяти, устройства ввода/вывода, процессорное время. Наконец, программу нужно протестировать вместе с прочими системными компонентами во всех сочетаниях, которые могут встретиться. Это тестирование может оказаться большим по объему, поскольку количество тестируемых случаев растет экспоненциально. Оно также занимает много времени, так как скрытые ошибки выявляются при неожиданных взаимодействиях отлаживаемых компонентов. Компонент программного комплекса стоит, по крайней мере, втрое дороже, чем автономная программа с теми же функциями. Стоимость может увеличиться, если в системе много компонентов. В правом нижнем углу рисунка находится системный программный продукт. От обычной программы он отличается во всех перечисленных выше отношениях. И стоит, соответственно, в десять раз дороже. Но это действительно полезный объект, который является целью большинства системных программных проектов.
31. Борьба со сложностью в программном обеспечении. Эволюция методов анализа и разработки (sa/sd, ooa/ood).
Эволюция:
Изначально не существовало никаких методов анализа и разработки проектов, поскольку это и не было нужным (маленькие системы, автоматизирующие элементарные функции), но с течением времени требования к системам возрастали, возросли и области и широта применения систем, а соответственно программисты столкнулись со сложностью анализа и разработки больших систем. Необходимо было найти способ, позволяющий формализовать и облегчить работу программиста. Появление методов SA/SD (структурного анализа и разработки проекта) привело к возможности построения графических представлений создаваемой программной системы. Эти методы стали использоваться с 70-х, и теперь признаны "проверенными и правильными". Они применяются совместно с любым типом приложения и могут быть реализованы на любой платформе.
Анализ SA/SD длительное время применялся при разработке в качестве методики моделирования процесса, данных и поведенческих аспектов. В условиях этой методологии основной акцент делается на уточнении и разложении на составные элементы функциональных возможностей системы. Для функционального разложения и структурирования данных применяются диаграммы потоков данных, диаграммы управления потоками, словарь данных, диаграммы переходов состояния и диаграммы отношений объектов. DFD- и CFD- диаграммы при перемещении данных в системе моделируют трансформацию данных/контроль данных. Словарь данных определяет потоки данных и их хранилища. Диаграммы взаимосвязей иллюстрируют отношения между хранилищами данных. Т.е. модели были как бы разрознены м/у собой. Подобный подход при тестировании оказывается не совсем точным, особенно если изменяются функциональные требования, что часто приводит к реструктуризации моделей.
Появление OOA/OOD. ОО-модель организует систему на основе объектов реального мира или концептуальных объектов, важных для пользователя. Этот подход является противоположным разделению функций и данных. Объект реального мира, существующий внутри области действия приложения, определяется в терминах ответственностей (поведения), соответствующих данных (атрибутов) и отношения к другим объектам. Все функции объекта скрыты в самих деталях объекта. Поэтому если необходимы функциональные изменения, они производятся внутри объекта, что приводит к незначительным изменениям в оставшейся части модуля. Для применения в объекте обновленных или добавленных функций, оставшиеся объекты в модели поддерживаются с помощью интерфейса. ОО-разработчики обычно используют как статические (Диаграммы класса, Диаграммы объектов, Усовершенствованный класс диаграмм), так и динамические модели (Применение регистра, Сценарий, Диаграмма действий, Диаграммы взаимодействия- диаграммы сотрудничества и последовательности, Диаграммы перехода между состояниями).
Подходы SA/SD и OOA/OOD имеют много общего. Конечно, имеются и значительные отличия, однако иногда более новые методики опираются на то, что хорошо известно. Основным преимуществом OOA/OOD является способность проекта к повторному определению или сотрудничеству. На протяжении всего процесса разработки создаются диаграммы одних типов, а действительные элементы, отображаемые в аналитических моделях, продолжают существовать до завершения разработки. Диаграмма класса, играющая роль аналитического инструмента, обладает свойствами, которые проявляются во время разработки и при внедрении системы.