Главная страница
Навигация по странице:

  • Понятие технологии программирования

  • Виды технологий программирования

  • Второй этап

  • Объектно-ориентированный подход

  • Четвертый этап

  • Case -технологии

  • Жизненный цикл и этапы разработки программного обеспечения Жизненным циклом

  • Анализ требований и определение спецификаций.

  • Реализация.

  • Критерии качества программ

  • Учебное пособие для студентов высших учебных заведений, обучающихся по направлению подготовки230400 Информационные системы и технологии


    Скачать 0.54 Mb.
    НазваниеУчебное пособие для студентов высших учебных заведений, обучающихся по направлению подготовки230400 Информационные системы и технологии
    Дата11.10.2022
    Размер0.54 Mb.
    Формат файлаpdf
    Имя файлаlek1-1.pdf
    ТипУчебное пособие
    #728527

    Лекция 1. Введение в технологии программирования
    Лекция основана на материалах следующих учебных пособий:
    1. Г.С. Иванова. Технология программирования. – Издательство «КноРус», 2016. – 334 с.
    2. Ю.Ю.
    Громов, О.Г. Иванова, М.П. Беляев, Ю.В. Минин. Технология программирования. Учебное пособие для студентов высших учебных заведений, обучающихся по направлению подготовки230400 «Информационные системы и технологии». – Тамбов : Изд-во ФГБОУ ВПО «ТГТУ», 2013. – 172 с.
    3. П.Б. Хорев. Объектно-ориентированное программирование. Учебное пособие для студентов высшего профессионального образования. – М.: Издательский центр
    «Академия», 2012. – 448 с.
    Содержание лекции:
    Понятие технологии программирования. Виды технологий. Критерии качества про- грамм. Жизненный цикл программы и этапы ее развития. Архитектура программы и спо- собы ее описания.
    Понятие технологии программирования
    Создание современной программной системы – весьма трудоёмкая задача.
    Будущий специалист в области разработки программного обеспечения должен иметь представление о методах анализа, проектирования, реализации и тестирования программных систем.
    Технологией программирования называют совокупность методов и инструментальных средств, используемых в процессе разработки программного обеспечения. Как любая другая технология, технология программирования представляет собой набор технологических инструкций, включающих:
    - указание последовательности выполнения технологических операций;
    - перечисление условий, при которых выполняется та или иная операция;
    - описания самих операций, где для каждой операции определены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки.
    Виды технологий программирования
    С развитием вычислительной техники и программного обеспечения совершенствовались и технологии разработки программ. Различают следующие этапы развития программирования и соответствующие им виды технологий.
    Первый этап охватывает период от появления первых вычислительных машин до середины 60-х гг. XX в. Это период отсутствия технологий программирования, когда разработка программ считалась особым видом творчества, искусством. Иногда говорят о
    «стихийных» технологиях программирования. Существенным явлением было появление в алгоритмических языках средств, позволяющих оперировать подпрограммами.
    Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм. Появление средств поддержки подпрограмм позволило осуществлять разработку программного обеспечения нескольким программистам параллельно.
    В начале 60-х гг. XX в. разразился «кризис программирования». Он выражался в том, что фирмы, взявшиеся за разработку сложного программного обеспечения, срывали сроки завершения проектов. Проект устаревал раньше, чем был готов к внедрению, увеличивалась его стоимость, и в результате многие проекты так никогда и не были завершены. Объективно все это было вызвано несовершенством технологии
    программирования. В отсутствии чётких моделей описания подпрограмм и методов их проектирования создание каждой подпрограммы превращалось в непростую задачу, интерфейсы подпрограмм получались сложными, и при сборке программного продукта выявлялось большое количество ошибок согласования. Исправление таких ошибок, как правило, требовало серьёзного изменения уже разработанных подпрограмм, что ещё более осложняло ситуацию, так как при этом в программу часто вносились новые ошибки, которые также необходимо было исправлять. Анализ причин возникновения большинства ошибок позволил сформулировать новый подход к программированию, который был назван «структурным».
    Второй этап развития технологий программирования (60 – 80-е гг. XX в.) характеризуется преобладанием структурного подхода к программированию. Этот подход представляет собой совокупность рекомендуемых технологических приёмов, охватывающих выполнение всех этапов разработки программного обеспечения. В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации частей в виде независимых подпрограмм. С появлением других принципов декомпозиции (объектного, логического и т.д.) данный способ получил название процедурной декомпозиции. Структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры. Проектирование программ, таким образом, осуществлялось «сверху вниз» (нисходящим способом) и подразумевало реализацию общей идеи, обеспечивая проработку интерфейсов подпрограмм. Такой подход назывался методом пошаговой детализации. Одновременно вводились ограничения на конструкции алгоритмов (управляющие структуры).
    Кратко положения структурного программирования можно сформулировать следующим образом. Структурное программирование подразумевает:

    точно обозначенные управляющие (основные) структуры алгоритмов;

    соответствующее логике программы разбиение ее на программные блоки;

    автономные подпрограммы, в которых преимущественно используются локальные переменные;

    отсутствие (или, по крайней мере, ограниченное использование) операторов безусловного перехода – goto, break и др.
    Последовательное применение концепций структурного программирования предполагает на каждом этапе проектирования программы разделение задачи на связанные между собой подзадачи, при этом программа разбивается на логически завершенные и стандартно кодируемые части. В результате код программы понятные легко читается не только ее автором, но и другими программистами, и число ошибок при программировании существенно уменьшается. Естественно, преимущества структурного программирования наиболее ярко проявились при написании больших программ, когда проектирование программы просто невозможно без разделения части. Но и при создании средних и малых программ структурный подход давал хорошие результаты.
    Структурное программирование требует ясности и аккуратности в написании программных кодов. В частности, необходимо использование обозначений данных, подпрограмм и модулей, соответствующих их назначению. Кроме того, требуется структуризация программного кода не только по существу, в соответствии выше изложенными принципами структурного программирования, но и структуризация теста программного кода, то есть наличие отступов, написание операторных скобок (например, begin и end) в определенном порядке (например, друг под другом), аккуратное написание комментариев. Все это делает программный код удобным для анализа и модификации.
    Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования.
    Среди наиболее известных языков этой группы стоит назвать PL/1, ALGОL, Pascal, С.
    В рамках структурного программирования получило развитие модульное
    программирование, которое предполагает выделение групп подпрограмм,
    использующих одни и те же глобальные данные в отдельно компилируемые модули
    (библиотеки подпрограмм), например, модуль графических ресурсов, модуль подпрограмм вывода на принтер.
    Связи между модулями при использовании данной технологии осуществляются через подготовленный интерфейс, в то время как доступ к реализации модуля (телам подпрограмм и некоторым «внутренним»переменным) запрещён. Эту технологию поддерживают современные версии языков Pascal и С (С++), языки Ада и Modula.
    Использование модульного программирования существенно упростило разработку программного обеспечения несколькими программистами. Теперь каждый из них мог разрабатывать свои модули независимо, обеспечивая взаимодействие модулей через специально оговоренные межмодульные интерфейсы. Кроме того, модули в дальнейшем без изменений можно было использовать в других разработках, что повысило производительность труда программистов.
    Узким местом модульного программирования является то, что ошибка в интерфейсе при вызове подпрограммы выявляется только при выполнении программы
    (из-за раздельной компиляции модулей обнаружить эти ошибки раньше невозможно). При увеличении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдельных частей программы становится практически невозможно. Для разработки программного обеспечения большого объёма было предложено использовать объектный подход, не отменяющий структурное и модульное программирование, а являющийся их развитием.
    Объектно-ориентированный подход к программированию сформировался к середине 80-х гг. ХХ века, открыв третий этап развития технологий программирования.
    Объектно-ориентированное программирование определяется как технология создания программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого типа
    (класса), а классы образуют иерархию с наследованием свойств.
    Объекты впервые были использованы в языке Simula (имитационного моделирования сложных систем) ещё в 60-х гг. XX века. Естественный для языков моделирования способ представления программы получил развитие в другом языке моделирования – языке Smalltalk (70-е гг. XX в.), а затем был использован в новых версиях универсальных языков программирования, таких как Pascal, С++, Modula, Java.
    Основным достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения. Объектный подход позволяет вести практически независимую разработку отдельных частей (объектов) программы. Кроме этого, объектный подход предлагает новые способы организации программ, основанные на механизмах инкапсуляции, наследования, полиморфизма, композиции, наполнения.
    Эти механизмы позволяют конструировать сложные классы из сравнительно простых классов. В результате существенно увеличивается показатель повторного использования кодов и появляется возможность создания библиотек объектов.
    Разработка приложений операционной системы Windows и других оконных сред основывается на объектно-ориентированном подходе. Наибольшее распространение получили универсальные среды программирования для Windows Borland Delphi, Borland
    C++ Builder, Borland Developer Studio, Microsoft Visual Studio.
    Четвертый этап развития технологий программирования начинается с середины
    90-годов ХХ века и характеризуется применением компонентного подхода и CASE-
    технологий.
    Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих компонентов, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов, объекты-компоненты можно собрать в динамически
    присоединяемые библиотеки или исполняемые файлы, распространять в двоичном виде
    (без исходных кодов) и использовать в любом языке программирования, поддерживающем соответствующую технологию. Это позволяет программистам многократно использовать готовые компоненты при разработке программ.
    Компонентный подход лежит в основе технологий, разработанных на базе COM
    (Component Object Model – компонентная модельобъектов), и технологии создания распределённых приложений CORBA (Common Object Request Broker Architecture – общая архитектура с посредником обработки запросов объектов).
    Технология СОМ фирмы Microsoft является развитием технологии OLE I (Object
    Linking and Embedding – связывание и внедрение объектов), которая использовалась в ранних версиях Windows для использования внутри документа, созданного одним приложением фрагментов, созданных другими приложениями. Технология СОМ определяет общие принципы взаимодействия программ любых типов, независимо от того, функционируют ли эти части в пределах одного процесса, в разных процессах на одном компьютере или на разных компьютерах. Модификация СОМ, обеспечивающая передачу вызовов между компьютерами, называется DCOM (Distributed COM – распределённая
    СОМ).
    На базе технологии СОМ и её распределённой версии DCOM были разработаны многие популярные компонентные технологии создания программного обеспечения, например, OLE—automation, ActiveX.
    Технология CORBA, разработанная группой компаний ОМС (Object Management
    Group – группа внедрения объектной технологии программирования), реализует подход, аналогичный СОМ, на базе объектов и интерфейсов CORBA. Программное ядро CORBA реализовано для всех основных аппаратных и программных платформ, поэтому эту технологию можно использовать для создания распределённого программного обеспечения в разнородной вычислительной среде. Организация взаимодействия между объектами клиента и сервера в CORBA осуществляется с помощью специального посредника, названного VisiBroker, и другого специализированного программного обеспечения.
    Case -технологии – это технологии проектирования программ с помощью Case-
    средств или инструментов. Case расшифровывается как Computer-Aided Software/System
    Engineering
    –разработка программного обеспечения/программных систем с использованием компьютерной поддержки. Таким образом, эти компьютерные технологии автоматизации разработки программного обеспечения. Эти технологии применяются на всех этапах жизненного цикла программного обеспечения (стандарт
    ISO/IEC 12207:2008).
    Обычно к
    CASE-средствам относят любое программное средство, автоматизирующее ту или иную совокупность процессов жизненного цикла ПО и обладающее следующими особенностями:
    • мощные графические средства для описания и документирования ИС, обеспечивающие удобный интерфейс с разработчиком и развивающие его творческие возможности;
    • интеграция отдельных компонент CASE-средств, обеспечивающая управляемость процессом разработки информационной системы;
    • использование специальным образом организованного хранилища проектных метаданных (репозитория).
    Интегрированное CASE-средство (или комплекс средств, поддерживающих полный жизненный цикл ПО) содержит следующие компоненты:
    • репозиторий, являющийся основой CASE-средства. Он должен обеспечивать хранение версий проекта и его отдельных компонентов, синхронизацию поступления информации от различных разработчиков при групповой разработке, контроль метаданных на полноту и непротиворечивость;

    • графические средства анализа и проектирования, обеспечивающие создание и редактирование иерархически связанных диаграмм (DFD, ERD и др.), образующих модели информационной системы;
    • средства разработки приложений, включая алгоритмические языки и генераторы кодов;
    • средства конфигурационного управления;
    • средства документирования;
    • средства тестирования;
    • средства управления проектом;
    • средства реинжиниринга.
    Жизненный цикл и этапы разработки программного обеспечения
    Жизненным циклом программного обеспечения называют период от момента появления идеи создания некоторого программного обеспечения до момента завершения его поддержки фирмой-разработчиком или фирмой, выполнявшей сопровождение.
    Состав процессов жизненного цикла регламентируется международным стандартом ISO/IEC 12207:2008 «
    System and software engineering
    — Software life cycle processes
    » («Системная и программная инженерия – процессы жизненного цикла программного обеспечения»). ISO (Internationaд Organization for Standardization) –
    Международная организация по стандартизации. IЕС (International Electrotechnical
    Commission) – Международная комиссия по электротехнике. Существует российский аналог этого стандарта: ГОСТ Р ИСО/МЭК 12207-2010.
    Процесс разработки в соответствии со стандартом предусматривает все действия и задачи, выполняемые разработчиком. Этот процесс охватывает работы по созданию программного обеспечения и его компонентов в соответствии с заданными требованиями, оформление проектной и эксплуатационной документации, подготовку материалов, необходимых для проверки работоспособности и качества программных продуктов, материалов, необходимых для обучения персонала, и т.д.
    По стандарту процесс разработки включает следующие действия:
    
    подготовительную работу – выбор модели жизненного цикла, стандартов, методов и средств разработки, а также составление плана работ; анализ требований к системе – определение её функциональных возможностей, пользовательских требований, требований к надёжности и безопасности, требований к внешним интерфейсам и т.д.; проектирование архитектуры системы – определение состава необходимого оборудования, программного обеспечения и операций, выполняемых обслуживающим персоналом; анализ требований к программному обеспечению
    – определение функциональных возможностей, включая характеристики производительности, среды функционирования компонентов, внешних интерфейсов, спецификаций надёжности и безопасности, эргономических требований, требований к используемым данным, установке, приёмке, пользовательской документации, эксплуатации и сопровождению; проектирование архитектуры программного обеспечения – определение структуры программного обеспечения, документирование интерфейсов его компонентов, разработку предварительной версии пользовательской документации, а также требований к тестам и плана интеграции; детальное проектирование программного обеспечения – подробное описание компонентов программного обеспечения и интерфейсов между ними, обновление пользовательской документации, разработка и документирование требований к тестам и плана тестирования компонентов программного обеспечения, обновление плана интеграции компонентов;
    кодирование и тестирование программного обеспечения – разработку и документирование каждого компонента, а также совокупности тестовых процедур и данных для их тестирования, тестирование компонентов, обновление пользовательской документации, обновление плана интеграции программного обеспечения; интеграцию программного обеспечения – сборку программных компонентов в соответствии с планом интеграции и тестирование программного обеспечения на соответствие квалификационным требованиям, представляющих собой набор критериев или условий, которые необходимо выполнить, чтобы квалифицировать программный продукт, как соответствующий своим спецификациям и готовый к использованию в заданных условиях эксплуатации; квалификационное тестирование программного обеспечения – тестирование программного обеспечения в присутствии заказчика для демонстрации его соответствия требованиям и готовности к эксплуатации; при этом проверяются также готовность и полнота технической и пользовательской документации; интеграцию системы – сборку всех компонентов системы, включая программное обеспечение и оборудование; квалификационное тестирование системы – тестирование системы на соответствие требованиям к ней и проверку оформления и полноты документации; установку программного обеспечения – установку программного обеспечения на оборудовании заказчика и проверку его работоспособности; приёмку программного обеспечения – оценку результатов квалификационного тестирования программного обеспечения и системы в целом и документирование результатов оценки совместно с заказчиком, окончательную передачу программного обеспечения заказчику.
    Указанные действия можно сгруппировать, условно выделив следующие основные этапы разработки программного обеспечения (в скобках указаны соответствующие стадии разработки по ГОСТ
    34.601-90
    «Стадии разработки»):

    постановка задачи (стадия «Техническое задание»);

    анализ требований и разработка спецификаций (стадия «Эскизный проект»);

    проектирование (стадия «Технический проект»);

    реализация (стадия «Рабочий проект»).
    Традиционно разработка также включала этап сопровождения (началу этого этапа соответствует стадия «Внедрение» по ГОСТ). Однако по международному стандарту в соответствии с изменениями, произошедшими в индустрии разработки программного обеспечения, этот процесс теперь рассматривается отдельно. Условность выделения этапов связана с тем, что на любом этапе возможно принятие решений, которые потребуют пересмотра решений, принятых ранее.
    Постановка задачи. В процессе постановки задачи чётко формулируют назначение программного обеспечения и определяют основные требования к нему.
    Каждое требование представляет собой описание необходимого или желаемого свойства программного обеспечения. Различают функциональные требования, определяющие функции, которые должно выполнять разрабатываемое программное обеспечение, и эксплуатационные требования, определяющие особенности его функционирования.
    Требования к программному обеспечению, имеющему прототипы, обычно определяют по аналогии, учитывая структуру и характеристики уже существующего программного обеспечения. Для формулирования требований к программному обеспечению, не имеющему аналогов, иногда необходимо провести специальные исследования, называемые предпроектными. В процессе таких исследований определяют разрешимость задачи, возможно, разрабатывают методы её решения(если они новые) и устанавливают наиболее существенные характеристики разрабатываемого программного обеспечения.
    Для выполнения предпроектных исследований, как правило, заключают договор на
    выполнение научно-исследовательских работ. В любом случае этап постановки задачи заканчивается разработкой технического задания, фиксирующего принципиальные требования, и принятием основных проектных решений
    Анализ требований и определение спецификаций. Спецификациями называют точное формализованное описание функций и ограничений разрабатываемого программного обеспечения.
    Различают функциональные и эксплуатационные спецификации.
    Совокупность спецификаций представляет собой общую логическую модель проектируемого программного обеспечения.
    Для получения спецификаций выполняют анализ требований технического задания, формулируют содержательную постановку задачи выбирают математический аппарат формализации, строят модель предметной области, определяют подзадачи и выбирают или разрабатывают методы их решения.
    Часть спецификаций может быть определена в процессе предпроектных исследований и зафиксирована в техническом задании.
    На этом этапе также целесообразно сформировать тесты для тестирования программ.
    Проектирование. Основной задачей этого этапа является определение подробных спецификаций разрабатываемого программного обеспечения. Процесс проектирования сложного программного обеспечения обычно включает:

    проектирование общей структуры – определение основных компонентов и их взаимосвязей;

    декомпозицию компонентов и построение структурных иерархий;

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


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

    физическое проектирование – привязку к конкретным техническим и программным средствам среды функционирования, т.е. учёт ограничений, определённых в спецификациях.
    Реализация. Реализация представляет собой процесс поэтапного написания кодов программы на выбранном языке программирования (кодирование), их тестирование и отладку.
    Сопровождение. Сопровождение – это процесс создания и внедрения новых версий программного продукта. Причинами выпуска новых версий могут служить:

    необходимость исправления ошибок, выявленных в процессе эксплуатации предыдущих версий;

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

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

    С изменением модели жизненного цикла программного обеспечения, роль сопровождения существенно возросла, так как продукты теперь создаются итерационно: сначала выпускается сравнительно простая версия, затем следующая с большими возможностями, затем следующая и т.д. Именно это и послужило причиной выделения этапа сопровождения в отдельный процесс жизненного цикла в соответствии со стандартом ISO/IEC 12207.
    Критерии качества программ
    В настоящее время существуют разнообразные критерии качества программных средств, которые должны обеспечивать требования различных групп потребителей. Для характеристики качества программ могут быть использованы как отечественные (
    РФ ГОСТ
    28195-89), так и международные (ISO 9126) нормативные документы.
    Например, российские стандарты предлагают использовать следующие группы и комплексные показатели качества:
    – показатели надёжности программных средств (ПС) - устойчивость функционирования, работоспособность;
    – показатели сопровождения (структурность, простота конструкции, наглядность, повторяемость);
    – показатели удобства применения (лёгкость освоения, доступность эксплуатационных программных документов, удобство эксплуатации и обслуживания);
    – показатели эффективности (уровень автоматизации, временная эффективность, ресурсоёмкость);
    – показатели универсальности (гибкость, мобильность, модифицируемость);
    – показатели корректности (полнота реализации, согласованность, логическая корректность, проверенность).
    Согласно ГОСТ РФ ИСО 9126 следует обеспечивать следующие качественные характеристики программных средств:
    – функциональные возможности;
    – функциональную пригодность;
    – правильность (корректность);
    – способность к взаимодействию;
    – защищённость;
    – надёжность;
    – эффективность;
    – практичность (применимость);
    – сопровождаемость;
    – мобильность.


    написать администратору сайта