60
Разработка ПО проектирование Павел Егоров @xoposhiy [email protected]

Software engineering. Введение в специальность. Проектирование, требования

Embed Size (px)

Citation preview

Page 1: Software engineering. Введение в специальность. Проектирование, требования

Разработка ПОпроектирование

Павел Егоров@xoposhiy

[email protected]

Page 2: Software engineering. Введение в специальность. Проектирование, требования

Архитектура

Высокоуровневый дизайн

Детальный дизайн

Язык программирования, фреймворк, технология, операционная система, …

Разбиение на компоненты, интерфейсы, протоколы взаимодействия

Устройство и взаимодействие отдельных классов

Page 3: Software engineering. Введение в специальность. Проектирование, требования

Проектирование?

подготовка кода к изменениям…к наиболее вероятным

Page 4: Software engineering. Введение в специальность. Проектирование, требования

?!?

Page 5: Software engineering. Введение в специальность. Проектирование, требования

Нужен пример!

Page 6: Software engineering. Введение в специальность. Проектирование, требования

Курс «Математический анализ» Список литературы1. Демидович Б.П. «Сборник задач по матану»2. Ильин, Позняк «Основы матана»  Таблица успеваемости

Контрольная 1

Контрольная 2

Экзамен

Иванов 4 5 5

Петров — 3 3

Сидоров 5 — 4

Page 7: Software engineering. Введение в специальность. Проектирование, требования

Что тут думать? Делать надо!

Write("<html><body>");Write("<h1>Курс "+GetCourseName(courseId)+"</h1>");Write("<h2>Список литературы</h2>");Write("<ol>");foreach(var book in GetCourseBooks(courseId))

Write("<li>" + book + "</li>");Write("</ol>");Write("<h2>Таблица успеваемости</h2>");...

Page 8: Software engineering. Введение в специальность. Проектирование, требования

Проектирование —

подготовка кода к изменениям…к наиболее вероятным

Page 9: Software engineering. Введение в специальность. Проектирование, требования

Наиболее вероятные изменения?

Курс «Математический анализ» Список литературы1. Демидович Б.П. «Сборник задач по матану»2. Ильин, Позняк «Основы матана»  Таблица успеваемости

Контрольная 1

Контрольная 2

Экзамен

Иванов 4 5 5

Петров — 3 3

Сидоров 5 — 4

Page 10: Software engineering. Введение в специальность. Проектирование, требования

Наиболее вероятные изменения?

• Другой стиль оформления• Другие странички из списков,

таблиц и заголовков• Другие форматы: *.txt, *. pdf, …• Новые элементы: картинки,

графики, …

Page 11: Software engineering. Введение в специальность. Проектирование, требования

Проблему осознали.

Как её решать?

Page 12: Software engineering. Введение в специальность. Проектирование, требования

Не знаешь что делать?Отделяй логику от представления!

Заголовок документаЗаголовок спискаСписокЗаголовок таблицыТаблица

<h1>…</h1><h1>…</h1><ol> … </ol><h1>…</h1><table>

<tr><td>…</table>

Page 13: Software engineering. Введение в специальность. Проектирование, требования

WriteBeginDocument();WriteHeader("Курс " + courseName);WriteHeader("Список литературы");WriteList(booksList);WriteHeader("Таблица успеваемости");WriteTable(exams, students, marks);WriteEndDocument();

Логика без представления

Html → Text

Page 14: Software engineering. Введение в специальность. Проектирование, требования

Html → Text

Как подменять реализацию WriteXXXX?

Page 15: Software engineering. Введение в специальность. Проектирование, требования

Объект— нечто, с чем можно взаимодействовать— возможно, имеющее состояние

Нечто, умеющее создавать примитивы в HTML: заголовки, списки, таблицы, …

ООП

Page 16: Software engineering. Введение в специальность. Проектирование, требования

ООПСоздать объект

writer = new HtmlDocumentWriter();

Совершить действия с объектомwriter.WriteHeader("Курс " +

courseName);

Типы объектов объединяются в иерархии

HtmlDocumentWriter is a WriterPdfDocumentWriter is a Writer

Page 17: Software engineering. Введение в специальность. Проектирование, требования

ООПvoid WriteCourseDocument(DocumentWriter writer){

...writer.WriteHeader("Курс " + courseName);writer.WriteHeader("Список литературы");writer.WriteList(booksList);writer.WriteHeader("Таблица успеваемости");writer.WriteTable(exams, students, marks);

}WriteCourseDocument(new HtmlDocumentWriter());

Page 18: Software engineering. Введение в специальность. Проектирование, требования

И что получилось?

Page 19: Software engineering. Введение в специальность. Проектирование, требования

Появляются новые виды отчетов

void WriteCourseDocument(DocumentWriter writer){

...writer.WriteHeader("Курс " + courseName);writer.WriteHeader("Список литературы");writer.WriteList(booksList);writer.WriteHeader("Таблица успеваемости");writer.WriteTable(exams, students, marks);

}WriteCourseDocument(new HtmlDocumentWriter());

Page 20: Software engineering. Введение в специальность. Проектирование, требования

Появляются новые виды отчетов

void WriteFinanceDocument(DocumentWriter writer){

...writer.WriteHeader("Наши финансы");writer.WriteHeader("Потрачено");writer.WriteList(expenses);writer.WriteHeader("Заработано");writer.WriteList(income);

}

Page 21: Software engineering. Введение в специальность. Проектирование, требования

Другие форматы: *.txt, *. pdf, …

WriteCourseDocument(new HtmlDocumentWriter());WriteCourseDocument(new TextDocumentWriter());WriteCourseDocument(new PdfDocumentWriter());...

Новый формат — новый Writer.

Page 22: Software engineering. Введение в специальность. Проектирование, требования

Новые элементы: картинки, графики, …

Новые методы DocumentWriter

writer.WritePlot(…) writer.WriteImage(…)...

Page 23: Software engineering. Введение в специальность. Проектирование, требования

Диаграма классовAbstractDocumentWriter

WriteTitleWriteListWriteTableWriteImage

HtmlWriter

WriteTitleWriteListWriteTableWriteImage

PdfWriterWriteTitleWriteListWriteTableWriteImage

CourseReport

FinanceReport

Page 24: Software engineering. Введение в специальность. Проектирование, требования

Мораль

1. Архитектура бывает объективно плохой.

2. Хорошая архитектура не требует сильно больше усилий [при некотором опыте]

Page 25: Software engineering. Введение в специальность. Проектирование, требования

Круто! Хочу быть проектировщиком!1. Сначала стань хорошим

программистом!2. Нет! П.1 точно нельзя

пропустить!3. Читай, пробуй, думай

Page 26: Software engineering. Введение в специальность. Проектирование, требования

Читать?

Принципы SOLID (см. google.com)

Page 28: Software engineering. Введение в специальность. Проектирование, требования
Page 29: Software engineering. Введение в специальность. Проектирование, требования

Разработка ПОтребования

Павел Егоров@xoposhiy

[email protected]

Page 30: Software engineering. Введение в специальность. Проектирование, требования

Стоимость разработки

Подготовка50%

Кодирование

20%

Тестирование

30%

Page 31: Software engineering. Введение в специальность. Проектирование, требования

Как собиратьи фиксировать требования?

Joel Spolsky Функциональные спецификации малой кровью Подкаст u http://habrahabr.ru/post/64608/

eng: http://www.scrumalliance.org/articlesrus: http://blog.scrumtrek.ru/

Доклады: http://www.req-labs.ru/

Page 32: Software engineering. Введение в специальность. Проектирование, требования

…500+ страниц каждая…

Как собиратьи фиксировать требования?

Page 33: Software engineering. Введение в специальность. Проектирование, требования

Самое простоеuser-story

Page 34: Software engineering. Введение в специальность. Проектирование, требования
Page 35: Software engineering. Введение в специальность. Проектирование, требования

User Storyтипичная история из жизни пользователя

Page 36: Software engineering. Введение в специальность. Проектирование, требования

После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости

Позиционировать в ленте на последнем прочитанном

сообщении

Page 37: Software engineering. Введение в специальность. Проектирование, требования

После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости

Позиционировать в ленте на последнем прочитанном

сообщении

Page 38: Software engineering. Введение в специальность. Проектирование, требования

Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь

Загружать беседу сразу при

открытии твита

Page 39: Software engineering. Введение в специальность. Проектирование, требования

Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь

Загружать беседу сразу при

открытии твита

Page 40: Software engineering. Введение в специальность. Проектирование, требования

Увидев интересную ссылку, Петя решил открыть ее в браузере.Но из-за медленного интернета, оставив браузер открывать ссылку, вернулся обратно читать твиттер

Сделать кнопку «Открыть в фоне» / «Прочитать

позже»

Page 41: Software engineering. Введение в специальность. Проектирование, требования

Удачные User story помогают

формулировать требования

Page 42: Software engineering. Введение в специальность. Проектирование, требования

На что ещё годятся User Stories?

Page 43: Software engineering. Введение в специальность. Проектирование, требования

User Stories с приоритетами — это и есть план!

Page 44: Software engineering. Введение в специальность. Проектирование, требования

Прогон user story при тестировании помогает

вскрывать проблемы

Page 45: Software engineering. Введение в специальность. Проектирование, требования

При должном старании можно

сформулировать сотни User Stories!

Page 46: Software engineering. Введение в специальность. Проектирование, требования

«Эпик» — цель пользователя

• Петя продвигает сайт через twitterДля этого он фоловит, отвечает, ищет, пишет, ставит кнопки на сайт…

• Катя следит за жизнью супер-звездДля этого она читает, смотрит фотки, ходит по ссылкам

Page 47: Software engineering. Введение в специальность. Проектирование, требования

User Story — важные жизненные истории,

вскрывающие требованияпомогающие планировать

и тестировать

Обрастают детальными требованиями

и группируются в Эпики

Page 48: Software engineering. Введение в специальность. Проектирование, требования

Пользовательские интерфейсы

Page 49: Software engineering. Введение в специальность. Проектирование, требования

часто применяется при проектировании

пользовательских интерфейсов

Прототипирование— быстрая проверка идеи

Page 50: Software engineering. Введение в специальность. Проектирование, требования

Прототип на бумаге

Page 51: Software engineering. Введение в специальность. Проектирование, требования

Прототип на доске

Page 52: Software engineering. Введение в специальность. Проектирование, требования

Черновики в блокнотике

Page 53: Software engineering. Введение в специальность. Проектирование, требования

http://www.balsamiq.com/

Page 54: Software engineering. Введение в специальность. Проектирование, требования

Прототипирование интерфейса вместе с потенциальным пользователем

Проверено, отлично работает!

Впрочем, не только с интерфейсами

Page 55: Software engineering. Введение в специальность. Проектирование, требования

Тестирование прототипа:Найти потенциального

пользователяПодготовить “задачи”

Замечать все затруднения у пользователя!

Пример: http://www.youtube.com/watch?v=9wQkLthhHKA

Page 56: Software engineering. Введение в специальность. Проектирование, требования
Page 57: Software engineering. Введение в специальность. Проектирование, требования
Page 58: Software engineering. Введение в специальность. Проектирование, требования

Курс «Проектирование пользовательских интерфейсов»

(СКБ Контур и Яндекс)

http://cripi.ru + следите за объявлениями!

Page 59: Software engineering. Введение в специальность. Проектирование, требования

С чего начать«Дизайн пользовательского интерфейса» Влад Головач«Не заставляйте меня думать» Стив Круг«Психбольница в руках пациентов» Алан Купер

В сетиФреш: новости мира юзабилити — http://fresh.gui.ru/Советы Бюро Горбунова — http://artgorbunov.ru/bb/soviet/Дизайн-собака — http://design.artgorbunov.ru/Ководство — http://www.artlebedev.ru/kovodstvo/sections/