Os principais problemas no desenvolvimento de sistemas de gestão são: 1) o alto custo para implementar novos requisitos de negócio, 2) arquiteturas se tornam ultrapassadas rapidamente, e 3) profissionais ficam defasados rapidamente. A solução é tratar negócio e tecnologia separadamente usando modelos executáveis que permitem a separação entre negócio e tecnologia.
2. Palestrante
● Formação
○ bacharel (2000) e mestre (2004) em Computação
(UFSC)
● Experiência
○ Perfil/Datasul CRM (2001-2002)
○ OTI/IBM Canada: Eclipse (2002-2005)
○ IBM Canada: Jazz/Team Concert (2005-2006)
○ Genologics: Desenv. Senior/Arquiteto (2008-2012)
● Hoje
○ Desenvolvendo Cloudfier (2012-)
○ Consultor em Engenharia de Software (2013-)
3. Desenvolvimento de aplicações de negócios é
extremamente ineficiente
A solução é tratar negócio e tecnologia
separadamente
Demonstração
Modelos executáveis como mecanismo para
separação entre negócio e tecnologia
Discussão / comentários / perguntas*
Visão geral
4. Quais os maiores problemas do
desenvolvimento de software de
gestão?
5. a) Custo de implementar um novo requisito de negócio,
mesmo que relativamente simples, ainda é muito alto
b) Arquitetura se torna ultrapassada rapidamente, difícil
mantê-la atualizada
c) Profissionais ficam defasados rapidamente, difícil manter-
se atualizado
d) Muito tempo e dinheiro gasto com tecnologia, quando o
que devia importar é o negócio
e) ...
Problemas em desenvolvimento de
software de gestão
7. Sistema de Contabilidade em Cobol
Sistema de Controle de Estoque em Delphi
Sistema de Gestão de Relacionamento com
Clientes (CRM) em Java
Sistema de Compras em .Net
Exemplos
8. Arquitetura (tecnologia)
●linguagens de programação (Java, C#, Ruby)
●interface com usuário (HTML, Swing, WinForms)
●integração (SOAP, REST, CORBA, JMS, sockets)
●persistência (SQL, No-SQL, prevalence)
●ambiente operacional (hardware, SO, rede etc)
●paralelismo, transações, distribuição, logging,
auditoria, síncrono vs. assíncrono, local vs. remoto, ativo
vs. passivo…
Definindo dois universos diferentes
9. Definindo dois universos diferentes
Conhecimento do negócio
● entendimento do domínio do problema (jurídico, obras, ...)
● necessidades dos clientes (o que é ou não importante)
● como atendê-las (solução conceitual)
10. Comparando dois universos diferentes
Arquitetura (tecnologia)
●custo de se construir solução concreta (o "meio")
●não é diferencial competitivo significativo (commodity)
●independente de domínio
●trivial, bem compreendida, padronizada, repetitiva
●estabilidade: volátil (um a dois anos)
●linguagem: bem servidas pelas linguagens técnicas
convencionais
11. Comparando dois universos diferentes
Conhecimento do negócio
●a essência do valor da solução (o "fim")
●diferencial competitivo
●independente de tecnologia
●estabilidade: depende do domínio
●linguagem: linguagens técnicas convencionais deixam a
desejar
12. Empresas de software de gestão
não são empresas de tecnologia,
são empresas especializadas em
gestão de negócios
(valor produzido vs. instrumento aplicado)
13. Implementando Sistemas de Gestão
(idealmente)
Conhecimento do negócio
(domínio do problema)
+
Tecnologia (arquitetura)
(Custo Total = Custo N + Custo A)
14. Implementando Sistemas de Gestão
(na prática)
Conhecimento do negócio
(domínio do problema)
X
Tecnologia (arquitetura)
(Custo Total = Custo N * Custo A)
15. Implementando Sistemas de Gestão
(na prática)
Cliente, Produto, Pedido,
Pagamento...
X
Classe de domínio, Repositório,
Serviço, tabela do BD,
representação API, ...
16. Implementando Sistemas de Gestão
(na prática)
Classe de domínio Produto
Classe repositório Produto
Classe serviço Produto
Tabela Produto
Representação XML Produto
API Produto
...
17. Implementando Sistemas de Gestão
(na prática)
Classe de domínio Cliente
Classe repositório Cliente
Classe serviço Cliente
Tabela Cliente
Representação XML Cliente
API Cliente
...
18. Implementando Sistemas de Gestão
(na prática)
Classe de domínio Pedido
Classe repositório Pedido
Classe serviço Pedido
Tabela Pedido
Representação XML Pedido
API Pedido
...
19. Implementando Sistemas de Gestão
(na prática)
Classe de domínio Pagamento
Classe repositório Pagamento
Classe serviço Pagamento
Tabela Pagamento
Representação XML Pagamento
API Pagamento
...
20. Implementando Sistemas de Gestão
(na prática)
20 entidades do negócio (N)
x
5 artefatos por entidade (A)
21. Implementando Sistemas de Gestão
(na prática)
50 entidades do negócio (N)
x
7 artefatos por entidade
22. Uma nova entidade precisa ser criada
Um novo atributo precisa ser adicionado
Um elemento da arquitetura precisa ser adicionado
Um elemento da arquitetura precisa ser modificado
Um elemento da arquitetura precisa ser removido
O que acontece quando...
49. BANCO DE DADOS
select * from "ifrs-cloudfier-examples-meeting"."meeting_User"
id | name | email | username
----+------------------+---------------------+---------------------
6 | David Green | dgreen@tasktop.com |
2 | Andrew Eisenberg | andrew@eclipse.org |
4 | Rafael Chaves | rafael@abstratt.com | rafael@abstratt.com
14 | Test User | test@test.com | test@test.com
(4 rows)
50. BANCO DE DADOS
d "ifrs-cloudfier-examples-meeting"."meeting_Meeting"
Table "ifrs-cloudfier-examples-meeting.meeting_Meeting"
Column | Type | Modifiers
-------------+-------------------+-----------
id | bigint | not null
title | character varying | not null
description | character varying | not null
date | date | not null
organizer | bigint | not null
Indexes:
"meeting_Meeting_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"organizer" FOREIGN KEY (organizer) REFERENCES "ifrs-cloudfier-
examples-meeting"."meeting_User"(id) DEFERRABLE INITIALLY DEFERRED
Referenced by:
TABLE ""ifrs-cloudfier-examples-meeting"."meeting_Participation""
CONSTRAINT "meetings" FOREIGN KEY (meetings) REFERENCES "ifrs-cloudfier-
examples-meeting"."meeting_Meeting"(id) ON DELETE CASCADE
56. Avaliação de solução conceitual via
interface c/ usuário prototípica
●comunicação entre stakeholders técnicos e do
negócio
●feedback pode ser obtido e incorporado
imediatamente
●iterações sobre a solução conceitual muito mas
eficiente sem envolver tecnologia
57. Testes de unidade e aceitação
definidos no nível conceitual
● codificação precisa dos requisitos
● validação automática da solução conceitual sem
requerer geração de código
58. Estratégias de implementação
definidas como mapeamentos
automáticos
●arquitetura “codificada” no gerador de código
●combinação automática de negócio c/ tecnologia
●reuso de decisões técnicas no produto ou entre
produtos
●agilidade na evolução da arquitetura
●próprias ou de terceiros