Как стать автором
Обновить

Об одном требовании к ПО

Уровень сложностиПростой

По своему обычаю писать заметки по любому поводу напишу ещё одну.

Она на тему требований к ПО. Мне встретилось требование к одной программе, которое гласило, что программа должна уметь восстанавливаться после сбоев. А именно, это был сетевой клиент который должен не падать при обрыве соединения и переподключаться к серверу после восстановления соединения. Тогда я не понял для чего нужны такие требования и с удовольствием бы раскритиковал бы составителя ТЗ. Ведь в наше время необходимо доминирующее поведение. Составители требований на измене, видимо, захотели усложнить жизнь программистам, не так ли?

Ответ пришёл сам собой. Поведаю я вам историю о том, как это произошло. Я настраивал интернет в деревне через GSM модем iRZ ES75iT и WiFi роутер, который можно найти на любом углу.

Собственно, мои пациенты
Собственно, мои пациенты

Железки настраиваются через неттоп. Всё запитано через ИБП. Соединения настраиваются типа PPP и через роутер и через модем. Модем поддерживает GPRS. Скорость соединения при этом колеблется от 160 до 200 кбит/c. Есть более крутые технологии, такие как EDGE, обеспечивающие скорость > 300 кбит/с, но это не мой случай.

Модем настраивается с помощью AT команд в текстовом режиме. Имеется последовательный порт RS232 с коннектором DB9 female. Встроенных графических инструментов не предусмотрено. Зато предусмотрена настройка соединения с APN и сервером удалённого доступа по нескольким сетевым протоколам. Возможно также TCP соединение как в качестве клиента, так и в качестве сервера. И, как вишенка на торте, команда на приём/передачу информации, поступающей на последовательный интерфейс. К которому можно подключить также любое оборудование поддерживающее интерфейс RS485 (витая пара, по сути) и не умеющее взаимодействовать с сетью. Подключиться из Linux можно с помощью эмулятора терминала - Minicom. И это круто, т.к. драйвер не требуется, если честно, поисками в Интернете заниматься неохота, как то не тот уровень задачи. Поддержки VPN, как в роутере, нет, однако есть поддержка ISDN и это круче, чем VPN. Оставлю здесь интригу для неспециалистов.

Так вот я заметил, что помимо того, что необходимо производить первоначальную настройку, соединение иногда умирает и не восстанавливается после смерти. Первое время поддерживал систему вручную. Я предположил, что можно расставить железки, таким образом снизив вероятность возникновения помех. Так, например, бесперебойник создаёт помехи в моменты стабилизации питающего напряжения и переключения на батарею. Решилось с помощью переноски. Учитывая большое количество левого оборудования возле с собственными помехами, пропадания питания внезапные или запланированные, желание местных жителей звонить по телефону, заставляя отдавать трафик себе, понял, что сбоев невозможно избежать в перспективе.

В моменте на меня снизошло понимание того, что лазить во внутренностях железок по каждому чиху как то нет желания, а чаще нет и возможности. Приведу как пример, глобальный сбой в Microsoft Windows, когда людям приходилось чинить терминалы в очень неудобных локациях, насколько мне известно. А ведь можно было настроить их правильно, чтобы каждая железка перезагружалась, например. Вместо того чтобы ездить туда, где эта железка находится, лезть, куда-то, под потолок, допустим. Или, допустим, покупаете вы переходник, скажем USB/microSD, для того, чтобы на понтофон что-то там перекачивать. Так вот, для вас это железка, а внутри скорее всего работает программа (прошивка). И скорее всего даже от программистов скрыто, что в этом переходнике происходит. Если вы вынули карту памяти из слота, не извлекая переходник из порта, а потом вставили карту памяти в слот, вы скорее всего желаете чтобы карта работала ровно так же, как и до извлечения, верно. А это значит, что программа (прошивка) которая работает внутри, должна восстанавливать своё состояние.

Так что сейчас я больше понимаю тех, кто составляет подобные ТЗ. Ведь каждое требование писано может быть и не кровью, но некоторой необходимостью. Я здесь немного порассуждаю, может быть вообще требования к ПО решают не столько потребности людей сколько проблемы железа. Например, такие задачи, как шифрование, сжатие, верификация. Где-то информацию необходимо защитить, потому что канал связи не имеет защиты. Где-то информацию необходимо сжать, потому что передавать большой объём дорого или долго. Где-то информацию необходимо верифицировать, потому что канал связи ненадёжен и переданное нужно проверить. Где-то стоит проблема дублирования информации, например репликации в базах данных. Которая, в свою очередь, порождает вышеперечисленные, из-за того, что данные дублируются, скорее всего, не на одном узле. Проблема устойчивости к различным сбоям порождает проблему дублирования. Железо может быть где-то есть такое, что там не нужно будет задавать некоторые требования или же появятся дополнительные. Например, там где я работал есть ДГ на случай отключения электричества для питания компьютерной техники. А где-то, вместо того, чтобы поддерживать питание, целесообразнее информацию сохранить, например в сжатом или зашифрованном виде, или продублировать, а потом восстановить в пригодном, для работы, виде. ПО может решать проблему совместимости т.к. железо имеет свои особенности при том что его работа должна соответствовать неким стандартам. Получается так, что большое количество потребностей потребителей решает железо, а не ПО непосредственно. Однако, насколько стабильно железо будет справляться с этим, зависит от ПО заложенного в его память. Конечный пользователь — я, например, — не видит, сколько всяких требований выполняет то ПО, которым он пользуется.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.