Confidential
Software Right
Right Software
Oleksandr Ivanov Lead Software Engineer
November, 2018
Doing the
Doing the
vs
Confidential
Intro
Confidential
Architecture - I
I2CPIO SPI USB
HAL
DRV
BL
I2CPIO SPI USB
Embedded
Software
Confidential
Architecture - II
PIO
LCD
PWM
LAN
ADC
SPI
I2C
timer
DAC
DMA
USB
PIO
DMA
I2Stimer
DMA
Confidential
Mechanics
Confidential
Mechanics - I
l1l2
F1
F2
Confidential
Mechanics - II
m2
m3
m4
m5
m7
m8
m9
m10
m11
m13
m12
m14
m15
m16m1
m6
Confidential
Mechanics - III
m2
m3
m4
m5
m7
m8
m9
m10
m11
m13
m12
m14
m15
m16m1
m6
Confidential
Software
Confidential
Software - I
Software knot
l1l2
F1
F2
U2 U3
U1
InOut
In
dependsdepends
Mechanical knot
Confidential
Software - II
m2
m3
m4
m5
m7
m8
m9
m10
m11
m13
m12
m14
m15
m16m1
m6
Confidential
Software - II
m2
m3
m4
m5
m7
m8
m9
m10
m11
m13
m12
m14
m15
m16m1
m6
U1
U2 U3
U7U6U5U4
U8 U9
U1
0
U1
1
U1
2
U1
3
U1
4
U1
5
Confidential
Software - II
PIO
LCD
PWM
LAN
ADC
SPI
I2C
timer
DAC
DMA
USB
PIO
DMA
I2Stimer
DMA
U1
U2 U3
U7U6U5U4
U8 U9
U1
0
U1
1
U1
2
U1
3
U1
4
U1
5
Confidential
Software - III
PIO
LCD
PWM
LAN
ADC
SPI
I2C
timer
DAC
DMA
USB
PIO
DMA
I2Stimer
DMA
U1
U2 U3
U7U6U5U4
U8 U9
U1
0
U1
1
U1
2
U1
3
U1
4
U1
5
Confidential
Verification
Confidential
Simple Unit
Software unit Mechanical unit
Confidential
Verification
Software unit Mechanical unit
?
Confidential
Verification
Confidential
Integration Patterns
Confidential
Units
Software unit Lego® unit
Confidential
Patterns - I
I-pattern relations I-pattern call directions
Confidential
Patterns - A
A-pattern relations A-pattern call directions
Confidential
Patterns - Y
Y-pattern relations Y-pattern call directions
Confidential
Patterns – U and M
U-pattern M-pattern
Confidential
Q&A
Confidential
Thank You
Oleksandr Ivanov Lead Software Engineer
November, 2018

More Related Content

PPT
12 Bit Images
PDF
Latest Projects
PPTX
PDF
ChipGlobe - Dieter Rudolf - Secure IoT communication - for Infineon IoT Secur...
PDF
Eloi Sanfélix y Javier Moreno - Hardware hacking on your couch [RootedCON 2012]
PPTX
Automotive Security (Connected Vehicle Security Issues)
PPTX
RTOS based Confidential Area Security System
PPTX
Project_updated
12 Bit Images
Latest Projects
ChipGlobe - Dieter Rudolf - Secure IoT communication - for Infineon IoT Secur...
Eloi Sanfélix y Javier Moreno - Hardware hacking on your couch [RootedCON 2012]
Automotive Security (Connected Vehicle Security Issues)
RTOS based Confidential Area Security System
Project_updated

Similar to Doing the Software Right vs. Doing the Right Software (20)

PDF
EFM32 Zero Gecko Cortex-M0 - the Internet of Things starts here
PPT
AVR Fundamentals
PDF
44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick
DOC
Gesture based vehicle movements control and alerting system docu
PDF
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
PPT
Introduction to embedded systems
PPT
An Overview Study on 32-bit MCU MB91460 Series and its Peripherals
PPTX
Microcontroller
PPT
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
PDF
physical_design_training_FloorPlanning_synapse
PPTX
Embedded sysyetm components
PDF
8S003F3_STMicroelectronics.pdf
PPTX
bh-JP-04-grand_6afsdjlfakjslajsflöafjlsaj.pptx
PDF
1-AVR Introduction to Atmega32 good .pdf
PDF
CMOS Image Sensor Design_00h20_11_io.pdf
PDF
En.dm00024550 stm8 s003f3p6
PPTX
Embedded systems and robotics by scmandota
PPTX
It's an presentation on Embedded system.
PDF
lecture2-mcu_and_io.pdf
PDF
Certified System Integrator Bedrock corporate
EFM32 Zero Gecko Cortex-M0 - the Internet of Things starts here
AVR Fundamentals
44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick
Gesture based vehicle movements control and alerting system docu
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Introduction to embedded systems
An Overview Study on 32-bit MCU MB91460 Series and its Peripherals
Microcontroller
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
physical_design_training_FloorPlanning_synapse
Embedded sysyetm components
8S003F3_STMicroelectronics.pdf
bh-JP-04-grand_6afsdjlfakjslajsflöafjlsaj.pptx
1-AVR Introduction to Atmega32 good .pdf
CMOS Image Sensor Design_00h20_11_io.pdf
En.dm00024550 stm8 s003f3p6
Embedded systems and robotics by scmandota
It's an presentation on Embedded system.
lecture2-mcu_and_io.pdf
Certified System Integrator Bedrock corporate
Ad

More from GlobalLogic Ukraine (20)

PDF
GlobalLogic JavaScript Community Webinar #21 “Інтерв’ю без заспокійливих”
PPTX
Deadlocks in SQL - Turning Fear Into Understanding (by Sergii Stets)
PDF
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
PDF
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
PDF
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
PDF
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
PPTX
Штучний інтелект як допомога в навчанні, а не замінник.pptx
PPTX
Задачі AI-розробника як застосовується штучний інтелект.pptx
PPTX
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
PDF
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
PDF
JavaScript Community Webinar #14 "Why Is Git Rebase?"
PDF
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
PPTX
Страх і сила помилок - IT Inside від GlobalLogic Education
PDF
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
PDF
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
PDF
“How to Secure Your Applications With a Keycloak?
PDF
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
PPTX
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
PDF
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
PDF
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
GlobalLogic JavaScript Community Webinar #21 “Інтерв’ю без заспокійливих”
Deadlocks in SQL - Turning Fear Into Understanding (by Sergii Stets)
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
Штучний інтелект як допомога в навчанні, а не замінник.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
JavaScript Community Webinar #14 "Why Is Git Rebase?"
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
Страх і сила помилок - IT Inside від GlobalLogic Education
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
“How to Secure Your Applications With a Keycloak?
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Ad

Recently uploaded (20)

DOCX
search engine optimization ppt fir known well about this
PDF
Two-dimensional Klein-Gordon and Sine-Gordon numerical solutions based on dee...
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
Abstractive summarization using multilingual text-to-text transfer transforme...
PDF
Zenith AI: Advanced Artificial Intelligence
PPTX
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PPTX
Benefits of Physical activity for teenagers.pptx
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PDF
A review of recent deep learning applications in wood surface defect identifi...
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPT
Module 1.ppt Iot fundamentals and Architecture
PPT
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
STKI Israel Market Study 2025 version august
PPT
What is a Computer? Input Devices /output devices
search engine optimization ppt fir known well about this
Two-dimensional Klein-Gordon and Sine-Gordon numerical solutions based on dee...
Developing a website for English-speaking practice to English as a foreign la...
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Abstractive summarization using multilingual text-to-text transfer transforme...
Zenith AI: Advanced Artificial Intelligence
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
Final SEM Unit 1 for mit wpu at pune .pptx
sustainability-14-14877-v2.pddhzftheheeeee
A proposed approach for plagiarism detection in Myanmar Unicode text
Custom Battery Pack Design Considerations for Performance and Safety
Benefits of Physical activity for teenagers.pptx
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
A review of recent deep learning applications in wood surface defect identifi...
sbt 2.0: go big (Scala Days 2025 edition)
Module 1.ppt Iot fundamentals and Architecture
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
A comparative study of natural language inference in Swahili using monolingua...
STKI Israel Market Study 2025 version august
What is a Computer? Input Devices /output devices

Doing the Software Right vs. Doing the Right Software

Editor's Notes

  • #3: О чем хотелось бы поговорить сегодня. Хотелось бы обратить Ваше внимание на ту часть программного обеспечения которую никто не видит. А именно на внутреннюю организацию или как мы часто говорим - архитектуру. Архитектура может быть удачной или не очень удачной, а может и вовсе отсутствовать. Сегодня я постараюсь провести некие аналогии с механикой, чтобы показать почему архитектуре все таки лучше быть. Ну и для того чтобы не оставлять вопрос открытым, я попробую показать несколько шаблонов, применяя которые Вы сможете немного улучшить внутренюю организацию Вашего ПО.
  • #4: К сожалению, очень часто встраиваемое ПО строится по принципу облачных технологий :) Я конечно же имею ввиду монолитный способ организации кода, когда нет четко выделенных модулей, все инклудят всех, “если нашел функцию - вызывай”. Люди чуть поопытнее, разделяют приложение на слои, ну хотя бы в документации и в структуре проекта на диске. При этом никто нет способа помечать разработчику вызвать функцию БЛ из ХАЛ добавив соответствующий заголовочный файл.
  • #5: В моем, возможно идеализированном, представлении архитектура встраиваемого ПО имеет примерно такой вид. Есть нижний слой модулей (ХАЛ) которые реализуют взаимодействие с периферией, выполняя каждый свою функцию. Есть более высокий слой (ДРВ), обеспечивающий координацию работы нижестоящих ХАЛ модулей. Есть бизнес логика, находящаяся так высоко, что до аппаратных средств просто не дотянуться. Напоминает ли что-то Вам эта диаграмма?
  • #6: Давайте отойдем немного в сторону и посмотрим как дела обстоят в механике.
  • #7: В механике есть несколько базовых компонентов или узлов. Вот один из них. Прелесть этого рычага в том, что зная длины плеч мы легко можем вычислить силы (или массы грузов) которые уравновесили бы его.
  • #8: Нет ничего сложного в построении целой системы рычагов подвешенных друг на друга. Пользуясь школьными знаниями физики и математики все массы грузов можно рассчитать.
  • #9: Но что будет если мы добавим еще одну связь? Вычисления станут несколько сложнее. А если таких связей много? Дело не в том что теперь расчет стал невозможным - он просто усложнился значительно.
  • #10: Вернемся к тому что мы умеем хорошо.
  • #11: В программном обеспечении так же есть “узлы” как и в механике. И они также состоят из простейших элементов. У нас это юниты (software units). Отсюда и берет свое название юнит тестирование. Целью юнит тестирования есть проверка каждого юнита (простейшего элемента) в отдельности. Не всего узла или модуля - а одного юнита.
  • #12: Пользуясь такой аналогией мы легко можем превратить нашу механическую систему в систему взаимодействующих между собой компонентов программы.
  • #13: Да… Масс в софте не бывает. Это конечно же периферийные модули наших микроконтроллеров.
  • #15: И точно так же как и в механике, дополнительные связи усложняют анализ программного обеспечения. При большом количестве дополнительных связей мы не можем идентифицировать список фич которые нужно протестировать после внесения изменений в один юнит. Так же мы сталкиваемся с целым рядом проблем при модификации кода для реализации нового функционала. Я думаю Всем вам эти трудности знакомы.
  • #16: Что еще мы можем взять из механики? Почему я задаю Вам и себе этот вопрос? Потому что, на мой взгляд, механика как отрасль - намного более зрелая, чем разработка ПО. Давайте посмотрим.
  • #17: Как мы уже сказали и в механике и в ПО есть простейшие элементы (детали машин, например, и юниты)
  • #18: Вы можете себе представить ситуацию, когда при производстве сложных механизмов, например автомобилей, изготовленные детали сразу бы шли на сборку без проверок и контроля качества? Вы бы ездили на таком авто? А мы (программисты) так делаем сплошь и рядом. У нас есть средство контроля качества - юнит тестирования. Но пользуемся мы им очень редко, особенно для встраиваемых приложений.
  • #19: Чем это плохо? У моего отца одно время был автомобиль Москвич. И он просто вынужден был проводить достаточное количество своего свободного времени за его ремонтом. Не потому что он это очень любил. А потому что контроль качества на производстве мог бы быть более строгим. Операционные системы на Ваших компьютерах обновляются каждый день не потому что Вас хотят бесплатно удивить новыми ощущениями от их использования и подарить вам незабываемый опыт. А потому что... На слайде моя субъективная оценка затрат на разработку ПО с одним и тем же функционалом при юнит тестировании перед интеграцией, после интеграции, и вообще без юнит тестирования.
  • #20: Чтобы немного снизить затраты на переделку и поддержку я предлагаю Вам использовать следующие паттерны интеграции юнитов. Это будет полезно даже если вы не пишете юнит тесты. Ну а если пишете - то Вы сами со временем придете к таким вариантам интеграции юнитов. По Другому просто не получится писать тесты. Если продолжать аналогию с механикой - то мы переходим к рассмотрению возможных соединений деталей. Оно может быть сварным, резьбовым, шпоночным, шлицевым .... ну я думаю нет смысла продолжать.
  • #21: Еще раз остановимся на детали или юните. В программировании на языке Си не стоит долго искать что же является юнитом - эта единица трансляции языка. То есть си-файл со включенными в него заголовочными файлами. И для того чтобы у юнит был независимой деталью нашей конструкции этот заголовочный файл должен быть один. Я немного путанно подвожу Вас к мысли, что юни имеет интерфейс - в хедере и реализацию в си-файле. У кубика Лего тоже есть интерфейс в виде верхних восьми возвышений и реализация в виде тела кирпичика. Чем не минимальная единица больших конструкций?
  • #22: Если положить два кубика Лего один на один - получится нечто похожее на букву I Так можно реализовать слои абстракции, может быть сетевую модель OSI
  • #23: Добавим еще один кубик и соединим со сдвигом - получим букву А Один подписчик - два сервиса
  • #24: Отзеркалим соединение - будет буква Y Два подписчика на один сервис.
  • #25: И пару рекомендаций как сохранить свои интерфейсы в чистоте если Вам нужны одни и те же типы данных или макросы в двух независимых юнитах. Эта история уже больше про организацию заголовочных файлов.