Автор работы: Пользователь скрыл имя, 13 Октября 2012 в 21:13, курсовая работа
Известно, что основной задачей первых трех десятилетий компьютерной эры являлось развитие аппаратных компьютерных средств. Это было обусловлено высокой стоимостью обработки и хранения данных. В 80-е годы успехи микроэлектроники привели к резкому увеличению производительности компьютера при значительном снижении стоимости.
Основной задачей 90-х годов и начала XXI века стало совершенствование качества компьютерных приложений, возможности которых целиком определяются программным обеспечением (ПО).
ВВЕДЕНИЕ 2
1. БАЗОВЫЕ ОСНОВЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 4
1.1 КЛАССИЧЕСКИЙ ЖИЗНЕННЫЙ ЦИКЛ 5
1.2 МАКЕТИРОВАНИЕ 7
1.3 СТРАТЕГИИ КОНСТРУИРОВАНИЯ ПО 10
1.4. МОДЕЛИ КАЧЕСТВА ПРОЦЕССОВ РАЗРАБОТКИ ПО 12
2. ПРОГРАММНАЯ ИНЖЕНЕРИЯ 16
2.1 РАСПРЕДЕЛЕННОЕ ПРОГРАММИРОВАНИЕ 16
2.2 СРЕДСТВА РАЗРАБОТКИ ПО 19
2.3 ВОПРОСЫ БЕЗОПАСТНОСТИ 22
3. СОВРЕМЕННЫЕ ТЕНДЕНЦИИ РАЗРАБОТКИ ПО 24
3.1 ПРИМЕНЕНИЕ ПАРАЛЛЕЛЬНЫХ АЛГОРИТМОВ 24
3.2 CASE-СИСТЕМЫ 29
3.3 ИННОВАЦИОННЫЕ ВОЗМОЖНОСТИ 33
ЗАКЛЮЧЕНИЕ 39
СПИСОК ЛИТЕРАТУРЫ 43
Корпорация Intel взяла на себя обязательство помогать разработчикам в освоении новых методов программирования и использования новых возможностей процессоров. Она предоставляет услуги по обучению и повышению квалификации, а также новые инструментальные средства разработки. Одна из стоящих перед нами задач – воспитать следующее поколение программистов, которые будут мыслить «параллельно». Такое изменение мышления возможно только в результате длительного развития, оно не может произойти мгновенно. Когда программисты, разработчики решений и системной архитектуры освоят принципы одновременного выполнения нескольких потоков, перед ними откроется совершенно новое понимание возможностей компьютера.
Более того, многопоточный подход к разработке приложений может позволить сообществу разработчиков ПО воплотить в жизнь инновационные модели использования, потенциальные преимущества которых видны уже сейчас. Например, ученый из Калифорнийского Университета в Сан-Диего недавно продемонстрировал многопоточное приложение, которое может быть использовано для спасения жизни людей. Периодические извержения вулканов на острове Ява в Индонезии создают угрозу для населения этого одного из самых густонаселенных районов мира. Ученый разработал многопоточную программу для оценки степени угрозы и составления планов эвакуации. Программа одновременно обрабатывает данные о рельефе местности, спутниковые карты района, данные о сейсмической активности и другую информацию. С помощью комбинирования и наложения изображений и данных создается фотореалистичная трехмерная карта, на которой ясно видны линии разломов, опасные участки и потенциальный риск для населенных пунктов. Геологи, городские архитекторы, спасатели, представители СМИ и другие заинтересованные лица на острове Ява теперь имеют многопоточное приложение, которое помогает спасать жизни людей и оценивать имущественный риск. Обновление данных происходит регулярно, в зависимости от изменения вулканической активности. На основе этой информации государственные власти могут принимать меры по эвакуации жителей региона.
Разработчики только сейчас начинают понимать преимущества многопоточности, предусмотренной в имеющихся и будущих процессорах. Например, приложение, разработанное для выполнения на процессорах с технологией Hyper-threading, сразу получит преимущества от использования на двухъядерных процессорах, т.к. в нем уже предусмотрены два потока. Надеемся, что при разработке таких приложений учитывалась возможность создания большего количества потоков, чем доступно в процессорах с технологией Hyper-threading или в двухъядерных процессорах. В идеале, при проектировании приложений необходимо предусматривать возможность создания максимального числа потоков в зависимости от количества и возможностей процессоров. Если программа может использовать дополнительные потоки, которые предоставляет технология Hyper-threading или многоядерность, ее производительность будет напрямую зависеть от количества процессоров.
К сожалению, из-за того, что разработчики привыкли мыслить категориями прошлого, при проектировании приложений для двухъядерных или четырехъядерных процессоров они ограничиваются использованием всего двух или четырех потоков. Однако если при разработке программы предусмотрено создание максимального количества потоков, возможных для нее, то по мере добавления новых ядер программа будет работать более быстро и эффективно. Принцип независимости количества потоков от количества реально имеющихся ядер позволяет создавать приложения, рассчитанные на перспективу, ускорить окупаемость инвестиций, сократить затраты и продлить жизненный цикл ПО.
Наилучший вариант для проектировщиков и разработчиков программного обеспечения – перестать думать о том, сколько вычислительных ядер будет доступно при выполнении приложения. Гораздо более практичный и эффективный подход – думать о том, сколько задач в приложении может выполняться параллельно.
Если при проектировании приложений разработчики будут предусматривать создание максимально возможного количества потоков, они смогут многие годы использовать преимущества будущей продукции Intel. Если же они будут ограничиваться только двумя потоками (с ориентиром исключительно на двухъядерные процессоры), новые возможности следующих поколений процессоров будут недоступны для их приложений. По мере выхода новых, более мощных платформ быстродействие приложений, спроектированных с учетом максимального количества потоков, будет расти.
Разработчики ПО столкнутся с различными проблемами: с необходимостью создания масштабируемых приложений, освоения новых методов отладки и написания кода, допускающего поддержку. В целом им придется использовать больше абстракций, чтобы избежать явной привязки к потокам. Большинству поставщиков инструментальных средств разработки следует уделять особое внимание этому вопросу. Абстракции, такие как библиотеки, OpenMP* и многопоточные компоненты Intel® Threading Blocks очень важны для практической реализации масштабируемости. Наконец, разработка приложений связана с такими проблемами как вероятность возникновения взаимоблокировки и ошибки синхронизации (известных как общие ошибки параллельного программирования). Intel® Thread Checker помогает бороться с такими опасностями. В качестве положительного факта необходимо заметить, что инструментальные средства постоянно развиваются, и скоро их поставщики найдут способы дальнейшей поддержки параллельного программирования. Разработчики инструментальных средств для параллельного программирования и адаптации имеющихся приложений должны понимать проблемы, связанные с масштабируемостью, отладкой и поддержкой кода.
«Широкий выбор многопоточных инструментальных средств и богатый опыт корпорации Intel позволили на 70% повысить быстродействие наших кодеков mp3 и mp3 SURROUND при использовании их на ноутбуках с технологией Intel® Centrino® Duo для мобильных ПК. В результате существенно улучшилось качество звучания» - заявил Рокки Колдуэлл (Rocky Caldwell), генеральный директор подразделения mp3 Licensing, компания Thomson.
Сегодня уже доступны средства Intel® для разработки программного обеспечения, поддерживающие параллелизм. Это библиотеки, системы проверки потоков, компиляторы с расширениями OpenMP*, отладчики и анализаторы производительности. В дополнение к этому впечатляющему набору продукции корпорация Intel недавно представила многопоточные компоненты Intel® Threading Blocks, межплатформенную библиотеку периода выполнения, построенную на базе шаблонов C++. Основной целью ее разработки была ликвидация разрыва между сложными многопоточными средствами разработки низкого уровня и готовыми к использованию высокоуровневыми алгоритмами. С помощью этих шаблонов разработчики могут сразу встраивать в свой код протестированные масштабируемые параллельные конструкции. При создании библиотеки компонентов Intel Threading Blocks главное внимание уделялось легкости программирования, проверке корректности многопоточных алгоритмов и обеспечению масштабируемости. Такие характеристики и возможности должны заинтересовать разработчиков, использующих язык C++, но не имеющих достаточного опыта работы с многопоточностью. Они сразу смогут начать создавать многопоточные приложения с высокой степенью параллелизма.
Многопоточные компоненты Intel поддерживают операционные системы Microsoft Windows*, Linux* и Mac OS X* для 32-разрядных и 64-разрядных платформ. Ожидается, что их будут широко использовать группы разработчиков перспективных приложений для многоядерных процессоров, заинтересованные в создании оптимальных программ. Привлекательность этой продукции повышается благодаря совместимости с компиляторами Intel, Microsoft и GNU. Инструментальные средства Intel позволяют разработчикам быстро справиться с трудностями, возникающими при создании многопоточных приложений, а компаниям-поставщикам ПО – сэкономить время, деньги и разрабатывать программные проекты точно в заданные сроки.
Многоядерные архитектуры уже сегодня могут принести многочисленные преимущества. Для этого даже не требуется вносить изменения в ПО. Использование всех преимуществ многопоточности, даст Вам дополнительные возможности и Вы сможете обеспечить оптимальное использование имеющихся вычислительных ресурсов. По мере адаптации разработчиками грядущего изменения принципов программирования многоядерные вычисления позволят в будущем полностью изменить представления о производительности. К счастью, имеется множество образовательных ресурсов, возможностей обучения и накопленный практический опыт. Это позволит упростить переход.
Современная программная инженерия (Software Engineering) — молодая и быстро развивающаяся область знаний и практики. Она ориентирована на комплексное решение задач, связанных с разработкой особой разновидности сложных систем — программных систем.
Программные системы — самые необычные и удивительные создания рук человеческих. Они не имеют физических тел, их нельзя потрогать, ощутить одним из человеческих чувств. Они не подвергаются физическому износу, их нельзя изготовить в обычном инженерном смысле, как автомобиль на заводе. И вместе с тем разработка программных систем является самой сложной из задач, которые приходилось когда-либо решать человеку-инженеру. В пределе — это задача создания рукотворной системы, сопоставимой по сложности самому творцу.
Многие стереотипы и приемы, разработанные в физическом мире, оказались неприменимы к инженерии программных систем. Приходилось многое изобретать и придумывать. Все это теперь история. Программные инженеры начинали с полного неприятия инструментария других инженерных дисциплин, уверовав в свою кастовость «жрецов в белых халатах», и совершили эволюционный круг, вернувшись в лоно общечеловеческой инженерии. Современное общество впадает во все большую зависимость от программных технологий.
Проводя оценку процесса разработки ПО следует отметить ряд важных общих принципов, которые существенно облегчат работу с программой для пользователей и сопровождающих программистов:
Любую программу, даже самую универсальную и гибкую, возможно понадобится дополнительно конфигурировать и изменять в соответствии с изменившимися потребностями и вкусами пользователей. Исходя из этого, данные принципы распространяются не только на видимую часть программы, но и на ее внутренний механизм.
Базис современной программной инженерии образуют следующие составляющие:
- процессы конструирования ПО;
- метрический аппарат, обеспечивающий измерения процессов и продуктов;
- аппарат формирования исходных требований к разработкам;
- аппарат анализа и проектирования ПО;
- аппарат визуального моделирования ПО;
- аппарат тестирования программных продуктов.
Все эти составляющие рассмотрены в данной работе. Конечно, некоторые аспекты осталось за рамками данной работы. Реорганизация (рефакторинг), особенности конструирования web-приложений, работа с базами данных — вот неполный перечень этих тем.
Хотелось бы обратить внимание на новейшие постобъектные методологии - аспектно-ориентированное и многомерное проектирование и программирование. Они представляют собой новую высоту в стремительном полете в компьютерный космос. Но это - тема другой отдельной работы.
Наступило время, когда независимые производители ПО и проектировщики решений должны уделять основное внимание переходу к новым принципам разработки программ. Пора строить надежную основу, которая позволит при создании приложений использовать все преимущества растущей производительности и многозадачности.