SlideShare une entreprise Scribd logo
1  sur  20
Углубленное программирование
на языке C++
Алексей Петров
Лекция №12. Стандарты
кодирования и основы командной
разработки ПО
• Соглашение о кодировании как нормативный акт, иные руководящие
документы.
• Комментирование и документирование кода.
• Примеры нотаций.
• Средства поддержки коллективной работы.
• Современные методологии разработки.
• Понятие «гибких» (agile) методологий.
• Методологии TDD, SCRUM.
• Обзор SWEBoK.
Соглашение о кодировании и его
роль в командной разработке ПО
Соглашение о кодировании (англ. coding standard) — непроектный
документ, который:
• регламентирует подходы к оформлению исходного кода на языке
высокого уровня или ручной верстки на языке разметки;
• (опционально) имеет статус локального правового акта организации;
• действует в рамках организации или проектного офиса (реже —
отдельного проекта или проектов).
Преимущества заключения соглашения о кодировании:
• легкость включения в проект разработки новых специалистов;
• удобство чтения и простота понимания и инспекции исходного кода;
• формирование важных в командной разработке навыков и привычек
оформления результатов труда;
• легкость трассировки изменений и ручного контроля версий.
Иные руководящие документы.
Артефакты анализа
Помимо соглашения о кодировании, участвующий в командной
разработке ПО разработчик опирается на следующие документы:
• устав (хартия) проекта;
• календарный план-график (КПГ);
• соглашения о моделировании (предметной области, БД и пр.).
Значимыми для успешной разработки проектными артефактами
являются все (почти все) выходные артефакты этапа системного
анализа и проектирования системы, в том числе:
• модели предметной области;
• макеты и прототипы фрагментов исходного кода и интерфейса;
• диаграммы классов, прецедентов, взаимодействия и т.д.;
• техническое задание на информационную
(автоматизированную) систему.
Правила организации и способы
записи исходного кода
на языке C++ (1 / 2)
Эмпирические правила организации исходного кода на языке C++ —
результат многолетнего опыта практического программирования
специалистов по всему миру (начало):
• объявления классов, как правило, хранятся в заголовочных файлах
с именами <имя класса>.{h | hpp}, исходный код реализации в
основном хранится в исходных файлах с именами <имя класса>.{c |
C | cpp};
• члены класса перечисляются в порядке назначенных им уровней
доступа: public, protected, private.
Правила организации и способы
записи исходного кода
на языке C++ (2 / 2)
Эмпирические правила организации исходного кода на языке C++ —
результат многолетнего опыта практического программирования
специалистов по всему миру (окончание):
• подставляемые функции обычно выделяются из интерфейса и со
спецификатором inline размещаются в заголовочном файле после
объявления класса (оптимальное разделение достигается
размещением определений подставляемых функций в отдельном
заголовочном файле);
• полностью заголовочный файл помещается в директивы условной
компиляции во избежание повторного включения в сборку при
вложенных директивах #include.
Ортодоксальная каноническая
форма класса (1 / 2)
Ортодоксальная каноническая форма (ОКФ) класса — одна из
важнейших идиом C++, согласно которой класс должен содержать:
• конструктор по умолчанию: T::T();
• конструктор копирования: T::T(const T&);
• операцию-функцию присваивания: T& T::operator=(const T&);
• деструктор: T::~T().
ОКФ обеспечивает:
• единый стиль оформления классов;
• помогает справиться со сложностью классов в процессе развития
программы.
Ортодоксальная каноническая
форма класса (2 / 2)
ОКФ класса следует использовать, когда:
• необходимо обеспечить поддержку присваивания для объектов
класса или передачу их по значению в параметрах функций;
• объект создает указатели на объекты, для которых применяется
подсчет ссылок;
• деструктор класса вызывает operator delete для атрибута
класса.
ОКФ класса желательно использовать для всех классов, не
ограничивающихся агрегированием данных аналогично структурам C.
Отклонения от ОКФ позволяют реализовать нестандартные аспекты
поведения класса.
Примеры нотаций
Венгерская нотация (Ч. Симони (Charles Simonyi), Microsoft, 1999) —
широко известное соглашение о префиксации идентификаторов
констант, переменных, типов, методов и т.д. в соответствии с их
функциональной нагрузкой:
m_pHead; // указатель-атрибут класса
g_nObjCount; // глобальная целочисленная переменная
CWarrior; // класс
szConnPar; // строковый (char*) локальный объект
Сложившийся на сегодняшний день стиль написания объектно-
ориентированного кода и современные IDE позволяют не указывать тип
переменной в имени, а сосредоточиться на «правильном»
форматировании блоков, расстановке разделителей, знаков
операций, левых отступов и т.д.
Комментирование
и документирование кода
Одним из показателей качества исходного кода является его
самодокументируемость (англ. self-descriptiveness). Соблюдение
принципа самодокументирования обеспечивает:
• понятность кода без обращения к проектной документации;
• соответствие исходного кода «внутренней программной
документации».
Самодокументируемости исходного кода способствуют:
• единообразие нотации;
• значимость (осмысленность) идентификаторов (противоположное
— анти-шаблон «загадочный код» (англ. cryptic code));
• наличие аннотаций для артефактов (переменных, классов, методов
и т.д.) и комментариев в местах, трудных для понимания;
• модульность решения, отсутствие монолитных артефактов
большого размера.
Средства коллективной
разработки
К числу систем и средств поддержки коллективной разработки ПО
относятся:
• системы управления версиями;
• системы отслеживания ошибок;
• системы управления проектами, планирования и контроля работ;
• средства поддержки тестовых окружений и т.д.
Этапы канонического жизненного
цикла разработки ПО (1 / 2)
Анализ и
проектирование
Формирование
требований
Программи-
рование
Внедрение
Интеграция и
тестирование
Спецификация
Дизайн
Исходный код
Продукт
Этапы канонического жизненного
цикла разработки ПО (2 / 2)
Наибольшая вовлеченность программистов в разработку ПО
приходится на этапы программирования (кодирование) и
тестирования (исправление ошибок) (см. график).
Сопровождение — это не этап ЖЦ разработки ПО, а последующий, не
ограниченный во времени процесс, участие в котором программисты
принимают наряду с консультантами, аналитиками и пр.
0%
5%
60%
30%
5%
0%
20%
40%
60%
% занятости
Экономика
и ответственность (1 / 2)
Программисты
должны получать
качественные
проектные
артефакты с
качественно
описанными
требованиями к ПО.
Сравнительная цена
ошибки (стоимость
ее исправления) на
этапе
программирования
выше, чем на этапе
проектирования и
тем более — на
этапе сбора
требований к ПО (см.
график)
Cбор
треб.
Проект.
Прогр. Тест. Внедр.
Сравнительная цена
исправления ошибки в ПО
Экономика
и ответственность (2 / 2)
Со ссылкой на кн.:
Martin, J., McClure, C.
Software Maintenance
— The Problem and Its
Solutions, Prentice Hall,
Englewood Cliffs, New
Jersey, 1983 — С. Канер
и др. (2001) приводят
следующую оценку
распределения статей
затрат на выпуск и
сопровождение ПО в
разрезе жизненных
циклов производимой
системы (см. график).
6%
5%
7%
15%
67%
Структура совокупных
затрат на выпуск и
сопровождение ПО
Cбор треб. Проект. Прогр.
Тест. Сопровожд.
Каскадная и итеративная
модели жизненного цикла ПО
Классическая каскадная, или «водопадная», модель (англ. waterfall
model) предполагает последовательное (во времени) однократное
прохождение этапов жизненного цикла разработки ПО (фаз проекта) с
жестким предварительным планированием в контексте однажды и
целиком определенных требований к ПО.
Итеративная модель предполагает разбиение жизненного цикла на
последовательность итераций («мини-проекты»), включающие все
фазы проекта в применении к меньшим фрагментам
функциональности. С завершением каждой итерации продукт
развивается инкрементально.
«Гибкие» методологии
разработки
«Гибкие» (англ. agile) методологии разработки основаны на
использовании итеративной модели жизненного цикла разработки ПО,
динамическом формировании требований и постоянном
взаимодействии внутри самоорганизующихся рабочих групп.
Отличительные черты:
• короткий цикл разработки;
• непосредственное общение (в том числе с заказчиком).
Основные идеи:
• личности и их взаимодействия важнее процессов и инструментов;
• работающий продукт важнее полной документации;
• сотрудничество с заказчиком важнее договорных обязательств;
• реакция на изменения важнее следования плану.
Методологии TDD, Scrum
Разработка через тестирование (англ. Test-Driven Development, TDD)
— методология разработки, реализующая концепцию «сначала тест» и
состоящая в последовательном расширении набора тестов,
покрывающих требуемую функциональность, и написании кода,
позволяющего пройти существовавшие и вновь введенные тесты.
Scrum — методология итеративной разработки с акцентом на контроль
процесса разработки ПО, в которой:
• каждая итерация («спринт») имеет фиксированную
продолжительность;
• требования к продукту упорядочиваются по их важности,
отражаются в документах Product Backlog и Sprint Backlog и
фиксируются на время спринта.
Руководство SWEBoK
Software Engineering Body of Knowledge (SWEBoK) – «Свод знаний в
области программной инженерии», подготовленный при участии IEEE и
призванный определить набор профессиональных знаний и
рекомендуемые практики в следующих областях (англ. knowledge area):
Требования к ПО Управление конфигурациями ПО
Проектирование ПО Управление программной инженерией
Конструирование ПО Процесс программной инженерии
Тестирование ПО Методы и инструменты программной
инженерии
Сопровождение ПО Качество ПО
Спасибо за внимание
Алексей Петров

Contenu connexe

Tendances

метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кодаSergii Shmarkatiuk
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClub QA Kostroma
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...LuxoftTraining
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Работа с требованиями при создании программного обеспечения бортовой радиоэле...
Работа с требованиями при создании программного обеспечения бортовой радиоэле...Работа с требованиями при создании программного обеспечения бортовой радиоэле...
Работа с требованиями при создании программного обеспечения бортовой радиоэле...Sergey Laletin
 
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...CUSTIS
 
Опыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BОпыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BДС БАРС
 

Tendances (19)

метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDD
 
МиСПИСиТ (источники ошибок)
МиСПИСиТ (источники ошибок)МиСПИСиТ (источники ошибок)
МиСПИСиТ (источники ошибок)
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
МиСПИСиТ (разработка программного модуля)
МиСПИСиТ (разработка программного модуля)МиСПИСиТ (разработка программного модуля)
МиСПИСиТ (разработка программного модуля)
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...
 
ООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсыООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсы
 
МиСПИСиТ (введение)
МиСПИСиТ (введение)МиСПИСиТ (введение)
МиСПИСиТ (введение)
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
МиСПИСиТ (общие принципы разработки)
МиСПИСиТ (общие принципы разработки)МиСПИСиТ (общие принципы разработки)
МиСПИСиТ (общие принципы разработки)
 
Работа с требованиями при создании программного обеспечения бортовой радиоэле...
Работа с требованиями при создании программного обеспечения бортовой радиоэле...Работа с требованиями при создании программного обеспечения бортовой радиоэле...
Работа с требованиями при создании программного обеспечения бортовой радиоэле...
 
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
 
Training Labs (www.cmcons.com)
Training Labs (www.cmcons.com)Training Labs (www.cmcons.com)
Training Labs (www.cmcons.com)
 
PMIufa 2012-03-01
PMIufa 2012-03-01PMIufa 2012-03-01
PMIufa 2012-03-01
 
Опыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178BОпыт ДС БАРС по внедрению процессов КТ-178B
Опыт ДС БАРС по внедрению процессов КТ-178B
 

En vedette

Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Java весна 2013 лекция 3
Java весна 2013 лекция 3Java весна 2013 лекция 3
Java весна 2013 лекция 3Technopark
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6Technopark
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Technopark
 
Разработка веб-сервисов осень 2013 лекция 3
Разработка веб-сервисов осень 2013 лекция 3Разработка веб-сервисов осень 2013 лекция 3
Разработка веб-сервисов осень 2013 лекция 3Technopark
 
АиСД осень 2012 лекция 1
АиСД осень 2012 лекция 1АиСД осень 2012 лекция 1
АиСД осень 2012 лекция 1Technopark
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Technopark
 
АиСД осень 2012 лекция 11
АиСД осень 2012 лекция 11АиСД осень 2012 лекция 11
АиСД осень 2012 лекция 11Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1Technopark
 
Проектирование графических интерфейсов лекция 6 - часть 1
Проектирование графических интерфейсов лекция 6 - часть 1Проектирование графических интерфейсов лекция 6 - часть 1
Проектирование графических интерфейсов лекция 6 - часть 1Technopark
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Technopark
 
АиСД осень 2012 лекция 12
АиСД осень 2012 лекция 12АиСД осень 2012 лекция 12
АиСД осень 2012 лекция 12Technopark
 
Java осень 2013 лекция 1-2
Java осень 2013 лекция 1-2Java осень 2013 лекция 1-2
Java осень 2013 лекция 1-2Technopark
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4Technopark
 
Проектирование графических интерфейсов лекция 1
Проектирование графических интерфейсов лекция 1Проектирование графических интерфейсов лекция 1
Проектирование графических интерфейсов лекция 1Technopark
 

En vedette (17)

Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Java весна 2013 лекция 3
Java весна 2013 лекция 3Java весна 2013 лекция 3
Java весна 2013 лекция 3
 
HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6HighLoad весна 2014 лекция 6
HighLoad весна 2014 лекция 6
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3
 
Разработка веб-сервисов осень 2013 лекция 3
Разработка веб-сервисов осень 2013 лекция 3Разработка веб-сервисов осень 2013 лекция 3
Разработка веб-сервисов осень 2013 лекция 3
 
АиСД осень 2012 лекция 1
АиСД осень 2012 лекция 1АиСД осень 2012 лекция 1
АиСД осень 2012 лекция 1
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2
 
АиСД осень 2012 лекция 11
АиСД осень 2012 лекция 11АиСД осень 2012 лекция 11
АиСД осень 2012 лекция 11
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Android осень 2013 лекция 1
Android осень 2013 лекция 1Android осень 2013 лекция 1
Android осень 2013 лекция 1
 
Проектирование графических интерфейсов лекция 6 - часть 1
Проектирование графических интерфейсов лекция 6 - часть 1Проектирование графических интерфейсов лекция 6 - часть 1
Проектирование графических интерфейсов лекция 6 - часть 1
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6
 
АиСД осень 2012 лекция 12
АиСД осень 2012 лекция 12АиСД осень 2012 лекция 12
АиСД осень 2012 лекция 12
 
Java осень 2013 лекция 1-2
Java осень 2013 лекция 1-2Java осень 2013 лекция 1-2
Java осень 2013 лекция 1-2
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4
 
Проектирование графических интерфейсов лекция 1
Проектирование графических интерфейсов лекция 1Проектирование графических интерфейсов лекция 1
Проектирование графических интерфейсов лекция 1
 

Similaire à C++ осень 2012 лекция 12

Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3rit2011
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПОAnton Konushin
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...Alex V. Petrov
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAlexander Lisachenko
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
Интегрированная среда разработки
Интегрированная среда разработкиИнтегрированная среда разработки
Интегрированная среда разработкиspillector
 
МАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыМАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыОлег Гудаев
 
Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"Evgeniy Krivosheev
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложенийKewpaN
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
Проектирование по контракту
Проектирование по контрактуПроектирование по контракту
Проектирование по контрактуAlexander Byndyu
 

Similaire à C++ осень 2012 лекция 12 (20)

Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
 
Dotnet
DotnetDotnet
Dotnet
 
лек11 1
лек11 1лек11 1
лек11 1
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
2IDE~1.PPT
2IDE~1.PPT2IDE~1.PPT
2IDE~1.PPT
 
Интегрированная среда разработки
Интегрированная среда разработкиИнтегрированная среда разработки
Интегрированная среда разработки
 
Team workflow
Team workflowTeam workflow
Team workflow
 
МАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыМАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системы
 
Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
Genome
GenomeGenome
Genome
 
C# 3.0
C# 3.0C# 3.0
C# 3.0
 
Проектирование по контракту
Проектирование по контрактуПроектирование по контракту
Проектирование по контракту
 

Plus de Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

Plus de Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

C++ осень 2012 лекция 12

  • 2. Лекция №12. Стандарты кодирования и основы командной разработки ПО • Соглашение о кодировании как нормативный акт, иные руководящие документы. • Комментирование и документирование кода. • Примеры нотаций. • Средства поддержки коллективной работы. • Современные методологии разработки. • Понятие «гибких» (agile) методологий. • Методологии TDD, SCRUM. • Обзор SWEBoK.
  • 3. Соглашение о кодировании и его роль в командной разработке ПО Соглашение о кодировании (англ. coding standard) — непроектный документ, который: • регламентирует подходы к оформлению исходного кода на языке высокого уровня или ручной верстки на языке разметки; • (опционально) имеет статус локального правового акта организации; • действует в рамках организации или проектного офиса (реже — отдельного проекта или проектов). Преимущества заключения соглашения о кодировании: • легкость включения в проект разработки новых специалистов; • удобство чтения и простота понимания и инспекции исходного кода; • формирование важных в командной разработке навыков и привычек оформления результатов труда; • легкость трассировки изменений и ручного контроля версий.
  • 4. Иные руководящие документы. Артефакты анализа Помимо соглашения о кодировании, участвующий в командной разработке ПО разработчик опирается на следующие документы: • устав (хартия) проекта; • календарный план-график (КПГ); • соглашения о моделировании (предметной области, БД и пр.). Значимыми для успешной разработки проектными артефактами являются все (почти все) выходные артефакты этапа системного анализа и проектирования системы, в том числе: • модели предметной области; • макеты и прототипы фрагментов исходного кода и интерфейса; • диаграммы классов, прецедентов, взаимодействия и т.д.; • техническое задание на информационную (автоматизированную) систему.
  • 5. Правила организации и способы записи исходного кода на языке C++ (1 / 2) Эмпирические правила организации исходного кода на языке C++ — результат многолетнего опыта практического программирования специалистов по всему миру (начало): • объявления классов, как правило, хранятся в заголовочных файлах с именами <имя класса>.{h | hpp}, исходный код реализации в основном хранится в исходных файлах с именами <имя класса>.{c | C | cpp}; • члены класса перечисляются в порядке назначенных им уровней доступа: public, protected, private.
  • 6. Правила организации и способы записи исходного кода на языке C++ (2 / 2) Эмпирические правила организации исходного кода на языке C++ — результат многолетнего опыта практического программирования специалистов по всему миру (окончание): • подставляемые функции обычно выделяются из интерфейса и со спецификатором inline размещаются в заголовочном файле после объявления класса (оптимальное разделение достигается размещением определений подставляемых функций в отдельном заголовочном файле); • полностью заголовочный файл помещается в директивы условной компиляции во избежание повторного включения в сборку при вложенных директивах #include.
  • 7. Ортодоксальная каноническая форма класса (1 / 2) Ортодоксальная каноническая форма (ОКФ) класса — одна из важнейших идиом C++, согласно которой класс должен содержать: • конструктор по умолчанию: T::T(); • конструктор копирования: T::T(const T&); • операцию-функцию присваивания: T& T::operator=(const T&); • деструктор: T::~T(). ОКФ обеспечивает: • единый стиль оформления классов; • помогает справиться со сложностью классов в процессе развития программы.
  • 8. Ортодоксальная каноническая форма класса (2 / 2) ОКФ класса следует использовать, когда: • необходимо обеспечить поддержку присваивания для объектов класса или передачу их по значению в параметрах функций; • объект создает указатели на объекты, для которых применяется подсчет ссылок; • деструктор класса вызывает operator delete для атрибута класса. ОКФ класса желательно использовать для всех классов, не ограничивающихся агрегированием данных аналогично структурам C. Отклонения от ОКФ позволяют реализовать нестандартные аспекты поведения класса.
  • 9. Примеры нотаций Венгерская нотация (Ч. Симони (Charles Simonyi), Microsoft, 1999) — широко известное соглашение о префиксации идентификаторов констант, переменных, типов, методов и т.д. в соответствии с их функциональной нагрузкой: m_pHead; // указатель-атрибут класса g_nObjCount; // глобальная целочисленная переменная CWarrior; // класс szConnPar; // строковый (char*) локальный объект Сложившийся на сегодняшний день стиль написания объектно- ориентированного кода и современные IDE позволяют не указывать тип переменной в имени, а сосредоточиться на «правильном» форматировании блоков, расстановке разделителей, знаков операций, левых отступов и т.д.
  • 10. Комментирование и документирование кода Одним из показателей качества исходного кода является его самодокументируемость (англ. self-descriptiveness). Соблюдение принципа самодокументирования обеспечивает: • понятность кода без обращения к проектной документации; • соответствие исходного кода «внутренней программной документации». Самодокументируемости исходного кода способствуют: • единообразие нотации; • значимость (осмысленность) идентификаторов (противоположное — анти-шаблон «загадочный код» (англ. cryptic code)); • наличие аннотаций для артефактов (переменных, классов, методов и т.д.) и комментариев в местах, трудных для понимания; • модульность решения, отсутствие монолитных артефактов большого размера.
  • 11. Средства коллективной разработки К числу систем и средств поддержки коллективной разработки ПО относятся: • системы управления версиями; • системы отслеживания ошибок; • системы управления проектами, планирования и контроля работ; • средства поддержки тестовых окружений и т.д.
  • 12. Этапы канонического жизненного цикла разработки ПО (1 / 2) Анализ и проектирование Формирование требований Программи- рование Внедрение Интеграция и тестирование Спецификация Дизайн Исходный код Продукт
  • 13. Этапы канонического жизненного цикла разработки ПО (2 / 2) Наибольшая вовлеченность программистов в разработку ПО приходится на этапы программирования (кодирование) и тестирования (исправление ошибок) (см. график). Сопровождение — это не этап ЖЦ разработки ПО, а последующий, не ограниченный во времени процесс, участие в котором программисты принимают наряду с консультантами, аналитиками и пр. 0% 5% 60% 30% 5% 0% 20% 40% 60% % занятости
  • 14. Экономика и ответственность (1 / 2) Программисты должны получать качественные проектные артефакты с качественно описанными требованиями к ПО. Сравнительная цена ошибки (стоимость ее исправления) на этапе программирования выше, чем на этапе проектирования и тем более — на этапе сбора требований к ПО (см. график) Cбор треб. Проект. Прогр. Тест. Внедр. Сравнительная цена исправления ошибки в ПО
  • 15. Экономика и ответственность (2 / 2) Со ссылкой на кн.: Martin, J., McClure, C. Software Maintenance — The Problem and Its Solutions, Prentice Hall, Englewood Cliffs, New Jersey, 1983 — С. Канер и др. (2001) приводят следующую оценку распределения статей затрат на выпуск и сопровождение ПО в разрезе жизненных циклов производимой системы (см. график). 6% 5% 7% 15% 67% Структура совокупных затрат на выпуск и сопровождение ПО Cбор треб. Проект. Прогр. Тест. Сопровожд.
  • 16. Каскадная и итеративная модели жизненного цикла ПО Классическая каскадная, или «водопадная», модель (англ. waterfall model) предполагает последовательное (во времени) однократное прохождение этапов жизненного цикла разработки ПО (фаз проекта) с жестким предварительным планированием в контексте однажды и целиком определенных требований к ПО. Итеративная модель предполагает разбиение жизненного цикла на последовательность итераций («мини-проекты»), включающие все фазы проекта в применении к меньшим фрагментам функциональности. С завершением каждой итерации продукт развивается инкрементально.
  • 17. «Гибкие» методологии разработки «Гибкие» (англ. agile) методологии разработки основаны на использовании итеративной модели жизненного цикла разработки ПО, динамическом формировании требований и постоянном взаимодействии внутри самоорганизующихся рабочих групп. Отличительные черты: • короткий цикл разработки; • непосредственное общение (в том числе с заказчиком). Основные идеи: • личности и их взаимодействия важнее процессов и инструментов; • работающий продукт важнее полной документации; • сотрудничество с заказчиком важнее договорных обязательств; • реакция на изменения важнее следования плану.
  • 18. Методологии TDD, Scrum Разработка через тестирование (англ. Test-Driven Development, TDD) — методология разработки, реализующая концепцию «сначала тест» и состоящая в последовательном расширении набора тестов, покрывающих требуемую функциональность, и написании кода, позволяющего пройти существовавшие и вновь введенные тесты. Scrum — методология итеративной разработки с акцентом на контроль процесса разработки ПО, в которой: • каждая итерация («спринт») имеет фиксированную продолжительность; • требования к продукту упорядочиваются по их важности, отражаются в документах Product Backlog и Sprint Backlog и фиксируются на время спринта.
  • 19. Руководство SWEBoK Software Engineering Body of Knowledge (SWEBoK) – «Свод знаний в области программной инженерии», подготовленный при участии IEEE и призванный определить набор профессиональных знаний и рекомендуемые практики в следующих областях (англ. knowledge area): Требования к ПО Управление конфигурациями ПО Проектирование ПО Управление программной инженерией Конструирование ПО Процесс программной инженерии Тестирование ПО Методы и инструменты программной инженерии Сопровождение ПО Качество ПО