Описание предметной области и определение цели проектирования
Описание предметной области проектируемой информационной системы выполняется в произвольном стиле на естественном (русском) языке. Цель этого раздела заключается в том, чтобы в результате неформализованного описания были понятны проблемы предметной области. Например: «База данных предназначена для хранения данных о приобретенных библиотекой книгах, информации о местонахождении отдельных экземпляров (переплетов) каждой книги и сведений об абонентах. Для ведения библиотечных каталогов, организации поиска требуемых изданий и библиотечной статистики в базе должны храниться сведения, большая часть которых размещается в аннотированных каталожных карточках и т.д.».
Из описания предметной области должно быть понятно, что создание учебной базы данных если и не обосновано экономически, то хотя бы имеет положительное значение в плане совершенствования профессиональной деятельности в предметной области.
Должны быть указаны границы предметной области, например технологические аспекты функционирования объекта исследования (или другие). Например: «Технология работы библиотеки реализуется через ее комплектование книгами, справочно-библиографическое и абонементное обслуживание».
Рекомендуется сформулировать семантические условия (бизнес-правила), определяющие функционирование предметной области. Например: «абонент библиотеки однозначно идентифицируется его шифром», «абонентами могут быть сотрудники и студенты», «экземпляр книги идентифицируется его инвентарным номером».
Желательно описать алгоритмы выполнения тех или иных операций исполнителей конкретных видов работ или действий.
Здесь же должна быть сформулирована цель разработки учебной базы данных, например «Автоматизация профессиональной деятельности в конкретной предметной области» (или другая).
Анализ предметной области и инфологическое проектирование
В разделе «Функциональная модель предметной области» должны быть приведены результаты функционального моделирования предметной области учебной базы данных, выполненного в среде BPwin. Словесные описания особенностей функционирования предметной области должны сопровождаться изображениями контекстной диаграммы предметной области, диаграмм декомпозиции, иерархической схемы функций (Node Tree-диаграммы BPwin) (рис. 4-6), а также сводными таблицами (табл. 1 и 2) описаний работ (функций) и стрелок (данных).
Р ис. 4. Пример контекстной диаграммы предметной области «Библиотека»
Рис. 5. Пример диаграммы декомпозиции предметной области «Библиотека»
Рис. 6. Пример иерархической диаграммы функций предметной области «Библиотека»
Номер работы
Описание работы
Под работой библиотеки имеются в виду технологические аспекты ее функционирования
Комплектование библиотеки и хранение новых книг
Комплектование библиотеки предполагает приобретение новых книг, их хранение и списание
Справочно-библиографическое обслуживание предполагает занесение сведений о книгах в каталог и поиск книг в каталоге
Абонементное обслуживание
Абонементное обслуживание, в том числе:
1) запись на абонемент
2) поиск книг в каталоге
3) оформление заявки в хранилище
5) прием возвращенных книг
Комплектование библиотеки предполагает приобретение новых книг и списание пришедших в негодность. При комплектовании каждому экземпляру книги присваивается инвентарный номер
Экземпляры книг хранятся в хранилище и выдаются по заявкам абонентов во временное пользование
Занесение в каталог
Вновь приобретенные книги регистрируются в каталоге
По запросу абонента осуществляется поиск информации о книге в каталоге
Запись на абонемент
Посетители библиотеки могут быть записаны в качестве ее абонентов
Поиск сведений о книге выполняется по заявке абонента
Затребованные книги при наличии их в хранилище могут быть выданы
При наличии свободного экземпляра книги в хранилище оформляется заявка на затребованную книгу
Выданные книги подлежат возврату и размещению их в хранилище
Имя стрелки
Описание стрелки
Абоненты — это зарегистрированные клиенты библиотеки. После регистрации они приобретают права законных пользователей
Бюджет регламентирует все виды работ в библиотеке
Возвращенные на абонемент книги размещаются в хранилище
Выданные книги — это один из вариантов книг на выходе и один из вариантов поступления книг
Перед оформлением заявки выполняется запрос на поиск информации о книге в каталоге
Статус зарегистрированной приобретает книга после ее занесения в каталог. После регистрации в каталоге зарегистрированная книга поступает на хранение
При наличии свободного экземпляра по заявке затребованная книга поступает на абонемент
При наличии свободного экземпляра книги оформляется заявка на ее получение во временное пользование
Книги на входе
Источники книг на входе библиотеки:
1) новые поступления
2) возвращенные книги
Книги на выходе
Книги на выходе‑это:
1) зарегистрированные, но не востребованные книги
2) выданные книги
3) списанные книги
Новые книги — это один из вариантов поступления книг в библиотеку
Библиотеку могут посещать клиенты, не являющиеся ее абонентами
Правила пользования распространяются только на справочно-библиографическое и абонементное обслуживание
Книги, пришедшие в негодность, подлежат списанию. Это один из вариантов книг на выходе
Справка — это результат справочно-библиографического поиска по запросу абонента
После поступления новой книге присваивается инвентарный номер и она приобретает статус учтенной книги. Учтенная книга поступает на хранение
Книги, поступившие на хранение либо после присваивания им инвентарного номера, либо после их регистрации в каталоге
В разделе «Информационная модель предметной области» должны быть приведены результаты разработки информационной модели предметной области в терминах модели «сущность-связь», выполненной в среде ERwin (т.н. Logical Model) [10] (рис. 7).
В разделе «Спецификации сущностей» следует для каждой сущности указать:
Результаты удобно свести в таблицу типа приведенной ниже (табл. 3). При построении таблицы следует воспользоваться возможностями ERwin для формирования отчетов (по команде Tasks/Generate Reports).
Имя сущности
Описание сущности
История выдач и возврата книг. Содержит сведения о том, кому, кем, что и когда было выдано или возвращено
Содержит информацию об абонентах библиотеки
Содержит информацию о книге, зарегистрированной в каталоге
Содержит информацию о сотрудниках библиотеки
Сотрудник, являющийся абонентом библиотеки
Студент, являющийся абонентом библиотеки
Содержит информацию о наличии экземпляров свободных книг
В разделе «Спецификации атрибутов» для каждого атрибута указать:
Результаты удобно свести в таблицу типа приведенной ниже (табл. 4). При построении таблицы следует воспользоваться возможностями ERwin для формирования отчетов (по команде Tasks/Generate Reports).
Рис. 7. Пример информационной модели предметной области «Библиотека»
Спецификации атрибутов сущностей
Имя сущности
Имя атрибута
Описание атрибута
Первичный ключ
Внешний ключ
Инвентарный номер книги на абонементе — компонент первичного ключа и ключ связи с сущностью «Хранимая книга»
Олег и предметная область проекта
Он дизайнер с опытом работы в самых разных проектах: интернет-магазины, приложение покупки авиабилетов, мобильный навигатор и пр.
Все работы Олег бережно складывает в дриббл-портфолио и очень гордится своими успехами.
И вот как здорово, Олега приглашают поработать в проекте для зарубежной фармакологической Компании N.
Компания N занимается клиническими исследованиями и производством лекарств.
Олегу нужно спроектировать систему для хранения и передачи результатов клинических исследований внутри компании N.
Олег, разумеется, очень рад и с энтузиазмом берется за работу, ведь у него уже есть кое-какой опыт в дизайне.
Первым делом Олег отправляется изучать техническое задание.
И не понимает ни слова.
Более того, Олегу говорят, что через неделю он летит в командировку в лабораторию к клиенту, собирать данные о пользователях. Но Олег не понимает, что собирать, потому что не понимает совсем ничего.
Олега начинают одолевать неприятные мысли о том, что он не очень-то и хорош как дизайнер.
Что все его работы — мусор, и сам он тоже мусор и все тлен.
Пока Олег прокрастинирует и самобичуется, попробуем разобраться, почему так вышло.
Дело в том, что сложно понять дизайн-задачу, если не понимаешь, о чем проект.
Привычные и понятные проекты, вроде тех, с которыми имел дело Олег, не требуют много времени на погружение. В таких проектах разрабатывается то, с чем мы сталкиваемся достаточно часто: интернет-магазины, посадочные страницы, календари и пр.
Но бывают исключения — проекты со сложной предметной областью.
Что такое предметная область
Предметная область — это специфическая группа знаний.
Помните, в школе у нас были разные предметы: химия, физика, биология?
Это — разные предметные области и учителя давали нам базовое понимание каждой из них.
Для UX-дизайнера предметная область — это контекст, в котором существует (или будет существовать) система и пользовательский интерфейс.
Компоненты предметной области
Для удобства можно разделить предметную область на три компонента:
- специфичные термины и язык людей, которые живут/работают в предметной области,
- важные объекты, существенные единицы предметной области,
- то, как эти единицы вязаны и взаимодействуют.
В UX-дизайне знание предметной области пригождается на всех этапах.
Но особенно оно помогает в начале работы: когда определяются пользовательские нужды и цели, формулируются функциональные требования и архитектура интерфейса.
Чем глубже вы понимаете контекст проекта, тем эффективнее вы работаете на начальных этапах.
Как разобраться в предметной области
В знании предметной области я условно выделяю 4 этапа (или, если угодно, состояния поектировщика):
Сейчас Олег находится в состоянии “Я ничего не знаю”.
На то, чтобы максимально преисполниться и достичь состояния “Я эксперт” у Олега могут уйти годы. Как и у любого из нас.
Поэтому последний этап мы опустим и поговорим о том, как достичь состояний “Я знаю, чего я не знаю” и “Я кое-что знаю”.
И первый шаг на пути к просветлению — домашнее чтение.
Шаг 1: домашнее чтение
Итак, Олег берет себя в руки и решает перебраться из состояния «Я ничего не знаю» в «Я знаю, чего я не знаю». Он начинает читать.
Олег изучает документацию проекта; читает статьи о клинических исследованиях в интернете; заходит на форумы химиков в поисках интересных нюансов.
Также он мог бы проверить текущую систему, но это не редизайн-проект, поэтому системы еще нет.
Полезно бывает посмотреть продукты конкурентов, но в случае Олега системы для обработки результатов клинических исследований платные и закрытые.
Олег остается один на один с тонной новой информации и разрозненных терминов.
Яснее не стало.
Олег предполагал, что путь будет прост.
Но на самом деле все иначе. И, начав со страницы на Википедии о том, что такое клинические исследования, через три часа Олег обнаруживает себя за просмотром котиков на ютубе.
Как же из этой тонны информации выбрать то, что важно знать для проекта?
Вам нужно знать ровно столько, сколько вам нужно знать.
Вернее, ровно столько, сколько нужно, чтобы сформулировать вопросы.
Из документации и свободных источников нельзя узнать всего. Только самое базовое. Да и то не факт, что информация окажется релевантной именно для вашего проекта и пользователей.
Поэтому, на этапе домашнего чтения, нам нужно сформулировать гипотезы и вопросы.
Какие вопросы о предметной области нужно сформулировать
Как мы уже обсудили, предметная область состоит из 3 компонентов: словарь, сущности и связи между ними.
Для каждого компонента можно сформулировать вопросы и попытаться на них ответить (см. схему ниже).
Такое количество новой информации удержать в голове, конечно, трудно. И тут на помощь приходят артефакты.
Артефакт — описание продукта с определённой точки зрения по заданному формату. Он помогает договориться всем участникам процесса, но его не увидит конечный пользователь.
Артефактов существует множество. Это не только макеты и прототипы, но и различные отчеты, таблицы, диаграммы, юзкейсы, схемы, сценарии, персоны, карты и прочее и прочее.
Фактически, артефакт — это любая документация которую дизайнер генерирует в ходе работы.
В случае изучения предметной области помогают 2 артефакта:
- словарь — буквально список слов/терминов с их значениями и контекстом применения;
- модель связей сущностей — диаграмма, отображающая то, как связаны главные объекты и роли предметной области.
Именно этими артефактами решает заняться Олег.
Он создает таблицу — словарь, куда вносит непонятные слова и предполагает их смысл.
Он также предполагает, что основные сущности в предметной области — это лаборант, препарат и само клиническое исследование. Возможно, есть что-то еще.
Олег набрасывает схему связей между сущностями.
На основе своих артефактов Олег может составить вопросы.
Например, Олег уже предполагает, что такое хромотография, но не совсем ясно, как это используется на проекте. Именно такой вопрос он и записывает.
На выходе получается документ с гипотезами Олега о предметной области и вопросами, которые у него сформировались.
С домашним чтением покончено, у Олега куча вопросов.
Он знает, чего он не знает.
Что же с этими вопросами делать дальше? Самое время обратиться к экспертам.
Шаг 2: Общение с экспертами
Немного разобравшись с базовыми понятиями и сформулировав вопросы, Олег отправляется выяснять тонкие детали к экспертам.
Почему нельзя сразу начать с экспертов, не тратя время на домашнее чтение?
Эксперты — занятые люди. У них полно своих дел и работы.
Лучше заранее разобраться в базовых вещах и сформулировать конкретные вопросы. Это позволит предметно и по существу общаться с экспертами, не тратя их время на объяснение основ.
Кто такие эксперты и где их взять?
Эксперты — люди, которые разбираются в предметной области и/или в ней работают. Они уже прошли минимум 2 этапа познания и находятся в состоянии “Я кое-что знаю” или “Я эксперт”.
Ближайшими в зоне досягаемости экспертами могут выступать коллеги на проекте.
Например, менеджер/руководитель проекта или бизнес-аналитик, которые уже давно варятся в этой кухне.
Если до вас на проекте работали дизайнеры, они могли немного разобраться и оставить полезные документы.
Часть сформулированных вопросов и гипотез можно обсудить с коллегами.
Безусловно, экспертами являются лица, заинтересованные в реализации проекта:
- Заказчик. Он — точка входа для вас и связующее звено с теми, кто может вам помочь. Бывает, что заказчик и сам является экспертом.
- Пользователи. Часто в сложных проектах пользователи являются экспертами в предметной области. В случае Олега лаборанты будут стопроцентными экспертами в области клинических исследований.
Для эффективного общения с заказчиком/пользователями можно использовать интервью и наблюдение.
Олег отправляется в логово химиков, где задает оставшиеся вопросы и обсуждает детали рабочего процесса с будущими пользователями. Также он наблюдает за их работой и делает выводы о своих гипотезах.
Артефакты обновлены.
Словарь содержит верное объяснение терминов, в нем много деталей о разных понятиях, присущих компании N.
Диаграмма связей сущностей отражает то, как на самом деле связаны химик, препарат и исследование. Оказалось, что в области есть еще и отчет, в который попадают результаты исследований.
Также у всех объектов выяснились свойства, которые потом отразятся в пользовательском интерфейсе.
После общения с экспертами, Олег проверил все свои гипотезы, расширил знания и перешел из состояния “Я знаю, чего я не знаю” в состоянию “Я кое-что знаю”.
Теперь Олег лучше разбирается в клинических исследованиях. Он понимает, о чем его просят и может придумать эффективное решение пользовательских задач.
Безусловно, со временем Олег еще лучше разберется в предметной области своего проекта и его артефакты дополнятся деталями.
Вывод
Попадая на проект со сложной (даже немножко) предметной областью, будьте как Олег.
Исследуйте предметную область в два простых шага:
- Домашнее чтение. Это позволит сформировать общее представление о терминах, ролях и процессах; сформулировать гипотезы и вопросы к экспертам
- Общение с экспертами. Это позволит прояснить детали, проверить гипотезы, и дополнить артефакты: словарь терминов и модель связей сущностей.
Немного полезных советов:
- Будьте проактивны
- Помните: вы не эксперт
- Сфокусируйтесь на компонентах предметной области (словарь, сущности, связи)
- Не бойтесь задавать вопросы
- Сначала пообщайтесь с коллегами, затем с экспертами
- Пишите заметки и проверяйте их
- Документируйте
Если статья показалась интересной — дайте знать аплодисментами
Больше о проектировании интерфейсов и мемы по средам можно найти в телеграм-канале Поясни за UX
список примеров предметных областей
Страховая медицинская компания (СМК) заключает договоры добровольного медицинского страхования с населением и договоры с лечебными учреждениями на лечение застрахованных клиентов. При возникновении страхового случая клиент подает заявку на оказание медицинских услуг по условиям договора инспектору, который работает с данным клиентом. Инспектор направляет данного клиента в лечебное учреждение. Отчеты о своей деятельности инспектор предоставляет в бухгалтерию. Бухгалтерия проверяет оплату договоров, перечисляет денежные средства за оказанные услуги лечебным учреждениям, производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики. СМК не только оплачивает лечение застрахованного лица при возникновении с ним страхового случая, но и, при возникновении каких-либо осложнений после лечения, оплачивает лечение этих осложнений.
Предметная область № 2: горно-металлургический комбинат
Комбинат добывает и перерабатывает полезные ископаемые (ПИ). Одна часть ПИ остается на комбинате в качестве резерва. Другая часть, согласно долгосрочному контракту, идет на нужды военного ведомства. Третья часть ПИ и переработанных ресурсов идет на продажу предприятиям внутри страны. Четвертая часть ПИ идет на экспорт в зарубежные страны. Оборудование и материалы, необходимые для нормального функционирования комбината, приобретаются либо у зарубежных поставщиков, либо, по инициативе властей, у отечественных производителей для поддержания экономики страны. По результатам своей деятельности комбинат выплачивает налоги и занимается поддержкой социальных программ.
Предметная область № 3: агентство недвижимости
Агентство недвижимости занимается покупкой, продажей, сдачей в аренду объектов недвижимости по договорам с их собственниками. Агентство управляет объектами недвижимости как физических, так и юридических лиц. Собственник может иметь несколько объектов. В случае покупки или аренды клиент может произвести осмотр объекта. Одной из услуг, предлагаемых агентством, является проведение инспектирования текущего состояния объекта для адекватного определения его рыночной цены. По результатам своей деятельности агентство производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 4: фотоцентр
Фотоцентр занимается оказанием фотоуслуг и продажей различных фототоваров. В состав фотоуслуг входят: печать фотографий, проявление фотопленок, художественное фото, фото на документы, реставрация фотографий, выезд фотографа для съемки объекта. Поставка необходимых материалов осуществляется через дилеров ведущих мировых производителей фототоваров. Согласно отдельному договору, различные химические отходы передаются предприятию по утилизации вредных веществ. По результатам своей деятельности фотоцентр производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 5: ателье
Ателье занимается изготовлением одежды. Клиент может выбрать любую модель изделия из каталога, либо осуществить индивидуальный заказ. Отдельно с клиентом оговариваются материал, его свойства (цвет, прочность и т. д.), срочность выполнения заказа, даты примерок. После согласования всех деталей рассчитывается ориентировочная стоимость заказа, на основании которой клиент вносит аванс. После выполнения заказа клиент оплачивает его окончательную стоимость. По результатам своей деятельности ателье производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 6: компания по разработке программных продуктов
Компания заключает договор с клиентом на разработку программного продукта согласно техническому заданию. После утверждения технического задания определяется состав и объем работ, составляется предварительная смета. На каждый проект назначается ответственный за его выполнение — куратор проекта, который распределяет нагрузку между программистами и следит за выполнением технического задания. Когда программный продукт готов, то его внедряют, производят обучение клиента и осуществляют дальнейшее сопровождение. По результатам своей деятельности компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 7: кадровое агентство
Кадровое агентство способствует трудоустройству безработных граждан. Агентство ведет учет и классификацию данных о безработных на основании резюме от них. От предприятий города поступают данные о свободных вакансиях, на основании которых агентство предлагает различные варианты трудоустройства соискателям. В случае положительного исхода поиска вакансия считается заполненной, а безработный становится трудоустроенным. По результатам своей деятельности кадровое агентство производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 8: строительная организация
Строительная организация занимается строительством объектов по заказам клиентов. Сначала заказ проходит предварительную стадию: сбор различных разрешений на строительство, составление эскиза объекта, расчет объема и закупка строительных материалов. Сами строительные материалы доставляются на объект партиями. По мере поступления очередной партии стройматериалов закладывается фундамент объекта, строится каркас здания. По результатам данной работы происходит согласование с заказчиком, после чего утепляется контур, вставляются окна, устанавливается крыша. Дальше идет обсуждение с клиентом внутренней отделки здания, закупаются отделочные материалы. После того, как объект проходит технический контроль, он передается заказчику. В дополнительные услуги строительной организации входят: услуги дизайнера по интерьеру, закупка и доставка мебели, сотрудничество с охранным предприятием по установке сигнализации. По результатам своей деятельности строительная организация производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 9: ресторан
Ресторан предоставляет для своих клиентов услугу питания. На каждый день составляется меню, которое включает в себя список блюд для питания. На основе этого меню составляется список для закупки необходимых продуктов питания, входящих в состав блюд. Клиент, приехав в ресторан, выбирает из меню блюда, которые он хотел бы заказать, их готовят, если они заранее не были готовы, и приносят клиенту. В качестве дополнительной услуги ресторан может организовать развлекательные программы в своем помещении. По результатам своей деятельности ресторан производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 10: отдел вневедомственной охраны
Отдел вневедомственной охраны (ОВО) занимается охраной объектов физических и юридических лиц. ОВО является коммерческим подразделением милиции. Клиент, желающий обеспечить охрану своего имущества, обращается в ОВО и составляет договор охраны. В договоре оговариваются следующие моменты: адрес объекта; план расположения помещений; количество входов/выходов; расположение окон; список лиц, отвечающих за имущество; ответственное лицо от клиента, которое будет присутствовать в момент вскрытия помещения. После заключения договора объект подключается к сигнализации. В случае срабатывания сигнализации дежурный посылает патруль на осмотр объекта и сообщает ответственному лицу клиента о данном факте. Патруль, вместе с ответственным лицом клиента, осматривает объект, проверяет сохранность имущества и работу сигнализации (в случае ложного срабатывания). После каждого выезда составляется акт, который является основанием для возбуждения уголовного дела относительно лиц, незаконно проникшим на объект. По результатам своей деятельности ОВО предоставляет отчетность в вышестоящие органы милицейского руководства.
Предметная область № 11: обувная фабрика
Обувная фабрика производит разнообразную обувь, ассортимент которой зависит от конъюнктуры рынка, от сезона, от моды. У различных поставщиков фабрика закупает необходимые для производства материалы и сырье. Готовая продукция отпускается в магазины под реализацию. При необходимости, магазины могут высказывать свои пожелания/претензии на ассортимент. Брак и отходы производства передаются специальному предприятию по утилизации. По результатам своей деятельности обувная фабрика производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 12: мебельный центр
Мебельный центр занимается изготовлением мебели на заказ. Дизайнер приезжает к клиенту, замеряет необходимые параметры будущей мебели и составляет предварительную смету. Клиент вносит предоплату для закупки необходимых материалов. После изготовления мебели рассчитывается окончательная стоимость заказа, осуществляются доставка и сборка, происходит полный расчет за заказ. По результатам своей деятельности мебельный центр производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 13: завод по производству напитков
Завод занимается производством и оптовой реализацией различных напитков. Клиент делает заказ на доставку партий напитков. В связи с тем, что производство является довольно длительным технологическим процессом (20–30 дней), заказы принимаются предварительно за месяц. В отделе менеджмента собираются все заказы на текущий месяц, рассчитывается необходимое количество сырья и материалов, составляется план работы производственного цеха. Готовые напитки поступают в отдел розлива, где упаковываются в тару и передаются на склад. По мере поступления готовой продукции на склад, рабочие склада развозят напитки заказчикам. По результатам своей деятельности завод по производству напитков производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 14: компьютерная компания
Компьютерная компания занимается продажей, ремонтом, сборкой, тестированием компьютерной техники. Также специалисты компании предоставляют услуги по разработке и монтажу локальных вычислительных сетей. Вся техника и комплектующие закупаются оптом у дилеров и хранятся на складе. Клиент, который хочет приобрести товар, оформляет заказ в торговом зале, а забирает технику со склада или оставляет заявку на ее доставку. Клиент, который хочет отремонтировать технику, приносит ее в сервисный отдел, откуда, по прошествии некоторого времени, забирает как отремонтированную или как технику, не подлежащую ремонту. По желанию клиента, специалисты компании могут выехать к клиенту для общей диагностики возникшей проблемы с техникой. По результатам своей деятельности компьютерная компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 15: лизинговая компания
Лизинговая компания занимается специфической формой имущественных взаимоотношений, возникающих в результате приобретения в собственность имущества и последующего предоставления этого имущества во временное пользование лизингополучателю за определенную плату. В отличие от договора купли-продажи, по которому право собственности на товар переходит от продавца к покупателю, при лизинге право собственности на предмет аренды сохраняется за арендодателем, а лизингополучатель приобретает лишь право на его временное использование. По истечении срока лизингового договора лизингополучатель может приобрести объект сделки по согласованной цене, продлить лизинговый договор или вернуть оборудование владельцу. По результатам своей деятельности лизинговая компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 16: компания по предоставлению телекоммуникационных услуг
Компания занимается оказанием телекоммуникационных услуг абонентам. Клиент делает заявку на подключение к телекоммуникационным услугам и ему, по необходимости, устанавливают соответствующее оборудование. Оплата за услуги вносится путем авансовых платежей. Каждый факт предоставления услуги фиксируется соответствующим оборудованием и является основанием для списания соответствующей суммы с личного счета абонента. Клиент в любое время суток может получить отчет об оказанных ему услугах, их стоимости и остатку на личном счете абонента. По результатам своей деятельности компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 17: управляющая компания ЖКХ
Управляющая компания (УК) ЖКХ занимается обслуживанием жилого фонда города. УК получает финансовые средства от населения и бюджета города в виде компенсаций и субсидий на коммунальные услуги. На основании поступивших средств УК осуществляет текущий ремонт жилого фонда, а также капитальный ремонт согласно плану. Для непосредственного выполнения работ УК нанимает соответствующую рабочую силу (сантехников, дворников, электриков и т. д.). По результатам своей деятельности УК ЖКХ производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 18: авиакомпания
Авиакомпания совершает авиаперелеты между городами. В зависимости от парка самолетов, сезона, спроса составляется расписание полетов. Данные о клиентах, купивших билеты на рейс, поступают из кассы. В случае неблагоприятных погодных условий рейс может быть отложен или отменен, о чем необходимо сообщить клиентам, которые могут отказаться от рейса или вылететь другим. В авиакомпании существует система скидок для постоянных клиентов, детей, своих сотрудников. По результатам своей деятельности авиакомпания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 19: автобаза
Автобаза предоставляет услуги по перевозке пассажиров, различных грузов как в черте города, так и между соседними городами. Для регулярных рейсов оплата клиентами услуги происходит в момент их оказания. В остальных случаях клиент должен сделать заявку, которая может быть отклонена. Для междугородных перевозок в диспетчерской автобазы фиксируется маршрут следования рейса. По результатам своей деятельности автобаза производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 20: хлебопекарня
Хлебопекарня занимается производством хлеба и хлебобулочных изделий, которые выпекаются в специальном оборудовании — печи. Готовый хлеб развозится по различным торговым точкам города, с которыми у хлебопекарни заключен долгосрочный договор на поставку хлебобулочных изделий. Также любое физическое или юридическое лицо может сделать предварительный заказ на выпечку большой партии изделий на некоторое мероприятие. Хлебопекарня, в зависимости от объема хлебобулочных изделий для торговых точек и наличия предварительных заказов, закупает у поставщиков соответствующий объем сырья и материалов, а также составляет график работы персонала. По результатам своей деятельности хлебопекарня производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 21: туроператор
Туроператор предоставляет возможность своим клиентам осуществить туристическую или деловую поездку в различные города России и мира. При разработке нового тура сначала анализируется текущая ситуация на рынке туризма и выбирается направление тура. После этого определяется статус тура, бронируются места в гостиницах и билеты на переезд к месту тура, разрабатывается культурная/деловая/развлекательная программа, утверждаются сроки тура. На каждый тур назначается ответственное лицо от туроператора, которое будет вести данный тур для улаживания проблем в случае возникновения каких-нибудь чрезвычайных или форс-мажорных ситуаций. Клиент приходит в офис туроператора, где вместе с менеджером выбирает уже разработанный тур и оформляет путевку. После возвращения из тура клиент может высказать свои замечания или пожелания, которые будут учтены при доработке существующих туров или при разработке новых. Также, для дальнейшего улучшения тура, туроператор проводит анализ отчетов от посредников (гостиница, гиды и т. д.). По результатам своей деятельности туроператор производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 22: студия звукозаписи
Студия звукозаписи занимается поиском исполнителей песен различных жанров для записи, выпуска и продажи их альбомов. Продюсер исполнителя договаривается со студией о создании альбома. После подписания договора исполнитель записывает альбом. Когда альбом полностью записан, он отправляется в тираж. Копии альбома распределяются по торговым точкам. По результатам своей деятельности студия звукозаписи производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 23: культурный центр
Культурный центр занимается организацией и проведением различных массовых мероприятий (показ кино, театрализованные представления, различные шоу). В фойе здания проводятся различные выставки картин, музейных экспонатов. Каждое мероприятие разрабатывается самим центром или заказывается клиентом. На основе данных заказов формируется афиша на следующий месяц, составляются сценарии мероприятий, подбираются актеры. К конкретным мероприятиям, по возможности, заказываются определенные выставки, которые могут проходить и отдельно. По результатам своей деятельности культурный центр производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 24: больница
Больница осуществляет круглосуточное оказание услуг по лечению пациентов. Пациент подает заявку на лечение в регистратуру больницы. Регистратор выписывает направление больному, закрепляет за ним лечащего врача и, по мере надобности, койко-место. Пациент получает набор лечебных процедур до тех пор, пока его лечащий врач не примет решение о завершении лечения. Лекарства для лечения пациентов поступают в лечебные отделения со склада больницы. Также за все время нахождения в больнице пациентам предоставляется питание. По результатам своей деятельности больница производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 25: автоцентр
Автоцентр занимается прямыми поставками автомобилей на заказ, ремонтом автомобилей, продажей автозапчастей. При заказе с клиентом оговариваются все технические данные автомобиля, ориентировочная цена, путь доставки. После этого автомобиль покупается у дилеров или на аукционе, доставляется в автоцентр, проходит техническое обслуживание и предпродажную подготовку (мойка, чистка салона и т. д.) в автосервисе. Также в автосервисе имеется магазин по продаже автозапчастей. По результатам своей деятельности автоцентр производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 26: компания по оказанию услуг кабельного телевидения
Компания занимается установкой и осуществлением сервиса по услугам кабельного телевидения. Клиент обращается в компанию и, на основе предложенных ему пакетов, подает заявку на подключение к необходимому ему пакету услуг. После этого клиента подключают к выбранному пакету и предоставляют ему сервис по изменению пакета, ремонту оборудования. Учитывая пожелания клиентов, компания составляет новые пакеты или изменяет уже существующие. По результатам своей деятельности компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 27: рыболовецкая компания
Рыболовецкая компания занимается выловом морепродуктов, производством из них готовой продукции. Клиент подает заявку на определенный вид продукции. Компания проводит анализ количества хранимой продукции и заявок клиентов, результатом которого будет план вылова морепродуктов. После самого отлова морепродукты поставляются в производственные цехи, которые на основе сданных морепродуктов производят продукцию. Готовая продукция направляется на хранение в холодильник, откуда ее забирает клиент. По результатам своей деятельности компания производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 28: спортивный комплекс
Спортивный комплекс предоставляет услуги по проведению спортивных тренировок. Тренировки, относящиеся к одному виду спорта, объединяются в спортивные секции. Клиент обращается в спортивный комплекс, где получает абонемент на посещение спортивной секции. На основе купленных абонементов составляется расписание тренировок на следующий месяц. Также, в зависимости от загруженности спортивного комплекса, распределяются тренеры спортивных секций. По результатам своей деятельности спортивный комплекс производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 29: гостиница
Гостиница служит для обеспечения проживания, предоставления социально-бытовых услуг и создания условий жизнедеятельности клиентов на небольшой временной срок. Клиент приезжает в гостиницу и заказывает номер. В номере клиента ежедневно осуществляется уборка и раз в неделю — смена постельного белья. Клиент может заказать себе дополнительные услуги (вызов такси, пробуждение в определенное время и т. д.). Любой номер можно забронировать заранее. Периодически гостиница обновляет свою мебель, интерьер, производит перепланировку номеров. По результатам своей деятельности гостиница производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики.
Предметная область № 30: банк
Банк — это предприятие, осуществляющее регулирование платежного оборота в наличной и безналичной формах. Банк привлекает денежные средства физических и юридических лиц во вклады; размещает привлеченные средства от своего имени и за свой счет; открывает и ведет банковские счета физических и юридических лиц; инкассирует денежные средства, векселя, платежные и расчетные документы; производит кассовое обслуживание физических и юридических лиц; производит куплю-продажу иностранной валюты в наличной и безналичной формах; предоставляет услугу хранения ценных бумаг и драгоценных металлов; осуществляет выдачу банковских гарантий; осуществляет переводы денежных средств по поручению физических лиц без открытия банковских счетов. По результатам своей деятельности банк производит отчисления в налоговые органы и предоставляет отчетность в органы государственной статистики и Центральный Банк РФ.
Уроки проектирования. Предметная область и ее математические модели
Чтобы не быть обвиненным в пропаганде вооруженного бандитизма, сразу поясню, что под пистолетом здесь понимается математическая модель предметной области. Поэтому афоризм трансформируется в “Многого можно добиться словами. Но гораздо большего можно добиться словами и математикой. А иногда помогает только математика”. Теряется острота, но правда ведь остается.
История одного проекта
«Это было недавно, это было давно»
Начинающим программистом я устроился в ВЦ банка и столкнулся со знаменитой, по тем временам, задачей “Операционный день банка”. Фактически это бухучет, который обязательно должен завершиться выдачей правильных бухгалтерских регистров к концу дня. Говоря более высоким стилем, это система реального времени с квантом реальности в одни сутки.Начинаю знакомиться с предметной областью. Иду в отдел постановок, в котором сидят женщины выпускницы института народного хозяйства – нархоза. Пытаюсь выяснить, что такое дебет и кредит. У каждой дамы свое мнение. Одно из них такое: мне показывают какой-то первичный документ, со структурой “самолетик” – так мне это назвали. Голова самолетика – входящее сальдо счета, левое крыло – это дебет, правое — кредит, хвост — исходящее сальдо. Я впал в ступор от таких объяснений. Пошел в библиотеку и после нескольких сумбурных книг типа “Учет и операционная техника в банках ” наткнулся на книгу “Теория бухгалтерского учета”. Автор – Палий. Он дал полуфилософское изложение учета, начиная от Луки Паччоли. Мне изложение весьма понравилось и я кое-что узнал о бухучете. Меня поразило, что о таких приземленных вещах как бухучет, можно говорить чуть ли не философски.
Потом, долго работая в ВЦ банка, участвуя во многих предпроектных обследованиях я пришел к выводу, что от конечных пользователей проку мало и что нужно крутиться самому, рыться в библиотеках(интернета еще не было) и самому определять, что пользователю надо и потом его убеждать в этом. Хотя до последнего я не дотягивал. Работаю я с таким представлением о пользователях и вдруг такой случай. Банкир, довольно высокого ранга, выходит в наш ВЦ со своей постановкой по обработке показателей всех строек БССР — постановка ТЭПС(Технико-Экономические Показатели Строек). Постановка сверхсложная с лесом математических формул в которых так и мелькают трехэтажные индексы. Мой шеф с ней не разобрался и положил её под сукно. И тут меняется руководство ВЦ. Моего шефа, подсуконника, увольняют. Новый начальник ВЦ сразу обратился к упомянутой постановке. Несколько месяцев изучаем постановку и, оказывается, что все можно представить в понятном виде и без леса трехэтажных формул. Но для внедрения нужен, как теперь говорят, реинжиниринг бизнеса. У нас он свелся к тому, что появились новые входные документы, новая бизнес-операция по заполнению этих документов, операция-запрос к БД, анализ полученных результатов. Для двух последних выделялись из штата бизнес-аналитики. Существующие формы документов(план финансирования, смета, титульный список и т.д.) были не только не машиночитаемы, но и человеку вводить с них данные в компьютер было сверхнеудобно, поэтому мы предложили ввести новые, промежуточные формы документов, с которых было удобно вводить данные. Но эти новые документы нужно было заполнять со старых. Со всеми требуемыми нововведениями выходим на руководство.
Руководство банком ознакомилось с ними, согласилось с ними, придало им законность приказом по банку и работа закипела. Внизу в филиалах и отделениях нас все проклинали за огромную дополнительную работу по заполнению входных документов. Дело в том, что низ делал черновую работу по заполнению входных документов, а результатами обработки этих данных не пользовались: компьютер стоял в столице в ВЦ головного аппарата. Вот этот аппарат и занимался аналитикой, сам не занимаясь подготовкой данных.
Проект естественным образом распался на три части:
- Ведение базы данных паспортов строек
- Ведение базы знаний
- Прием запросов и генерация ответа на запрос
Работали напряженно, но без авралов, без ночных смен, без работы в выходные. Не распивали ни чая ни кофе. Это еще не входило в традицию. К тому же кофе был дефицитом. Да и более-менее приличный чай тоже. Мы были молодые и крепкие. Но босс один раз сломался и с сердечным приступом попал в больницу. А мы немного отдохнули и подтянули “хвосты”. Но босс вызывал нас и в больницу по поводу “Как дела?”.
Программировали на ассемблере. И я не уверен, что на языке высокого уровня было бы быстрее. Создали свой отладчик и начали кодировать и отлаживать. Никаких фреймворков, никаких библиотек. Библиотеки создавали сами. Они были не универсальны, а заточены под проект. Менее чем через год проект заработал. База – файловая БД. Она состоит из базы данных(файлы прямого доступа) и базы знаний(файлы последовательного доступа). База знаний – это формулы расчета показателей, описания всевозможных выборок-фильтров и описание всевозможных группировок выходных данных. Выборки реализовывались как логические функции. Группировки реализовывались как деревья, каждый узел которого связывался с определенной выборкой и определенной функцией агрегации. Все это непрерывно изменялось, пополнялось самими пользователями или с нашей помощью. Автоматизируемая бизнес-функция – генерация динамических аналитических отчетов по задаваемым показателям, фильтрам и группировкам. И вот проект сдали в эксплуатацию. И понеслось. Машина только и штампует отчеты(АЦПУ печатало не посимвольно, а построчно). Были и 100-страничные и больше. Аналитик что-то выискивал в них, вместо того, чтобы поиск доверить машине. А все потому, что онлайн-доступ проект не предоставлял. Не было еще такой возможности. Хотя и теперь, при возможности в любое время задать онлайновый запрос к БД, остались многостраничные отчеты. И используются генераторы отчетов, как инструмент такой штамповки. Я не понимаю зачем они нужны.
А кончилось дело тем, что и постановщика и нашего босса — начальника нашего ВЦ(он руководил проектом) забрали в Москву. Босс и постановщик поучаствовали в разделе госпремии. Мы, разработчики не получили деньгами ничего, но многому научились на проекте. Босс стал еще большим боссом – он возглавил ГВЦ союзного банка. Он стал проталкивать аналогичный проект для всего Союза, но уже с учетом наших проколов. Однако грянули перемены, Промстройбанк уже не занимался стройками, а стал обычным коммерческим банком и проект ТЭПС стал Промстройбанку не нужен.
А постановщик возглавил в перестройку некий Московский банк и в наши командировки в Москву рассказывал перестроечные детективы: как на него наезжала мафия, если он не давал кредиты: угрозы, поджоги, автоаварии. Но это, как говорится, уже совсем другая история.
Проект мы реализовывали по старинке: обследование предметной области —> ТЗ —> постановка —> проект БД —> архитектура ПО —> кодирование —> отладка —> внедрение. Интересно, что мы ни разу не возвращались ни к постановке, ни к проекту БД, ни к архитектуре ПО. Всё как спроектировали так оно и работало.
Слабое место обнаружилось не в кодах, не в БД, а в алгоритме. Недостаточность знаний не позволило нам построить универсальный интерпретатор выражений. И это привело к тому, что проект вышел на вторую реализацию — московскую.
И еще один промах, на мой взгляд. Но с этим не согласился босс. У нас показатель кодировался по такому шаблону: ддссгг, где дд – код документа, сс – строка документа, гг – графа документа. А сам документ представлял собой прямоугольную сетку, в каждой ячейке которого был проставлен код показателя в правом верхнем углу ячейки. Вот пример формулы вычисления производного показателя:
Понятно, что это не способствует ни запоминанию, ни осмыслению, и не представляет основы для расширения знаний. Короче, явно не виден экономический смысл.
Мне казалось разумным ввести мнемонические коды. И тогда вышеприведенная формула приняла бы примерно такой вид:
Но над этим нужно было много поработать и убеждать и руководителя и пользователей-банкиров. Они в то время боялись математики как огня. Не знаю как сейчас.
Итак, главные недочеты имели алгоритмический и психологический, точнее эргономический характер. Архитектура ПО, структура БД, кодирование остались неизменными.
Уроки разработки
Я не знаю, будет ли толк из этих уроков для современных айтишников. Больно далеко уж разошлись дороги айтишников тогда и теперь. Это просто выводы на то время.
Первородный хаос
Пользователи редко отчетливо представляют, что им нужно. А если представляют, то в сильно завуалированном виде, который нужно еще перелопачивать, трансформировать, фильтровать. Изначально хаос и в голове айтишника. А нужно выделить порядок, отбросить фантазии, структурировать возможное и представить результат понятным и убедительным образом. Иначе говоря, из хаоса нужно выделить реалистичную систему.
Первое лицо
Успех проекта зависит от первого лица заказчика. Это один из постулатов Глушкова – классика советской кибернетики. Без непосредственного участия первого лица заказчика проект не был бы реализован.
Воля руководителя
Успех разработки обеспечивает не столько интеллект, сколько воля руководителя проекта. Иногда он должен сказать, как Королев: “Луна твердая”, и прекратить бесконечные дебаты.
Компетентность
Компетентность идет следом за волей. Здесь проколы также имеют тяжелые последствия. Например, наш дилетантизм не позволил единым образом запрограммировать любую арифметико-строко-логическую функцию над показателями строек. И только когда мы узнали об обратной польской записи, мы поняли свой прокол.
Технология разработки
Составные технологического успеха: компетентность, дисциплина, жесткий контроль руководителя, здравый смысл в руководстве и проектировании, фиксация проектных решений и строгое следование им. Никаких жестких формальных рамок каких-либо технологий управления. Мы поневоле придерживались будущего принципа Agile принимать все требования банка – нашего заказчика. Иначе и не могло быть, так как ВЦ был на содержании банка и попробуй откажись. Однако радикальных перемен, инициируемых заказчиком, не было.
По поводу контрольных совещаний я вспоминаю максиму “Cобирая информацию, не проводи совещаний, проводя совещание, не собирай информации”. Один мой босс этим и руководствовался, а второй ровно наоборот.
На совещаниях нужен индивидуальный подход к участникам. Есть олимпиадники, которые быстро схватывают и быстро предлагают решение. Есть антиолимпиадники, которым нужно время на раскачку и время на принятие решения. И это решение может быть и лучше решения олимпиадника. Я, к примеру, никогда не преуспевал на очных олимпиадах, но вполне прилично выступал на заочных. Среди крупных математиков были и олимпиадники и нет, и кого из них больше я не знаю.
Мировоззрение
Я понял, что на успех проекта влияет не только (а может и не столько) инструментарий, но и широта общего мировоззрения айтишника. Не имея представления о нейроне, не выдумаешь нейронную сеть. Не имея представления о генетике и естественном отборе, не выдумаешь генетический алгоритм. Можно не знать деталей, но поле мышления должно охватывать крупными мазками такие понятия: рекурсия, подпрограмма, сопрограмма, граф, дерево, список, стек, сортировка, паттерн, БД, функция, композиция и декомпозиция функций… Главное — такое мировоззрение должно охватывать предметную область.
Язык программирования
От языка программирования далеко не все зависит. Я, кстати, программировал и на Коболе, и на ассемблере (IBM), и на PL/1, и на С, и на Delphi, и на Prologe, и на C# и к своему стыду никогда детально не знал языка, а всегда держал под рукой какой-нибудь учебник(поэтому я не прошел бы сегодня собеседование ни в одну солидную фирму). Это, видимо, замедляло разработку, но зато не обременяло мой ум деталями, оставляя свободное пространство для более широких понятий. Достаточно было того, что я когда-то нагрузил его знанием IBM DOS, а потом нагрянула IBM OS и все мои знания пошли коту под хвост. А как знать PL/1, где целый том был посвящен ошибкам при преобразовании данных? Нужно иметь широкое представление о стратегических вещах. Надо уметь анализировать предметную область, уметь построить удобную реалистичную модель, знать какие есть алгоритмы, построить удобную архитектуру ПО. А язык? — Есть коряво пишущие знатоки русского языка и есть не совсем грамотные хорошие писатели. Самое замечательное знание языка программирования не обеспечивает хорошего программирования.
Шедевры есть на хинди, на греческом, на арамейском, на французском…Можно, конечно, вести бесконечные дебаты о скобках, комментариях, константах, паттернах, зацепленности и расцепленности, подмечать локальные огрехи, а глобальный продукт написать никуда не годный.
Есть еще неформализуемый здравый смысл, который еще нужен в ИТ. Мне встречался разработчик, который детально знал SQL и очень умно рассуждал о нем, но запросы к БД писал ужас, что такое. Локальные отличные знания инструмента и глобальная гармония проекта находятся, по-видимому, на разных полюсах интеллекта. И ещё, я не верю, что полуграмотный в родном языке, способен написать грамотный “роман” на языке программирования. Рассказик – может быть, роман – нет. Я помню в каким нетерпением ждал появления Алгол-68: он позиционировался как язык поэтов программирования. Но не дождался.
А вот что написал Дейкстра о языке программирования в своей книге “Дисциплина программирования”: “Когда начинаешь писать подобную книгу, сразу возникает проблема: каким языком программирования пользоваться? И это не только вопрос представления! Наиболее важным, но в то же время и наиболее незаметным свойством любого инструмента является его влияние на формирование привычек людей, которые имеют обыкновение им пользоваться. Когда этот инструмент — язык программирования, его влияние, независимо от нашего желания, сказывается на нашем способе мышления. Проанализировав в свете этого влияния все известные мне языки программирования, я пришел к выводу, что ни они сами, ни их подмножества не подходят для моих целей. С другой стороны, я считал себя настолько не подготовленным к созданию нового языка программирования, что дал зарок не заниматься этим в ближайшее пятилетие, и я твердо знаю, что этот срок еще не вышел. (Прежде, помимо всего прочего, мне нужно было написать эту монографию.) Я попытался выбраться из этого тупика, создав лишь подходящий для моих целей мини-язык и включив в него только те элементы, которые представляются совершенно необходимыми и достаточно обоснованными»
Системный подход
Он требует не забывать о соседних системах и надсистеме. И, значит, нужно прогнозировать расширение и реализовывать заготовки впрок, так чтобы не пришлось радикально менять проект при его расширении. Заготовки впрок противоречит принципу “не делай ничего впрок”. Именно и делай впрок, если работаешь не на дядю, а на себя.
У рядового разработчика была ничтожная денежная мотивация. Пусть ты в 10 раз производительнее коллеги, а получать будешь на 10% больше его. Поэтому мало кто читал что-то кроме системной документации, а многие и этого не читали, а все приставали с вопросами к знающим. Правда, документации хватало – письменный стол можно было завалить ряда в три книжками документации по матобеспечению ЕС ЭВМ. Но были люди и увлеченные. В том числе и я. Помню до сих пор какое впечатление на меня, дилетанта в программировании, произвели в техническом плане книги “Вычислительные структуры” Холла, первый том Кнута, “Систематическое программирование” Вирта и еще некоторые. А в идейном плане — “Дисциплина программирования” Дейкстры и “Наука программирования” Гриса.
“Границы моего языка означают границы моего мира“(Витгенштейн). Под языком человека я понимаю всю его понятийно-вербальную линейку (поле мышления)от мировоззрения до формального языка. Вот эта линейка: мировоззрение —>родной язык —>сфера широкой компетентности(науки) —>сфера узкой компетентности(специализация) —> математика —> модели —> информатика —> язык программирования. Спускаясь по этой шкале мы увеличиваем точность и ясность, но теряем в широте семантики и метафоричности представлений. Это дополнительные вещи.
Примеры применения сфер поля мышления айтишника:
Язык программирования. Здесь доминирует формальный подход. Это строгий синтаксис, это фиксированные программные конструкты: выбор, присваивание, циклы, селекторы, итераторы, интерфейсы, объекты, методы. Этот готовые решения в виде библиотек, это заготовки типа “делай как я” – паттерны. Здесь процветает сленг. Но, в поисках вдохновения, программирование требует “заскоков” в вышестоящие слои поля мышления, откуда черпаются идеи. А язык программирования диктует только форму, в которой предстанут эти идеи.
Желательно иметь представление об ассемблере, императивном языке, логическом языке, функциональном языке, SQL, NoSQL. Из процедурных языков я программировал на ассемблере, PL/1, Delphi, C#. Из логических — Prolog. SQL само-собой разумеется. Из функциональных ни одного, хотя я и пришел в ИТ из точных наук и, казалось бы, они должны были заинтересовать меня. И я хоть и стар, мне стало стыдно и я загорелся желанием попробовать или Haskell или F#. А может Idris, о котором я в первый раз услышал в Как развернуть односвязный список на собеседовании. Меня очень впечатлили леммы и теоремы в этой статье.
Информатика. Это теоретические основы для языков программирования. Это узкое мировоззрение айтишника. Понятийные островки: cинтаксис, прагматика, формальные языки, алгоритмы, машина Тьюринга, вычислительные структуры.
Модели. К ним относятся схемы БД, модели UML, модели SADT, HTML, CSS, TCP/IP, семиуровневая модель OSI, формализм Бэкуса-Наура, регулярные выражения.
Математика. Она предоставляет аппарат для точного знания и снабжает универсальными средствами: отношения, множества, функции, формулы, уравнения. Это язык точного рассуждения. Но она представляет не только аппарат для решения задач, но и может прямо влиять на язык программирования. Пример — Haskell и теория категорий в математике. Это весьма привлекательная идея слить статичный язык математики с языком программирования.
Специальное образование. Для меня, например, это – физика. Для кого-то математика. Для профессионала – информатика. А иногда и экономика, менеджмент.
Общее образование. Знакомство с генами и теория естественного отбора естественно приводит к понятию генетического алгоритма. Знакомство с нейрофизиологией мозга приводит к понятию нейронной сети.
Родной язык. Синтаксис обычного языка наводит на мысль о синтаксисе языка программирования. Привычки родного языка влияют на алгоритмическое мышление. Пример приводит Дейкстра в своей книге ”Дисциплина программирования ”, где он отметил различие семитов и несемитов в подходе начинать слева-направо или наоборот. Меня удивляет как мало внимания писатели уделяют внимания синтаксису и обсуждению на каком языке лучше писать. Писатели не жалуются, что синтаксис мешает им творить шедевры, а пишут на английском, немецком, русском… Я встретил только у Набокова (“Дальние берега”) сравнительные рассуждения о писательстве на английском и русском. А немецкий не оставил у него никакого впечатления. Но это Набоков.
А вот программистов, в отличие от писателей, часто заносит в синтаксис и начинаются дебаты об отступах, скобках, дилемма “имена с подчёркиванием или имена стиля CamelCase” и т.п.
Засилие американизмов в жаргоне программистов – это может быть неявное желание расширить поле мышления? Читая на Хабре статьи некоторых современных программистов, я начинаю комплексовать: поминутно лезу в Википедию, чтобы понять сленг. Ну это уже мои проблемы.
Я с грустью замечаю, что русский язык становится от американизмов такой же “трасянкой”, как мой родной белорусский язык стал “трасянкой” от русизмов.
Меня очень поразила фраза Толстого «Если допустить, что жизнь человеческая может управляться разумом, — то уничтожится возможность жизни «(«Война и мир», т.4, Эпилог). Похоже, что это надо очень и очень иметь ввиду политикам. А как это перекликается с квантовой механикой, где подсматривание за процессом, радикально нарушает его течение! А может это аукнется и в программировании, при попытках построить разумных роботов, контролируемых человеком или программой.
Мировоззрение. Это сфера невербального мышления и вербально-философского мышления. Исходя из философии бихевиоризма мы можем сказать: если что-то ведет себя как человек, то это человек. Главное отличие человека от животных — осмысленная речь. Из такого бихевиористического подхода родился тест Тьюринга. Проблема искусственного интеллекта также порождается мировоззрением из размышлений о разуме, интеллекте. Лингвистическая философия с её акцентацией на языки и роль слов ведет к формальным языкам. Герменевтика ставит проблему истолкования текстов программ. И, кто знает, может быть знание идей Кассирера в его труде «Философия символических форм» откликнется и в программировании, или может быть феноменология Гуссерля повлияет на феноменологию программирования. Мне кажется миры программ сильно повлияют на философию, и она станет более конструктивной, обретя в мире программ инструменты проверки своих концепций. И тогда будет явным и обратное влияние.
В формальных языках синтаксис сливается с семантикой слов. А в мировоззрении вообще нет никакого синтаксиса. Неспособность мыслить метафорично (уровень родного языка) лишает наши тексты литературности. Где в программировании эссе, рассказы, повести, романы, стихи и поэмы? Где герменевтика текстов программ? Для меня образец метафоричности в программировании – Дейкстра с его книгой “Дисциплина программирования”. Итак, возможно новыми конструктивными понятиями должны выступить метафоричность, литературность, герменевтика… И тут, я понял, что “Остапа понесло”. Да, я увлекся и, похоже, нарушил другую максиму Витгенштейна: “То, что вообще может быть сказано, должно быть сказано ясно; о том же, что сказать невозможно, следует молчать“.
Математизация
Сначала приведу цитату из Арнольда: “Слово «математика» означает «точное знание». Варварские народы, не склонные к таковому, не имели и соответствующего слова в языке, поэтому сейчас почти во всех языках используется непонятный греческий термин. Исключение составляет лишь голландский язык, где Стевин уже в XVII в. боролся с засорением терминологии иноязычными «сайтами» и «файлами», «баксами» и «киллерами», и настаивал на переводе всех терминов словами родного языка, так что их термин—«вискунде», «знание», приближает уже для детей математику к реальному миру”.
Не потому ли так высок уровень физики, математики, информатики в маленькой Голландии, которая по нобелевским лауреатам обходит Россию, не говоря уже о моей Беларуси, которая по населению сравнима с Голландией, а по территории больше. А может по той же причине и футбол там отличный?
Под математикой я понимаю не только формульное представление. Главное — точные начальные понятия и строгие выводы. Так таблицы БД я понимаю как функции, заданные таблично. Ключ в таблицах – гарантия однозначности функции, нормализация – выделение самых базисных функций из композиции которых можно составлять более сложные (например, view БД).
В связи с математизацией я попробовал в проектах вести понятие внешней и внутренней постановки. Внешняя – для пользователя в терминах предметной области. Внутренняя — для ИТ-шников в терминах информатики и математики. Внутренняя представляет точную трансляцию внешней. Это трансляция представлений пользователя в представления проектировщика и он легко мог переходить к техническому проектированию. Тем самым проектировщик освобождался от детального знания предметной области, а мыслил уже в родных терминах. Но это нововведение было многими встречено в штыки и не прижилось.
Когда я понял важность постановки и её моделирования, я во избежание двусмысленностей всегда старался сделать и математическую модель задачи. А вот в проекте ТЭПС мы узнали на вербальном уровне, что такое конструктивная математическая формула, но не представили ее в формализме Бэкуса-Наура и тем-самым лишились возможности написать универсальный интерпретатор формул.
Исходя из важности математического представления, я приведу далее несколько математических моделей.
Математическая модель бухучета
Модель эта была составлена постфактум для собственного удовольствия, а не для проекта.
Структурные элементы бухучета
Это баланс источников и стоков. Это справедливо для любого момента времени. Значит для любого ∆t:
Из двух последних соотношений следует
Это баланс изменений.
Каждый объект учета может увеличиваться (Uv) или уменьшаться (Um).
Для источников:
Аналогично для стоков:
Баланс изменений примет вид
Договорились говорить об уменьшении источников как о дебете(Dt), а об увеличении как о кредите(Kt).
Для стоков, наоборот: уменьшение – кредит(Kt), увеличение – дебет(Dt). И это логично в силу антиподности источников и стоков.
Тогда
Это баланс дебета и кредита.
Счета, учитывающие источники называются пассивными, а их общий размер называется пассивом. Обозначим его как .
Счета учитывающие стоки называются активными, а их общий размер называется активом. Обозначим его как .
Дебет, кредит, сальдо
Для счета пассивов:
Для счета активов:
Капитал и основные уравнения бизнеса
Среди счетов актива можно выделить счета на которых учитываются требования фирмы – средства которые мы вправе когда-либо затребовать вернуть. Это выданная ссуда, например. Это деньги в кассе. А вот счет Расходы к требованиям не относится. Дальше, среди счетов пассива можно выделить счета на которых учитываются обязательства фирмы – средства которые мы должны когда-нибудь вернуть. Это полученная ссуда, например. А вот счет Доходы к обязательствам не относится. Обязательства – заемные средства. Но у фирмы есть и собственные средства – капитал фирмы. Размещая заемные средства и собственные средства мы трансформируем их в требования. Это и есть текущая функция бизнеса в абстрактном выражении.
Среди счетов актива можно выделить счета на которых учитываются размещения средств фирмы – средства которые мы куда-то направили с целью получения прибыли. Требования входят в размещения.
Среди счетов пассива можно выделить счета на которых учитываются привлечения бизнесом средств от стороннего бизнеса. Это полученные ссуды – средства которые мы куда-то направили с целью получения прибыли. Обязательства входят в привлечения.
Или более привычно:
Это уравнение состояний
Весь бизнес работает ради прибыли. В учете это отображается так:
- Есть счет Расходы. Он дифференцируется по типам расходов.
- Есть счет Доходы. Он дифференцируется по типам доходов.
Или более привычно
Это уравнение потоков.
Часть прибыли можно капитализировать и тем самым расширить финансовую базу бизнеса.
План счетов
Все множество допустимых счетов, называется планом счетов. Он диктуется государством. План счетов состоит из дерева Пассив и дерева Актив, содержащим соответственно все пассивные и активные счета. Формально можно объединить два дерева в одно, введя вершину “План счетов” и подчинив ей деревья Пассив и Актив.
Разработчик волен расширять дерево плана счетов вниз в своих интересах. Так счет привлеченных депозитов дифференцируется до индивидуальных депозитных счетов. Счет выданных кредитов дифференцируется до индивидуальных ссудных счетов. Расчетный счет дифференцируется до индивидуальных счетов субъектов, ведущих расчеты через банк.
Иногда пользователь заинтересован в двух планах счетов.
Хозяйственные операции
На размер проводки дебет-счет должен дебетоваться, а кредит-счет кредитоваться.
Хозяйственная операция реализуется одной или несколькими проводками. Если дебет-счет и кредит-счет оба пассивны или оба активны, то баланс не меняется. Если дебет-счет активен, а кредит счет пассивен, то баланс увеличивается. Если дебет-счет пассивен, а кредит-счет активен, то баланс уменьшается. Если проводка реализуется только по дебету или только по кредиту, то баланс будет нарушен. Отсюда ясно, что при машинной реализации проводка должна реализовываться как транзакция, иначе баланс будет нарушен. Кстати в англоязычной литературе проводка так и называется “транзакция”.
Отображение хозяйственной операции на проводки – главная задача бухгалтера. Он, в зависимости от хозяйственной операции и экономических характеристик субъектов проводки (плательщик и получатель), должен определить проводки. Иногда здесь возможны варианты и тогда искусство бухгалтера состоит в том, чтобы выбрать проводки выгодные для фирмы бухгалтера.
Баланс Актив=Пассив
И все это должно быть сгруппировано по плану счетов S, так что:
Это баланс активов и пассивов. Он представляет баланс состояний.
Информационная структура в которой приведены все активы и пассивы в разрезе плана счетов называется бухгалтерским балансом. Обычно его приводят в виде двух иерархий: слева на листе баланса иерархия пассива, справа на листе баланса иерархия актива. И завершается эти иерархии общим размером актива и пассива. Эти размеры должны совпадать. Иначе – ошибка.
Баланс Дебет=Кредит
И все это должно быть сгруппировано по платежным документам, или интегрировано до уровня плана счетов(оборотно-сальдовая ведомость).
Это баланс оборотов — баланс потоков.
Расширения учета как применение системного подхода
Системный подход требует не забывать, что проект всегда погружен в надсистему и возможно будет расширен, так что в расширение захватятся некоторые части надсистемы. Так что если такое расширение весьма вероятно, то заранее нужно побеспокоиться об атрибутах, избыточных для данного проекта, но нужных для расширенного проекта. Бухгалтерский учет естественным образом может быть расширен до операционного и управленческого учета, а ещё дальше до бизнес-аналитики в широком смысле.
Операционный учет
В той реализации операционного дня в которой я участвовал, с платежного документа вводились только проводки. Для операционного учета нужно вводить и код хозяйственной операции. Кроме того, нужно знать инициатора хозяйственной операции и бухгалтера, определившего проводки.
Управленческий учет
Для управленческого учета нужно привязать субъектов хозяйственной операции к подразделению фирмы. А также желательно больше знать об экономическом содержании операции. Для этого нужно идентифицировать экономический объект операции: транспорт, здание, компьютер, НДС, …
Экономические показатели
С точки зрения экономики сальдо и обороты счета – это экономические показатели. Тогда естественно спросить, а почему мы должны ими ограничиться, ведь это не вся экономика. Нужна численность работников, уровень инфляции, рыночные ставки и т.д. Кроме того, состояние счета в бухучете – это текущее состояние, а бизнесу нужно и прогнозное значение и детальный анализ прошлого, текущего и прогнозного состояний. Так мы приходим к абстракции экономического показателя. Для примера рассмотрим показатель Гэп в коммерческих банках. Если мы будем иметь на счетах дату прогнозного платежа и ее размер, то мы можем вычислять так называемый гэп.
TrС(t1,t2) – требования срочности (t1,t2) и чувствительные к изменениям процентной ставки. Pr% — процентная прибыль. Тогда
— это, по определению, гэп срочности (t1,t2)
Гэп – одна из основных характеристик процентного риска и риска ликвидности. Так если изменится рыночная ставка на ∆r, то, как учит экономика, имеем возможный скачок в процентной прибыли:
Это и говорит о важности гэпа как меры процентного риска.
Математическая модель эмпирического риска
Если приведенная выше модель бухгалтерского учета была факультативной в проекте Операционный день, то приводимая ниже была практически необходима.
Эмпирическая вероятность – вероятность, основывающаяся на опытных данных, а не исчисленная по всем правилам теории вероятностей. Обычно для строгого применения теории вероятностей недостаточно данных, а иногда и неясно как ее применить. Так, для коммерческих рисков неясно как применить понятие вероятностного пространства. Поэтому можно попробовать применить некие модельные интуитивные подходы.
Обычно разработчики ПО не выдумывают своей математики, а пользуются готовой. Но иногда необходимо придумывать математическую модель. Для меня это произошло при разработке математической модели оптимального портфеля. Там все размеры депозитов, кредитов должны учитывать риски досрочного снятия депозита и риски невозврата кредита.
Всякая оценка рыночного решения носит вероятностный характер. Всякое решение сопряжено с риском. Само понятие риска – вероятностное понятие. Риск есть вероятность потери определенного ресурса в определенной ситуации. Существуют разные типы рисков для разных операций: риск страны при вложении капитала в эту страну, риск отрасли при вложении капитала в эту отрасль, риск актива при покупке актива, риск клиента при выдаче ссуды клиенту. Здесь мы рассмотрим модель эмпирического риска, т.е. модель, учитывающая реальные размеры проигрыша по рисковому фактору в течение всего времени отслеживания этого фактора.
Композиция рисков
Обычно задаются коэффициентом риска для ссуды определенного вида залога. Так залог под ценные бумаги государства обычно менее рискован чем залог под ценные бумаги частного предприятия. Кроме того, каждый клиент характеризуется своим коэффициентом риска независимо от вида залога.
Стоит задача определить — интегральный коэффициент риска по клиенту и ссуде совместно, зная — риск по ссуде и — риск по клиенту, которому выдается ссуда.
Обобщим. Вместо конкретных типов риска введем абстрактный фактор риска. Пусть есть два фактора риска: фактор 1 и фактор 2.Зная риски , по каждому фактору нужно найти композитный риск r. Риск по первому фактору — это вероятность события “неуспех по фактору 1”. Риск по второму фактору — это вероятность события “неуспех по фактору 2”. Композитный риск — это вероятность события (неуспех по фактору 1 ИЛИ неуспех по фактору 2). Тогда привлекая теорию вероятностей имеем
риски не складываются!
И только при общей сумме рисков много меньше единицы риски можно складывать.
Тогда для конкретных рисков по типам ссуд и клиентам имеем
Модели определения ссудного риска по клиенту
В банке не было никаких методик определения риска. Разработчикам нужно было создать собственную методику. Эмпирическая база – кредитная и депозитная история клиента. И нужно найти эмпирическую формулу для риска.
Для эмпирической формулы вероятности представляются естественными следующие содержательные требования:
- Если клиент вовремя расплачивался по ссудам, то риск по нему равен 0(или другое стартовое значение <1)
- Если клиент имеет невыплаты на момент t, то на этот момент риск по клиенту равен 1
- Чем больше невыплаты, тем больший риск
- Чем больше срок невыплаты, тем больше риск
- Чем меньше доля времени невыплат от общего времени существования кредитных отношение с клиентом, тем меньше риск
- И одно математическое требование временно’й композиции рисков, которое вытекает из необходимости вероятностной трактовки:
Введем следующие величины, характеризующие просроченную задолженность:
— время существования кредитных отношений с клиентом
– интервал в днях существования неплатежа
— просроченная задолженность на момент t
— процентное число просроченной ссуды на момент t(импульс просроченности)
В интегральном представлении:
Где в течение периода неплатеж составлял
– средний неплатеж
Введем следующие величины, характеризующие срочную задолженность:
— cрочная задолженность на момент t
— процентное число срочной ссуды на момент t
В интегральном представлении:
Где в течение периода срочная задолженность составляла
Можно, поиграв с формулами и воображением, предложить несколько моделей, удовлетворяющих вышеперечисленным условиям, кроме требования композиции вероятностей:
И для всех формул полагаем по определению r(0)=0, r(t)=1 если в момент t есть неплатеж.
Так какую формулу из приведенных выбрать? И тут поможет правила временно’й композиции рисков. Непосредственной проверкой убеждаемся, что правило соблюдает только последняя эмпирическая формула.
Модели определения депозитного риска по клиенту
Все рассуждения предыдущего пункта модифицируются для депозитного риска. Полученная формула сохраняется, только нужно только заменить термин “просроченная ссуда” на “преждевременное снятие депозита” и где индекс p трактуется как преждевременное снятие.
Обобщения
Абстрагируемся от кредита и депозита и вводим абстрактный фактор-риск – потенциальная безвозвратная потеря, которая влечет за собой и некие реальные потери. Вышеприведенные формулы с некоторыми вариациям применимы и к этому общему случаю.
Далее я приведу только словесное описание других моделей, для которых были разработаны и математические модели.
Математическая модель оптимизации выдачи кредита
В коммерческом банке есть портфель кредитных заявок — портфель потенциальных кредитов. Все их удовлетворить невозможно по следующим:
- Банк ограничен ресурсами, обеспечивающими кредиты.
- Центробанк диктует нормативы, которым должен удовлетворять состояние коммерческого банка
- Некоторые потенциальные заемщики могут характеризоваться недопустимым риском
Оказалось, что задача решается в рамках задачи линейного программирования.
Математика отношений между субъектами
Более-менее развитая бизнес-экономика потребует анализа отношений между субъектами. В роли субъектов выступают предприятия, люди, банки, государство… Отношения могут быть разными:
- Платежи
- Кредитование
- Депозитование
- Договорные
- Вражда
- Криминал
- Сотрудничество
- Банковское обслуживание
Задача: создать продукт позволяющий обрабатывать множество отношений:
- Находить цепочки(в том числе и циклы) отношений произвольной длины для однородных отношений
- Находить цепочки(в том числе и циклы) отношений произвольной длины для неоднородных отношений
- Находить вышеозначенные цепочки для отношений, удовлетворяющих задаваемым условиям
- Находить вышеозначенные цепочки для субъектов, удовлетворяющих задаваемым условиям и т.д.
- Находить цепочки минимальной длины
- Находить цепочки максимальной стоимости(для платежей)
Ориентированность графа возникает из-за несимметричности отношений.
Проект был реализован на Delphi и Visual Prologe.
Выдача векселей
Пусть у банка есть портфель векселей, каждый на некоторую свою фиксированную сумму. Клиент просит продать ему векселя на заданную сумму. Требуется подобрать такое подмножество векселей, которое максимально удовлетворит заявку клиента.
Это, конечно, математическая задача. Я помню удовлетворился довольно примитивным эвристическим алгоритмом. А мой сотрудник подошел к делу серьезно и точно решил задачу. Хотя и расхождения между двумя решениями и были невелики, но все-же были.
Определение оптимального лага клиринга
В банке могут быть две дисциплины оплаты клиентских платежных документов:
- Платить в реальном времени. Обычно в таком режиме реализуются крупные платежи и соответствующий режим носит название RTGS(Real-Time Gross Settlement)
- Платить через некоторые дискретные моменты времени. Между этими моментами собирается портфель неоплаченных документов. А когда промежуток простоя(лаг клиринга) истекает, начинается оплата с учетом встречных требований, что в общем случае приводит к тому, что может реализоваться больше платежей, чем в оплате реальном времени. Так, если A должен заплатить B 100, а B должен заплатить A 90, то A платит B 10 и все Ok. Можно строить цепочки не только из двух клиентов, а из произвольного числа клиентов. Этот режим называется клирингом, а точнее неттинг-клирингом.
- Слишком большой лаг клиринга приводит к простою ресурсов и становится невыгодным. Это очевидно, если взять бесконечный лаг
- Слишком маленький лаг клиринга не приносит выгоды и становится бесполезным. Это очевидно, если взять лаг равный нулю.
Я не уверен, что решил задачу точно. Но введя некоторые естественные требования и правдоподобные допущения я получил формулу для оптимального лага клиринга. Это, конечно, эвристическая формула.
Заключение
Широта мыслительной сферы имеет не менее важное значение, чем язык программирования. Языки программирования приходят и уходят, а мировоззрение остается. Одним из действенных инструментов, влияющих на успех проекта, является построение математических моделей предметной области или ее частей.
Из того, что было изложено выше делаем вывод, что математическая модель может быть: