SlideShare a Scribd company logo
Разработка ПО
  проектирование
               Павел Егоров
                 @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 Writer
     PdfDocumentWriter      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(…)
 ...
Диаграма классов
FinanceReport
                 AbstractDocumentWriter
                    WriteTitle
                    WriteList
                    WriteTable
                    WriteImage
CourseReport



                HtmlWriter       PdfWriter
                  WriteTitle      WriteTitle
                  WriteList       WriteList
                  WriteTable      WriteTable
                  WriteImage      WriteImage
Мораль
1. Архитектура бывает объективно плохой.

2. Хорошая архитектура не требует сильно
   больше усилий [при некотором опыте]
Круто!
Хочу быть проектировщиком!
1. Сначала стань хорошим программистом!
2. Нет! П.1 точно нельзя пропустить!
3. Читай, пробуй, думай
Читать?
Принципы SOLID (см. google.com)
Вопросы?




                @xoposhiy
              pe@kontur.ru
  http://vk.com/kontur_edu
Software engineering. Введение в специальность. Проектирование, требования
Разработка ПО
  требования
               Павел Егоров
                 @xoposhiy
               pe@kontur.ru
Стоимость разработки

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

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




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


      eng: http://www.scrumalliance.org/articles
      rus: http://blog.scrumtrek.ru/


 Доклады: http://www.req-labs.ru/
Как собирать
    и фиксировать требования?




      …500+ страниц каждая…
Самое простое
          user-story
Software engineering. Введение в специальность. Проектирование, требования
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
Software engineering. Введение в специальность. Проектирование, требования
Software engineering. Введение в специальность. Проектирование, требования
Курс «Проектирование
пользовательских интерфейсов»
     (СКБ Контур и Яндекс)



http://cripi.ru + следите за объявлениями!
С чего начать
«Дизайн пользовательского интерфейса» Влад Головач
«Не заставляйте меня думать» Стив Круг
«Психбольница в руках пациентов» Алан Купер




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




                @xoposhiy
              pe@kontur.ru
  http://vk.com/kontur_edu

More Related Content

PDF
Трансформация UX-культуры
PPTX
Разработка ПО. Введение в специальность 3. Требования
PPT
Презентация: 1С-Bitrix — как начать
PDF
Use cases на UX-витаминах
PDF
Product discovery. Наши шишки и успехи
PPT
WepPerfomance,
PDF
Гибкое прототипирование для гибкой разработки (Максим Гапонов)
PDF
Как давать обратную связь
Трансформация UX-культуры
Разработка ПО. Введение в специальность 3. Требования
Презентация: 1С-Bitrix — как начать
Use cases на UX-витаминах
Product discovery. Наши шишки и успехи
WepPerfomance,
Гибкое прототипирование для гибкой разработки (Максим Гапонов)
Как давать обратную связь

What's hot (10)

PPTX
Практика организации ИТ-конфереций и других мероприятий для разработчиков
PDF
Пользовательское интервью: советы и подсказки
PPTX
организация мероприятий без упячки. герасимович. Itotvet 19 20 октября
PDF
Про ИА. Визуальные сценарии и объекто-информационная модель.
PDF
Информационные карты эмпатии
PDF
Красивый интерфейс – это лишь часть крутого UX
PDF
Жизнь в изоляции
ODP
Мастер-класс "Экспериментальный дизайн взаимодействия"
PDF
Инструменты разные нужны, инструменты разные важны
PPTX
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
Практика организации ИТ-конфереций и других мероприятий для разработчиков
Пользовательское интервью: советы и подсказки
организация мероприятий без упячки. герасимович. Itotvet 19 20 октября
Про ИА. Визуальные сценарии и объекто-информационная модель.
Информационные карты эмпатии
Красивый интерфейс – это лишь часть крутого UX
Жизнь в изоляции
Мастер-класс "Экспериментальный дизайн взаимодействия"
Инструменты разные нужны, инструменты разные важны
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
Ad

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

PPT
рит2007 требования и состав работ бесков доронин
PDF
терминология vol.2
PDF
Подходы и инструменты личной эффективности
PDF
пр личная эффективность 2014 07
PDF
пр про личное развитие (прозоров)
PPTX
Современное программное обеспечение в работе психолога
PDF
School IT recruiting
PPT
Работа с текстом для дистанционного курса Часть 2. Гавриков Дмитрий 02.12.10
PPT
Подготовка ТЗ на электронные курсы. Колоденский А. 26.11.09
PPTX
MS Office 2007 for reporters
PDF
Как устроиться на работу в крупную IT-компанию
PDF
Paper prototyping
PDF
Бумажное прототипирование
PDF
J query tutorial-for-beginners-1.0.1
PDF
Собеседование на позицию Java Developer
PDF
J query tutorial-for-beginners-1.0.0
PPTX
Writing a computer vision paper
PDF
Документирование Проекта Cавин Анатолий
PPTX
Пери Инновации - Боты машинное обучение и искусственный интеллект
PPTX
Как собрать 50 000 трафика в мес при помощи блога!
рит2007 требования и состав работ бесков доронин
терминология vol.2
Подходы и инструменты личной эффективности
пр личная эффективность 2014 07
пр про личное развитие (прозоров)
Современное программное обеспечение в работе психолога
School IT recruiting
Работа с текстом для дистанционного курса Часть 2. Гавриков Дмитрий 02.12.10
Подготовка ТЗ на электронные курсы. Колоденский А. 26.11.09
MS Office 2007 for reporters
Как устроиться на работу в крупную IT-компанию
Paper prototyping
Бумажное прототипирование
J query tutorial-for-beginners-1.0.1
Собеседование на позицию Java Developer
J query tutorial-for-beginners-1.0.0
Writing a computer vision paper
Документирование Проекта Cавин Анатолий
Пери Инновации - Боты машинное обучение и искусственный интеллект
Как собрать 50 000 трафика в мес при помощи блога!
Ad

More from Pavel Egorov (14)

PPTX
Git basics
PPTX
Интеллект-карты для конспектирования
PPTX
Мастер класс по алгоритмам. Часть 1
PPTX
Мастер класс по алгоритмам. Часть 2
PPTX
Code retreat @ крешкурс2013
PPTX
Software Engineering. Введение в специальность. Что дальше?
PPTX
Software engineering. Введение в специальность. Обзор
PPTX
Машинное обучение (Открытый семинар по средам)
PPTX
Cистема подготовки разработчиков @ CoIT
PPTX
Разработка ПО. Введение в специальность 1
PPTX
AI challenge 2011
PPTX
Highload: специализированные высокопроизводительные индексы
PPTX
Highload в контуре @ DUMP 2011
PPTX
Основы Di контейнеров
Git basics
Интеллект-карты для конспектирования
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 2
Code retreat @ крешкурс2013
Software Engineering. Введение в специальность. Что дальше?
Software engineering. Введение в специальность. Обзор
Машинное обучение (Открытый семинар по средам)
Cистема подготовки разработчиков @ CoIT
Разработка ПО. Введение в специальность 1
AI challenge 2011
Highload: специализированные высокопроизводительные индексы
Highload в контуре @ DUMP 2011
Основы Di контейнеров

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

  • 1. Разработка ПО проектирование Павел Егоров @xoposhiy pe@kontur.ru
  • 2. Архитектура Язык программирования, фреймворк, технология, операционная система, … Высокоуровневый дизайн Разбиение на компоненты, интерфейсы, протоколы взаимодействия Детальный дизайн Устройство и взаимодействие отдельных классов
  • 3. Проектирование? подготовка кода к изменениям …к наиболее вероятным
  • 4. ?!?
  • 6. Курс «Математический анализ» Список литературы 1. Демидович Б.П. «Сборник задач по матану» 2. Ильин, Позняк «Основы матана» Таблица успеваемости Контрольная 1 Контрольная 2 Экзамен Иванов 4 5 5 Петров — 3 3 Сидоров 5 — 4
  • 7. Что тут думать? Делать надо! 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>"); ...
  • 8. Проектирование — подготовка кода к изменениям …к наиболее вероятным
  • 9. Наиболее вероятные изменения? Курс «Математический анализ» Список литературы 1. Демидович Б.П. «Сборник задач по матану» 2. Ильин, Позняк «Основы матана» Таблица успеваемости Контрольная 1 Контрольная 2 Экзамен Иванов 4 5 5 Петров — 3 3 Сидоров 5 — 4
  • 10. Наиболее вероятные изменения? • Другой стиль оформления • Другие странички из списков, таблиц и заголовков • Другие форматы: *.txt, *. pdf, … • Новые элементы: картинки, графики, …
  • 11. Проблему осознали. Как её решать?
  • 12. Не знаешь что делать? Отделяй логику от представления! Заголовок документа <h1>…</h1> Заголовок списка <h1>…</h1> Список <ol> … </ol> Заголовок таблицы <h1>…</h1> Таблица <table> <tr><td>… </table>
  • 13. Логика без представления WriteBeginDocument(); WriteHeader("Курс " + courseName); WriteHeader("Список литературы"); WriteList(booksList); WriteHeader("Таблица успеваемости"); WriteTable(exams, students, marks); WriteEndDocument(); Html → Text
  • 14. Html → Text Как подменять реализацию WriteXXXX?
  • 15. ООП Объект — нечто, с чем можно взаимодействовать — возможно, имеющее состояние Нечто, умеющее создавать примитивы в HTML: заголовки, списки, таблицы, …
  • 16. ООП Создать объект writer = new HtmlDocumentWriter(); Совершить действия с объектом writer.WriteHeader("Курс " + courseName); Типы объектов объединяются в иерархии HtmlDocumentWriter is a Writer PdfDocumentWriter is a Writer
  • 17. ООП void WriteCourseDocument(DocumentWriter writer) { ... writer.WriteHeader("Курс " + courseName); writer.WriteHeader("Список литературы"); writer.WriteList(booksList); writer.WriteHeader("Таблица успеваемости"); writer.WriteTable(exams, students, marks); } WriteCourseDocument(new HtmlDocumentWriter());
  • 19. Появляются новые виды отчетов void WriteCourseDocument(DocumentWriter writer) { ... writer.WriteHeader("Курс " + courseName); writer.WriteHeader("Список литературы"); writer.WriteList(booksList); writer.WriteHeader("Таблица успеваемости"); writer.WriteTable(exams, students, marks); } WriteCourseDocument(new HtmlDocumentWriter());
  • 20. Появляются новые виды отчетов void WriteFinanceDocument(DocumentWriter writer) { ... writer.WriteHeader("Наши финансы"); writer.WriteHeader("Потрачено"); writer.WriteList(expenses); writer.WriteHeader("Заработано"); writer.WriteList(income); }
  • 21. Другие форматы: *.txt, *. pdf, … WriteCourseDocument(new HtmlDocumentWriter()); WriteCourseDocument(new TextDocumentWriter()); WriteCourseDocument(new PdfDocumentWriter()); ... Новый формат — новый Writer.
  • 22. Новые элементы: картинки, графики, … Новые методы DocumentWriter writer.WritePlot(…) writer.WriteImage(…) ...
  • 23. Диаграма классов FinanceReport AbstractDocumentWriter WriteTitle WriteList WriteTable WriteImage CourseReport HtmlWriter PdfWriter WriteTitle WriteTitle WriteList WriteList WriteTable WriteTable WriteImage WriteImage
  • 24. Мораль 1. Архитектура бывает объективно плохой. 2. Хорошая архитектура не требует сильно больше усилий [при некотором опыте]
  • 25. Круто! Хочу быть проектировщиком! 1. Сначала стань хорошим программистом! 2. Нет! П.1 точно нельзя пропустить! 3. Читай, пробуй, думай
  • 27. Вопросы? @xoposhiy pe@kontur.ru http://vk.com/kontur_edu
  • 29. Разработка ПО требования Павел Егоров @xoposhiy pe@kontur.ru
  • 30. Стоимость разработки Тестирование 30% Подготовка 50% Кодирование 20%
  • 31. Как собирать и фиксировать требования? Joel Spolsky Функциональные спецификации малой кровью Подкаст u http://habrahabr.ru/post/64608/ eng: http://www.scrumalliance.org/articles rus: http://blog.scrumtrek.ru/ Доклады: http://www.req-labs.ru/
  • 32. Как собирать и фиксировать требования? …500+ страниц каждая…
  • 35. User Story типичная история из жизни пользователя
  • 36. После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости Позиционировать в ленте на последнем прочитанном сообщении
  • 37. После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости Позиционировать в ленте на последнем прочитанном сообщении
  • 38. Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь Загружать беседу сразу при открытии твита
  • 39. Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь Загружать беседу сразу при открытии твита
  • 40. Увидев интересную ссылку, Петя решил открыть ее в браузере. Но из-за медленного интернета, оставив браузер открывать ссылку, вернулся обратно читать твиттер Сделать кнопку «Открыть в фоне» / «Прочитать позже»
  • 41. Удачные User story помогают формулировать требования
  • 42. На что ещё годятся User Stories?
  • 43. User Stories с приоритетами — это и есть план!
  • 44. Прогон user story при тестировании помогает вскрывать проблемы
  • 45. При должном старании можно сформулировать сотни User Stories!
  • 46. «Эпик» — цель пользователя • Петя продвигает сайт через twitter Для этого он фоловит, отвечает, ищет, пишет, ставит кнопки на сайт… • Катя следит за жизнью супер-звезд Для этого она читает, смотрит фотки, ходит по ссылкам
  • 47. User Story — важные жизненные истории, вскрывающие требования помогающие планировать и тестировать Обрастают детальными требованиями и группируются в Эпики
  • 49. Прототипирование — быстрая проверка идеи часто применяется при проектировании пользовательских интерфейсов
  • 54. Прототипирование интерфейса вместе с потенциальным пользователем Проверено, отлично работает! Впрочем, не только с интерфейсами
  • 55. Тестирование прототипа: Найти потенциального пользователя Подготовить “задачи” Замечать все затруднения у пользователя! Пример: http://www.youtube.com/watch?v=9wQkLthhHKA
  • 58. Курс «Проектирование пользовательских интерфейсов» (СКБ Контур и Яндекс) http://cripi.ru + следите за объявлениями!
  • 59. С чего начать «Дизайн пользовательского интерфейса» Влад Головач «Не заставляйте меня думать» Стив Круг «Психбольница в руках пациентов» Алан Купер В сети Фреш: новости мира юзабилити — http://fresh.gui.ru/ Советы Бюро Горбунова — http://artgorbunov.ru/bb/soviet/ Дизайн-собака — http://design.artgorbunov.ru/ Ководство — http://www.artlebedev.ru/kovodstvo/sections/
  • 60. Вопросы? @xoposhiy pe@kontur.ru http://vk.com/kontur_edu