воскресенье, 16 сентября 2018 г.

Абстракция истинности программного кода

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

Для обеспечения терминологического единства под программой будем понимать некоторую информационную систему, которая своими объектами представляет либо объект реальности либо некоторый мыслимый (ментальный) объект. Объект представления является внешним по отношению к информационной системе.

Уточним некоторые вопросы формализованного рассмотрения правильности работы программ.

Пусть некоторая информационная система (ИС) замещает соотвествующий назначению данной системы оригинал O1 моделью O2 в соответствии с целью и замыслом  ИС. Опишем задачу проектирования некоторой ИС следующим образом.

Пусть O1 - объект, который необходимо отразить в объекте O2.
Требуется построить соответствие
F: O1->O2
обеспечивающие реализацию объекта O2, отвечающего целям и замыслу ИС,

Существенным в данной задаче является проблема построения самого объекта O2, который непосредственно реализует ИС. Предпосылками созадания такого объекта является описание целей и задач функционирования данного объекта. При этом следует учитывать тот факт, что когда объект O2 построен, то цели данного объекта уже не являются полагаемыми. Объект будет реализовывать цели в соответствии со своей природой и влиять на них можно будет только с точности до параметров цели. Качественное характеризация целей имеет значение только на этапе проектирования. Образно говоря, думать над тем, как будут достигать цели функционирования системы надо во время ее проектирования. После того, как система создана, остается только ее наблюдать, или, - переделывать.

Примечание. Обычно пишут - "цели и задачи". Мы же, для краткости ограничимся коротким "цели", подразумевая, что задачи естественным образом определяют способы и методы достижения целей.

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

Рассмотрим четыре сущности:
  • O1-объект;
  • O2-объект;
  • F-соответствие;
  • цели функционирования информационной системы.

Что такое цель функционирования системы?

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

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

Примечание. Мы подразумеваем следующие этапы жизненного цикла ИС: обследование объекта проектирования, концептуальное проектирование, реализация (программирование), тестирование, опытная эксплуатация, продуктивная эксплуатация.

Если мы обозначим цели, которые были сформулированы на этапе замысла ИС как "первичные", то раньше, чем будут (и будут ли) реализованы первичные цели системы, методологи, консультанты, программисты и другие причастные к созданию ИС и ее будущей эксплуатации персоны будут явно или неявно выдвигать иные цели, подменяя “первичные” цели. Можно бороться за “чистоту целей”, но более конструктивным является рассмотрение, - почему именно так происходить, - и выстроить соответствующую реальной практике проектирования систему целей, отвечающих ходу реализации системы на всех этапах ее жизненного цикла.

Ко всему спектру целей, которые ставятся и формулируются на этапах жизненного цикла ИС, применим прием декомпозиции, а именно, структурируем цели с точки зрения различных категорий специалистов, работающих с информационной системой. Это тем более оправданно, потому что цели ставят и оценивают люди.

Выделим три категории специалистов:
  • дизайнер решения (он же архитектор. он же методолог, он же консультант),
  • программист,
  • пользователь.
Работа этих категорий специалистов различается с позиций их работы с ИС.
Можно утверждать, что данное деление является грубым. Возможно. Но оно оправданно в методологическом смысле.

Опишем функции данных специалистов:
  • дизайнер решения - построение феноменологического описания системы, концептульное и логическое проектирования структуры ИС;
  • программист - построение физической структуры ИС;
  • пользователь - эксплуатация ИС.
На этапах модернизации ИС применима такая же декомпозиция специалистов, при этом совершенно не требуется, чтобы носителями данных функция являлись разные люди. Роли могут реализовываться одним лицом.

Можно заметить, что на дизайнера ложиться основной груз проблем по проектированию системы. Дизайнер должен построить модель

F: O1->O2

то есть дать формальную и содержательную интерпретацию объекта O1 и построить, говоря языком теории категорий, стрелку F. 
Программист на основе результатов работы исследователя должен построть объект O2
Пользователь работает с объектом O2, актуализируя свойства и содержание O2.

Можно дать также слежующую интерпретацию выше сказанного:
  • дизайнер - исследует и описывает форму и содержание объекта O1;
  • программист - реализует форму O2;
  • пользователь - реализует содержание O2.
Это в свою очередь, предписывает следующие аспекты рассмотрения:
  • форма и содержание O1;
  • реализацию формы O2;
  • реализацию содержания O1.
Казалось, по подобию объекта O2 следует рассмотреть и объект O1. Однако это не так. Так как объект O1 - объект действительности (реальной или мыслимой), то его форма и содержания будут неразрывно связанными, хотя мыслительными конструкциями могут рассматривать в отрыве друг от друга. Для объекта O2 наблюдается несколько иная ситуация -  в процессе создания системы в начале появляется форма, и лишь потом, в процессе эксплуатации системы форма наполняется содержанием. Например, фреймворк можно полагать формой.
В соответствии с нормами спекулятивного мышления форма выступает как концептуально-логическая основа существования-бытия ИС, содержание - проявление конкретных форм существования. Для сложных систем, в особенности, когда знаний об объекте O1 недостаточно, возможен подход методолического разложения объекта на "форму" и "содержание". Более того, вероятно, при отсутствии такого разложения (редукции), невозможно будет построить ИС. Если же форма и содержание наличествуют, то как для ИС, так и для объекта O1, мы имеет наряду с процессом моделирования и процесс познания, а ИС может выступать и как познавательная система, - экспериментальная, гипотетическая, мыслимая, - но манифестирующая свое совпадение с реальной системой в моделируемых аспектах. Моделируемых, кстати, весьма ограниченно, но тем не менее - существенно.

С точки зрения дизайнера на первом этапе проектирования системы удовлетворительной целью будет сама возможность представления объекта O1 объектом O2. После достижения этой цели, или одновременно с ней, дизайнер как исследователь оценивается сам объект O2, а именно, правильно ли представлен объект O1. Дизайнера-исследователя, вообще говоря интересует только одно - как можно более полнее представить (смоделировать) объект O1. Это позволяет, на интуитивном уровне, утверждать (дизайнеру), что изменение конечных целей системы не скажется на самой системе, а всего лишь потребует незначительной корректировки ИС.

Программиста в первую очередь будет интересовать вопрос о возможности реализации объекта O2 инструментальными средствами (язык пограммирования, система управления базами данных, программные "заделы" - классы, стандартные программы, интерфейсы, щаблоны программирования), которые он имеет и/или которыми он умеет пользоваться. Немаловажна и аппаратная платформа - возможность с точки зрения вычислительных ресурсов реализовать объект O2 в примлемые сроки и за приемлемые деньги. Однако сама физическая реализация объекта O2 не достаточна. Требуется доказать, что физическая структура не отличается от замысла.

Пользователя, если до него дойдет дело, интересуют практические задачи и ИС, по его мнению, должна дать немедленно ответ на все его "служебные" вопросы. Перед пользователем встают проблемы освоения системы, формулирование свой задачи в рамках терминов ИС, поиск решения в соответствие с функциональными обязанностями пользователя средствами ИС, интерпретация полученного результата, оценка правильности функционирования ИС, особенно в тех случаях, когда результаты решения задач пользователя не совпадают с его ожиданиями. С течением времени пользователь становиться грамотней и искушеннее и выдвигает новые требования к системе. Круг замыкается: формулируются новые цели. Если пользователь "в единственном числе", то можно справиться с противоречивостью его требований с точки зрения существующей реализации ИС. Но если пользователей много, то их требования "почти наверное" противоречивы, и тогда доработка ИС с точки зрения "полного удовлетворения" целей различных категорий пользователей становиться невозможной, а точнее, - практически нереализуемой. Поэтому, стоит вернуться к началу процесса целеполагания.

В качестве цели построения модели определим задачу замещения объекта O1 на объект O2 с целью фиксации важнейших свойств объекта O1.

Попытаемся описать критерии, показатели эффективности построения ИС с позиции замещения одного объекта другим.

Итак, выдвинем следующие критерии построения правильности построения модели:
  • адекватность (правильное качественное и количественное описание модели);
  • точность (правильное количесвенное описание модели);
  • требование достаточной простоты;
  • полнота как возможность получить интересующие (однако, тут проблема - нужно понимать субъект, скрывающийся под "кого?") утверждения;
  • продуктивность как свойство возможности легкого или доступного получения исходных данных для построения модели;
  • устойчивость модели к погрешностям исходных данных;
  • наглядность модели.
Хорошая модель может быть нестрого определена так:
“При выборе той или другой схемы формализации процесса функционирования сложной системы основную роль играют два соображения: а) обеспечить требуемую точность решения задачи, б) получить как можно более простую модель.
Ни для одного из этих требований (точности и простоты) не могут быть предложены формальные критерии, позволяющие проверить, действительно ли полученная формализация обеспечивает заданную точность и является достаточно простой. тем не менее, общая тенденция такого рода обычно интуитивно осуществляется”.
Также имеет место и такая "развернутая оценка качества СИ.
“Качество функционирования ИС в целом оценивается по:
  • адекватности функционирования и наличию технических возможностей к взаимодействию, совершенствованию и развитию;
  • надежности представления информации по запросам или принудительно;
  • своевременности представления запрашиваемой информации, характеризующейся степенью соответствия достигаемого времени реакции системы предъявляемым требованиям ко времени реакции на запросы в условиях эксплуатационной загрузки ИС;
  • полноте отражения в БД информации о впервые (вновь) появляющихся объектах учета и явлениях;
  • достоверности хранимой в системе инфрмации, характеризуемой совокупностью свойств безоошибочности (т.е. соответствия данных хранимых в БД, данным, формируемым без искажения у источника, в том числе с учетом возможностей случайных, умышленных и вирусных искажений) и актуальности информации (т.е. сохранения с течением времени достаточной степени соответствия базы данных реальному состоянию объектов учета и явлений) на момент ее использования;
  • конфиденциальности представляемой информации с учетом эффективности реализованной системы занятости от несанкционированного доступа.”
Данное подробное цитирование показывает, что формулировка критериев, описывающих степень достижения целей является трудноформализуемой задачей.

Перечислим основные цели и критерии построения ИС, на рассматривая состоятельность данных критериев:
  1. Фиксация важнейших свойств O1.
  2. Качественная адекватность.
  3. Количественная адекватность.
  4. Простота.
  5. Полнота или возможность получения интересующих утверждений.
  6. Продуктивность или возможность получения исходных данных.
  7. Устойчивость к погрешностям исходных данных.
  8. Наглядность.
  9. Возможность к взаимодействию, совершенствованию и развитию.
  10. Надежность представления информации.
  11. Правильность реализации объекта O2.
  12. Своевременность получения информации.
  13. Достоверность и актуальность информации.
  14. Конфиденциальность информации.
Рассмотрим первых три критерия.

1. Фиксация важнейших свойств O1.

Необходимо ответить на следующие вопросы:
  • какие свойства имеются у O1?
  • все свойства объекта O1 описаны?
  • правильно ли описаны свойства объекта O1? (данный вопрос относится к критерию 2).
  • какие из свойств объекта O1 являются важнейшими с точки зрения: дизайнера, программиста, пользователя и почему?
Ответ на вопрос почему? потребует описание критерия выбора свойств. Данный критерий может быть задан либо в виде функциональной зависимости, либо описан лингвистическими переменными (например, важно/неважно). Могут быть использованы более сложные лингвистические шкалы.

После проведения оценки тут же встает другой вопрос:
  • измениться ли оценка важности в будущем, поможет ли опыт, накопленный в ходе эксплуатации, углубить знания об объекте O1?
В этой ситуации возможны следующие исходы:
  • расширится/сузится список свойств;
  • измениться критерий оценки выбора свойств;
  • измениться ряд предпочтений (в общем случае изменение критерия может и не привести к изменению порядка ранжирования свойств).
2. Качественная адекватность.

С точки зрения описания данного критерия требуется дать более точное, а вернее, формализованное описание адекватности. Интуитивно очевидно, что если реализован критерий 1, то в какой то степени удовлетворены критерии 2 и 3. Однако одного интуитивного описания недостаточно. Приведем графическую схему выше сказанного и перейден к более формальному описанию адекватности.
 


На пересечении строк таблицы находятся факторы, которые влияют на значение и порядок расчета критериев адекватности. Адекватность непосредственно связана с утвердительным ответом на вопрос “А правда ли что?”

Любая из систем имеет одно из следующих доминирующих функциональных свойств:
  • модель структуры
  • модель процедуры
  • модель явления.
В независимости от модели, необходимо доказывать справедливость модели с точки зрения ответа на вопрос "А правда ли что?".

Зафиксируем набор следующих системологических факторов.
X - множество исходных данных;
C - множество параметров системы;
Z - множество воздействий среды;
U - множество управляющих воздействий (в ряде случаев может быть сведено либо к X, либо к Z, в зависимости от точки зрения исследователя);
Y - множество наблюдаемых реакций;
F - правило преобразования множества {X, C, Z, U} в F.

В общем случае имитационная модель может быть описана как

Y=F(X, C, Z, U).

Примечание. Отдельно стоит вопрос о реализации свойства времени. Возможна модель, опирающаяся на структуру линейного упорядоченного множества. В этом случае мы можем считать, что некоторое подмножество (в пределе - и само множество) обладает структурой линейного упорядоченного множества. Это позволяет реализовать временную шкалу.

Формилизуем вопрос "А правда ли что?". А именно, на каждом этапе жизненного цикла ИС  будут стоять вопросы:
  • истинно ли X?
  • истинно ли C?
  • истинно ли Z?
  • истинно ли U?
Но что есть истинность в применении к данным категориям?

Исследуем истинность с точки зрения решения следующих вопросов, поставленных в отношении множеств X, C, Z, U:
  • истинно ли по составу (набору),
  • истинно ли по структуре,
  • истинно ли по значению,
  • истинно ли по процедуре получения,
  • истинно ли по факту отсутствия/наличия.
При этом необходимо
  1. определить понятие истинности;
  2. определить - существует ли процедура, доказывающая истинность;
  3. является ли процедура разрешимой (вычислимой).
После получения удовлетворительных (а может быть и неудовлетворительных) ответов на данные вопросы, встает следующий (с точки зрения причинно-следственной связи) вопрос:
  • истинно ли F?
В этом случае мы имеем сложные взаимосвязи: F является стрелкой, связывающей декартовое произведение <X,C,Z,U> и Y.

Примечание. Существование декартового произведения обеспечивается пополнением элементов декартового произведения пустым множеством.

Истинность стрелки F опирается на истинность объектов <X,C,Z,U> и Y, однако этого недостаточно для доказательства истинности истинности самой стрелки F, более того истинность концов стрелки может ничего не определять. "Вычисление" истинности стрелки F должно производиться с точки зрения некоторой прото- (мета-) системы, а сама стрелка может быть имет значение (смысл), определяющее концептуальную основу модели.

Казалось бы, что для того чтобы доказать истинность Y достаточно доказать, что <X,C,Z,U> и F истинны.
Однако это не так, так как даже при соблюдении данных условий Y может быть ложно, если выход оценивается с позиции некоторой метатеории.
Для характеризации такой ситуации будем говорить о принципе внешнего дополнения.
При последовательном рассмотрении, можно утвержадат, что в силу ложности Y может быть пересмотрена сама процедура доказательства истинности <X,C,Z,U> и F.

В качестве примера проведения регулярного анализа приведем следующую таблицу истииности:

X
Z
U
C
F
Y

X
Z
U
C
F
Y
0
0
0
0
0
0
0

32
1
0
0
0
0
0
1
0
0
0
0
0
1

33
1
0
0
0
0
1
2
0
0
0
0
1
0

34
1
0
0
0
1
0
3
0
0
0
0
1
1

35
1
0
0
0
1
1
4
0
0
0
1
0
0

36
1
0
0
1
0
0
5
0
0
0
1
0
1

37
1
0
0
1
0
1
6
0
0
0
1
1
0

38
1
0
0
1
1
0
7
0
0
0
1
1
1

39
1
0
0
1
1
1
8
0
0
1
0
0
0

40
1
0
1
0
0
0
9
0
0
1
0
0
1

41
1
0
1
0
0
1
10
0
0
1
0
1
0

42
1
0
1
0
1
0
11
0
0
1
0
1
1

43
1
0
1
0
1
1
12
0
0
1
1
0
0

44
1
0
1
1
0
0
13
0
0
1
1
0
1

45
1
0
1
1
0
1
14
0
0
1
1
1
0

46
1
0
1
1
1
0
15
0
0
1
1
1
1

47
1
0
1
1
1
1
16
0
1
0
0
0
0

48
1
1
0
0
0
0
17
0
1
0
0
0
1

49
1
1
0
0
0
1
18
0
1
0
0
1
0

50
1
1
0
0
1
0
19
0
1
0
0
1
1

51
1
1
0
0
1
1
20
0
1
0
1
0
0

52
1
1
0
1
0
0
21
0
1
0
1
0
1

53
1
1
0
1
0
1
22
0
1
0
1
1
0

54
1
1
0
1
1
0
23
0
1
0
1
1
1

55
1
1
0
1
1
1
24
0
1
1
0
0
0

56
1
1
1
0
0
0
25
0
1
1
0
0
1

57
1
1
1
0
0
1
26
0
1
1
0
1
0

58
1
1
1
0
1
0
27
0
1
1
0
1
1

59
1
1
1
0
1
1
28
0
1
1
1
0
0

60
1
1
1
1
0
0
29
0
1
1
1
0
1

61
1
1
1
1
0
1
30
0
1
1
1
1
0

62
1
1
1
1
1
0
31
0
1
1
1
1
1

63
1
1
1
1
1
1

Отметим, что формальное представление нулями и единицами тем не менее  имеет содержательную интерпретацию.

Возможно построить некоторый эксперимент и вывести пропозициональную формулу, связывающую истинность Y и X, Z, C, U, F. Если по результатам эксперимента мы имеем полную (с точки зрения декартового произведения) таблицу, то это свидетельствует о том, что построенная модель ничем ни отличается от хаотических систем, любые ее выходы “равноистинны”. Назовем такую систему “абсолютно алогичной”. При наличии же запрещенных ситуации дело упрощается. Если удается построить пропозициональную формулу с учетом всех переменных, то назовем такую систему полностью логичной. Если мы имеем некоторую формулу, в которой отсутствует зависимость истинности выхода от одного из фактора, то мы имеем не зависимую от фактора (в смысле истинности) модель, а сам фактор должен быть исключен из рассмотрения.

Для оценки реализуемой ИС модели необходимо проанализировать два состояния входа/выхода ИС: ложности и истинности. И разобраться - от чего зависит ложность и истинность.

Формализуем последние утверждения:

Пусть для оценки истинности объектов X, Z, C, U, F и Y используются некоторые правила, процедуры или формулы вывода в записи

ФX(X), ФZ(Z), ФU(U), ФC(C), ФF(F), ФY(Y).

Посредством модели осуществляется вывод (оценка истинности), и затем оценивается с точки зрения истинности выход.
В результате можно попытаться построить пропозициональную формулу

ФY(Y) (?=?) M(ФX(X), ФZ(Z), ФU(U), ФC(C), ФF(F))

Успех или неуспех в построении формулы предполагает интерпретацию равенства или неравенства или анализ причин неразрешимости. Возможно, удается получить некоторый ответ для подмножеств и если мощность данных подмножеств достаточна с точки зрения практики, то можно перейти к следующему этапу - детальному анализу состава и структуры X, Z, C, U, F.

Полученная формализация позволяет предложить обобщение unit-тестов и иных техник тестирования программ. В частности, метрики, учитывающие покрытие кода тестами, позволяют оценить мощность подмножеств, для которых удается доказать правильные с точки зрения модели преобразования истинностных значений входных параметров в истинный выход модели. Заметим, что ложный выход Y сигнализирует о неправильной работе модели.

Однако, построение пропозициональной формулы не единственное приложение данной формализации.

В том случае, если не удается построить пропозициональную формулу, можно пересмотреть состав входных параметров и "разукомплектовать" ИС на более простые компоненты. Пример такого подхода - архитектура микросервисов. Другой подход - "рекомендуемые" правила построение классов в объектно-ориентированном программировании: каждый метод выполняет строго одну функцию. И наконец, функциональное программирование значительно облегчает построение пропозициональных формул.

Данные соображения не являются панацеей в доказательстве истинности программы. Модель выглядит теоретической для больших и монолитных комплексов и ИС, так практически невозможно  построить пропозициональную формулу ввиду огромной матрицы истинности, связывающей декартовое произведение входов и выхода. Для моделей объектно-ориентированного программирования, для микросервисов данная модель может уже применяться.

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

Итог. Ответ на вопрос "Правильно ли работает программа" определяется пропозициональной формулой, связывающей входы и выходы ИС. Это теоретический результат.

Комментариев нет:

Отправить комментарий