Fatores que influenciam na longevidade de um Software

1,488 views

Published on

Fatores que influenciam na longevidade de um Software

Published in: Technology
2 Comments
8 Likes
Statistics
Notes
  • muito bom
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DESCUBRA COMO GANHAR DINHEIRO NA INTERNET!!!

    Você está prestes a mudar o rumo da sua vida financeira, conheça a chave para obter uma fonte de renda extra sem sair de casa, com um investimento mensal de R$ 25,00.
    Este investimento de R$ 25,00 terá um retorno muito rápido:
    Torne-se um Promotor Digital Ativo, você poderá obter ganhos semanais superiores a R$ 150,00 e ganhos mensais superiores a R$ 1.500,00.
    Além desses ganhos a empresa sempre realiza promoções para seus cadastrados (Promotores Digitais Ativos), poderem participar. Acesse e saiba mais!
    Não fique apenas na curiosidade...
    ... dê o primeiro passo, entre no site e saiba mais sobre a FR PROMOTORA:
    https://www.frpromotora.com/44943033
    Não perca esta oportunidade, seja um Promotor Digital Ativo e ganhe dinheiro no conforto do seu lar.
    Não perca mais tempo!!!
    UMA PERGUNTA PARA VOCÊ:
    Que outro empreendimento lhe dará a oportunidade de ganhos altos com um investimento de R$ 25,00?

    Aqui você ganha dinheiro tanto divulgando os serviços: https://www.frpromotora.com/servicos.php?id=44943033

    Quanto buscando mais cadastrados ( Promotores Digitais Ativos):
    https://www.frpromotora.com/44943033

    Saiba mais no site: https://www.frpromotora.com/44943033
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,488
On SlideShare
0
From Embeds
0
Number of Embeds
144
Actions
Shares
0
Downloads
0
Comments
2
Likes
8
Embeds 0
No embeds

No notes for slide

Fatores que influenciam na longevidade de um Software

  1. 1. Fatores que influenciam na longevidade de um Software Pablo Dall'Oglio @pablodalloglio
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 20. Adianti Solutions Ltda © Pablo Dall'Oglio Fatores que influenciam na longevidade de um Software #20 DDD ● Domain Driven Development;
  21. 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. 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. 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. 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. 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.
  26. 26. 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); ?>
  27. 27. 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);
  28. 28. 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]-->
  29. 29. 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(); } ... ?>
  30. 30. 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.
  31. 31. 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...
  32. 32. 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
  33. 33. 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.
  34. 34. 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.
  35. 35. 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); }
  36. 36. 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']); } ?>
  37. 37. 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() { //... } } ?>
  38. 38. 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.
  39. 39. 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
  40. 40. 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(); ?>
  41. 41. 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
  42. 42. 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!

×