1. Отличие программной инженерии от системотехники
1.1. Программная инженерия тесно связана с системотехникой.
1.1.1. Программная инженерия (англ. software engineering) — приложение систематического, дисциплинированного, измеримого подхода к развитию, функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению
1.2. Системотехника охватывает все аспекты разработки вычислительных систем (включая создание аппаратных средств и ПО) и соответствующие технологические процессы. Технологии инженерии программного обеспечения являются частью этих процессов.
1.2.1. Системотехника (system engineering) объединяет различные инженерные дисциплины по разработке всевозможных искусственных систем – энергоустановок, телекоммуникационных систем, встроенных систем реального времени и т.д. Очень часто ПО оказывается частью таких систем, выполняя задачу управления соответствующего оборудования. Такие системы называются программно-аппаратными, и участвуя в их создании, программисты вынуждены глубоко разбираться в особенностях соответствующей аппаратуры.
2. Примеры дисциплин инженерии
2.1. Основы математики и инженерии (в том числе инженерная экономика ПО);
2.2. Профессиональная практика (работа в команде, навыки коммуникации, этика);
2.3. Основы моделирования (анализ, работа с требованиями, спецификации);
2.4. Проектирование ПО (концепции и стратегии проектирования, проектирование человеко- машинного интерфейса, средства поддержки проектирования);
2.5. Верификация и аттестация ПО (основы, рецензия кода, тестирование, оценка пользовательского интерфейса, анализ проблем);
2.6. Эволюция ПО (на мой взгляд, совершенно справедливо в стандарте говорится об эволюции, а не о сопровождении ПО);
2.7. Процессы разработки ПО;
2.8. Качество ПО (стандарты качества ПО, процессы обеспечения качества ПО, процесса, продукта);
2.9. Управление программными проектами (концепции менеджмента, планирование и отслеживание выполнения проектов, управление персоналом, управление конфигурацией ПО);
3. Характеристики ПО по Бруксу
3.1. Сложность программных объектов, которая существенно зависит от их размеров.
3.1.1. Как правило, большее ПО (большее количество пользователей, больший объем обрабатываемых данных, более жесткие требования по быстродействию и пр.) с аналогичной функциональностью – это другое ПО.
3.2. Согласованность
3.2.1. ПО основывается не на объективных посылках (подобно тому, как различные системы в классической науке основываются на постулатах и аксиомах), а должно быть согласовано с большим количеством интерфейсов, с которыми впоследствии оно должно взаимодействовать. Эти интерфейсы плохо поддаются стандартизации, поскольку основываются на многочисленных и плохо формализуемых человеческих соглашениях.
3.3. Изменяемость
3.3.1. ПО легко изменить и, как следствие, требования к нему постоянно меняются в процессе разработки. Это создает много дополнительных трудностей при его разработке и эволюции.
3.4. Нематериальность
3.4.1. ПО невозможно увидеть, оно виртуально. Поэтому, например, трудно воспользоваться технологиями, основанными на предварительном создании чертежей, успешно используемыми в других промышленных областях (например, в строительстве, машиностроении). Там на чертежах в схематичном виде воспроизводятся геометрические формы создаваемых объектов. Когда объект создан, эти формы можно увидеть.
4. C какими иными видами человеческой деятельности соотносится создание ПО в данном разделе?
4.1. В программной инженерии используются: 1. программисты, занимающиеся разработкой ПО; 2. менеджеры, которые планируют и руководят проектом, отслеживают сроки и затраты; 3. инженеры службы ведения библиотек и репозитариев компонентов; 4. технологи, которые определяют инженерные методы и стандарты, создают для проекта модель ЖЦ, удовлетворяющую его целям и задачам; 4. тестировщики (контролеры), которые проверяют правильность выполнения процесса проектирования путем тестирования и на основе собранных данных проводят измерения разных характеристик качества, включая оценку надежности ПО; 5. верификаторы, которые проверяют правильность реализации функций в проекте; 6. валидаторы, проверяющие ПО на соответствие заданным требованиям.
5. Определение программной инженерии
5.1. Программная инженерия (Software Engineering) - это отрасль информатики, которая изучает вопросы построения компьютерных программ, отражает закономерности развития программирования, обобщает опыт программирования в виде комплекса знаний и правил регламентации инженерной деятельности разработчиков ПО.
6. Дата зарождения программной инженерии как отдельной науки
6.1. Рождением программной инженерии является 1968 год.
7. Отличие программной инженерии от информатики
7.1. Программная инженерия нацелена на решение проблем производства.
7.1.1. Программная инженерия (англ. software engineering) — приложение систематического, дисциплинированного, измеримого подхода к развитию, функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению
7.2. Информатика нацелена на разработку формальных, математизированных подходов к программированию.
7.2.1. Информатика (computer science) – это свод теоретических наук, основанных на математике и посвященных формальным основам вычислимости. Сюда относят математическую логику, теорию грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном тестировании и т.д. Трудно строго отделить программную инженерию от информатики, но в целом направленность этих дисциплин различна. Программная инженерия нацелена на решение проблем производства, информатика – на разработку формальных, математизированных подходов к программированию.
7.3. Программная инженерия использует достижения информатики.
7.3.1. Программная инженерия (Software Engineering) является отраслью информатики, которая изучает вопросы построения компьютерных программ, отражает закономерности развития программирования, обобщает опыт программирования в виде комплекса знаний и правил регламентации инженерной деятельности разработчиков ПО.