pdv embarcado na construção de um recompensas do qt … · bdd python. bdd cenário de testes....

55
Desafios e recompensas do Qt na construção de um PDV embarcado Talysson de Castro [email protected] Fábio De Carli [email protected]

Upload: others

Post on 14-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Desafios e recompensas do Qt na construção de um PDV embarcado

Talysson de [email protected]

Fábio De [email protected]

Page 2: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Fábio De CarliArquiteto de Soluções na CISS

Professor

[email protected] [email protected]

Page 3: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Talysson de CastroLíder Técnico na CISS

Professor

@talyssoncastro @talyssondcastro [email protected]

Page 4: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Customização de S.O. para atender as necessidades

S.O.Implementação de

testes automatizados utilizado Squish

Automação de TestesImplementação de

testes unitários para cobertura de código

Testes UnitárioConfiguração de cross compiler para geração

de build

Cross Compile

Utilização e customização de

padrões de projeto

PadrõesDefinição dos módulos

do projeto

ArquiteturaTempo dedicado para testes da tecnologia e

regras de negócio

POC/POT

Definição e customização do

hardware

Hardware

Formação de equipe

EquipeQuais as dores para

resolver

Problema

Agenda

Page 5: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 6: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Cenário atual

Page 7: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Interior checkout

convencional

Page 8: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

O Problema

● S.O. requer licença● Dificuldade no controle de hardware● Diversas funções no mesmo computador● Softwares instalados sem necessidade● Espaço físico no checkout● Constantes problemas causados pela queda

de energia

Page 9: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

A nossa proposta

Desenvolvimento de uma nova solução de hardware e software:● Independente de sistema operacional● Sustentável● Embarcado *● Redução de espaço físico

Page 10: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Qual tecnologia

usar?

Page 11: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

POC/POT - 2016

● 15 dias● Qt Framework 5.6● Banco de dados local (offline)● Compilação direto no Raspberry○ ~ 20 Minutos

● Compilação “CDK” no Raspberry○ ~ 40 minutos

Page 12: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Equipe

● Escolha de colaboradores● Previsão da primeira versão○ Junho 2017

● Cursos online● Curva de aprendizado

Page 13: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Arquitetura

● MVC● Qt Framework 5.7● Banco de dados local● Framework interno da empresa (odin)● Componentes customizados● Integração com periféricos● Integração com legado

Page 14: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Arquitetura

Page 15: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Hardware

Page 16: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Hardware

● Raspberry Pi 3● Projeto de expansão○ 8 USB○ Serial○ VGA○ Push Button○ RTC - Real Time Clock

● Viagem até a China

Page 17: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Software

Page 18: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Cálculo de diversas promoções e preços

Promoções

Efetivar venda online e offline

Venda

Comunicação com Pinpad para efetivar transação TEF

Periféricos

Integração com servidor da SEFAZ e dispositivo SAT

NFC-e/SAT

Funcionalidades

Page 19: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Integração Legado

Page 20: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Integração ERP

CISSLive

Page 21: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Nosso ranking

Page 22: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

● DeviceWatcher (libusb)● QSerialPort● Redução de dependências (.so)● QMutex e QMutexLocker

3

Dispositivos USB e serial

Page 23: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Agilidade no desenvolvimento

● Qt Creator● Custom wizard● Uncrustify● Signals/Slot● Template de impressão 2

Page 24: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

● Necessidade de interface gráfica, robusta e leve.

● Drag and Drop● Componentes customizados● QStyleSheet ● EGLFS 1

UI

Page 25: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 26: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 27: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 28: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 29: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 30: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

QML

Page 31: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Desenvolvimento

Page 32: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Design Patterns

● Observer○ “Signal e Slots”

● Builder● Adapter● Factory

Page 33: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Cross compiler

● Compilação para ARM utilizando PC● Configuração no Jenkins

Page 34: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Sistema Operacional

● Raspbian Jessie● Customização○ Yocto○ SWUpdate/UpdateHub

Page 35: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 36: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. try {2. OdinQSqlDatabase::instance().getConnection()->transaction();3.4. model = vendaService.iniciarVenda( cliente );5. 6. itemVendaService.adicionar( item );7.8. OdinQSqlDatabase::instance().getConnection()->commit();9.10. } catch( ServiceException& se ) {11. OdinQSqlDatabase::instance().getConnection()->rollback();12. throw se;13. }

Controle de transação

Page 37: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 38: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. ODIN_QT_PROJECTS = regex thread-local resource repository constantes exception2.3. for ( PROJECT, ODIN_QT_PROJECTS ) {4.5. LIBS += -L$$ODIN_DIR/odin-qt-$${PROJECT}/main/$$DESTDIR -lodin-qt-$${PROJECT}6.7. INCLUDEPATH += $$ODIN_DIR/odin-qt-$${PROJECT}/main/include8.9. }

Dependências de projetos

Page 39: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

DANF

Page 40: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. <NEGRITO><AL_CENTRO><SE>#{{NOME_FANTASIA}}</SE></AL_CENTRO></NEGRITO>2. <NEGRITO><AL_CENTRO>#{{RAZAO}}</AL_CENTRO></NEGRITO>3. <NEGRITO><AL_CENTRO>CNPJ: #{{CNPJ}}</AL_CENTRO></NEGRITO>4. <NEGRITO><AL_CENTRO><SE> #{{INSCRICAO_ESTADUAL}} #{{TELEFONE}} </SE>

</AL_CENTRO></NEGRITO>5. <NEGRITO><AL_CENTRO>#{{ENDERECO}}</AL_CENTRO></NEGRITO>6. <PREENCHER>-</PREENCHER>

Template de impressão

Page 41: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

TecladoReduzido

Page 42: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. bool OdinWidgetCustom::eventFilter(QObject *obj, QEvent *event) {2.3. if (event->type() == QEvent::Type::KeyRelease) {4. QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);5. 6. if ( !keyEvent->isAutoRepeat() ) {7. emit keyReleaseSignal( keyEvent->key() );8. actionKeyMapped->checkKey( keyEvent->key() );9. }10.11. return true;12. }13.14. return QWidget::eventFilter( obj, event );15. }

Controle de teclas

Page 43: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 44: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. QXmlStreamReader reader( xml );2. 3. while ( !reader.atEnd() && !reader.hasError() ) {4. reader.readNext();5.6. if ( reader.isStartElement() && elementsToReturn.contains( reader.name().toString() ) ) {7. XMLElement element;8. QXmlStreamAttributes attributes = reader.attributes();9.10. for( int i = 0; i < attributes.length(); i++ ) {11. element.addAttribute( attributes.at( i ).name().toString(), attributes.at( i

).value().toString() );12. }13. }14. }

Comunicação com XML

Page 45: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML
Page 46: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

1. QList<SchemaVersionModel*> migrateList = flywayResource.loadFilesMigration();2.3. for ( SchemaVersionModel* schemaVersion : migrateList ) {4.5. if ( migrationPendente( schemaVersion->getScript() ) ) {6.7. QString sql = flywayResource.loadFileMigration( schemaVersion->getPathFile() );8.9. OdinQSqlDatabase::instance().getConnection()->transaction();10.11. flywayRepository->executeSchemaVersion( sql, schemaVersion );12.13. flywayRepository->inserirSchemaVersion( schemaVersion );14.15. OdinQSqlDatabase::instance().getConnection()->commit();

Controle de versão de BD

Page 47: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Testes

Page 48: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Testes Unitários

● QTest○ initTestCase, cleanupTestCase, init, cleanup

● +2000 casos de testes● QCompare● QVerify e QVerify2● QSignalSpy● Data driven (column, row, QFetch)

Page 49: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Automação de testes das interfaces

● Squish - Froglogic

● BDD● Python

Page 50: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

BDD

Cenário de Testes

Page 51: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Licenciamento

Page 52: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Smart POS1

Aplicativos construidos com Qt2

Componentes e UI com QML 3

Migração de aplicações para Qt4

Futuro

Self checkout5

Page 53: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

O Qt proporcionou uma velocidade incomparável na criação de UI1

Diversos recursos já implementados nas classes do Qt framework em relação ao C++2

Produto é um sucesso3

Disseminação do Qt para diversas soluções4

Conclusão

Page 54: PDV embarcado na construção de um recompensas do Qt … · BDD Python. BDD Cenário de Testes. Licenciamento. Smart POS 1 Aplicativos construidos com Qt 2 Componentes e UI com QML

Obrigado!perguntas?

Talysson de [email protected]

Fábio De [email protected]