
- •Основные понятия программной инженерии
- •Понятия «программирование», «программа».
- •Понятие «программный продукт»
- •Понятие «программная инженерия»
- •Неправильный перевод как причина ошибок в программных .•редствах.
- •Понятие жизненного цикла по
- •Модель программного процесса
- •* Понятия качества программного средства
- •Обеспечение надежности - основной мотив разработки программных средств.
Понятие «программный продукт»
Человеку (программисту], прежде чем состанпп. программу на удобном для него языке программирования, приходная проделывать большую подготовительную работу:
- уточнить постановку задачи
- выбрать метод ее решения
- выяснить специфику применения требуемой прш раммы
- прояснить общую организацию разрабатываемой программы и т.д. Использование этой информации может сущсстнсшю упростить задачу
понимания программы человеком, поэтому необходимо ее фиксировать в виде отдельных документов (часто не формализованных, рассчитанных только для восприятия человеком).
Обычно программы разрабатываются в расчете па то, чтобы ими могли пользоваться люди, не участвующие в их рачраноше (их называют пользователями}. Для освоения и использования программы пользователем помимо ее текста требуется определенная дополни гсш.пая документация. Программная документация позволяет понять, какие функции выполняет та или иная программа ПС, как установить программу па компьютере, как подготовить исходные данные и запустить требуемую программу на исполнение, а также: что означают получаемые результаты (или каков эффект выполнения этой программы). Кроме того, программная документация помогает разобраться в самой программе, что необходимо, например, при ее модификации.
Программа или логически связанная совокупность программ на носителях данных, снабженная программной документацией, называется программным средством (ПС), программным обеспечением (.\о/1м>аге) или программным продуктом. Программа позволяет осуществлять некоторую автоматическую обработку данных на компьютере.
В зависимости от того, для кого разрабатываются программные продукты (конкретного заказчика или рынка, программные продукты бывают двух типов:
- коробочные продукты (§епепс ргоёисй - общие продукты или зпппк-\лтаррес! зой\уаге - упакованное ПО);
- заказные продукты (Ьезроке - сделанный на заказ или сш^огшгес! ргоёисЬ-настроенный продукт).
Важная разница между ними заключается в том, кто ставит задачу (определяет, или специфицирует требования). В первом случае это делают сами разработчики на основе анализа рынка (маркетинга) - и при этом рискуют сами. Во втором - заказчик и при этом рискует, что разработчик не сможет реально выполнить все требования в срок и при выделенном бюджете.
Понятие «программная инженерия»
Как было сказано ранее, на сегодняшний день нет единого определения понятия «программная инженерия». Одно из них звучит так: «область компьютерной науки и технологии, которая занимается построением программных систем, настолько больших и сложных, что для этого требуется участие слаженных команд разработчиков различных специальностей и квалификаций».
Программная инженерия — приложение инженерного подхода к производству ПО. Она связана со всеми аспектами производства ПО - от начальных стадий создания спецификации до поддержки программной системы после сдачи в эксплуатацию.
Таким образом, программная инженерия - это инженерная дисциплина. Что это означает?
Инженер (т§епшт - способность, изобретательность) — создатель информации об устройстве и функциональных свойствах продукта (конечного результата), о методах его изготовления (технологии) и осуществляющий руководство и контроль за изготовлением продукта.
Инженеры — это те специалисты, которые выполняют практическую работу и добиваются практических результатов.
Ученый может сказать: проблема неразрешима в рамках существующих теорий и это будет научный результат, достойный опубликования и защиты диссертации. В отличие от них:
- для решения задачи инженеры применяют теории, методы и средства, пригодные для решения данной задачи, но они применяют их выборочно и всегда пытаются найти решения, даже в тех случаях, когда теорий или методов, соответствующих данной задаче, еще не существует. <В этом случае инженер ищет метод или средство для решения задачи, применяет его и несет ответственность за результат - ведь метод или средство еще не проверены. Набор таких инженерных методов или способов, теоретически возможно не обоснованных, но получивших неоднократное подтверждение на практике, играет большую практическую роль>.
- инженеры работают в условиях ограниченных ресурсов: временных, финансовых и организационных (оборудование, техника, люди). <Иными словами, продукт должен быть создан в установленные сроки, в рамках выделенных средств, оборудования и людей. Хотя это в первую очередь относится к созданию заказных продуктов (оговаривается в условиях контракта), но при создании коробочных продуктов эти ограничения имеют не меньшее значение, т.к. здесь они диктуются условиями рыночной конкуренции;».
Что означает «все аспекты производства ПО»? Программная инженерия занимается не только техническими вопросами производства ПО (специфицирование требований, проектирование, кодирование и проч.), но и управлением программными проектами, включая вопросы планирования, финансирования, управления коллективом и т.д. Кроме того, задачей программной инженерии является разработка средств, методов и теорий для поддержки процесса производства ПО.
Программные инженеры применяют систематичные и организованные подходы к работе для достижения максимальной эффективности и качества ПО. Их задача состоит в адаптации существующих методов и подходов к решению свой конкретной проблемы.
В чем отличие программной инженерии от других инженерных дисциплин?
Любая инженерная деятельность направлена на создание продукта определенного вида. Этот продукт в любой инженерии имеет жизненный цикл, который в упрощенном виде можно представить состоящим из следующих фаз: проектирование, создание образца, испытание, производство, эксплуатация.
Продуктом КИ является компьютерная программа - нематериальный объект. Отсюда следуют следующие отличия: фаза производства состоит з копировании образца на другие носитечи, поэтому стоимость этой фазь1 исчезающе мала. Если считать кодирование элементом проектирования, то отсутствует также и фаза создания образца (строится компилятором). Отсюда следует, что:
- стоимость программы = стоимости ее проектирования;
- стоимость проектирования коробочных продуктов «размазывается» по копиям;
- стоимость заказных продуктов остается высокой.
Второе существенное отличие заключается в том, что компьютерная программа - искусственный объект в том смысле, что для нее нет объективных законов, которым подчинялось бы ее поведение. <Например. у инженера—строителя есть объективные законы строительной механики: равновесия моментов и сил. устойчивости механических систем и т.д. Инженер-строитель может проверить свои архитектурные решения на соответствие этим законам и тем самым обеспечить удачу проекта. Эти законы объективны, они будут действовать всегда. У программного инженера на первый взгляд также есть типовые, проверенные временем архитектурные решения (например, клиент-серверная архитектура). Но эти решения определяются уровнем развития вычислительной техники (и адекватным им уровнем требований). С появлением техники с принципиально новыми возможностями программному инженеру придется искать новые решения. >
Прямым следствием отсутствия возможности «теоретического» контроля проекта является то, что тестирование продукта это
единственный способ убедиться в его качестве. Именно поэтому стоимость тестирования составляет существенную стоимость ПО. Кстати, строительный инженер, как правило, лишен возможности такого «тестирования» своего продукта перед сдачей его в эксплуатацию.
Ну и наконец, программная инженерия - молодая дисциплина, опыт которой насчитывает всего несколько десятков лет. По сравнению с опытом строительной инженерии (тысячелетия) это конечно очень мало. <Программную инженерию иногда сравнивают с ранней строительной, когда законы строительной механики еще не были известны и строительные инженеры действовали методом проб и ошибок, накапливая бесценный опыт. > Несмотря на МОЛОДОЙ возраст, программная инженерия также накопила определенный опыт, который позволяет (при разумном его применении) делать удачные проекты. Этот опыт выражен в основных принципах программной инженерии, которые мы с вами сейчас рассмотрим.
Критерии качества ПО
При отсутствии однозначного определения понятия «программная инженерия», можно утверждать, что задачей этой дисциплины является разработка методов и средств, способствующих производству высококачественного ПО экономически эффективным способом (путем сокращения стоимости и сроков разработки).
Отсутствие ошибок как критерий качества
Возникает вопрос, что понимать под высококачественным ПО? Часто под этим понимают создание «правильных программ», т.е. программ, не содержащих ошибок. Однако что понимать под ошибкой? Оказывается, дать формальное определение этого понятия невозможно. Наиболее логичным представляется считать, что в программе имеется ошибка, если она не выполняет того, что указано в документации по применению этой программы. Поскольку такие документы являются плохо формализованными, то и понятие ошибки в программе является существенно не формальным. В ПО программы и документация взаимно увязаны, образуют некоторую целостность. Поэтому правильнее говорить об ошибке не в программе, а в ПО в целом: будем считать, что в ПО имеется ошибка ($о/(\уаге еггог), если оно не выполняет того, что разумно ожидать от него пользователю. Разновидностями ошибок в ПС можно отметить:
1) несогласованность между программами ПО и документацией по их
применению;
2) несоответствие программы своей функциональной спецификации (описанию, разрабатываемому на этапе, предшествующему непосредственному программированию).
- инженеры работают в условиях ограниченных ресурсов: временных, финансовых и организационных (оборудование, техника, люди). <Иными словами, продукт должен быть создан в установленные сроки, в рамках выделенных средств, оборудования и людей. Хотя это в первую очередь относится к созданию заказных продуктов (оговаривается в условиях контракта), но при создании коробочных продуктов эти ограничения имеют не меньшее значение, т.к. здесь они диктуются условиями рыночной конкуренции;».
Что означает «все аспекты производства ПО»? Программная инженерия занимается не только техническими вопросами производства ПО (специфицирование требований, проектирование, кодирование и проч.), но и управлением программными проектами, включая вопросы планирования, финансирования, управления коллективом и т.д. Кроме того, задачей программной инженерии является разработка средств, методов и теорий для поддержки процесса производства ПО.
Программные инженеры применяют систематичные и организованные подходы к работе для достижения максимальной эффективности и качества ПО. Их задача состоит в адаптации существующих методов и подходов к решению свой конкретной проблемы.
В чем отличие программной инженерии от других инженерных дисциплин?
Любая инженерная деятельность направлена на создание продукта определенного вида. Этот продукт в любой инженерии имеет жизненный цикл, который в упрощенном виде можно представить состоящим из следующих фаз: проектирование, создание образца, испытание, производство, эксплуатация.
Продуктом КИ является компьютерная программа - нематериальный объект. Отсюда следуют следующие отличия: фаза производства состоит з копировании образца на другие носитечи, поэтому стоимость этой фазь1 исчезающе мала. Если считать кодирование элементом проектирования, то отсутствует также и фаза создания образца (строится компилятором). Отсюда следует, что:
- стоимость программы = стоимости ее проектирования;
- стоимость проектирования коробочных продуктов «размазывается» по копиям;
- стоимость заказных продуктов остается высокой.
Второе существенное отличие заключается в том, что компьютерная программа - искусственный объект в том смысле, что для нее нет объективных законов, которым подчинялось бы ее поведение. <Например. у инженера—строителя есть объективные законы строительной механики: равновесия моментов и сил. устойчивости механических систем и т.д. Инженер-строитель может проверить свои архитектурные решения на соответствие этим законам и тем самым обеспечить удачу проекта. Эти законы объективны, они будут действовать всегда. У программного инженера на первый взгляд также есть типовые, проверенные временем архитектурные решения (например, клиент-серверная архитектура). Но эти решения определяются уровнем развития вычислительной техники (и адекватным им уровнем требований). С появлением техники с принципиально новыми возможностями программному инженеру придется искать новые решения. >
Прямым следствием отсутствия возможности «теоретического» контроля проекта является то, что тестирование продукта это
единственный способ убедиться в его качестве. Именно поэтому стоимость тестирования составляет существенную стоимость ПО. Кстати, строительный инженер, как правило, лишен возможности такого «тестирования» своего продукта перед сдачей его в эксплуатацию.
Ну и наконец, программная инженерия - молодая дисциплина, опыт которой насчитывает всего несколько десятков лет. По сравнению с опытом строительной инженерии (тысячелетия) это конечно очень мало. <Программную инженерию иногда сравнивают с ранней строительной, когда законы строительной механики еще не были известны и строительные инженеры действовали методом проб и ошибок, накапливая бесценный опыт. > Несмотря на МОЛОДОЙ возраст, программная инженерия также накопила определенный опыт, который позволяет (при разумном его применении) делать удачные проекты. Этот опыт выражен в основных принципах программной инженерии, которые мы с вами сейчас рассмотрим.
Критерии качества ПО
При отсутствии однозначного определения понятия «программная инженерия», можно утверждать, что задачей этой дисциплины является разработка методов и средств, способствующих производству высококачественного ПО экономически эффективным способом (путем сокращения стоимости и сроков разработки).
Отсутствие ошибок как критерий качества
Возникает вопрос, что понимать под высококачественным ПО? Часто под этим понимают создание «правильных программ», т.е. программ, не содержащих ошибок. Однако что понимать под ошибкой? Оказывается, дать формальное определение этого понятия невозможно. Наиболее логичным представляется считать, что в программе имеется ошибка, если она не выполняет того, что указано в документации по применению этой программы. Поскольку такие документы являются плохо формализованными, то и понятие ошибки в программе является существенно не формальным. В ПО программы и документация взаимно увязаны, образуют некоторую целостность. Поэтому правильнее говорить об ошибке не в программе, а в ПО в целом: будем считать, что в ПО имеется ошибка ($о/(\уаге еггог), если оно не выполняет того, что разумно ожидать от него пользователю. Разновидностями ошибок в ПС можно отметить:
1) несогласованность между программами ПО и документацией по их
применению;
2) несоответствие программы своей функциональной спецификации (описанию, разрабатываемому на этапе, предшествующему непосредственному программированию).