Что является отправной точкой компьютерной программы
Программа - данные, предназначенные для управления конкретными компонентами системы обработки информации в целях реализации определенного алгоритма.
Основной принцип машины Фон-Неймона в том, что и программы, и данные хранятся в одной и той же памяти. Сохраняемая в памяти программа представляет собой набор кодов, которые рассматриваются как данные. С точки зрения разработчика программа – активный компонент, т.к. она выполняет некоторые действия. С точки зрения процессора команды программы – данные, которые процессор читает и интерпретирует. С точки зрения компилятора программа – данные, которые он получает на входе (программа на языке высокого уровня) , а на выходе выдает другие данные (программу в машинных кодах).
Программное обеспечение – совокупность программ системы обработки информации и программных документов, необходимых для их эксплуатации.
Опр2. ПО – программы, предназначенные для многократного использования и применения разными пользователями. Свойства ПО:
1) Документирование. Программа является ПО при наличии документации к ним, дающей возможность тиражирования ПО и его продажи или распространения без участия разработчика.
2) Эффективность. Программное обеспечение рассчитано на многократное использование, поэтому оно пишется и отлаживается 1 раз, а выполняется многократно.
3) Надежность. Включает в себя выполнение 3 основных пунктов: тестирование программы при всех допустимых спецификациях входных данных, защиту от неправильных действий пользователя, защиту от взлома – пользователи должны иметь возможность взаимодействия с ПО только через легальные интерфейсы.
4) Сопровождение, включающее в себя: адаптацию ПО к конкретны условиям применения (адаптация передоверена пользователю и подразумевает выполнение описанных сценариев инсталляции и настройки), устранение ошибок (требует развитой сервисной службы, собирающей информацию об ошибках и формирующей исправляющие пакеты), модификация (предполагает изменение спецификации на ПО, при этом должны поддерживаться старые спецификации).
Системная программа – программа, предназначенная для поддержания работоспособности системы обработки информации или повышения эффективности ее использования.
Прикладная программа – программа, предназначенная для решения задачи или класса задач в определенной области применения системы обработки информации.
Системное программирование – процесс разработки системных программ. Системное программирование – разработка программ сложной структуры.
Классификация ПО:
3) Промежуточное (middleware) – совокупность программ, осуществляющих управление вторичными, т.е. конструируемыми самим ПО, ресурсами, ориентированными на решение широкого класса задач. К промежуточному ПО относятся: серверы БД, СУБД, серверы коммуникации, менеджеры транзакций и другие программные серверы.
С точки зрения инструментальных средств разработки, промежуточное ПО ближе к прикладному, т.к. не работает напрямую с первичными ресурсами, а использует для этого сервисы, предоставляемые системным ПО. С точки зрения алгоритмов и технологий разработки промежуточное ПО ближе к системного, т.к. всегда является сложным программным изделием многократного и многоцелевого использования и в нем применяются сходные алгоритмы, что и в системном ПО. Современные тенденции развития ПО состоят в снижении объема как системного, так и прикладного программирования. Основная часть работы выполняется с промежуточным ПО.
Снижение объема системного ПО определено современными концепциями ОС. Объектно-ориентированной архитектурой и архитектурой микроядра, в соответствии с которыми большую часть функций можно отнести к промежуточному ПО. Снижение объема прикладного программирования обусловлен тем, что современные продукты промежуточного ПО предлагают все больший набор инструментальных средств и шаблонов для решения задач своего класса. Значительная часть системного и практически все прикладное ПО пишется на языках высокого уровня, что обеспечивает сокращение расходов на их разработку и модификацию, а также переносимость.
Системное ПО подразделяется на системные управляющие программы, и системные обслуживающие программы.
Управляющие программа - системная программа, реализующая набор функций управления, который включает себя управление ресурсами и взаимодействие с внешней средой системы обработки информации, восстановления работы системы после проявления неисправностей в технических средствах.
Обслуживающая программа (утилита) – системная программа, предназначенная для оказания услуг общего характера пользователям и обслуживающему персоналу системы обработки информации.
Управляющая программа, совместно с набором необходимых для эксплуатации вычислительной системы утилит составляют операционную систему.
Система программирования – система, образуемая языком программирования, компилятором или интерпретатором программ, представленных на этом языке, соответствующей документации, а так же вспомогательными средствами для подготовки программ к форме, пригодной для выполнения.
Этапы подготовки программ:
При разработке программ, а тем более сложных, т.е. системных используется принцип модульности: разбиение сложной программы на составные части, каждая из которых может подготавливаться отдельно. Модульность является основным инструментом структурирования программного изделия, облегчающим его разработку, отладку, и сопровождение.
Программный модуль – программа или функционально завершенный фрагмент программы, предназначенный для хранения, трансляции, объединения с другими программными модулями и загрузки в оперативную память.
Свойства программного модуля:
Функциональность – модуль должен выполнять законченную функцию.
Несвязность – модуль должен иметь минимум связей с другими модулями, связь через глобальные переменные и глобальные области памяти нежелательна.
Специфицируемость- входные и выходные параметры модуля должны четко формулироваться.
Исходный модуль (ИМ)– программный модуль на исходной языке, обрабатываемый транслятором, представляемый для него как целое, достаточное для проведения трансляции.
Первым этапом подготовки программы является ее обработка макропроцессором или препроцессором. Макропроцессор обрабатывает текст программы и на выходе его получается новая редакция текста. Макропроцессор выполняет обработку текста и это означает с одной стороны, что он не воспринимает операторов языка программирования и не знает переменных программы, с другой – что все операторы и переменные макроязыка, т.е. те выражения программе, которые на прямую адресованы макропроцессору, в промежуточном ИМ’ уже отсутствуют и для дальнейших этапов обработки не требуются. Если макропроцессор заменил некоторый текст А на текст В, то транслятор видит только текст В и не знает, был этот текст написан или подставлен микропроцессором.
Следующим этапом является трансляция. Трансляция – преобразование программы, представленной на одном языке программирования в программу на другом языке программирования, в определенном смысле равносильной первой. Обычно выходным языком транслятора является машинный язык целевой вычислительной системы. Целевая ВС. – система, на которой программа будет выполняться.
Машинный язык – язык программирования, предназначенный для представления программ в форме, позволяющей выполнять их непосредственно техническими средствами обработки информации.
Трансляторы – общее название для программ, осуществляющих трансляцию. Они подразделяются на ассемблерыи компиляторы в зависимости от исходного языка программы, которую они обрабатывают. Ассемблеры работают с автокодами или языками ассемблера. Компиляторы – с языками высокого уровня.
Автокод – символьный язык программирования, предложения которого по своей структуре подобны командам и обрабатываемым данным конкретного машинного языка.
Язык ассемблера– язык программирования, который представляет собой символьную форму машинного языка с рядом возможностей, характерных для языка высокого уровня, реализуемых за счет макросредств.
Язык высокого уровня – язык программирования, понятия и структура которого удобны для восприятия человека.
Объектный модуль (ОМ) – программный модуль, получаемый в результате трансляции исходного модуля. Т.к. результатом трансляции является модуль на языке, близком к машинному, в нем уже не остается признаков того, на каком исходном языке был написан программный модуль. Это создает возможность составлять программы из модулей, написанных на разных языках. Однако специфика исходного языка может сказываться на физическом представлении базовых типов данных, способах обращения к процедурам и функциям и т.д.
Большая часть объектного модуля – команды и данные машинного языка в той форме, в какой они будут существовать во время выполнения программы. Однако программа в общем случае состоит из многих модулей. Поскольку транслятор обрабатывает только один конкретный модуль, он не может должным обработать те части этого модуля, в которых содержатся обращения к данным или процедурам, определенным в другом модуле. Такие обращения называются внешними ссылками. Те места в объектном модуле, где содержатся внешние ссылки, транслируются в промежуточную форму, подлежащую дальнейшей обработке.
Таким образом, объектный модуль представляет собой программу на машинной языке с неразрешенными внешними ссылками.
Разрешение внешних ссылок выполняется на следующем этапе подготовки, который обеспечивается редактором связей (компоновщиком), который соединяет вместе все объектные модули, входящие в программу. Поскольку редактор связей видит уже все компоненты программы, он имеет возможность обработать те места в объектных модулях, которые содержат внешние ссылки. Результатом работы редактора связей является загрузочный модуль.
Загрузочный модуль –программный модуль, представленный в форме, пригодной для загрузки в оперативную память для выполнения. ЗМ сохраняется в виде файла во внешней памяти. Для выполнения программа должна быть перенесена в оперативную память. При этом требуется дополнительная обработка. Например, настройка адресов в программе на ту область оперативной памяти, в которую программа загрузилась. Эта функция и выполняется загрузчиком.
Возможен вариант, в котором редактирование связей выполняется при каждом запуске программы на выполнение и совмещается с загрузкой. Это выполняется связывающим загрузчиком. Вариант связывания при загрузке более расходный, т.к. затраты на связывание тиражируются при каждом запуске, но он обеспечивает:
1) Большую гибкость в сопровождении, т.к. позволяет менять отдельные объектные модули программы, не меняя остальных модулей
2) Экономию внешней памяти, т.к. объектные модули, используемые во многих программах, не копируются в каждый загрузочный модуль, а хранятся одном экземпляре
Вариант интерпретации подразумевает прямое исполнение исходного модуля.
Интерпретация– реализация смысла некоторого синтаксически законченного текста, представленного на конкретном языке. Интерпретатор читает из исходного модуля очередное предложение программы, переводит его в машинный язык и передает на выполнение. Все затраты на подготовку тиражируются при каждом выполнении для каждого предложения. Следовательно, интерпретируемая программа менее эффективная, чем транслируемая, но интерпретация обеспечивает удобство разработки, гибкость в сопровождении и переносимость.
Примеры интерпретаторов: языки процедуру shell и rexx, JVM.
Подготовка программы к выполнению может вестись не на той же вычислительной системе и операционной среде, в которых программа будет выполняться. Системы, обеспечивающие подготовку программ к среде, отличной от целевой называются кросс-системами. В них может выполняться вся подготовка, либо ее отдельные этапы:
1) Макрообработка и трансляция
2) Редактирование связей
3) Загрузка и отладка
Типовое применение кросс-систем - в тех случаях, когда целевая вычислительная среда не имеет ресурсов для разработки программ.
Управляющая программа – это системная программа, реализующая набор функций управления, который включает в себя управление ресурсами и взаимодействие с внешней средой системы обработки информации, восстановление работы системы после проявления неисправностей в технических средствах.
Обслуживающая программа (утилита) – системная программа, предназначенная для оказания услуг общего характера пользователям и обслуживающему персоналу системы обработки информации.
Управляющая программа совместно с набором необходимых для эксплуатации вычислительной системы утилит, составляют операционную систему (ОС).
Система программирования – это система, образуемая языком программирования, компилятором или интерпретатором программ, представленных на этом языке, соответствующей документацией, а также вспомогательными средствами для подготовки программ к форме, пригодной для выполнения.
2) Заполните пустые места чтобы использовать идентификаторы из пространства имён std:
using namespace std;
3) Что является отправной точкой компьютерной программы?
4) Каждая инструкция должна заканчиваться:
- точкой с запятой(;)
- запятой (,)
- точкой (.)
- двоеточием (:)
5) Заполните пустые места, чтобы вывести «Hello, world!» на экран:
6) Переставьте местами стрки, что бы получить правильно работающую программу:
Получаем инструменты
1) Какие два инструмента вам необходимы, чтобы писать и запускать программы на языке C++?
2) Что из приведённого является компилятором языка C++?
Печатаем текст
1) Заполните пустые места, чтобы вывести на экран «I love C++»
2) Что используется для перевода вывода на следующую строку?
3) Какой символ используется для перехода на новую строку (альтернатива endl)?
4) Заполните пустые места, что бы напечатать слова «hello» и «world» разделённые пустой строкой:
5) Заполните пустые места чтобы вывести «I love C++» по одному слову в каждой строке:
Комментарии
1) Выберети однострочный комментарий C++.
2) Создайте блок комментариев (многострочный комментарий) на C++:
/* this is a block/multiline
comment in C++ */
3) Выберите верное утверждение.
- Комментарии игнорируются компилятором
- Комментарии используются для того, чтобы запутать программиста
- Однострочный комментарий начинается с * (звездочка)
Переменные
1) Какой тип данных используется для целочисленных значений?
int
2) Допустим у вас есть переменная названная var. Добавьте код, чтобы вывести её значение:
cout
3) Заполните пустые места, чтобы объявить переменную sum равную a + b:
int sum = a + b;
4) Какие два выражения верны для переменных в C++?
- Переменные должны иметь тип данных
- Переменные должны быть объявлены до их использования
- Переменные не имеют имён
- Перменные являются директивами препроцессора
Работаем с переменными
1) Заполните пустые места, чтобы объявить переменную целочисленного типа и затем присвоить ей значение 7.
int a;
a =7;
2) Для чего нужен cin?
- Получать информацию (данные) от пользователя
- Включает заголовочный файл
- Выводит значение переменной
3) Напишите код, который позволяет ввести число и сохраняет его в переменной a:
cin >> a;
4) Заполните пустые места, чтобы объявить переменную целочисленного типа var, ввести число, и сохранить его в переменной var.
cin >> var;
sum = 21 + 7;
Ещё о переменных
Сколько раз должен быть указан тип данных для переменной?
- Всякий раз при использовании переменной
- При вводе значения переменной используя cin
- При выводе значений переменной
- Только один раз — при объявлении переменной
Введите код, чтобы объявить переменную b и присвоить ей значение переменной a, и затем ввести их сумму на экран:
int b = a;
Базовая арифметика
1) Введите код, чтобы объявить переменную x, присвоить ей значение 4 + 6, и вывести её на экран.
int x;
2) Введите пропущенные части кода, чтобы вывести на экран число 12.
y = x — 12;
3) Какой символ исполльзуется для умножения в C++?
4) Заполните пустые места, чтобы объявить переменную x и присвоить ей значение 81 делённое на 3:
int x = 81 / 3;
5) Какой операнд используется для определения остатка?
6) Впишите пропущенные скобки, чтобы получить значение переменной x равное 14.
int x = ( 4 + 3 ) *2;
7) Какие два выражения верны для арифметических операций?
- Сначала выражение в скобках, затем умножение и деление
- Умножение выполняется до сложения
- Вычитание выполняется первым
- Сложение выполняется до умножения
Операторы присваивания и инкремент
1) Какая альтернатива выражению x = x +10?
2) Введите пропущенные части кода, чтобы разделить их на 5 используя оператор /=.
x /= 5;
3) x++ эквивалентно следующему выражению:
4) Заполните пустые места чтобы увеличить значение переменной x на еденицу используя опереатор инкремента ++ и выведедите его значение на экран.
x++;
5) Какая разница между ++x и x++?
- ++x использует значение x и затем производит его увеличение
- x++ увеличивает значение x до его использования
- ++x увеличивает значение x до его использования
- x++ использует значение x и затем производит его увеличение
6) Пожалуйста введите код которые уменьшает значение x используя оператор деримента -.
x—;
Упражнения 1-го модуля
1) Пожалуйста, введите пропущенные части кода, чтобы вывести на экран «I Love C++».
using namespace std;
int main()
return 0;
2) Пожалуйста введите код, который объявляет две переменные целочисленного типа и выводит их сумму на экран.
int y =7;
int sum = x + y;
3) В каждой программе на языке C++:
- Переменные должны называться либо x либо y
- Должна быть функция main
- Должно быть как минимум две объявленные переменные
- Каждая переменная должна иметь тип данных
4) Пожалуйста введите код, чтобы вывести на экран значение x разделённое на y.
Некоторое время назад обратил свое внимание на артефакт Концепция продукта (product vision) методологии разработки программного обеcпечения RUP (Rational Unified Process) и обнаружил, что отправной точкой разработки программного продукта является выявление проблемы, на решение которой нацелен продукт.
Аналогичный подход существует и в отечественной практике – так в ГОСТ 34.601-90 говорится, что на стадии Формирование требований к АС (автоматизированной системе) производится «выявление проблем, решение которых возможно средствами автоматизации».
В настоящей статье хочу поделиться с читателями своими выводами касательно природы проблемы, ее важности и отношении к разработке программного продукта.
Общая характеристика процесса принятия решений
Как и любой другой продукт, создаваемый в результате деятельности человека, программное обеспечение является средством (инструментом), предназначенным для решения некоторого набора задач. Откуда возникает необходимость что-то решать? Обратимся к теории…
Изучением закономерностей выбора людьми наиболее оптимального решения разного рода задач занимается такая наука как теория принятия решений.
С чего начинается родина решение?
Первопричиной любой деятельности теория принятия решений называет проблему — расхождение в представлениях какого-либо лица между тем, что оно имеет в настоящий момент (действительное состояние), и тем, что оно желало бы иметь или достигнуть в будущем (желательное состояние).
Так как теория принятия решений делает акцент на управленческую деятельность в рамках организации, то не будем отступать от этой парадигмы, но имеем в виду, что указанный подход применим к любой другой деятельности.
Лицо, которое не только осознает проблему или желает что-то изменить, а еще и готово принять решение о способе ее решения и произвести конкретные действия, направленные на изменение действительного состояния в сторону желательного – называют заинтересованным лицом или лицом, принимающим решение (ЛПР).
После осознания проблемы рождается понимание цели — воплощение желаемого результата, достижение которого, по мнению ЛПР, приведет к разрешению предпосылок проблемы, т.е. приведет в соответствие желательное и действительное состояния.
Задача
Подвергшись более детальному анализу цель разделяется на подцели. Подцели согласуются со стадиями процесса достижения основной цели – они соотносят со временем, местом, исполнителям и объектами приложения усилий. Таким образом, цель трансформирует в совокупность задач. От того, будет ли решена вся совокупность задач, а также будут ли по всем решенным задачам достигнуты требуемые результаты, зависит степень достижения поставленной цели, а, следовательно, и степень решения изначальной проблемы в целом.
Операция и решение
Когда перечень задач определился, ЛПР приступает к формированию целенаправленной деятельности организации по достижению цели. Целенаправленная деятельность комплекса мероприятий, осуществляемых ЛПР в интересах достижения намеченной цели носит название — операция.
Замысел операции постепенно дорабатывается ЛПР до решения на ее проведение, в ходе формализации которого оно трансформируется в систему частных целей и задач руководителей подразделений, программы развития, планы, задачи и критерии их выполнения. После этого начинается процесс практической реализации принятого и доведенного до исполнителей решения.
Рисунок 1. Типовой процесс управления организацией
Оценка эффективности управленческого решения
До самого конца операции ЛПР и все участвовавшие в разрешении проблемы лица остаются в неведении относительно успеха или неуспеха операции. Только когда деятельность участников завершится, ЛПР станет ясно, та ли предпосылка (первопричина) проблемы была выбрана для решения, правильно ли была сформулирована цель операции, верно ли эта цель была разделена на задачи, в то ли время и тем ли исполнителям было поручено эти задачи решить и т. д.
Когда решение исполнено, а операция по устранению проблемы завершена, ЛПР оценивает достигнутый результат. При оценке полезности и эффективности полученного решения во внимание принимается не только сам факт окончания операции, но и степень устранения изначальной проблемы.
- проблема устранена полностью и ее разрешение не вызвало каких-то видимых отрицательных последствий;
- проблема устранена частично, но также не наблюдается отрицательных последствий;
- проблема устранена частично и при ее разрешении возникли некоторые новые затруднения;
- проблема не устранена, а реализация решения по ее устранению породила возникновение новых, значительных проблем.
Природа требований к программному продукту
Какая задача – такое и решение
Известно, что для проблемы может существовать множество альтернатив решения. Например, самым простым способом оптимизации производства является изменение бизнес-процесса в организации. Однако, этого иногда не достаточно и требуется инструмент, который позволил бы решать новые задачи максимально эффективно.
Если в процессе размышлений о способе решения проблемы ЛПР придет к выводу, что достижению поставленной цели будет способствовать автоматизация деятельности организации, то одной из разрабатываемых им операций станет внедрение соответствующей информационной (автоматизированной) системы.
Представим себе, что руководитель некоторого предприятия решил оптимизировать работу с документами. Если его целью является только сокращение сроков согласования документов, то для этого вполне достаточно перейти на использование документов в электронном виде — установить всем ворд и научить пользоваться электронной почтой. Если же руководитель ставит целью упорядочить и контролировать процессы согласования и исполнения документов, то для этого потребуется инструмент, позволяющий осуществлять поддержку подобной деятельности — информационная система.
Этот банальный пример показывает, что для решения разных задач должны использоваться разного рода решения. Казалась бы, очевидно! Не будем спешить с выводами…
Что такое требование?
В соответствии с определением, под термином автоматизированная система подразумевается совокупность персонала организации и комплекс средств автоматизации, реализующего информационную технологию выполнения действий, направленную на достижение определенной цели (см. ГОСТ 34.003-90). То есть используемое программное обеспечение должно обладать набором свойств, позволяющим персоналу выполнять действия или решать задачи, направленные на достижение поставленной цели. Указанные свойства программного продукта называются требованиями.
Требование — свойство программного обеспечения, необходимое пользователю для решения задачи при достижении поставленной цели.
Уровни требований
Если рассмотреть процесс создания автоматизированной информационной системы с точки зрения теории управления, то можно проследить аналогию с описанным выше порядком принятия управленческого решения.
Рисунок 2. Процесс создания автоматизированной системы
Потребность
Аналогично процессу выработки управленческого решения, анализируя проблему ЛПР формулирует цель автоматизации деятельности организации. Чтобы достигнуть цели, разрабатываемая система должна решать некоторый набор технических или бизнес-задач. В контексте разработки программного обеспечения эти задачи именуются потребностями (needs).
Функция
В рамках выполнения действий по решению задач, направленных на достижение заявленной цели, персонал организации (пользователи и иные заинтересованные лица) вправе ожидать от используемого программного продукта определенного поведения. Поведение, сформулированное на языке пользователя и описывающие поведение программного продукта в рамках удовлетворения одной или нескольких потребностей, называется функцией системы (feature).
Программное требование
После определения набора функций их детализируют в конкретные и законченные описания поведения программы, которую требуется разработать. Такие описаниями составляют программные требования или требования к программному обеспечению (software requiremens).
Оценка эффективности программного решения
Построив систему, удовлетворяющую выявленным программным требованиям, можно утверждать, что система предоставляет требуемый набор функций. В свою очередь, поскольку функции предназначены для удовлетворения одной или нескольких потребностей персонала, эти потребности будут непосредственно удовлетворяться полученным решением в целом, а использование решения позволит достигнуть поставленной цели. И если цель была выбрана верно, то можно предположить, что ее достижение позволит разрешить имеющуюся проблему.
Часто заказчик при анализе результатов разработки и внедрения автоматизированной системы приходит к выводу, что решение оказалось неэффективным или породило новые проблемы, а порой еще более усугубило имевшееся положение вещей.
Не так давно в больнице уездного города N я внедрял одну медицинскую систему, которая, на первый взгляд, соответствовала всем предъявляемым к ней функциональным требованиям. Однако в процессе опытной эксплуатации выяснилось, что пользоваться ей было совершенной невозможно – она кардинально ломала привычную логику работы врача. Вместо того чтобы помогать, она мешала. Сначала систему использовали только активисты, позже использование системы сошло на нет.
Почему так получается?
Кто виноват и что делать?
Очень часто в процессе сбора и анализа происходит искажение требований или же источник этих требований (проблема заинтересованного лица) не выявляется вовсе.
Рисунок 3. Искажение требований
На рисунке 3 показан пример процесса, в ходе которого возникают искажения. Когда ЛПР осознал проблему и сформулировал цель деятельности по ее устранению он доводит перечень задач (T0) до исполнителей — персонала организации. Допустим, что именно эти исполнители будут использовать разработанный позднее программный продукт, т.е. они будут являться его пользователями. Каждый из них по-своему понимает поставленную ему задачу и при формулировании требований к программному продукту исходит из своих предположений (T1).
Аналитик, на основании данных интервью потенциальных пользователей, сформулировал собственное представление о решаемых задачах (T2), которое донес до менеджера проекта и совместно с ним выработал решение, воплощенное в задачах для разработчика (T3).
В лучшем случае, в результате описанного процесса получится продукт, удовлетворяющий требованиям персонала, в худшем – только требованиям аналитика или менеджера проекта. Такой результат является следствием отсутствия понимания у группы проекта реальных потребностей будущих пользователей и заинтересованных лиц, на чью работу повлияет разработанное программное решение.
В особо тяжелых случаях получившийся продукт не имеет ничего общего с ожиданиями заказчика и отражает собственные представления разработчика о том, как должны работать пользователи.
Если же на начальном этапе проекта выявить проблему и все выявляемые требования пользователей, равно как и предлагаемые решения, соотносить именно с ней (см. рисунок 4), можно ожидать, что получившийся продукт будет максимально соответствовать как потребностям пользователей, так и ожиданиям заинтересованных лиц.
Рисунок 4. Соотнесение требований с проблемой
Более того, понимание решаемой проблемы позволит качественно управлять масштабом проекта – например, в первую очередь реализовать ту функциональность, которая решает 80% проблемы.
Как этого добиться?
Определение проблемы
Раз уж в ходе предыдущего изложения мы пришли к выводу, что прежде чем разрабатывать программный продукт нужно определиться с проблемой, которую он должен решать, то пора бы уже выяснить, как эту проблему зафиксировать.
Многие источники предлагают использовать нижеприведенную форму для формулировки определения проблемы (problem statement), которую требуется решить. Приведенная форма учитывает и цели, которые ожидается достигнуть будущим решением.
Элемент | Описание |
---|---|
Проблема | [описание проблемы] |
воздействует на | [перечень сторон, на которых оказывает влияние данная проблема] |
результатом чего является | [описание воздействия данной проблемы на заинтересованных лиц и\или бизнес-деятельность] |
Выигрыш от | [описание предлагаемого решения] |
Может состоять в следующем: | [перечень основных преимуществ, представляемых решением] |
- персонал медицинских организаций, оказывающих медицинскую помощь населению;
- граждан, обращающихся за оказанием медицинской помощи.
- высокая вероятность принятия неверного или необоснованного медицинского решения о лечении пациента;
- отсутствие у пациентов сводной информации о состоянии своего здоровья и результатах оказанных медицинских услуг.
- обеспечении граждан доступом к интегрированной информации о состоянии собственного здоровья;
- обеспечении персонала медицинских организаций основой для принятия обоснованного медицинского решения о лечении пациента;
- предоставлении возможность своевременного выявления тенденций в состоянии здоровья населения и обеспечении основы для принятия управленческих решений в сфере здравоохранения;
- и т.д.
Формулирование и достижение соглашения об одинаковом понимании всеми участниками проекта решаемой проблемы – один из первых и важных шагов любого программного проекта. Стоит отметить, что определение решаемой проблемы может производиться как для всего проекта в целом, так и при добавлении новой функциональности в уже существующий программный продукт.
Заключение
Если кому-то показались очевидными (или даже, банальными) положения, изложенные в настоящей статье, приведу данные статистики, которые показывают, что проблема неуспешности программных проектов до сих пор остается актуальной и требования – основная тому причина.
В настоящее время только 39% всех программных проектов можно считать успешными в полном смысле этого слова. Полностью проваливаются 18% проектов, а в ходе реализации оставшихся 43% возникают проблемы, связанные с превышением бюджета или реализацией не той функциональности.
- вовлечение в проект заинтересованных лиц (Executive management support) — 20%;
- привлечение конечного пользователя (User involvement) — 15%;
- управление масштабом проекта (Optimazation) — 15%.
Все вышесказанное подтверждает аксиому, что программные продукты создаются для пользователей. Ориентация на проблемы заинтересованных лиц и потребности реального (конечного) пользователя является залогом успешности проекта по разработке программного обеспечения. Уже на начальном этапе проекта пользователь должен быть привлечен к работе, как результат этого — определение проблемы (problem statement) и концепция продукта (product vision) должны показывать, что команда проекта ясно осознает решаемую проблему, понимает потребности пользователей и готова их удовлетворить.
В предыдущей статье был составлен список из 80 инструментов для мониторинга Linux системы. Был смысл также сделать подборку инструментов для системы Windows. Ниже будет приведен список, который служит всего лишь отправной точкой, здесь нет рейтинга.
1. Task Manager
Всем известный диспетчер задач Windows — утилита для вывода на экран списка запущенных процессов и потребляемых ими ресурсов. Но знаете ли Вы, как использовать его весь потенциал? Как правило, с его помощью контролируют состояние процессора и памяти, но можно же пойти гораздо дальше. Это приложение предварительно на всех операционных системах компании Microsoft.
2. Resource Monitor
Великолепный инструмент, позволяющий оценить использование процессора, оперативной памяти, сети и дисков в Windows. Он позволяет быстро получить всю необходимую информацию о состоянии критически важных серверов.
3. Performance Monitor
Основной инструмент для управления счетчиками производительности в Windows. Performance Monitor, в более ранних версиях Windows известен нам как Системный монитор. Утилита имеет несколько режимов отображения, выводит показания счетчиков производительности в режиме реального времени, сохраняет данные в лог-файлы для последующего изучения.
4.Reliability Monitor
Reliability Monitor — Монитор стабильности системы, позволяет отслеживать любые изменения в производительности компьютера, найти монитор стабильности можно в Windows 7, в Windows 8: Control Panel > System and Security > Action Center. С помощью Reliability Monitor можно вести учет изменений и сбоев на компьютере, данные будут выводиться в удобном графическом виде, что позволит Вам отследить, какое приложение и когда вызвало ошибку или зависло, отследить появление синего экрана смерти Windows, причину его появления (очередное обновлением Windows или установка программы).
5. Microsoft SysInternals
SysInternals — это полный набор программ для администрирования и мониторинга компьютеров под управлением ОС Windows. Вы можете скачать их себе бесплатно на сайте Microsoft. Сервисные программы Sysinternals помогают управлять, находить и устранять неисправности, выполнять диагностику приложений и операционных систем Windows.
6. SCOM (part of Microsoft System Center)
System Center — представляет собой полный набор инструментов для управления IT-инфраструктурой, c помощью которых Вы сможете управлять, развертывать, мониторить, производить настройку программного обеспечения Microsoft (Windows, IIS, SQLServer, Exchange, и так далее). Увы, MSC не является бесплатным. SCOM используется для проактивного мониторинга ключевых объектов IT-инфраструктуры.
Мониторинг Windows серверов с помощью семейства Nagios
Nagios является самым популярным инструментом мониторинга инфраструктуры в течение нескольких лет (для Linux и Windows). Если Вы рассматриваете Nagios для Windows, то установите и настройте агент NSClient ++ на Windows сервер. NSClient ++ мониторит систему в реальном времени и предоставляет выводы с удаленного сервера мониторинга и не только.
Обычно используется вместе с Nagios, предоставляет пользователю удобный веб-интерфейс к утилите RRDTool, предназначенной для работы с круговыми базами данных (Round Robin Database), которые используются для хранения информации об изменении одной или нескольких величин за определенный промежуток времени. Статистика в сетевых устройств, представлена в виде дерева, структура которого задается самим пользователем, можно строить график использования канала, использования разделов HDD, отображать латентость ресурсов и т.д.
Гибкая, масштабируемая система мониторинга с открытым исходным кодом, основанная на ядре Nagios, написанном на Python. Она в 5 раз быстрее чем Nagios. Shinken совместима с Nagios, возможно использование ее плагинов и конфигураций без внесения коррективов или дополнительной настройки.
Еще одна популярная открытая система мониторинга, которая проверяет хосты и сервисы и сообщает администратору их состояние. Являясь ответвлением Nagios, Icinga совместима с ней и у них много общего.
OpsView изначально был бесплатен. Сейчас, увы, пользователям данной системой мониторинга приходится раскошеливаться.
Op5 еще одна система мониторинга с открытым исходным кодом. Построение графиков, хранение и сбор данных.
Альтернативы Nagios
Открытое программное обеспечение для мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, используется для получения данных о нагрузке процессора, использования сети, дисковом пространстве и тому подобного.
Неплохая система мониторинга, собирает данные с нескольких серверов одновременно и отображает все в виде графиков, с помощью которых можно отслеживать все прошедшие события на сервере.
Написан на языке Python с использованием сервера приложений Zope, данные хранятся в MySQL. С помощью Zenoss можно
мониторить сетевые сервисы, системные ресурсы, производительность устройств, ядро Zenoss анализирует среду. Это дает возможность быстро разобраться с большим количеством специфических устройств.
16. Observium
Система мониторинга и наблюдения за сетевыми устройствами и серверами, правда список поддерживаемых устройств огромен и не ограничивается только сетевыми устройствами, устройство должно поддерживать работу SNMP.
17. Centreon
Комплексная система мониторинга, позволяет контролировать всю инфраструктуру и приложения, содержащие системную информацию. Бесплатная альтернатива Nagios.
Ganglia — масштабируемая распределенная система мониторинга, используется в высокопроизводительных вычислительных системах, таких как кластеры и сетки. Отслеживает статистику и историю вычислений в реальном времени для каждого из наблюдаемых узлов.
19. Pandora FMS
Система мониторинга, неплохая продуктивность и масштабируемость, один сервер мониторинга может контролировать работу нескольких тысяч хостов.
Программное обеспечение с открытым кодом для мониторинга компьютерных систем и сетей.
OpenNMS платформа мониторинга. В отличие от Nagios, поддерживает SNMP, WMI и JMX.
22. HypericHQ
Компонент пакета VMware vRealize Operations, используется для мониторинга ОС, промежуточного ПО и приложений в физических, виртуальных и облачных средах. Отображает доступность, производительность, использование, события, записи журналов и изменений на каждом уровне стека виртуализации (от гипервизора vSphere до гостевых ОС).
Система мониторинга и оповещения (alert system) с открытым кодом от StackExchange. В Bosun продуманная схема данных, а также мощный язык их обработки.
Sensu система оповещения с открытым исходным кодом, похожа на Nagios. Имеется простенький dashboard, можно увидеть список клиентов, проверок и сработавших алертов. Фреймворк обеспечивает механизмы, которые нужны для сбора и накопления статистики работы серверов. На каждом сервере запускается агент (клиент) Sensu, использующий набор скриптов для проверки работоспособности сервисов, их состояния и сбора любой другой информации.
25. CollectM
CollectM собирает статистику об использовании ресурсов системы каждые 10 секунд. Может собирать статистику для нескольких хостов и отсылать ее на сервер, информация выводится с помощью графиков.
26. PerfTrap
PerfTrap собирает метрики с серверов, и с помощью Graphite производится визуализация собранных данных.
27. WMIagent
Если Вы фанат Python, WMIagent для Вас.
28. Performance Analysis of Logs (PAL) Tool
PAL — мощный инструмент, который мониторит производительность и анализирует ее.
30. Cloud Ninja Metering Block
Cloud Ninja Metering Block производит анализ производительности и автоматическое масштабирование мультитенантных приложений в Windows Azure. Такой анализ включает в себя не только определение или проверку счетов за использование ресурсов от Windows Azure, но и оптимизацию ресурсов.
Enigma — красивое приложение, которое поможет Вам следить за всеми важных показателями прямо с рабочего стола.
Платные решения
32. SSC Serv
SSC Serv платный инструмент мониторинга.
33. KS-HostMonitor
Инструменты для мониторинга сетевых ресурсов, позволяет проверять любые параметры серверов, гибкие профили действия позволяют действовать в зависимости от результатов тестов.
34. Total Network Monitor
PRTG — простая в использовании, условно-бесплатная программа для мониторинга сети, собирает различные статистические данные с компьютеров, программ и устройств, которые Вы указываете, поддерживает множество протоколов для сбора указанных сведений, таких как SNMP и WMI.
36. GroundWork
37. WhatsUpGold
Это мощное, простое в использовании программное средство для комплексного мониторинга приложений, сети и систем. Позволяет производить поиск и устранение проблем до того, как они повлияют на работу пользователей.
Поддерживает несколько операционных систем и технологий виртуализации. Есть много бесплатных тулзов, с помощью которых можно мониторить систему.
39. PowerAdmin
PowerAdmin является коммерческим решением для мониторинга.
40. ELM Enterprise Manager
ELM Enterprise Manager — полный мониторинг от «что случилось» до «что происходит» в режиме реального времени. Инструменты мониторинга в ELM включают — Event Collector, Performance Monitor, Service Monitor, Process Monitor, File Monitor, PING Monitor.
41. EventsEntry
42. Veeam ONE
Эффективное решение для мониторинга, создания отчетов и планирования ресурсов в среде VMware, Hyper-V и инфраструктуре Veeam Backup & Replication, контролирует состояние IT-инфраструктуры и диагностирует проблемы до того, как они помешают работе пользователей.
43. CA Unified Infrastructure Management (ранее CA Nimsoft Monitor, Unicenter)
Мониторит производительность и доступность ресурсов Windows сервера.
44. HP Operations Manager
Это программное обеспечение для мониторинга инфраструктуры, выполняет превентивный анализ первопричин, позволяет сократить время на восстановление и расходы на управление операциями. Решение идеально для автоматизированного мониторинга.
45. Dell OpenManage
OpenManage (теперь Dell Enterprise Systems Management) «все-в-одном продукт» для мониторинга.
46. Halcyon Windows Server Manager
47. Topper Perfmon
Используется для мониторинга серверов, контролирует процессы, их производительность.
48. BMC Patrol
Система мониторинга и управления управления IT — инфраструктурой.
49. Max Management
50. ScienceLogic
ScienceLogic еще одна система мониторинга.
Менеджмент и мониторинг сетей, приложений и инфраструктуры.
Ниже приведен список (наиболее популярных) инструментов для мониторинга сети
Nedi является инструментом мониторинга сети с открытым исходным кодом.
54. The Dude
Система мониторинга Dude, хоть и бесплатна, но по мнению специалистов, ни в чем не уступает коммерческим продуктам, мониторит отдельные серверы, сети и сетевые сервисы.
55. BandwidthD
Программа с открытым исходным кодом.
Расширение для Nagios, позволяет создавать карты инфраструктуры и отображать их статус. NagVis поддерживает большое количество различных виджетов, наборов иконок.
57. Proc Net Monitor
Бесплатное приложение для мониторинга, позволяет отследить все активные процессы и при необходимости быстро остановить их, чтобы снизить нагрузку на процессор.
58. PingPlotter
Используется для диагностики IP-сетей, позволяет определить, где происходят потери и задержки сетевых пакетов.
Маленькие, но полезные инструменты
Список не был бы полным без упоминания нескольких вариантов аппаратного мониторинга.
59. IPMIutil
60. Glint Computer Activity Monitor
61. RealTemp
Утилита для мониторинга температур процессоров Intel, она не требует инсталляции, отслеживает текущие, минимальные и максимальные значения температур для каждого ядра и старт троттлинга.
62. SpeedFan
Утилита, которая позволяет контролировать температуру и скорости вращения вентиляторов в системе, следит за показателями датчиков материнской платы, видеокарты и жестких дисков.
Я подумываю о разработке программного обеспечения для Ubuntu и других родственных дистрибутивов Linux (таких как Linux Mint). Но в настоящее время я не понимаю, с чего начать.
Будет ли изучение Python достаточным /хорошим? И о чем я должен знать прежде, чем начать этот вид развития?
И могу ли я опубликовать свои приложения в магазине программного обеспечения, например в магазине Ubuntu, даже если я из-за пределов США /Великобритании? Если нет, то каковы параметры, которые я должен сделать, чтобы мои приложения доходили до аудитории?
Как и многие пользователи, я собираюсь создавать приложения только для Linux (я думаю о Gnome), которые будут немного ориентированы на бизнес и предприятия.
В настоящее время я являюсь сертифицированным разработчиком Java Java-разработчика в J2SE и J2ME. И я немного знаю Python.
3 ответа
Вы можете начать с Python и Quickly, что довольно просто.
Быстро помогает быстро создавать программные продукты (и другие вещи). Вы можете выбрать из набора шаблонов приложений и использовать некоторые простые команды для создания, редактирования кода и графического интерфейса пользователя и публикации своего программного обеспечения для других пользователей.
Учебное пособие по началу работы можно найти здесь .
Прежде чем я опуститься и сгореть в вечном огне, позвольте мне сказать, что это место IS , по крайней мере A . Это может быть не самое лучшее. Это может быть не самый новый или самый быстрый. Но по божьим зубам я начал. Это было достаточно для меня, для него это будет достаточно хорошо.
Кроме того, пожалуйста, остановитесь с этой «аппетитной» ерундой. Здесь мы пишем приложения.
Какие приложения вы хотите написать?
Python + Qt может создавать превосходные графические приложения для Linux
Существует конференция по началу разработки приложений Liunux с переговоры онлайн
Я не знаю, если /почему Ubuntu ограничит доступ к программистам из США /Великобритании - см. программный центр для деталей
Похожие вопросы
Популярные теги
Читайте также: