3. ИНЖЕНЕРНЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Программирование — теоретическая и практическая деятельность, связанная с созданием программ.

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

В любой программе присутствует индивидуальность ее разработчика.

Вместе с тем программирование предполагает и рутинные работы, которые могут и должны иметь строгий регламент выполнения и соответствовать стандартам.

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

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

Отрасль знаний, в рамках которой изучается процесс создания программного обеспечения и разработка моделей оценки его стоимости, называется инженерным программированием (проектированием) программного обеспечения (Software Engineering).

Иначе это направление называют программотехникой.

Программотехника — технология разработки, отладки, верификации и внедрения ПО.

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

При этом под полезностью следует понимать удовлетворение некоторой человеческой потребности за счет затрат, которое общество может себе позволить.

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

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

1) получение качественного ПО;

2) реализация эффективного процесса разработки и сопровождения ПО, в том числе:

понижение:

- затрат труда;

- сроков разработки ПО;

- числа операторов программы;

- объема требуемой памяти и т. п.;        

повышение:

- ясности программы;

- четкости представления выходных данных программы.

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

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

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

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

"Наиболее важным в инженерном программировании является знание методов достижения разнообразных, возможно, противоречащих друг другу целей и согласо-вания разнообразных применяемых средств, каждое из которых в зависимости от ситуации в различной степени помогает или мешает достижению конкретной цели" — Б.У. Боэм /7/.

Хороший инженер-программист должен уметь:

- разрабатывать набор требований (спецификаций) к программам;

- разрабатывать правильные машинные программы, удовлетворяющие набору требований;

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