Архив метки: презентация

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

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

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

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

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

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

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

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

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

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

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

Лекция 15. Эволюция ПО

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

Существует несколько причин, по которым эволюция ПО объективно необходима:

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

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

Читать далее Лекция 15. Эволюция ПО

Лекция 14. Верификация и валидация

Верификация и валидация — два связанных процесса разработки ПО. Верификация отвечает на вопрос «Правильно ли разрабатывается продукт?» (Are we building the product right?); валидация — на вопрос «Правильный ли продукт разрабатывается?» (Are we building the right product?). Верификация проверяет ПО на соответствие спецификациям, заданным при проектировании; валидация проверяет, соответствует ли продукт ожиданиям заказчика и потребителей. Исходя из определения, тестирование — частный случай валидации.

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

Читать далее Лекция 14. Верификация и валидация

Лекция 13. Тестирование ПО

Тестирование — один из основных этапов разработки ПО, решающий две задачи:

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

В рамках классических моделей жизненного цикла тестирование следует за конструированием. В более современных подходах (например, в гибкой методологии разработки) тестирование происходит одновременно с конструированием; оно помогает уточнить и/или выявить требования к программной системе. Существует даже подход к разработке ПО, при котором тесты пишутся до (а не после) основного кода — test-driven development.

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

Читать далее Лекция 13. Тестирование ПО

Распознавание на основе скрытых марковских моделей (часть 2)

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

Презентация доклада: Распознавание на основе скрытых марковских моделей (часть 2).

Читать далее Распознавание на основе скрытых марковских моделей (часть 2)

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

9 декабря на семинаре «Образный компьютер», который ведет Михаил Иванович Шлезингер (один из авторов EM-алгоритма), я докладывал о структурном распознавании для биологических последовательностей — ДНК и белков.

Презентация доклада: Распознавание на основе скрытых марковских моделей (успел рассказать до композиций алгоритмов, слайд 23).

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

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

Лекция 12. Языки программирования. Метапрограммирование

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

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

Читать далее Лекция 12. Языки программирования. Метапрограммирование

Лекция 11. Парадигмы программирования (часть 2)

При разработке сложных систем с использованием парадигмы объектно-ориентированного программирования возникает несколько проблем:

  • Поскольку классы в ООП соответствуют отдельным понятиям предметной области, различные классы тесно связаны друг с другом. Это затрудняет модификацию системы для повторного использования в других условиях.
  • Сильная связь между классами также препятствует выделению независимых или хотя бы слабо связанных между собой модулей. Модули упрощают не только повторное использование кода, но и его тестирование и сопровождение.
  • Связанность отдельных классов системы нарушает базовое правило программирования — принцип разделения ответственности (separation of concerns). Это приводит к дублированию кода и возможным плохо отслеживаемым ошибкам.

Эти проблемы решаются за счет использования парадигм программирования, расширяющих ООП:

  • компонентно-ориентированное программирование;
  • аспектное программирование;
  • сервисное программирование.

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

Читать далее Лекция 11. Парадигмы программирования (часть 2)

Лекция 10. Парадигмы программирования (часть 1)

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

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

Читать далее Лекция 10. Парадигмы программирования (часть 1)