Вернуться наверх
aco.ifmo.ru photonic
вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Организация разрботки програмного обеспечения

Программисты все время ищут какой-нибудь волшебный инструмент, который мог бы сделать процесс разработки программ тривиальным. (Rapid Application Development). Признак профессионализма – понимание того, что такой панацеи не существует. В каждом случае свои тонкости, нюансы, которые зависят от задачи, условий реализации, личностей в команде разработчиков. Ум, опыт и вкус никогда, ничем нельзя заменить.

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

  1. КОНЦЕПТУАЛИЗАЦИЯ

    Физическая постановка задачи. Грамотно поставить задачу, осознать: что же мы хотим\? Нужно обладать глубокими знаниями в проблемной области. РЕЗУЛЬТАТ=ФИЗИЧЕСКАЯ МОДЕЛЬ.

    Математическая постановка задачи. Переформулировать физическую проблему на математический язык используя весь арсенал средств (формулы, системы уравнений, интегральные преобразования, статистические методы и т.п.). Для построения МАТЕМАТИЧЕСКОЙ МОДЕЛИ требуется знать математику, и главное стандартные численные методы, которые необходимо применять и нужно знать. Попытаться сформулировать задачу так, чтобы можно было решить стандартными методами. Выявление сущности требований к программному продукту.

    РЕЗУЛЬТАТ=ТЕХНИЧЕСКОЕ ЗАДАНИЕ

  2. АНАЛИЗ – метод исследования задачи (проблемы), путем разложения предмета на составные части, расчленения объекта путем логической абстракции.

    Борьба со сложностью. Принцип "разделяй и властвуй". Если задачу можно разбить на две подзадачи, с которыми можно справиться по отдельности, то это нежно сделать (подпрограммы, объекты). Разработка модели поведения системы. Анализ должен прояснить что делает система, а не то как она это делает. СЦЕНАРИИ работы с системой.

    РЕЗУЛЬТАТ=СТРУКТУРА ДАННЫХ + АЛГОРИТМЫ

    Предметы в реальном мире имеют различные характеристики (температура, положение, параметры формы, регистрационный номер и т.п.). Совокупность характеристик, описывающих объект или явление, называется СТРУКТУРОЙ ДАННЫХ, которая должна быть построена логично, надежно, целесообразно.

    АЛГОРИТМ – точное формальное описание некоторого реального процесса (обработка данных, вычисление характеристик, управление объектами и т.п.). Это жесткая структура состоящая из блоков: инструкций, условий, циклов, подпрограмм и т.п. Алгоритмизация – точное формальное описание вычислительного процесса.

  3. ПРОЕКТИРОВАНИЕ – подготовка плана или предварительной структуры для моделирования задачи. Проектирование предполагает принятие решений по выбору алгоритма и абстракции объекта, структуризацию и описание программы (построение блок-схем, иерархий и т.п.). Создание архитектуры для реализации.

    РЕЗУЛЬТАТ=СКЕЛЕТ(СТРУКТУРА) ПРОГРАММЫ

  4. КОДИРОВАНИЕ - компоновка последовательностей операторов и функций на языке программирования. Создание текста программы на каком либо языке программирования

    Язык – инструмент программирования, с помощью которого структура данных и алгоритмы получают конкретное воплощение. Язык имеет второстепенное значение. Важно правильно и осмысленно пользоваться методами, приемами (технологией) программирования.

    Технология программирования – методы, средства и приемы программирования, правильное и осмысленное их использование.

    Технология программирования – это образ мыслей, который делает реальный мир абстрактным и позволяет моделировать процессы и объекты реального мира на компьютере.

    Программирование – практические навыки, искусство формулирования алгоритмов и составления программ для компьютера. Это инструмент, который используется в любой другой науке для моделирования реальных или абстрактных объектов и явлений. Таким образом, программирование не является самодостаточным. Всегда требуются глубокое знание предметной области.

    РЕЗУЛЬТАТ=ПРОГРАММА или ПАКЕТ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

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

    Пакет программного обеспечения – группа взаимодействующих друг с другом программ, решающих комплекс задач.

    Микропроцесс программирования:

    • - выявление классов и объектов на данном уровне абстракции;
    • - выяснение семантики этих классов и объектов;
    • - выявление связей между классами и объектами;
    • - спецификация интерфейса и реализация объектов.

  5. ТЕСТИРОВАНИЕ – выполнение уже готовых программ с разными возможными данными в разных условиях работы.

    На этом этапе выявляют и исправляют ошибки (Debug), которые могут быть вызваны неправильным кодированием, проектированием или даже анализом, а также неожиданными ситуациями, неоднозначными толкованиями.

    Тестирование определяет состояние того, что уже сделано. Показывает на какое место надо обратить внимание, куда внести изменения. Тестирование позволяет избежать ошибки, но повысить качество работы программы оно не может.

    РЕЗУЛЬТАТ=ПРОГРАММА БЕЗ ОШИБОК

  6. ЭВОЛЮЦИЯ – форма движения в природе, изменение соотношения количество/качество. Оптимизация, улучшение программы. Итеративное выполнение реализации.

    РЕЗУЛЬТАТ=ОПТИМАЛЬНАЯ ПРОГРАММА

    Характеристики качества программы:

    • функциональность (точное выполнение определенных функций);
    • эффективность и экономичность (минимизация количества вычислений, оптимальное построение вычислительного процесса быстрое выполнение функций /скорость/, эффективное использование ресурсов /размер/);
    • адекватность (правильный, безошибочный результат, соответствующий предмету моделирования, точное соответствие модели реальным процессам и свойствам моделируемых объектов) и однозначность (недопустимость противоречивого или неправильного толкования модели);
    • ясность и читабельность текста программы (важна при работе программистов в составе группы);
    • модифицируемость (легкое дополнение, наделение новыми возможностями);
    • универсальность (пригодность для широкого класса объектов)
  7. СОПРОВОЖДЕНИЕ – управление эволюцией в ходе эксплуатации. МОДИФИКАЦИЯ – дополнение, оснащение новыми возможностями, повторное использование кода на более высоком уровне.

    РЕЗУЛЬТАТ=ПОЛНОЦЕННЫЙ ПРОГРАММНЫЙ ПРОДУКТ

Существуют технологии программирования построенные на самых различных принципах:

  • cтруктурное;
  • объектно-ориентированное;
  • Дискриптивое;
  • Параллельное;
  • Логическое;
  • Визуальное;
  • Событийное.

Цикл разработки программного обеспечения одинаковый, но разное содержание каждого из этапов при использовании разных технологий программирования. Чаще всего используют смешанную технологию программирования в зависимости от решаемой задачи и специфики моделируемого объекта.

ПРОГРАММА – это определенная методика общения между людьми, и компьютер не больше чем посредник. Если раньше "собеседник" программиста должен был понимать тот язык, на котором им позволял говорить компьютер, то теперь, в связи с широким использованием графических интерфейсов, программист просто обязан заботиться о понятности и удобстве работы программ, удобстве общения с пользователем.

Современный программист должен:

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

Не случайно программисты по образованию скорее исключение, нежели правило. Лучшие программисты – это бывшие физики, математики, химики и др.

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

Программисты редко работают в одиночку, а обычно они работают в группе. Группы разработчиков:

  • Авторитарная бригада. Во главе группы программистов – крупный авторитет, который диктует что, кто и как должен делать. Любой член бригады должен быть в состоянии понять и выполнить то, что от него требуют.
  • "Учитель и ученики". Инициатор проекта набирает для себя людей, руководствуясь принципом "легче учить, чем переучивать". Обычно учитель отбирает группу молодежи и доводит ее до профессионального уровня. Стиль программирования вырабатывается у всех одинаковый. Более демократично, но авторитет учителя и его привычка учить могут сказываться отрицательно.
  • Крупная фирма. Ведется работа над несколькими проектами, каждому из которых назначается менеджер. Группы программистов-кодировщиков обычно превращаются в авторитарные бригады. Но состав бригад не стабилен, стиль программирования различный, мало демократии для внесения улучшений в программный продукт.

Роли разработчиков:

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

Критерии оценки качества программы пользователем:

  • скорость и адекватность моделирования;
  • простота освоения программы;
  • субъективная удовлетворенность при эксплуатации.

Удачный проект – тот, который удовлетворил (не превзошел) ожидания заказчика.