Введение в программную инженерию. От программирования к программной инженерии

Содержание

Слайд 2

Герман Холлерит Герман Холлерит (Herman Hollerith, 1860-1929). Счетно-табуляционные машины, предназначенные для обработки статистической информации.

Герман Холлерит

Герман Холлерит (Herman Hollerith, 1860-1929).

Счетно-табуляционные машины,
предназначенные для обработки
статистической информации.

Слайд 3

Счетно-табуляционные машины 1911 г. DEHOMAG с коммутационной доской, позволяющей перенастраивать машину

Счетно-табуляционные машины

1911 г.
DEHOMAG с коммутационной доской,
позволяющей перенастраивать машину на
выполнение разных последовательностей

действий.

1935 г. DEHOMAG D11.
Возможность автоматически выполнять последовательность арифметических действий.

Слайд 4

Специализированные машины 1914 г. Релейная машина для вычислений по формуле p

Специализированные машины

1914 г. Релейная машина для вычислений
по формуле p ×q −

b.

Леонардо Торрес-и-Кеведо
(Leonardo Torres-y-Quevedo,
1852-1936).

Слайд 5

Появление памяти Июнь 1923 г. Уроженец Испании Франсиско Кампос (Francisco Campos

Появление памяти

Июнь 1923 г. Уроженец Испании Франсиско Кампос (Francisco Campos Campaña)

получил в Германии патент (заявка была подана 2 марта 1920 г.) на механическую бухгалтерскую машину, предназначенную для раздельного ведения счетов нескольких клиентов.
Машина могла складывать, вычитать, а также запоминать и хранить числа в памяти.
Она состояла из десяти пятизначных чисел, представленных наборами зубчатых реек (каждая рейка соответствовала одному разряду).

10 сентября 1924 г. Немецкий изобретатель Альфред Краузе (Alfred Krause) получил патент на механическую бухгалтерскую машину, содержавшую устройство памяти для хранения результатов вычислений (судя по всему, в качестве прототипа своей разработки Краузе использовал патент Ф. Кампоса).

Слайд 6

Появление памяти 1928 г. Ф. Кампос изготовил первый экземпляр своей механической

Появление памяти

1928 г. Ф. Кампос изготовил первый экземпляр своей механической бухгалтерской

машины. По сравнению с описанным в патенте прототипом, Кампосу удалось добиться серьезного прогресса – его машина могла хранить и обрабатывать 1000 девятиразрядных десятичных чисел. Память была адресуемой (набрав номер счета, можно было распечатать его состояние). Машина Кампоса не имела ни предшественников, ни аналогов – это уникальное устройство стало первой в истории механической вычислительной машиной, имеющей память такого большого объема.
Слайд 7

Появление памяти Бухгалтерские машины модели “National 3000” компании NCR имели несколько

Появление памяти

Бухгалтерские машины модели “National 3000” компании NCR имели несколько регистров

для запоминания промежуточных результатов и обладали возможностью передачи данных из регистра в регистр.
С их помощью можно было фактически имитировать работу разностной машины Бэббиджа.
Начало 1920-х гг.
Слайд 8

Конрад Цузе Конрад Цузе (Konrad Zuse, 1910-1995).

Конрад Цузе

Конрад Цузе (Konrad Zuse, 1910-1995).

Слайд 9

Компьютеры Конрада Цузе Каждая ячейка памяти состояла из трех металлических пластинок,

Компьютеры Конрада Цузе

Каждая ячейка памяти состояла из трех металлических пластинок, средняя

из которых могла двигаться, смещая при этом штырь влево или вправо и тем самым определяя значение ячейки – 0 или 1.
Главным достоинством такой памяти Цузе считал ее компактность и расширяемость.

1938 г. Механический управляемый программой компьютер Z-1.

Слайд 10

Первый электронный компьютер ENIAC Джон Моучли (John William Mauchly, 1907-1980) Джон

Первый электронный компьютер ENIAC

Джон Моучли (John William Mauchly, 1907-1980)
Джон Преспер Эккерт-мл.

(John Presper Eckert, Jr, 1919-1995)

Джон фон Нейман
(John von Neumann, 1903-1957).

Слайд 11

“Программирование” на ENIAC Август 1942 г. Джон Моучли впервые использовал термин

“Программирование” на ENIAC

Август 1942 г. Джон Моучли впервые использовал термин to

program (программировать), но еще не в современном смысле, а для обозначения процесса соединения исполнительных устройств проектировавшейся им вычислительной машины с помощью штекерного коммутатора.

1945 г.

Слайд 12

А программа записывалась так… Так работали первые “программисты”…

А программа записывалась так…

Так работали первые
“программисты”…

Слайд 13

Принципы фон Неймана 1. Программное управление работой компьютера. 2. Принцип условного

Принципы фон Неймана

1. Программное управление работой компьютера.
2. Принцип условного перехода.
3. Принцип

хранимой программы.
4. Использование двоичной системы счисления.
5. Принцип иерархичности памяти.
Фактически эти принципы выработали Д. Моучли и П. Эккерт.
Некоторые считают, что еще раньше их сформулировал Конрад Цузе.

Июнь 1945 г. Джон фон Нейман присоединился к группе разработчиков ENIAC и принял активное участие в обсуждении проекта их будущего компьютера EDVAC (Electronic Discrete VAriable Computer).
Отчет “First Draft of Report on the EDVAC”:

Слайд 14

Термин “программа” Июль 1946 г. В своей лекции на конференции в

Термин “программа”

Июль 1946 г. В своей лекции на конференции в Пенсильванском

университете Преспер Эккерт охарактеризовал принципиально новую концепцию компьютерной архитектуры, основанную на хранении программы в памяти, и впервые использовал слово программа в современном значении.
Джон фон Нейман этот термин использовал крайне редко. В своей работе 1945 г., давая описание особенностей новой архитектуры, он говорит об инструкциях, стандартных командах (standard orders), операциях и коде (code) – но ни разу о программе! Год спустя в одной из статей словом программа он пользуется наряду со словом код, а еще через год – снова отказывается от него в пользу терминов план (plan) и установка (set-up).
Декабрь 1951 г. В отчете по работе над ЭВМ М-1, построенной под руководством И. С. Брука, четко говорится, что “Набор инструкций, необходимых для решения задачи, называется программой”.
Слайд 15

Что же такое программирование? Программа. Последовательность операций, выполняемых компьютером для достижения

Что же такое программирование?

Программа. Последовательность операций, выполняемых компьютером для достижения поставленной

цели или задачи. Описание на языке программирования действий, которые должен выполнить компьютер в соответствии с алгоритмом решения конкретной задачи. Упорядоченная последовательность команд, подлежащих обработке.
Программирование – совокупность процессов, связанных с разработкой программ и их реализацией.
В широком смысле к этим процессам относят все технические операции, необходимые для создания программ, в том числе анализ требований, все стадии разработки, а также реализации в виде готового продукта.
В узком смысле программирование – процессы выбора структуры, кодирования и тестирования программ.
Слайд 16

EDSAC, 1949 г. – первый компьютер с хранимой программой

EDSAC, 1949 г. –
первый компьютер
с хранимой программой

Слайд 17

Программирование для EDSAC Июль 1949 г. Фрагмент программы вычисления интеграла Айри,

Программирование для EDSAC

Июль 1949 г.
Фрагмент программы вычисления интеграла Айри, − решения

уравнения Айри: y ’’=xy.

157 команд, около 20 ошибок!

Слайд 18

Отладка Морис Уилкс вспоминал позднее, какой ужас охватил его при мысли,

Отладка

Морис Уилкс вспоминал позднее, какой ужас охватил его при мысли, что

“большую часть оставшейся жизни придется провести в поисках ошибок в собственных программах”.
Именно тогда разработчики компьютеров впервые осознали необходимость создания эффективных методов обнаружения ошибок (тестирования) и отладки программ, а также более эффективных методов написания самих программ.

Дэвид Уилер (1927-2004)

Слайд 19

“The Preparation of programs for an electronic digital computer: with special

“The Preparation of programs for an electronic digital computer: with special

reference to the EDSAC and the use of a library of subroutines”.
Maurice Wilkes, David Wheeler, Stanley Gill (1951)

Первые монографии

Слайд 20

Plankalkül Конрада Цузе – первый язык программирования − объединение двух значений.

Plankalkül Конрада Цузе –
первый язык программирования

− объединение двух значений.

− присваивание.

оператор повторения.

− заголовок подпрограммы.

Язык был разработан Конрадом Цузе в 1945 г. Описание частично опубликовано в 1959 и 1972 годах.

Слайд 21

Plankalkül Конрада Цузе – первый язык программирования Программа проверки синтаксической правильности

Plankalkül Конрада Цузе –
первый язык программирования

Программа проверки синтаксической правильности записи булевского

выражения.

2000 г. Первая реализация языка.

Слайд 22

Вавилонская башня языков программирования Jean Sammet. Programming languages: history and fundamentals. 1969

Вавилонская башня языков программирования

Jean Sammet.
Programming languages: history and fundamentals. 1969

Слайд 23

Anthony G. Oettinger, профессор Гарварда The hardware-software complementarity // Communications of

Anthony G. Oettinger,
профессор Гарварда

The hardware-software complementarity // Communications of the ACM.

1967. Vol. 10. No 10. Pp. 604–606.
Слайд 24

Термин «программная инженерия» впервые широко зазвучал в 1968 году в Гармиш-Партенкирхене

Термин «программная инженерия» впервые широко зазвучал в 1968 году в Гармиш-Партенкирхене

на конференции, организованной Научным комитетом НАТО. Его введение должно было стимулировать поиск решений для имевшего место в то время «кризиса программного обеспечения».
Результатом этого поиска со временем стало появление соответствующей области исследований и профессии программного инженера.
Слайд 25

Труды конференции 1968 г.

Труды конференции 1968 г.

Слайд 26

Фридрих Л. Бауэр (1924-2015) «Кризис программного обеспечения» — последствия быстрого роста

Фридрих Л. Бауэр (1924-2015)

«Кризис программного обеспечения» — последствия быстрого роста вычислительной мощности

компьютеров и сложности решаемых с их помощью задач.
Фактически это сложность написания работоспособного, понятного программного обеспечения с использованием верифицированных алгоритмов.
Слайд 27

1964 г. Программа на языке Фортран Вместо DO 10 I=1,5 …

1964 г.
Программа на языке Фортран
Вместо
DO 10 I=1,5

10 …
Было написано
DO 10

I=1.5
Компилятор воспринял как
DO10I=1.5
О пользе типизации данных…

ЦЕНА ПРОГРАММНОЙ ОШИБКИ

Слайд 28

Эдсгер Дийкстра (1930-2002) «Craftsman or Scientist?» («Ремесленник или ученый?»), 1975 Конференция

Эдсгер Дийкстра (1930-2002)

«Craftsman or Scientist?» («Ремесленник или ученый?»), 1975 Конференция «ACM

Pacific 75»

«Отладка – процесс устранения ошибок в программе.
Программирование – процесс внесения ошибок».

Слайд 29

Margaret Hamilton, the Engineer Who Took the Apollo 11 to the Moon 16-24 июля 1969 г.

Margaret Hamilton, the Engineer Who Took the Apollo 11 to the

Moon

16-24 июля 1969 г.

Слайд 30

Инженерия (инженерное дело, инжиниринг; англ. engineering ← от лат. ingenium —

Инженерия (инженерное дело, инжиниринг; англ. engineering ← от лат. ingenium — «искусность» и

ingeniare — «изловчиться, разработать») — область технической деятельности, включающая ряд специализированных областей и дисциплин, направленная на практическое приложение и применение научных, экономических, социальных и практических знаний с целью обращения природных ресурсов на пользу человека.
Цели — изобретение, разработка, создание, внедрение, ремонт, обслуживание и/или улучшение техники, материалов или процессов.
Инженерия опирается на положения фундаментальной науки и результаты прикладных исследований.

Что такое инженерия?

Слайд 31

Программная инженерия (software engineering) — приложение систематического, дисциплинированного, измеримого подхода к

Программная инженерия (software engineering) — приложение систематического, дисциплинированного, измеримого подхода к развитию,

функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; приложение дисциплины инженерия к программному обеспечению.
Программная инженерия интегрирует принципы математики, информатики и компьютерных наук с инженерными подходами, разработанными для производства материальных объектов.
Системный подход к анализу, проектированию, оценке, реализации, тестированию, обслуживанию и модернизации программного обеспечения, то есть применение инженерии к разработке программного обеспечения.

Инженерия в программировании

Слайд 32

BI intro to computing B2 computers and programming B3 discrete structures

BI intro to computing
B2 computers and programming
B3 discrete structures
B4 numerical calculus
I1

data structures
I2 prog. languages
I3 comp. organization
I4 systems programming
I5 switching theory*
I6 num. analysis I*
I7 num. analysis II*
A1 formal languages
A2 advanced computer organization
A3 analog and hybrid computing
A4 systems simulation
A5 information retrieval
A6 computer graphics
A7 theory of computability
A8 large-scale information systems
A9 AI, heuristic programming

Curriculum 68
Computer Science

Слайд 33

CS1 programming I CS2 programming II CS3 comp. systems CS4 comp.

CS1 programming I
CS2 programming II
CS3 comp. systems
CS4 comp. organization
CS5 file processing
I1

data structures
I2 programming languages
I3 comp. organization
I4 systems programming
I5 switching theory
I6 num. analysis I
I7 num. analysis II
A1 formal languages
A2 advanced computer organization
A3 analog and hybrid computing
A4 systems simulation
A5 information retrieval
A6 computer graphics
A7 theory of computability
A8 large-scale information systems
A9 AI, heuristic programming

Curriculum 78
Computer Science

Слайд 34

• Дискретные структуры (DS) • Основы программирования (PF) • Алгоритмы и

• Дискретные структуры (DS)
• Основы программирования (PF)
• Алгоритмы и теория сложности

(AL)
• Архитектура и организация ЭВМ (AR)
• Операционные системы (OS)
• Распределенные вычисления (NC)
• Языки программирования (PL)
• Взаимодействие человека и машины (HC)
• Графика и визуализация (GV)
• Интеллектуальные системы (IS)
• Управление информацией (IM)
• Социальные и профессиональные вопросы программирования (SP)
• Программная инженерия (SE)

Computing Curricula 91

Слайд 35

Computing Curricula 2001 Computing Curricula 2005 Computer Science Curriculum 2008 Computer

Computing Curricula 2001
Computing Curricula 2005
Computer Science Curriculum 2008
Computer Science Curricula 2013

Последующие

стандарты

Программная инженерия – неотъемлемая часть!

Слайд 36

Software Engineering 2004

Software Engineering 2004

Слайд 37

Software Engineering 2014

Software Engineering 2014

Слайд 38

Карьера в информационных технологиях. М., 2004 Программная инженерия в списке возможных занятий ИТ-специалиста еще отсутствовала!

Карьера в информационных технологиях. М., 2004

Программная инженерия в списке возможных занятий

ИТ-специалиста еще отсутствовала!