
- •Содержание (Технология программирования)
- •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. Технологический скачок (тс) в программировании. Признаки технологического скачка. Исторические факты технологических скачков.
35. Производительность труда программиста. Различия в прогах опытного программиста и новичка по ф. Бруксу.
Производительность труда очень важно в программировании, т.к. время – самый дорогой ресурс. Любое нововведение в программирование остаётся если оно позволяет повысить производительность труда программиста.
Соотношение производительности труда программистов. Впервые эта цифра появилась в исследованиях Сакмана. Он приводит, что производительность труда у разных программистов соотносится как 1:25. Такого соотношения производительности труда нет ни в одной отрасли. Это, безусловно, крайние цифры, но 1:10 гарантировано встречается на практике. Кроме того, программы написанные более опытным программистом чаще всего требуют меньше ресурсов (1:2) и работают быстрее (1:2), не говоря уже о том, что они содержат меньше ошибок. Программы, написанные опытным программистом легче читать, они яснее концептуально.
Одним из шагов по увеличению производительности программиста являлся уход от «программирования в коде». Основные недостатки «программирования в коде» чрезвычайно низкая производительность труда программиста, значительная трудоёмкость написания любой программы и «машинные» требования к кодированию. Поэтому, как только стало ясно, что такое «программирование в коде», появилось множество идей по «упрощению» технологии программирования. Большинство из них было направлено на повышение производительности труда программиста, «упрощение» технологии программирования, повышение эффективности отладки.
Различия в программах опытного программиста и новичка. Опыт – важный фактор, который дает новые знания и понимание. «Программирование в коде» - кропотливый и трудоёмкий процесс. Практика показала, что скорость программирования составляла примерно 10 команд в день (но это у опытного программиста). Переход с одной машины на другую у опытного программиста занимал примерно полгода. На обучение программированию в коде новичка уходило до года.
36. Распределение стоимости разработки программного обеспечения по технологическим стадиям создания.
Рис. ЖЦ ПО, распределение стоимости по фазам.
Распределение стоимости разработки программного обеспечения обычно рассматривают по технологическим стадиям создания. Откуда видно, что, несмотря на свою ценность, стадия проектирования, как таковая занимает не более 20% стоимости ПО. Стадия собственно программирования около 30%. А вот стоимость сопровождения составляет половину стоимости ПО, что было далеко не очевидно до исследования. Сопровождение заключается в удовлетворении потребностей пользователя: устранении ошибок, проведении доработок по просьбе пользователя и, вообще, повышении полезности программы. Программисты стремятся избежать такой работы, т.к. считают ее менее творческой. Самая большая помеха при сопровождении обусловлена отсутствие квалифицированных кадров. Если сопровождение превалирует по стоимости, то стадия проектирования превалирует по числу допущенных ошибок.
При проектировании возникает до 61% - 64% ошибок и лишь остальные при реализации. Кроме того, ошибки, допущенные при проектировании, влияют на все последующие стадии, а их ликвидация обходится гораздо дороже. Иной раз ошибки, пропущенные на этой стадии, приводят к пересмотру всей схемы реализации программы.
В основном ошибки выявляются на этапе сопровождения, хотя и при отладке выявляется достаточно значительное количество ошибок. Ликвидация ошибок в стадии сопровождения является наиболее дорогим удовольствием.