Веб-сайт www.blockchain-basics.com предоставляет дополнительные материалы по темам некоторых глав данной книги.
В этой части описываются основные концепции программной инженерии, а также устанавливаются правила организации и стандартизации при обсуждении основ технологии. Этот этап обучения также представляет концепции программной архитектуры и целостности программного обеспечения, а еще их связь с технологией блокчейна. К концу этого этапа вы будете хорошо понимать цели и задачи технологии блокчейна и ее потенциальные возможности.
Эта глава закладывает основу для дальнейшего процесса изучения технологии блокчейна, четко определяя правила и способы организации и стандартизации при обсуждении основ технологии. В главе рассматриваются возможные методики анализа программных систем, объясняется, почему важно рассматривать программную систему как совокупность уровней. Далее наглядно демонстрируется, какие преимущества можно извлечь при анализе различных уровней системы и как такой подход помогает понять технологию блокчейна. В конце главы приводится краткое вводное описание концепции целостности программного обеспечения и подчеркивается ее важность.
У вас есть мобильный телефон? Я почти уверен, что есть, так как у подавляющего большинства людей имеется, по крайней мере, один мобильный телефон. Что вы знаете о разнообразных протоколах беспроводного обмена информацией, используемых для отправки и приема данных? Что вы знаете об электромагнитных волнах, являющихся основой мобильной связи? Большинству из нас не слишком много известно об этих технических подробностях, потому что такие знания не являются необходимыми для практического использования мобильного телефона. К тому же почти все мы настолько заняты, что у нас вряд ли найдется время на изучение этих тонкостей. Мысленно разделяя мобильный телефон на общеизвестные составные части, мы учитываем, что обязательное присутствие этих частей невозможно игнорировать или считать само собой разумеющимся.
Такой подход к технологии не ограничивается только мобильными телефонами. Мы используем его во всех случаях, когда приходится осваивать новый телевизор, компьютер, стиральную машину и т. п. Но такие «мысленные» составные части в высшей степени индивидуальны, так как каждый по-своему решает, что считать важным, а что не зависит от наших индивидуальных предпочтений, от конкретной технологии, от наших целей и практических знаний. В результате ваше мысленное разделение мобильного телефона на составные части может отличаться от моего разделения того же самого мобильного телефона. Обычно это приводит к проблемам при обмене информацией, особенно если я пытаюсь объяснить вам, что необходимо знать об устройстве конкретной модели мобильного телефона. Таким образом, единый универсальный подход к разделению системы на составляющие компоненты является ключевым моментом при изучении и обсуждении любой технологии. В этой главе описывается, как следует разделять систему на составные части или уровни и соответствующим образом формулировать основные положения при обсуждении технологии блокчейна.
На протяжении всей книги при разделении любой системы на составные части используются следующие две методики:
• сопоставление приложения и его реализации;
• разделение на функциональные и нефункциональные аспекты.
Сопоставление приложения и его реализации
Мысленное отделение потребностей пользователя от технических подробностей внутреннего устройства системы приводит к разделению уровня приложения и уровня реализации. Все, принадлежащее к уровню приложения, рассматривается как потребности пользователя (например, прослушивание музыки, фотографирование, заказ номера в отеле и т. д.). Все, принадлежащее к уровню реализации, рассматривается с точки зрения обеспечения выполнения вышеперечисленных действий (например, преобразование цифровой информации в акустические сигналы, определение цвета пиксела в цифровой видеокамере или передача сообщения по сети Интернет в систему бронирования номеров отеля). Элементы уровня реализации являются техническими по своей сущности и рассматриваются как средства достижения той или иной цели.
Разделение на функциональные и нефункциональные аспекты
Различие между тем, что система делает и как она это делает, приводит к разделению функциональных и нефункциональных аспектов. Примерами функциональных аспектов являются: передача данных по сети, воспроизведение музыки, фотографирование и редактирование отдельных пикселов в изображении. Примеры нефункциональных аспектов: удобный графический пользовательский интерфейс, быстрое программное обеспечение, возможность безопасного хранения пользовательских данных и защита их приватности. Другими важными нефункциональными аспектами системы являются безопасность и целостность. Целостность (integrity) означает, что система ведет себя именно так, как от нее ожидают, в то же время понятие целостности включает в себя и многие другие аспекты, такие как, например, безопасность (защищенность) и корректность [8]. Эффективным способом запоминания различий между функциональными и нефункциональными аспектами системы является аналогия с грамматикой русского или английского языка: глаголы описывают действия (что делается), а наречия – как выполняются эти действия. Например, человек может идти быстро или медленно. В обоих случаях действие «идти» одинаково, но способы выполнения этого действия различны. Поэтому в качестве практического правила можно предложить аналогию: функциональные аспекты соответствуют глаголам, нефункциональные аспекты соответствуют наречиям.
Определение функциональных и нефункциональных аспектов и разделение на уровень приложения и уровень реализации можно выполнять одновременно, получая в результате двумерную таблицу. В табл. 1.1 показан результат мысленного разделения на уровни системы «мобильный телефон» с одновременным определением функциональных и нефункциональных аспектов.
Таблица 1.1 Пример мысленного разделения на уровни мобильного телефона
Таблица 1.1 может описывать видимость (или невидимость) конкретных элементов системы для ее пользователей. Функциональные аспекты уровня приложения в большинстве своем являются видимыми элементами системы, поскольку предназначены для удовлетворения очевидных потребностей пользователей. Эти элементы обычно хорошо знакомы пользователям. С другой стороны, нефункциональные аспекты уровня реализации редко проявляют себя как основные элементы системы. Их наличие считается само собой разумеющимся.
Целостность (integrity) – это важный нефункциональный аспект любой программной системы. Понятие целостности включает три главных компонента [5]:
• целостность данных (data integrity): данные, используемые и сопровождаемые системой, должны быть полными, корректными и непротиворечивыми;
• целостность поведения (behavioral integrity): система ведет себя, как предполагается, и не допускает логических ошибок;
• безопасность (защита) (security): система способна ограничить доступ к своим данным и функциональным возможностям, разрешая его только авторизованным пользователям.
Возможно, большинство людей считает целостность программных систем фактом, не требующим подтверждения, потому что большую часть времени имеет дело с системами, сохраняющими свою целостность. Это становится возможным благодаря тому, что программисты и инженеры затратили огромное количество времени и усилий на разработку систем, обеспечивающих собственную целостность. Иногда возможна не совсем верная оценка труда инженеров по созданию систем, обеспечивающих высокий уровень целостности. Но наше мнение может измениться, как только мы встретимся с системой, не обладающей этим свойством. Это могут быть случаи потери данных, необъяснимого поведения программного обеспечения или обнаружения факта доступа посторонних лиц к вашим личным закрытым данным. Это ситуации, когда ваш мобильный телефон, компьютер, программа электронной почты, текстовый процессор или электронная таблица заставляет вас разозлиться и забыть о хороших манерах. Во всех подобных случаях мы действительно начинаем понимать, насколько важным аспектом является целостность программного обеспечения. Поэтому не должно вызывать удивления то обстоятельство, что профессиональные разработчики программного обеспечения затрачивают огромное количество времени на кажущийся незначительным аспект уровня реализации.
В этой главе представлена вводная информация о некоторых общих принципах программной инженерии. Здесь рассматривались концепции целостности, функциональные и нефункциональные аспекты, уровни приложения и реализации программной системы. Понимание этих концепций поможет вам более широко взглянуть на среду, в которой существует технология блокчейна. В следующей главе будет представлена более подробная картина применения концепций, описанных в данной главе.
• Анализ систем может выполняться с помощью разделения:
– на уровень приложения и уровень реализации;
– на функциональные и нефункциональные аспекты.
• Уровень приложения сосредоточен на потребностях пользователя, уровень реализации – на способах удовлетворения этих потребностей.
• Функциональные аспекты определяют, что делать, нефункциональные аспекты определяют, как это делать.
• Большинству пользователей хорошо известны функциональные аспекты уровня приложения системы, в то время как нефункциональные аспекты системы, особенно относящиеся к уровню реализации, практически невидимы для пользователя.
• Целостность является важным нефункциональным аспектом любой программной системы и включает три главных элемента:
– целостность данных;
– целостность поведения;
– безопасность (защита).
• Большинство критических сбоев программного обеспечения, таких как потери данных, необъяснимое поведение, доступ посторонних лиц к личным закрытым данным, является результатом нарушения целостности системы.
О проекте
О подписке