SlideShare a Scribd company logo
1 of 44
Fatores que influenciam na longevidade
de um Software
Pablo Dall'Oglio
@pablodalloglio
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #2
Minha timeline
●
Clipper (1994-1998): comercial, bibliotecas, funções;
●
Delphi (1998-1999): automação, componentes;
●
PHP (2000): SAGU (php+html+sql);
●
PHP-GTK(2001): PHP só com classes;
●
Agata Report (2001-2006);
●
Design Patterns (2004): Aprendizado na Unisinos;
●
PHP-GTK: Criando Aplicações Gráficas com PHP (2004);
●
PHP: Programando com Orientação a Objetos (2007);
●
Criando Relatórios com PHP (2011);
●
Adianti Framework para PHP (2012).
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #3
Qualidade
●
O que é ter qualidade?
– Um software feioso mas que atende bem o cliente é
um software de qualidade? E o contrário?
●
Qualidade envolve:
– Questões funcionais (orientadas pelo negócio);
– Questões não-funcionais (arquitetura, padrões);
●
Tá, mas e daí? O que eu tenho a ver com isso?
– O negócio demanda, a técnica responde;
– O código é reflexo de um modelo de negócios;
– Um modelo ruim, quebra com pequenas alterações;
●
Às vezes não há padrões para embelezar a gambi;
– Um modelo bom é mais resiliente e consegue absorver
a energia das modificações sem se romper;
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #4
Qualidade
Quando o modelo for ruim, aumentam as chances de demanda por
gambiarra em algum momento posterior à execução.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #5
Longevidade?
●
Longa duração de vida;
●
Que está relacionado à duração da vida;
●
Tempo que duram as espécies nas épocas geológicas;
●
Durabilidade ou resistência das coisas.
Um SW longevo demonstra
resistência, resiliência.
A longevidade é um
Indício de qualidade.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #6
Software longevo?
●
Software precisa ser longevo?
– Enquanto alguns dirão:
●
O novo sempre é melhor;
●
Novas tecnologias, pensamentos...
●
Faça de qualquer jeito, pois logo vai mudar tudo...
– Outros dirão:
●
Fazer frequentemente tudo do zero é caro;
●
Quanto mais tempo durar, maior o ROI;
●
Faça bem feito, para dar menos incomodação.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #7
Software longevo?
●
O que afeta a longevidade em Software?
– Aspectos originais (DNA):
●
Processo/Metodologia de software escolhidos;
●
Análise, projeto, desenvolvimento;
●
Boa arquitetura, modelo, patterns;
– Aspectos evolutivos (crescimento):
●
Novas features bem projetadas, refactoring;
●
Evoluir com segurança (unit tests).
Vou focar
aqui
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #8
Processo de software
●
A escolha do Processo de software muda tudo;
●
No início, tentava-se “imitar” a engenharia tradicional;
●
Na Engenharia tradicional, o que é projetado é construído;
●
Modelo Waterfall;
●
Sucumbiu por que:
– Requisitos mudam a todo instante;
– “Analistas” ficavam meses produzindo docs;
– Não consideravam limitações da arquitetura;
– Quando prontos já estavam desatualizados;
– Os developers acabavam refazendo do seu jeito.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #9
Processo de software
●
Aí vieram os métodos ágeis;
●
Dividido em ciclos;
●
Cada ciclo entrega uma parte do sw;
●
Cada ciclo exerce todas áreas de conhecimento;
●
Usa feedback e planejamento constantes.
Joinha, já entendi
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #10
Processo de software
●
Como alguns entenderam a metodologia?
●
“Working software over comprehensive documentation”
– Ahhh, não preciso mais documentar NADA;
– Modelar pra quê? Discutir requisitos pra quê?
– Oba, vamos direto ao código e terminar isso logo!
– Se o software funcionar, é a conta.
– Deixamos de perder tempo projetando!
– Vamos direto ao que importa.
●
“Responding to change over following a plan”
– Antecipar problemas para que?
– Não preciso mais daquele Gantt chato!
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #11
Oito ou oitenta
●
Essa é uma característica BEM brasileira;
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #12
Processo de software
●
Qual problema que isso gera?
– Começa a fazer sem a visão
do todo;
– As entregas são rápidas;
– Mas daria pra fazer melhor...
– O modelo de domínio acaba
ficando confuso;
– O bom design acaba ficando
em segundo plano;
– OO? DDD? Pra quê?
Brasil, o país da
arquitetura de puxadinho.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #13
O negócio
●
A visão do negócio vem sempre em primeiro lugar;
●
Onde começa o processo?
●
Onde termina? quais as fronteiras?
●
Qual é o seu negócio, para que você existe?
●
Pode envolver gestores, proprietários;
●
Ajuda a quebrar o todo em partes para guiar a análise;
●
Permite comparar o antes e o depois (AS IS / TO BE);
●
Sabemos que:
– É inviável definir os requisitos COMPLETAMENTE antes da
construção;
– Mas é necessário ter a compreensão do negócio.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #14
O negócio
BPMN
Com o uso de WS no processo A,
não precisaremos mais dessa
rotina de envio em lote.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #15
O negócio
●
Por que é importante?
– Sugere processos desnecessários (sempre foi desse jeito);
●
Nosso trabalho é gerar o relatório para eles;
●
Nosso trabalho é olhar o relatório enviado por eles.
– Visualizar processos redundantes (duplo check, confiança);
– Será que TUDO que o cliente quer é necessário?
●
O que a visão de negócio permite?
– Questionar: Por que isso é assim? Por que sempre foi...
– Unificação de processos, separação;
– Troca de papeis de usuários (é função dele fazer isso?).
●
Ferramentas:
– Bizagi, Bonita.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #16
O negócio
UML
Usados em filtros
de relatório,
bloqueio de
processos, etc.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #17
O negócio
●
Por que é importante?
●
Focar em um objeto;
– Qual o ciclo de vida de um aluno?
●
Definir seus estados;
– Cancelado é um estado de um título?
●
Agrupar sinônimos:
– Liquidado e Pago são a mesma coisa?
●
Criar um vocabulário:
– Minimiza problemas de comunicação futuros.
●
Quando surgir uma manutenção...
– Ahhh, vamos criar só mais uma flag.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #18
Projeto
●
Tenho uma IDE fera, estou pronto?
●
Vou usar a arquitetura MXMVPC, ouvi falar que é da hora;
●
Baixei aquele frame que todos estão usando, estou pronto?
●
É preciso apropriar-se da filosofia;
●
Isso é do M,V ou C? Entender bem onde se encaixa cada coisa;
●
A equipe deve saber em que classe colocar cada método;
●
E que nome dar às coisas.
O brasileiro vai mundo na onda.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #19
Go horse model
●
Para muitos, projeto = ER;
●
Para eles, projetar é pensar em tabelas;
●
Só pensam em queries dentro dos frameworks!
●
Abrem o Astah e só usam associações!
<?php
$connect = mysql_connect("localhost","root", "root");
if (!$connect) {
die(mysql_error());
}
mysql_select_db("apploymentdevs");
$results = mysql_query("SELECT id, name FROM person
WHERE category_id='{$cat_id}' AND
Gender = 'F'");
while($row = mysql_fetch_array($results)) {
echo $row['Name'] . "</br>";
}
$results = mysql_query("SELECT id, name FROM
Customer WHERE city_id = {$market_city}");
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #20
DDD
●
Domain Driven Development;
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #21
DDD
●
UML não é ER!
●
São relações entre objetos, não entre tabelas;
●
Pensar primeiro nas entidades e relações;
●
É um modelo com maior semântica (é um tipo de...);
●
Abstrair o Banco de Dados, que pode ser derivado;
●
No lugar de Primary key e Foreign Key, pensar em:
– Herança;
– Associação;
– Composição (relação todo parte exclusiva);
– Agregação (relação todo parte não exclusiva);
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #22
A partir do modelo...
<?php
/**
* Customer Active Record
* @author <your-name-here>
*/
class Customer extends TRecord
{
public function get_city()
public function addSkill(Skill $skill)
public function getSkills()
public function load($id)
public function store()
public function delete($id = NULL)
}
?>
XMI
SQL
PHP
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #23
Navegação no código
●
Relações tornam-se navegáveis;
●
Sem queries malucas por todos os lados!
<?php
// load customer
$obj = new Customer(5);
print $obj->city->name;
print $obj->category->name;
// percorre contatos
foreach ($obj->getContacts() as $contact)
{
$contact->value = '9'.$contact->value;
$contact->store();
print $contact->type . '-' . $contact->value;
}
foreach ($obj->getSkills() as $skill)
{
print $skill->name;
}
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #24
Navegação no código
●
A query é realizada de maneira transparente pelo método;
●
Quando muda, não precisa alterar N lugares;
<?php
$customer = new Customer(5); // load customer
$criteria = new TCriteria;
$criteria->add(new TFilter('date', '=', date('Y-m-d')));
$sales = $customer->getSales($criteria);
// percorre vendas
foreach ($sales as $sale)
{
$total += $sale->total;
print $sale->date;
print $sale->total;
foreach ($sale->items as $item)
{
print $item->product->name;
}
}
?>
Navegabilidade:
tem de ser tão fácil
quanto ler.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #25
Modelos mal definidos
●
Um modelo mal definido leva à problemas;
●
Novos recursos são necessários;
●
O modelo atual se mostra frágil;
●
A solução é criar tabelas e mais tabelas;
●
Arquitetura de puxadinho;
●
One table per ticket.
Fatores que influenciam na longevidade de um Software
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #27
Go Horse presentation
<?php
public class MinhaAplicacaoWebEmCodeMacaroni {
public function process($request)
{
$pagina = $request["pagina"];
if ($pagina == null) {
$pagina = "inicial";
}
if ($pagina == "inicial") {
print("<html>");
print("<li><a href="?pagina=inicial">Pagina Inicial</a></li>");
print("<h2>Pagina Inicial</h2>");
print("<p>Bem-vindo ao nosso Site!</p>");
print("</html>");
}
}
}
$page = new MinhaAplicacaoWebEmCodeMacaroni;
$page->process($_GET);
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #28
Componentes
<?php
class TestView extends TPage
{
private $form;
function __construct()
{
parent::__construct();
$notebook = new TNotebook(530, 160);
$this->form = new TForm;
$table = new TTable;
$this->form->add($table);
$notebook->appendPage('Automatic DBselection elements', $this->form);
$radio = new TDBRadioGroup('radio', 'samples', 'Category', 'id', 'name');
$check = new TDBCheckGroup('check', 'samples', 'Category', 'id', 'name');
$combo = new TDBCombo('combo', 'samples', 'Category', 'id', 'name');
$radio->setLayout('horizontal');
$check->setLayout('horizontal');
$combo->setSize(160);
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #29
Templates
app/resources/customer.html
<!--[main]-->
<table class="customform" style="border:1px solid #B7B7B7">
<tr>
<td colspan="2" class="formtitle">Customer data</div></td>
</tr>
<tr>
<td width="50%"><b>Name</b></td>
<td width="50%"><span class="formfield">{$name}</span></td>
</tr>
<tr>
<td><b>Address</b></td>
<td><span class="formfield">{$address}</span></td>
</tr>
<tr>
<td colspan="2" align="center">
<a generator="adianti" href="...">Click here to edit the customer</a>
</td>
</tr>
</table>
<!--[/main]-->
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #30
Templates
<?php
// load the styles
TPage::include_css('app/resources/styles.css');
// create the HTML Renderer
$this->html = new THtmlRenderer('app/resources/customer.html');
try
{
// look for customer 1
TTransaction::open('samples');
$customer = new Customer(1);
// define replacements for the main section
$replace = array();
$replace['code'] = $customer->id;
$replace['name'] = $customer->name;
$replace['address'] = $customer->address;
// replace the main section variables
$this->html->enableSection('main', $replace);
parent::add($this->html);
TTransaction::close();
}
...
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #31
Evolução
●
As bibliotecas evoluem constantemente;
●
Novas tecnologias surgem;
●
Nosso código não deve referenciar a biblioteca utilizada;
●
Devemos separar nosso código do código de terceiros;
●
Isso tudo, para facilitar o reuso e a evolução.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #32
Desenvolvimento
●
Muitos desenvolvedores integram bibliotecas assim:
Alto acoplamento: Até pode funcionar, mas...
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #33
●
O acoplamento é quanto
um módulo (classe,
método) conhece e
depende de outro;
●
O objetivo é criar modelos
com baixo acoplamento;
●
O alto acoplamento
diminui a reusabilidade de
objetos porque objetos
não podem ser usados
sozinhos.
Acoplamento
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #34
Acoplamento
●
É impossível criar um sistema com 0% de acoplamento.
●
Uma classe com BAIXO acoplamento:
– Não depende de muitas outras e facilita a manutenção;
– Evita que as modificações produzam efeitos colaterais;
●
Uma classe com ALTO acoplamento:
– É menos inteligível isoladamente e menos reutilizável;
– É mais sensível a mudanças nas classes da qual ela
depende.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #35
Acoplamento
●
Uma forma de diminuir o acoplamento é criando um
facade;
●
Oferece uma interface única para um conjunto de
interfaces de um subsistema.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #36
Facade
<?php
if ($paymenttype_id == 1) // PAGSEGURO
{
$paymentRequest = new PagSeguroPaymentRequest();
$item = new PagSeguroItem;
$item->setDescription( $product->description );
$item->setQuantity( $data->amount );
$item->setAmount( $price );
$paymentRequest->addItem($item);
$address = new PagSeguroAddress;
$address->setPostalCode( $customer->postal );
$address->setStreet( $customer->address );
$address->setCity( $customer->city );
$paymentRequest->setShippingAddress($address);
$sender = new PagSeguroSender;
$sender->setName( $customer->name );
$sender->setEmail( $customer->email );
$paymentRequest->setSender($sender);
}
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #37
Facade
<?php
else if ($paymenttype_id == 2) // PAYPAL
{
$total = ($product->price * $data->amount);
// dados para enviar para o paypal
$padata ='&CURRENCYCODE='.urlencode($ini['currency']).
'&PAYMENTACTION=Sale'.
'&ALLOWNOTE=1'.
'&PAYMENTREQUEST_0_AMT='.$total.
'&PAYMENTREQUEST_0_ITEMAMT='.$total.
'&L_PAYMENTREQUEST_0_QTY0='. $data->amount.
'&L_PAYMENTREQUEST_0_AMT0='.$product->price.
'&L_PAYMENTREQUEST_0_NAME0='.$product->description.
'&L_PAYMENTREQUEST_0_NUMBER0='.1.
'&AMT='.$total;
// obtém o token
$paypal= new PayPalFacade;
$httpresult = $paypal->PPHttpPost('SetExpressCheckout', $padata,
$ini['username'], $ini['password']);
}
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #38
Facade
<?php
class PaymentFacade
{
public function addItem($desc, $qtde, $preco)
{
//...
}
public function setCustomer($nome, $ender, $cidade)
{
//...
}
public function setPaymentType($type)
{
//...
}
public function process()
{
//...
}
}
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #39
Bridge
●
Separa uma abstração de sua implementação;
●
As duas podem variar de maneira independente;
●
Usa encapsulamento, agregação e herança para separar
responsabilidades.
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #40
Jeito tosco
●
Proliferação de níveis. Estrutura não-flexível;
●
Alto grau de acoplamento. O cliente especifica a classe;
●
Quantas novas classes para novo tipo de gráfico (gauge)?
Implementação
filha da
abstração
Fatores que influenciam na longevidade de um Software
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #42
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'app.reports/TPieChart.class.php';
// ...
$data['maria'] = array( 1, 2, 3, 4, 5, 6, 7);
$data['pedro'] = array(12, 3, 12, 4, 12, 4, 2);
$data['joao'] = array( 9, 8, 7, 6, 5, 4, 3);
$chart = new TBarChart(new TPChartDesigner);
$chart->setTitle('Título do gráfico', NULL, NULL);
$chart->setSize(500, 300);
$chart->setXLabels(array('a', 'b', 'c', 'd', 'e', 'f', 'g'));
$chart->setYLabel('label do eixo Y');
$chart->setOutputPath('tmp/teste.png');
$chart->addData('maria', $data['maria']);
$chart->addData('pedro', $data['pedro']);
$chart->addData('joao', $data['joao']);
$chart->generate();
?>
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #43
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'app.reports/TPieChart.class.php';
// ...
// cria um gráfico de pizza usando a JPGraph
$chart = new TPieChart(new TJPGraphDesigner);
$chart->setTitle('Título do gráfico', NULL, NULL);
$chart->setSize(500, 300);
$chart->setOutputPath('tmp/teste2.png');
$chart->addData('maria', 40);
$chart->addData('pedro', 30);
$chart->addData('joao', 30);
$chart->generate();
?>
Com isso,
Conseguimos
evoluir melhor
Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #44
Obrigado
●
Relatórios:
– www.adianti.com.br/bkrpt
●
Adianti Studio:
– www.adianti.com.br/studio
●
Adianti Framework:
– www.adianti.com.br/framework
●
Contato:
– www.dalloglio.net
– @pablodalloglio
– fb.com/pablodalloglio
●
Não esquecer de falar do Sorteio!

More Related Content

What's hot

Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraRafael Chaves
 
Metodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos ÁgilMetodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos ÁgilPablo Marquesi
 
Project model-canvas-apresentacao
Project model-canvas-apresentacaoProject model-canvas-apresentacao
Project model-canvas-apresentacaoleopaiva217101
 
Workshop Gestão de projetos: Da teoria à pratica
Workshop Gestão de projetos: Da teoria à praticaWorkshop Gestão de projetos: Da teoria à pratica
Workshop Gestão de projetos: Da teoria à praticaEli Rodrigues
 
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoCada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoMagno Santana Silva
 
Apresentação TDC - Análise de Negócios
Apresentação TDC - Análise de NegóciosApresentação TDC - Análise de Negócios
Apresentação TDC - Análise de NegóciosJefferson Kobs
 
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...Ernani Marques, MBA, PRINCE2, PgMP/PMP, CBAP
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Cristiano Schwening
 
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...Allan Ferreira
 
Aprendizados de um Agile Coach - Agile Trends
Aprendizados de um Agile Coach - Agile TrendsAprendizados de um Agile Coach - Agile Trends
Aprendizados de um Agile Coach - Agile TrendsAlexandre Rech
 
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)Alessandro Almeida
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
[slides] Empreendedorismo (2015: 2º semestre)
[slides] Empreendedorismo (2015: 2º semestre)[slides] Empreendedorismo (2015: 2º semestre)
[slides] Empreendedorismo (2015: 2º semestre)Alessandro Almeida
 
Novidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOKNovidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOKRildo (@rildosan) Santos
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
 

What's hot (20)

Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestra
 
Linear Engineering
Linear EngineeringLinear Engineering
Linear Engineering
 
Metodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos ÁgilMetodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos Ágil
 
Project model-canvas-apresentacao
Project model-canvas-apresentacaoProject model-canvas-apresentacao
Project model-canvas-apresentacao
 
Workshop Gestão de projetos: Da teoria à pratica
Workshop Gestão de projetos: Da teoria à praticaWorkshop Gestão de projetos: Da teoria à pratica
Workshop Gestão de projetos: Da teoria à pratica
 
Requisitos ageis para times sem tempo
Requisitos ageis para times sem tempoRequisitos ageis para times sem tempo
Requisitos ageis para times sem tempo
 
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoCada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
 
Apresentação TDC - Análise de Negócios
Apresentação TDC - Análise de NegóciosApresentação TDC - Análise de Negócios
Apresentação TDC - Análise de Negócios
 
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...
Gp experts - Uma visão da Abordagem Britanica de Gestão de Portfolio, Program...
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?
 
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...
[TDC-Floripa 2017] Utilizando BDD para análise de negócio e desenvolvimento d...
 
Agile segundo o PMI
Agile segundo o PMIAgile segundo o PMI
Agile segundo o PMI
 
Aprendizados de um Agile Coach - Agile Trends
Aprendizados de um Agile Coach - Agile TrendsAprendizados de um Agile Coach - Agile Trends
Aprendizados de um Agile Coach - Agile Trends
 
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)
[slides] Planejamento, Execução e Controle de Projetos (2015: 2º semestre)
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
[slides] Empreendedorismo (2015: 2º semestre)
[slides] Empreendedorismo (2015: 2º semestre)[slides] Empreendedorismo (2015: 2º semestre)
[slides] Empreendedorismo (2015: 2º semestre)
 
Novidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOKNovidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOK
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
Qualidade de código Android
Qualidade de código AndroidQualidade de código Android
Qualidade de código Android
 

Similar to Fatores que influenciam na longevidade de um Software

Uma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de ProjetosUma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de ProjetosGiovani Elísio Silva
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Softwareguest2f8cba
 
mama digitals #portugaise.pdf
mama digitals #portugaise.pdfmama digitals #portugaise.pdf
mama digitals #portugaise.pdfinstamir
 
Prototipagem de Software para Devs
Prototipagem de Software para DevsPrototipagem de Software para Devs
Prototipagem de Software para DevsMarcos Marcolin
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Daniel Carvalhinho
 
Scrum para Desenvolvimento Interno e Produtos de Software
Scrum para Desenvolvimento Interno e Produtos de SoftwareScrum para Desenvolvimento Interno e Produtos de Software
Scrum para Desenvolvimento Interno e Produtos de SoftwareRodrigo Yoshima
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareEmerson Henrique
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Prototipagem e MVP para startups
Prototipagem e MVP para startupsPrototipagem e MVP para startups
Prototipagem e MVP para startupsJennifer Payne
 
Palestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresaPalestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresaHenrique Nunes Bez Fontana
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento4Soft
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Marcio Miyamoto
 

Similar to Fatores que influenciam na longevidade de um Software (20)

Uma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de ProjetosUma abordagem às Metodologias Ágeis em Gerência de Projetos
Uma abordagem às Metodologias Ágeis em Gerência de Projetos
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Software
 
mama digitals #portugaise.pdf
mama digitals #portugaise.pdfmama digitals #portugaise.pdf
mama digitals #portugaise.pdf
 
Refactoring
RefactoringRefactoring
Refactoring
 
Prototipagem de Software para Devs
Prototipagem de Software para DevsPrototipagem de Software para Devs
Prototipagem de Software para Devs
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
 
Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020
 
O Mal do Produtismo
O Mal do ProdutismoO Mal do Produtismo
O Mal do Produtismo
 
Scrum para Desenvolvimento Interno e Produtos de Software
Scrum para Desenvolvimento Interno e Produtos de SoftwareScrum para Desenvolvimento Interno e Produtos de Software
Scrum para Desenvolvimento Interno e Produtos de Software
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Agilidade: Scrum e Xp
Agilidade: Scrum e XpAgilidade: Scrum e Xp
Agilidade: Scrum e Xp
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Prototipagem e MVP para startups
Prototipagem e MVP para startupsPrototipagem e MVP para startups
Prototipagem e MVP para startups
 
Palestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresaPalestra papel do desenvolvedor no sucesso da empresa
Palestra papel do desenvolvedor no sucesso da empresa
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento
 
Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 

More from Pablo Dall'Oglio

Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksDo Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksPablo Dall'Oglio
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPablo Dall'Oglio
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHPPablo Dall'Oglio
 
Experiencias de um desenvolvedor de software livre (2005)
Experiencias de um desenvolvedor de software livre (2005)Experiencias de um desenvolvedor de software livre (2005)
Experiencias de um desenvolvedor de software livre (2005)Pablo Dall'Oglio
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Pablo Dall'Oglio
 

More from Pablo Dall'Oglio (8)

Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworksDo Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
Do Clipper e Delphi ao Ruby e PHP: Antes e depois dos frameworks
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a Objetos
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHP
 
Experiencias de um desenvolvedor de software livre (2005)
Experiencias de um desenvolvedor de software livre (2005)Experiencias de um desenvolvedor de software livre (2005)
Experiencias de um desenvolvedor de software livre (2005)
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
 

Fatores que influenciam na longevidade de um Software

  • 1. Fatores que influenciam na longevidade de um Software Pablo Dall'Oglio @pablodalloglio
  • 2. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #2 Minha timeline ● Clipper (1994-1998): comercial, bibliotecas, funções; ● Delphi (1998-1999): automação, componentes; ● PHP (2000): SAGU (php+html+sql); ● PHP-GTK(2001): PHP só com classes; ● Agata Report (2001-2006); ● Design Patterns (2004): Aprendizado na Unisinos; ● PHP-GTK: Criando Aplicações Gráficas com PHP (2004); ● PHP: Programando com Orientação a Objetos (2007); ● Criando Relatórios com PHP (2011); ● Adianti Framework para PHP (2012).
  • 3. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #3 Qualidade ● O que é ter qualidade? – Um software feioso mas que atende bem o cliente é um software de qualidade? E o contrário? ● Qualidade envolve: – Questões funcionais (orientadas pelo negócio); – Questões não-funcionais (arquitetura, padrões); ● Tá, mas e daí? O que eu tenho a ver com isso? – O negócio demanda, a técnica responde; – O código é reflexo de um modelo de negócios; – Um modelo ruim, quebra com pequenas alterações; ● Às vezes não há padrões para embelezar a gambi; – Um modelo bom é mais resiliente e consegue absorver a energia das modificações sem se romper;
  • 4. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #4 Qualidade Quando o modelo for ruim, aumentam as chances de demanda por gambiarra em algum momento posterior à execução.
  • 5. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #5 Longevidade? ● Longa duração de vida; ● Que está relacionado à duração da vida; ● Tempo que duram as espécies nas épocas geológicas; ● Durabilidade ou resistência das coisas. Um SW longevo demonstra resistência, resiliência. A longevidade é um Indício de qualidade.
  • 6. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #6 Software longevo? ● Software precisa ser longevo? – Enquanto alguns dirão: ● O novo sempre é melhor; ● Novas tecnologias, pensamentos... ● Faça de qualquer jeito, pois logo vai mudar tudo... – Outros dirão: ● Fazer frequentemente tudo do zero é caro; ● Quanto mais tempo durar, maior o ROI; ● Faça bem feito, para dar menos incomodação.
  • 7. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #7 Software longevo? ● O que afeta a longevidade em Software? – Aspectos originais (DNA): ● Processo/Metodologia de software escolhidos; ● Análise, projeto, desenvolvimento; ● Boa arquitetura, modelo, patterns; – Aspectos evolutivos (crescimento): ● Novas features bem projetadas, refactoring; ● Evoluir com segurança (unit tests). Vou focar aqui
  • 8. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #8 Processo de software ● A escolha do Processo de software muda tudo; ● No início, tentava-se “imitar” a engenharia tradicional; ● Na Engenharia tradicional, o que é projetado é construído; ● Modelo Waterfall; ● Sucumbiu por que: – Requisitos mudam a todo instante; – “Analistas” ficavam meses produzindo docs; – Não consideravam limitações da arquitetura; – Quando prontos já estavam desatualizados; – Os developers acabavam refazendo do seu jeito.
  • 9. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #9 Processo de software ● Aí vieram os métodos ágeis; ● Dividido em ciclos; ● Cada ciclo entrega uma parte do sw; ● Cada ciclo exerce todas áreas de conhecimento; ● Usa feedback e planejamento constantes. Joinha, já entendi
  • 10. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #10 Processo de software ● Como alguns entenderam a metodologia? ● “Working software over comprehensive documentation” – Ahhh, não preciso mais documentar NADA; – Modelar pra quê? Discutir requisitos pra quê? – Oba, vamos direto ao código e terminar isso logo! – Se o software funcionar, é a conta. – Deixamos de perder tempo projetando! – Vamos direto ao que importa. ● “Responding to change over following a plan” – Antecipar problemas para que? – Não preciso mais daquele Gantt chato!
  • 11. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #11 Oito ou oitenta ● Essa é uma característica BEM brasileira;
  • 12. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #12 Processo de software ● Qual problema que isso gera? – Começa a fazer sem a visão do todo; – As entregas são rápidas; – Mas daria pra fazer melhor... – O modelo de domínio acaba ficando confuso; – O bom design acaba ficando em segundo plano; – OO? DDD? Pra quê? Brasil, o país da arquitetura de puxadinho.
  • 13. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #13 O negócio ● A visão do negócio vem sempre em primeiro lugar; ● Onde começa o processo? ● Onde termina? quais as fronteiras? ● Qual é o seu negócio, para que você existe? ● Pode envolver gestores, proprietários; ● Ajuda a quebrar o todo em partes para guiar a análise; ● Permite comparar o antes e o depois (AS IS / TO BE); ● Sabemos que: – É inviável definir os requisitos COMPLETAMENTE antes da construção; – Mas é necessário ter a compreensão do negócio.
  • 14. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #14 O negócio BPMN Com o uso de WS no processo A, não precisaremos mais dessa rotina de envio em lote.
  • 15. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #15 O negócio ● Por que é importante? – Sugere processos desnecessários (sempre foi desse jeito); ● Nosso trabalho é gerar o relatório para eles; ● Nosso trabalho é olhar o relatório enviado por eles. – Visualizar processos redundantes (duplo check, confiança); – Será que TUDO que o cliente quer é necessário? ● O que a visão de negócio permite? – Questionar: Por que isso é assim? Por que sempre foi... – Unificação de processos, separação; – Troca de papeis de usuários (é função dele fazer isso?). ● Ferramentas: – Bizagi, Bonita.
  • 16. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #16 O negócio UML Usados em filtros de relatório, bloqueio de processos, etc.
  • 17. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #17 O negócio ● Por que é importante? ● Focar em um objeto; – Qual o ciclo de vida de um aluno? ● Definir seus estados; – Cancelado é um estado de um título? ● Agrupar sinônimos: – Liquidado e Pago são a mesma coisa? ● Criar um vocabulário: – Minimiza problemas de comunicação futuros. ● Quando surgir uma manutenção... – Ahhh, vamos criar só mais uma flag.
  • 18. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #18 Projeto ● Tenho uma IDE fera, estou pronto? ● Vou usar a arquitetura MXMVPC, ouvi falar que é da hora; ● Baixei aquele frame que todos estão usando, estou pronto? ● É preciso apropriar-se da filosofia; ● Isso é do M,V ou C? Entender bem onde se encaixa cada coisa; ● A equipe deve saber em que classe colocar cada método; ● E que nome dar às coisas. O brasileiro vai mundo na onda.
  • 19. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #19 Go horse model ● Para muitos, projeto = ER; ● Para eles, projetar é pensar em tabelas; ● Só pensam em queries dentro dos frameworks! ● Abrem o Astah e só usam associações! <?php $connect = mysql_connect("localhost","root", "root"); if (!$connect) { die(mysql_error()); } mysql_select_db("apploymentdevs"); $results = mysql_query("SELECT id, name FROM person WHERE category_id='{$cat_id}' AND Gender = 'F'"); while($row = mysql_fetch_array($results)) { echo $row['Name'] . "</br>"; } $results = mysql_query("SELECT id, name FROM Customer WHERE city_id = {$market_city}"); ?>
  • 20. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #20 DDD ● Domain Driven Development;
  • 21. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #21 DDD ● UML não é ER! ● São relações entre objetos, não entre tabelas; ● Pensar primeiro nas entidades e relações; ● É um modelo com maior semântica (é um tipo de...); ● Abstrair o Banco de Dados, que pode ser derivado; ● No lugar de Primary key e Foreign Key, pensar em: – Herança; – Associação; – Composição (relação todo parte exclusiva); – Agregação (relação todo parte não exclusiva);
  • 22. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #22 A partir do modelo... <?php /** * Customer Active Record * @author <your-name-here> */ class Customer extends TRecord { public function get_city() public function addSkill(Skill $skill) public function getSkills() public function load($id) public function store() public function delete($id = NULL) } ?> XMI SQL PHP
  • 23. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #23 Navegação no código ● Relações tornam-se navegáveis; ● Sem queries malucas por todos os lados! <?php // load customer $obj = new Customer(5); print $obj->city->name; print $obj->category->name; // percorre contatos foreach ($obj->getContacts() as $contact) { $contact->value = '9'.$contact->value; $contact->store(); print $contact->type . '-' . $contact->value; } foreach ($obj->getSkills() as $skill) { print $skill->name; }
  • 24. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #24 Navegação no código ● A query é realizada de maneira transparente pelo método; ● Quando muda, não precisa alterar N lugares; <?php $customer = new Customer(5); // load customer $criteria = new TCriteria; $criteria->add(new TFilter('date', '=', date('Y-m-d'))); $sales = $customer->getSales($criteria); // percorre vendas foreach ($sales as $sale) { $total += $sale->total; print $sale->date; print $sale->total; foreach ($sale->items as $item) { print $item->product->name; } } ?> Navegabilidade: tem de ser tão fácil quanto ler.
  • 25. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #25 Modelos mal definidos ● Um modelo mal definido leva à problemas; ● Novos recursos são necessários; ● O modelo atual se mostra frágil; ● A solução é criar tabelas e mais tabelas; ● Arquitetura de puxadinho; ● One table per ticket.
  • 27. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #27 Go Horse presentation <?php public class MinhaAplicacaoWebEmCodeMacaroni { public function process($request) { $pagina = $request["pagina"]; if ($pagina == null) { $pagina = "inicial"; } if ($pagina == "inicial") { print("<html>"); print("<li><a href="?pagina=inicial">Pagina Inicial</a></li>"); print("<h2>Pagina Inicial</h2>"); print("<p>Bem-vindo ao nosso Site!</p>"); print("</html>"); } } } $page = new MinhaAplicacaoWebEmCodeMacaroni; $page->process($_GET); ?>
  • 28. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #28 Componentes <?php class TestView extends TPage { private $form; function __construct() { parent::__construct(); $notebook = new TNotebook(530, 160); $this->form = new TForm; $table = new TTable; $this->form->add($table); $notebook->appendPage('Automatic DBselection elements', $this->form); $radio = new TDBRadioGroup('radio', 'samples', 'Category', 'id', 'name'); $check = new TDBCheckGroup('check', 'samples', 'Category', 'id', 'name'); $combo = new TDBCombo('combo', 'samples', 'Category', 'id', 'name'); $radio->setLayout('horizontal'); $check->setLayout('horizontal'); $combo->setSize(160);
  • 29. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #29 Templates app/resources/customer.html <!--[main]--> <table class="customform" style="border:1px solid #B7B7B7"> <tr> <td colspan="2" class="formtitle">Customer data</div></td> </tr> <tr> <td width="50%"><b>Name</b></td> <td width="50%"><span class="formfield">{$name}</span></td> </tr> <tr> <td><b>Address</b></td> <td><span class="formfield">{$address}</span></td> </tr> <tr> <td colspan="2" align="center"> <a generator="adianti" href="...">Click here to edit the customer</a> </td> </tr> </table> <!--[/main]-->
  • 30. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #30 Templates <?php // load the styles TPage::include_css('app/resources/styles.css'); // create the HTML Renderer $this->html = new THtmlRenderer('app/resources/customer.html'); try { // look for customer 1 TTransaction::open('samples'); $customer = new Customer(1); // define replacements for the main section $replace = array(); $replace['code'] = $customer->id; $replace['name'] = $customer->name; $replace['address'] = $customer->address; // replace the main section variables $this->html->enableSection('main', $replace); parent::add($this->html); TTransaction::close(); } ... ?>
  • 31. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #31 Evolução ● As bibliotecas evoluem constantemente; ● Novas tecnologias surgem; ● Nosso código não deve referenciar a biblioteca utilizada; ● Devemos separar nosso código do código de terceiros; ● Isso tudo, para facilitar o reuso e a evolução.
  • 32. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #32 Desenvolvimento ● Muitos desenvolvedores integram bibliotecas assim: Alto acoplamento: Até pode funcionar, mas...
  • 33. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #33 ● O acoplamento é quanto um módulo (classe, método) conhece e depende de outro; ● O objetivo é criar modelos com baixo acoplamento; ● O alto acoplamento diminui a reusabilidade de objetos porque objetos não podem ser usados sozinhos. Acoplamento
  • 34. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #34 Acoplamento ● É impossível criar um sistema com 0% de acoplamento. ● Uma classe com BAIXO acoplamento: – Não depende de muitas outras e facilita a manutenção; – Evita que as modificações produzam efeitos colaterais; ● Uma classe com ALTO acoplamento: – É menos inteligível isoladamente e menos reutilizável; – É mais sensível a mudanças nas classes da qual ela depende.
  • 35. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #35 Acoplamento ● Uma forma de diminuir o acoplamento é criando um facade; ● Oferece uma interface única para um conjunto de interfaces de um subsistema.
  • 36. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #36 Facade <?php if ($paymenttype_id == 1) // PAGSEGURO { $paymentRequest = new PagSeguroPaymentRequest(); $item = new PagSeguroItem; $item->setDescription( $product->description ); $item->setQuantity( $data->amount ); $item->setAmount( $price ); $paymentRequest->addItem($item); $address = new PagSeguroAddress; $address->setPostalCode( $customer->postal ); $address->setStreet( $customer->address ); $address->setCity( $customer->city ); $paymentRequest->setShippingAddress($address); $sender = new PagSeguroSender; $sender->setName( $customer->name ); $sender->setEmail( $customer->email ); $paymentRequest->setSender($sender); }
  • 37. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #37 Facade <?php else if ($paymenttype_id == 2) // PAYPAL { $total = ($product->price * $data->amount); // dados para enviar para o paypal $padata ='&CURRENCYCODE='.urlencode($ini['currency']). '&PAYMENTACTION=Sale'. '&ALLOWNOTE=1'. '&PAYMENTREQUEST_0_AMT='.$total. '&PAYMENTREQUEST_0_ITEMAMT='.$total. '&L_PAYMENTREQUEST_0_QTY0='. $data->amount. '&L_PAYMENTREQUEST_0_AMT0='.$product->price. '&L_PAYMENTREQUEST_0_NAME0='.$product->description. '&L_PAYMENTREQUEST_0_NUMBER0='.1. '&AMT='.$total; // obtém o token $paypal= new PayPalFacade; $httpresult = $paypal->PPHttpPost('SetExpressCheckout', $padata, $ini['username'], $ini['password']); } ?>
  • 38. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #38 Facade <?php class PaymentFacade { public function addItem($desc, $qtde, $preco) { //... } public function setCustomer($nome, $ender, $cidade) { //... } public function setPaymentType($type) { //... } public function process() { //... } } ?>
  • 39. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #39 Bridge ● Separa uma abstração de sua implementação; ● As duas podem variar de maneira independente; ● Usa encapsulamento, agregação e herança para separar responsabilidades.
  • 40. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #40 Jeito tosco ● Proliferação de níveis. Estrutura não-flexível; ● Alto grau de acoplamento. O cliente especifica a classe; ● Quantas novas classes para novo tipo de gráfico (gauge)? Implementação filha da abstração
  • 42. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #42 Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... $data['maria'] = array( 1, 2, 3, 4, 5, 6, 7); $data['pedro'] = array(12, 3, 12, 4, 12, 4, 2); $data['joao'] = array( 9, 8, 7, 6, 5, 4, 3); $chart = new TBarChart(new TPChartDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setXLabels(array('a', 'b', 'c', 'd', 'e', 'f', 'g')); $chart->setYLabel('label do eixo Y'); $chart->setOutputPath('tmp/teste.png'); $chart->addData('maria', $data['maria']); $chart->addData('pedro', $data['pedro']); $chart->addData('joao', $data['joao']); $chart->generate(); ?>
  • 43. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #43 Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... // cria um gráfico de pizza usando a JPGraph $chart = new TPieChart(new TJPGraphDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setOutputPath('tmp/teste2.png'); $chart->addData('maria', 40); $chart->addData('pedro', 30); $chart->addData('joao', 30); $chart->generate(); ?> Com isso, Conseguimos evoluir melhor
  • 44. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #44 Obrigado ● Relatórios: – www.adianti.com.br/bkrpt ● Adianti Studio: – www.adianti.com.br/studio ● Adianti Framework: – www.adianti.com.br/framework ● Contato: – www.dalloglio.net – @pablodalloglio – fb.com/pablodalloglio ● Não esquecer de falar do Sorteio!