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

Post on 16-Jun-2015

479 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

Transcript

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

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

pe@kontur.ru

Архитектура

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

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

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

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

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

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

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

?!?

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

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

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

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

Экзамен

Иванов 4 5 5

Петров — 3 3

Сидоров 5 — 4

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

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>");...

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

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

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

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

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

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

Экзамен

Иванов 4 5 5

Петров — 3 3

Сидоров 5 — 4

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

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

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

графики, …

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

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

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

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

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

<tr><td>…</table>

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

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

Html → Text

Html → Text

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

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

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

ООП

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

writer = new HtmlDocumentWriter();

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

courseName);

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

HtmlDocumentWriter is a WriterPdfDocumentWriter is a Writer

ООПvoid WriteCourseDocument(DocumentWriter writer){

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

}WriteCourseDocument(new HtmlDocumentWriter());

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

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

void WriteCourseDocument(DocumentWriter writer){

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

}WriteCourseDocument(new HtmlDocumentWriter());

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

void WriteFinanceDocument(DocumentWriter writer){

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

}

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

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

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

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

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

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

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

WriteTitleWriteListWriteTableWriteImage

HtmlWriter

WriteTitleWriteListWriteTableWriteImage

PdfWriterWriteTitleWriteListWriteTableWriteImage

CourseReport

FinanceReport

Мораль

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

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

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

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

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

Читать?

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

Вопросы?

@xoposhiype@kontur.ru

http://vk.com/kontur_edu

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

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

pe@kontur.ru

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

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

Кодирование

20%

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

30%

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

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

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

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

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

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

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

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

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

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

сообщении

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

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

сообщении

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

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

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

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

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

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

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

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

позже»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://www.balsamiq.com/

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

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

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

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

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

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

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

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

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

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

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

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

Вопросы?

@xoposhiype@kontur.ru

http://vk.com/kontur_edu

top related