Лекция 24. Управление программным проектом

Управление программным проектом — один из ключевых аспектов разработки программного обеспечения. В классических моделях жизненного цикла ПО управление проектом составляет основу для всего процесса разработки. В более новых подходах (гибкой методологии, экстремальном программировании, Scrum и так далее) управление ориентировано на решение задач меньшего масштаба, но по-прежнему играет важную роль в разработке.

Управление программным проектом состоит из нескольких видов деятельности:

Презентация: Лекция 24.

Continue reading

Лекция 23. Управление качеством ПО

Качество — одна из основных характеристик, требуемых от программного обеспечения. Несмотря на это, понятие качества достаточно сложно формализовать. Обычно под качеством подразумевают две связанных между собой свойства программной системы:

  • мера, в которой ПО соответствует функциональным требованиям, заданным планом разработки и прочими документами спецификации (функциональное качество);
  • уровень поддержки нефункциональных требований: надежности, производительности и так далее (структурное качество).

Функциональное качество, как правило, оценивается при помощи тестирования, поэтому основная часть управления качеством фокусируется на обеспечении структурного качества ПО. Управление состоит из трех частей:

  • обеспечение качества — определение стандартов для производства, проверки и оценки программных продуктов;
  • планирование качества — применение стандартов и инструментов для поддержания качества в конкретном программном проекте;
  • контроль качества — соблюдение процессов планирования качества и обеспечения качества во время разработки.

Презентация: Лекция 23.

Continue reading

Лекция 22. Управление конфигурацией ПО (часть 2)

Управление версиями программного обеспечения не только упрощает разработку, но и составляет основу для двух других аспектов управления конфигурацией ПО — построение и управление выпусками.

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

  • специальные утилиты, такие как make и Apache Ant, конфигурация которых осуществляется с помощью специальных файлов сценариев;
  • интегрированные среды разработки (IDE).

Презентация: Лекция 22.

Continue reading

Лекция 21. Управление конфигурацией ПО (часть 1)

Создание более-менее сложного программного обеспечения невозможно без управления процессом разработки, включающего четыре аспекта:

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

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

Презентация: Лекция 21.

Continue reading

Лекция 20. Интероперабельность

Важный аспект спецификации интерфейсов — это возможность объединять в единое целое компоненты программной системы, разработанные на разных языках программирования и выполняющиеся в различных средах. Технологии для объединения разнородных модулей программы называют в программной инженерии интероперабельностью или межпроцессным взаимодействием (inter-process communication, IPC).

В крупных программных проектах интероперабельность зачастую необходима:

  • Различные модули программы могут разрабатываться (или повторно использоваться) в нескольких средах, например, из соображений производительности или стоимости.
  • Компоненты программы могут быть разделены в физическом смысле (то есть они располагаются на разных компьютерах). В этом случае использование готовых сетевых протоколов обмена данными позволяет значительно сократить затраты на разработку и интеграцию.

Презентация: Лекция 20.

Демонстрация интероперабельности через CORBA на примере целочисленных последовательностей здесь.

Continue reading

Лекция 19. Интерфейсы и типы данных (часть 2)

Основное применение систем типов данных в языках программирования — минимизация появления ошибок, связанных с неправильной интерпретацией данных. В «идеальном» языке с точки зрения типобезопасности результат любой операции — корректное значение типа данных, который может быть определен заранее (например, во время компиляции). На практике каждый язык программирования устанавливает свои рамки безопасности типов:

  • Языки со слабой типизацией, такие как C и C++, позволяют интерпретировать данные предельно широко. С одной стороны, это может повысить эффективность работы приложения, с другой — приводит к трудно находимым дефектам.
  • Языки с сильной типизацией накладывают ограничения на потенциально опасные операции, например, неявные преобразования типов. Например, в Python, в отличие от большинства языков программирования, не выполняется автоматического приведения чисел к строкам.

К сожалению, обеспечение абсолютного отсутствия ошибок типов — чрезвычайно трудоемкая задача (фактически, частный случай верификации исходного кода программы), поэтому в современных языках программирования роль системы типов состоит в устранении наиболее тривиальных ошибок; их дальнейший поиск — задача, решаемая в процессе тестирования. В этом плане видна тенденция к увеличению роли человеческого фактора: большинство современных языков программирования (Python, Ruby, JavaScript) обладают динамической типизацией, то есть проверка ошибок типов происходит во время выполнения программы.

Презентация: Лекция 19.

Continue reading

Лекция 18. Интерфейсы и типы данных (часть 1)

Одно из базовых средств при определении интерфейсов в программировании — типы данных. Тип позволяет понять, каким образом следует интерпретировать данные в памяти компьютера и какие операции к этим данным применимы. Роль типов в определении интерфейсов различается в зависимости от выбранной парадигмы программирования:

  • В функциональных языках программирования типы определяют допустимые аргументы функций и возвращаемые функциями результаты.
  • В процедурных ЯП типы используются не только для спецификации функций, но и для задания глобального состояния программы.
  • В объектно-ориентированном программировании типы (классы) задают методы для работы с данными, которые, как правило, скрыты от пользователя. В зависимости от модели данных языка программирования, обычные методы могут дополняться свойствами, событиями, операторами и так далее.

Презентация: Лекция 18.

Continue reading

Лекция 17. Интерфейсы в программировании

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

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

Презентация: Лекция 17.

Continue reading

Лекция 16. Документирование ПО

Один из важных этапов разработки программного обеспечения — создание документации. Документирование ПО (системная документация) помогает разработчикам и отделу сопровождения понять структуру системы и назначение ее элементов. Кроме того, часть документации (пользовательская документация) предназначена для конечных пользователей и администраторов — она позволяет понять, как нужно устанавливать и разворачивать систему, какие функции она предоставляет и каким образом можно бороться с ошибками, возникающими при ее работе.

Существует и другая классификация документов на программную систему:

  • Некоторые документы (например, документ спецификации требований и планы проектирования / конструирования компонентов системы) описывают процессы разработки. Эти документы — часть системной документации.
  • Остальные документы описывают продукты процессов разработки. Эти документы могут быть как системными (например, UML-схемы модулей системы), так и пользовательскими (например, руководства по использованию).

Презентация: Лекция 16.

Continue reading

Фракталы — использование Web Workers API

Общее описание сайта и математическая теория здесь.

После того, как определен способ вычисления функции f (за счет синтаксического разбора), остается вычислить «скорость убегания» P(z, f) для комплексных чисел z, соответствующих отдельным пикселям изображения. Наиболее простой способ вычислений — цикл по всем пикселям. Фатальный недостаток этого метода состоит в том, что подсчеты занимают существенное время (порядка нескольких секунд или десятков секунд), и во время выполнения цикла браузер перестает отвечать на внешние раздражители, что, разумеется, неприемлемо. К счастью, для этой проблемы есть решение — современные браузеры (Firefox, Chrome, IE 10+) поддерживают выполнение JavaScript-кода в фоновых потоках выполнения.

Continue reading