26 e 27 de Agosto, 2014
Transamérica Expo Center, São Paulo/SP
C++ e Linux
Embarcado:
União perfeita
Vinicius Zein, Bruno Herrera – Fundação CERTI
Fundação CERTI - Direitos Reservados
Quem somos
• Vinicius Zein
• Coordenador da área de Sistemas
Embarcados, CCD, Fundação CERTI
• Bruno Herrera
• Gerente de Tecnologia do Centro de
Convergência Digital, Fundação CERTI
Fundação CERTI - Direitos Reservados
Quem somos
• Instituição de Pesquisa, Tecnologia e Inovação
• Criada em 1984 com a missão de desenvolver soluções
tecnológicas para produtos e processos
• Possui cerca de 500 colaboradores no grupo
• Privada, que reinveste o resultado em P&D
• Credenciada no MCTI e SUFRAMA, estando apta a
captar projetos de Lei de Informática, Lei do Bem e
Cooperação Internacional
• Mais de 500 empresas clientes no Brasil e exterior
• Crescimento de mais de 20% ao ano nos últimos 5 anos
• Reconhecimento e conquista de diversos prêmios,
como o Prêmio FINEP Nacional
Fundação CERTI - Direitos Reservados
Agenda
1. Linux Embarcado
2. C++
3. Ferramentas para
desenvolvimento e debugging
4. Frameworks de mock e testes
5. Test driven development
6. Conclusões
Fundação CERTI - Direitos Reservados
1 - Linux Embarcado
Fundação CERTI - Direitos Reservados
http://events.linuxfoundation.org/sites/events/files/slides/csimmonds-embedded-linux-timeline-2013.pdf
Fundação CERTI - Direitos Reservados
Sistemas embarcados hoje
• Centrais telefônicas
• Telefones IP e smartphones
• Televisores
• Set-top boxes
• Impressoras
• Sistemas de injeção eletrônica
• Cameras
• Android
Fundação CERTI - Direitos Reservados
Sistemas embarcados hoje
• Centrais telefônicas
• Telefones IP e smartph
• Televisores
• Set-top boxes
• Impressoras
• Sistemas de injeção eletrônica
• Cameras
• Android
Fundação CERTI - Direitos Reservados
Set-top box ISDB-Tb
Fundação CERTI - Direitos Reservados
2 – “cee plus plus"
Fundação CERTI - Direitos Reservados
C++
• Multi-paradigma
• Orientada a objetos
• Templates, inline functions
• Metaprogramação
• Performática e poderosa
• Ferramentas disponíveis
• Compatibilidade com C just in case
;)
Fundação CERTI - Direitos Reservados
C++
• STL, Boost, ACE
• Linguagem em constante evolução
– C++85 style "C with Classes”
– C++98
– C++03
– C++11
– C++14
– C++18?!?!?
Fundação CERTI - Direitos Reservados
C++?
• Don’t lower your level of abstraction
without good reason
• Low-level implies
– More code
– More bugs
– Higher maintenance costs
http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf
Fundação CERTI - Direitos Reservados
Linux Embarcado
+
C++
=
União Perfeita
Fundação CERTI - Direitos Reservados
2 - Ferramentas para
desenvolvimento e debugging
Fundação CERTI - Direitos Reservados
Build systems
• Buildroot
“Making Embedded Linux Easy
Buildroot is a simple, efficient and
easy-to-use tool to generate embedded
Linux systems through cross-
compilation.”
Fundação CERTI - Direitos Reservados
Build systems
• Yocto Project
“It's not an embedded Linux distribution
– it creates a custom one for you”
Fundação CERTI - Direitos Reservados
Build systems
• Autoconf
• Rake
• Boost.Build
• Qmake
• Scons
• CMake
Fundação CERTI - Direitos Reservados
IDEs
* Ferramenta para navegação e
edição de código
• Vim
• Emacs
• Sublime Text 2
• Eclipse CDT
• Netbeans
• SlickEdit
• QtCreator
• JetBrains AppCode
Fundação CERTI - Direitos Reservados
Debugging
Fundação CERTI - Direitos Reservados
Debugging
If debugging is the process of removing
bugs, then programming must be the
process of putting them in.
~Edsger Dijkstra
Fundação CERTI - Direitos Reservados
Debugging
• Logs
• Command Line Interface (CLI)
• gdb (post morten)
• gdb + gdbserver
• ddd
• Google BreakPad
** Para cada problema novo
encontrado, um (ou mais) testes
unitários. **
Fundação CERTI - Direitos Reservados
Debugging - GDB
• Após o crash
> gdb <program> -c <core_file>
• bt full -> backtrace
• print <variable>
• frame <frame_id>
• thread <thread_id>
Fundação CERTI - Direitos Reservados
Debugging - GDB
Fundação CERTI - Direitos Reservados
Debugging - GDB
Fundação CERTI - Direitos Reservados
Debugging - GDB
Fundação CERTI - Direitos Reservados
Debugging - Breakpad
Fonte: https://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad
Fundação CERTI - Direitos Reservados
Debugging - Breakpad
Fonte: https://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad
Fundação CERTI - Direitos Reservados
Integração contínua
Fundação CERTI - Direitos Reservados
Outras ferramentas
• Análise estática – coverity,
cppcheck
• Cobertura – cccc
• Valgrind, tcmalloc
Fundação CERTI - Direitos Reservados
Integração contínua
Fundação CERTI - Direitos Reservados
Cobertura de Codigo
Fundação CERTI - Direitos Reservados
Cobertura de Codigo
Fundação CERTI - Direitos Reservados
3 - Frameworks de mock e
testes para C++
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
• Boa documentação
• Multiplataforma
– Linux, Windows, Mac OS X
• Configuração rápida e fácil
• 1 execução -> múltiplas falhas
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
Fundação CERTI - Direitos Reservados
Testes unitários – gtest
Fundação CERTI - Direitos Reservados
gmock
• Mocking Framework do Google
para testes em C++
• Simulando comportamentos.
• Criação de emuladores
– Necessidade do target real
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
gmock
Fundação CERTI - Direitos Reservados
Google benchmark
• https://github.com/google/benchm
ark
• Suporte a benchmark de funções
Fundação CERTI - Direitos Reservados
Fundação CERTI - Direitos Reservados
RAII
• Resource Acquisition Is Initialization
Fundação CERTI - Direitos Reservados
4 - Test driven development
Fundação CERTI - Direitos Reservados
TDD - Test driven development
http://www.pathfindersolns.com/
Fundação CERTI - Direitos Reservados
5 – Conclusões
Fundação CERTI - Direitos Reservados
Conclusões
• Use ponteiro inteligentes
– std::shared_ptr, std::scoped_ptr,
std::unique_ptr
• RAII
• Mantenha padrões de Codificação
– http://www.chromium.org/developers/coding-style
– http://google-
styleguide.googlecode.com/svn/trunk/cppguide.xml
– http://clang.llvm.org/docs/ClangFormat.html
• Teste antes codifique depois (TDD)
• Prefira algoritmos (STL/Boost)
Fundação CERTI - Direitos Reservados
Perguntas?
Fundação CERTI - Direitos Reservados
Vinicius Zein
vtz@certi.org.br
Bruno Herrera
bmh@certi.org.br

c++-esc-brazil-presentation_v1.0

  • 1.
    26 e 27de Agosto, 2014 Transamérica Expo Center, São Paulo/SP C++ e Linux Embarcado: União perfeita Vinicius Zein, Bruno Herrera – Fundação CERTI
  • 2.
    Fundação CERTI -Direitos Reservados Quem somos • Vinicius Zein • Coordenador da área de Sistemas Embarcados, CCD, Fundação CERTI • Bruno Herrera • Gerente de Tecnologia do Centro de Convergência Digital, Fundação CERTI
  • 3.
    Fundação CERTI -Direitos Reservados Quem somos • Instituição de Pesquisa, Tecnologia e Inovação • Criada em 1984 com a missão de desenvolver soluções tecnológicas para produtos e processos • Possui cerca de 500 colaboradores no grupo • Privada, que reinveste o resultado em P&D • Credenciada no MCTI e SUFRAMA, estando apta a captar projetos de Lei de Informática, Lei do Bem e Cooperação Internacional • Mais de 500 empresas clientes no Brasil e exterior • Crescimento de mais de 20% ao ano nos últimos 5 anos • Reconhecimento e conquista de diversos prêmios, como o Prêmio FINEP Nacional
  • 4.
    Fundação CERTI -Direitos Reservados Agenda 1. Linux Embarcado 2. C++ 3. Ferramentas para desenvolvimento e debugging 4. Frameworks de mock e testes 5. Test driven development 6. Conclusões
  • 5.
    Fundação CERTI -Direitos Reservados 1 - Linux Embarcado
  • 6.
    Fundação CERTI -Direitos Reservados http://events.linuxfoundation.org/sites/events/files/slides/csimmonds-embedded-linux-timeline-2013.pdf
  • 7.
    Fundação CERTI -Direitos Reservados Sistemas embarcados hoje • Centrais telefônicas • Telefones IP e smartphones • Televisores • Set-top boxes • Impressoras • Sistemas de injeção eletrônica • Cameras • Android
  • 8.
    Fundação CERTI -Direitos Reservados Sistemas embarcados hoje • Centrais telefônicas • Telefones IP e smartph • Televisores • Set-top boxes • Impressoras • Sistemas de injeção eletrônica • Cameras • Android
  • 9.
    Fundação CERTI -Direitos Reservados Set-top box ISDB-Tb
  • 10.
    Fundação CERTI -Direitos Reservados 2 – “cee plus plus"
  • 11.
    Fundação CERTI -Direitos Reservados C++ • Multi-paradigma • Orientada a objetos • Templates, inline functions • Metaprogramação • Performática e poderosa • Ferramentas disponíveis • Compatibilidade com C just in case ;)
  • 12.
    Fundação CERTI -Direitos Reservados C++ • STL, Boost, ACE • Linguagem em constante evolução – C++85 style "C with Classes” – C++98 – C++03 – C++11 – C++14 – C++18?!?!?
  • 13.
    Fundação CERTI -Direitos Reservados C++? • Don’t lower your level of abstraction without good reason • Low-level implies – More code – More bugs – Higher maintenance costs http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf
  • 14.
    Fundação CERTI -Direitos Reservados Linux Embarcado + C++ = União Perfeita
  • 15.
    Fundação CERTI -Direitos Reservados 2 - Ferramentas para desenvolvimento e debugging
  • 16.
    Fundação CERTI -Direitos Reservados Build systems • Buildroot “Making Embedded Linux Easy Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross- compilation.”
  • 17.
    Fundação CERTI -Direitos Reservados Build systems • Yocto Project “It's not an embedded Linux distribution – it creates a custom one for you”
  • 18.
    Fundação CERTI -Direitos Reservados Build systems • Autoconf • Rake • Boost.Build • Qmake • Scons • CMake
  • 19.
    Fundação CERTI -Direitos Reservados IDEs * Ferramenta para navegação e edição de código • Vim • Emacs • Sublime Text 2 • Eclipse CDT • Netbeans • SlickEdit • QtCreator • JetBrains AppCode
  • 20.
    Fundação CERTI -Direitos Reservados Debugging
  • 21.
    Fundação CERTI -Direitos Reservados Debugging If debugging is the process of removing bugs, then programming must be the process of putting them in. ~Edsger Dijkstra
  • 22.
    Fundação CERTI -Direitos Reservados Debugging • Logs • Command Line Interface (CLI) • gdb (post morten) • gdb + gdbserver • ddd • Google BreakPad ** Para cada problema novo encontrado, um (ou mais) testes unitários. **
  • 23.
    Fundação CERTI -Direitos Reservados Debugging - GDB • Após o crash > gdb <program> -c <core_file> • bt full -> backtrace • print <variable> • frame <frame_id> • thread <thread_id>
  • 24.
    Fundação CERTI -Direitos Reservados Debugging - GDB
  • 25.
    Fundação CERTI -Direitos Reservados Debugging - GDB
  • 26.
    Fundação CERTI -Direitos Reservados Debugging - GDB
  • 27.
    Fundação CERTI -Direitos Reservados Debugging - Breakpad Fonte: https://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad
  • 28.
    Fundação CERTI -Direitos Reservados Debugging - Breakpad Fonte: https://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad
  • 29.
    Fundação CERTI -Direitos Reservados Integração contínua
  • 30.
    Fundação CERTI -Direitos Reservados Outras ferramentas • Análise estática – coverity, cppcheck • Cobertura – cccc • Valgrind, tcmalloc
  • 31.
    Fundação CERTI -Direitos Reservados Integração contínua
  • 32.
    Fundação CERTI -Direitos Reservados Cobertura de Codigo
  • 33.
    Fundação CERTI -Direitos Reservados Cobertura de Codigo
  • 34.
    Fundação CERTI -Direitos Reservados 3 - Frameworks de mock e testes para C++
  • 35.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest • Boa documentação • Multiplataforma – Linux, Windows, Mac OS X • Configuração rápida e fácil • 1 execução -> múltiplas falhas
  • 36.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest
  • 37.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest
  • 38.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest
  • 39.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest
  • 40.
    Fundação CERTI -Direitos Reservados Testes unitários – gtest
  • 41.
    Fundação CERTI -Direitos Reservados gmock • Mocking Framework do Google para testes em C++ • Simulando comportamentos. • Criação de emuladores – Necessidade do target real
  • 42.
    Fundação CERTI -Direitos Reservados gmock
  • 43.
    Fundação CERTI -Direitos Reservados gmock
  • 44.
    Fundação CERTI -Direitos Reservados gmock
  • 45.
    Fundação CERTI -Direitos Reservados gmock
  • 46.
    Fundação CERTI -Direitos Reservados gmock
  • 47.
    Fundação CERTI -Direitos Reservados gmock
  • 48.
    Fundação CERTI -Direitos Reservados Google benchmark • https://github.com/google/benchm ark • Suporte a benchmark de funções
  • 49.
    Fundação CERTI -Direitos Reservados
  • 50.
    Fundação CERTI -Direitos Reservados RAII • Resource Acquisition Is Initialization
  • 51.
    Fundação CERTI -Direitos Reservados 4 - Test driven development
  • 52.
    Fundação CERTI -Direitos Reservados TDD - Test driven development http://www.pathfindersolns.com/
  • 53.
    Fundação CERTI -Direitos Reservados 5 – Conclusões
  • 54.
    Fundação CERTI -Direitos Reservados Conclusões • Use ponteiro inteligentes – std::shared_ptr, std::scoped_ptr, std::unique_ptr • RAII • Mantenha padrões de Codificação – http://www.chromium.org/developers/coding-style – http://google- styleguide.googlecode.com/svn/trunk/cppguide.xml – http://clang.llvm.org/docs/ClangFormat.html • Teste antes codifique depois (TDD) • Prefira algoritmos (STL/Boost)
  • 55.
    Fundação CERTI -Direitos Reservados Perguntas?
  • 56.
    Fundação CERTI -Direitos Reservados Vinicius Zein vtz@certi.org.br Bruno Herrera bmh@certi.org.br