·

Ciência da Computação ·

Engenharia de Software

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

Introdução - Relevância da qualidade de SW - Disponibilidade de serviços importantes - Segurança dos processos - Impacto Prático - Competitividade das empresas - Atração de empresas novas p/ ecossistemas locais - Problemas no desenvolvimento de SW - Taxa de cancelamento de proj. de 13-31 - Desenvolvimento e custo muito acima da estimativa em 33-53% dos projetos analisados - +75% dos proj. não funcionam da maneira planejada - Dificuldade reuso e manutenção - Causas principais dos problemas com SW - Aumento da complexidade do sistema - Dificuldades na personalização e custos - Causas adicionais - Falta de educação apropriada - Má qualidade de linguagem, ferramentas, técnicos e processos - Problemas de organização - Conflitos - Valores éticos e de negócios - Qualidade do SW, foco em valores éticos e de negócios - Correção - Robustez - Extensibilidade - Reusabilidade - Compatibilidade - Retalibilidade - Fatores internos e externos - Performance - Estabilidade - Integridade, privacidade e segurança - Usabilidade - Flexibilidade - Tolerância a falhas - Não somente qualidade, mas produtividade também. - Custo de desenvolvimento reduzido - Empresa produtiva, eleva eficiência - "SW barata" - Tempo de desenvolvimento reduzido - Rápida sujeição/tentação às necessidades do mercado - "SW barato" não é somente resultado de menores custos de desenvolvimento, mas também da sua qualidade do que tem mais clientes. - Preço entre qualidade e produtividade - Investir muito em qualidade pode reduzir produtividade a curto prazo - Negligenciar qualidade pode impactar a produtividade até no curto prazo - Ética profissional não deve fazer parte da troca Requisitos - Inicialmente responder essas perguntas: - Quem usa o SW? - O que os S/I esperam do sistema? - Quais funcionalidades os S/I esperam do sistema? - Requisitos funcionais - Quais fatores de qualidade do SW requerem dessas funcionalidades? - Requisitos não-funcionais - Entendendo prioridades - Quais requisitos são mais importantes? - 4 atividades principais - Elicitação de requisitos - Especificação de requisitos - Elicitação de requisitos - Entregando S/I entrevistados - Obtendo o grau de fidelidade de GUI e storyboards - Não só aceitar entrega no ponto de linha de desenvolvimento - Fase inicial: entender as necessidades do S/I - O que se espera desse sistema? - Funcionalidades principais? - Fatores de qualidade serviços? - Refino - Fazer + perguntas p/ que cenários fiquem + detalhados e novos features auxiliares sejam identificados - Desenhar e discutir Lo-Fi GUI storyboards - Conformar expectativas - Especificação de requisitos - Documento de especificações - Feature (User story) - Feature: [nome] - As a, [kind of S/I] - I want to [do some task] - so that [I can achieve some goal] - Cenários de features - Scenarios: - Given - When - Then - Fazer em cenários de execução concreto - Viés de teste, outros cenários reação usados como testes - Especificando melhor o comportamento do sistema - Necessidade de complementar esses cenários - Teste Explorador ou pilha e outros aspectos de UI - Análise de GUI - sobre o que acontece quando títulos principais são usados. - CheckList e Cenarios 1) Deve refletir as necessidades do S/I 2) Demais deve correspondente, anteriormente, a semântica de cenários 3) Precise para manter os pequenos e pomos de cenários (User, And grid processo) 4) Não duplicar pontos de cenários 5) Não duplicar cenários 6) Não se faz uma ação incompleta 7) Parametriza os pontos de cenários 8) Especificar ações, uma não-ação nos ações próprias 9) Evitar base de linguagem 10) Uma ação da alta nível 11) Executa cenários independentemente de plataforma 12) Focar na situação de teste, direto ao ponto - [user cargo mensagem converte em mensagem qualquer page] - Requisitos gerais - não requisito geral - Resposta de questões: 1) Os passos não foram devidamente manifestados, enquanto nos exemplos não ficou usual ações de alto nível e foco que fogem do precondicional. Principal problema p/ apresentação: - Given modal tarefa como “func2” - And status na “página: "Disciplinado de semestre" - When aconteceu na tela única - And principal a meta de “Join com g" 2) O principal problema: que é usado muito ação de baixo nível (de abstração), isso fazcom da situação de teste e não onde antes se reteste. - Given estava na página inicial - When adicione o item “Zorro” com classificações - And a decisão “Apocalypse usa com "gn" - Then exija “Apocalypse passa antes do “Zorro na lista ordinária” d) São 4: escopo, tempo, qualidade e custo. Uma consequência é: quando se prioriza qualidade, o escopo ou chances do seu projeto esgotar o tempo e ter custo altíssimo é astronômica. Outra consequência é: ao priorizar tempo e qualidade o seu escopo terá que diminuir consideravelmente p/ poder respeitar código com qualidade alta desenvolvidos num tem- po curto. Testes - Testes de aceitação - Conectam diretamente requisitos (cenários) e testes. - Executa o sistema através de sua GUI - Cenários analisados na GUI com passo de testes baseado na GUI. - Passos executam o sistema em teste simulando ações do usuário no browser. * - Aplicação com uma máquina de estados - Grafo representando estados e possíveis transições - Comportamento esperado pelo usuário deve aparecer como caminhos nesse grafo, com- portamentos não desejados não deve aparecer. - Cenário deve verificar que caminhos desejados passam nas observações testando a app - Executando o sistema através do servidor - Cenário baseado em serviço não conectado a passos de testes baseado em serviço. - Passos executam o sistema em teste invocando serviços. - Testes de execução (unidade, integração, sistema) - Teste de serviço não tem ligação com cenários, uma descrição e it - Após ambos cenários e testes numa suíte: beforeAll, afterAll scenario.close/ server.require('/home/user') Código executa o sistema em teste invocando serviços. - Testes de classes (unidade, integração) - Testes de classes, sem ligação com cenários. - beforeAll - Código executa e instancia invocando métodos. - Princípios para todo teste: - Rode teste com diferentes argumentos e contexto de estado - Ex: cases limites de cobertura, foco em cobertura. - Ações positivas e negativas - Testes de regressão -> ver se nova commit quebrou alguma funcionalidade - Balancemento entre serviço, classe e aceitação - unidade e integração - Práticas para todo teste: - Parametrização - Cada teste pode rodar independentemente dos outros, assumindo uma nova instância de app - Permite estados entre passos - Antes de dar push (e verde git commit), tenha ctz que todos testes passam (regressão). - BDD: Behavior driven design - Implementação de testes é feita antes da implementação dos features. - Criação de interface quarta pouca funcionalidade está disponível - Checklist - Comportamento de teste deve corresponder estritamente a semântica do cenário. - Evite ambiguidades devido a passos (sentenças) mimicasas. - Não duplique código de teste -> Testes devem ser independentes de plataforma - Testes devem limpar o ambiente no fim (incluindo browsers) e de linguagem. Refatoração - Problemas de review - Problemas de modularidades - Débito Técnico - Manutenção custa caro - 1ª lei de Lehman - Pressupõe que versão de s/w fica num processo de mudança contínua ou seu tempo progressivo tornam- a menos funcional - O processo de mudança continua até que seja julgado nose efeitivo (em relação aos custos) substituir o sistema por uma versão avançada. - 2ª lei de Lehman - Enquanto um grande programa é continuamente mudado, sua complexidade, a qual reflete na deterioração da estrutura, aumenta a não ser que trabalho seja feito p/ manter ou redu- zir isso. - Como resolver os problemas e reduzir o débito? - Preservando o comportamento (execução de testes) - Refatoração: presenta comportamento, faz transposições 'source to source' que melhoram fatores de qualidade internos (como legibilidade, reusabilidade, etc) - Extract method refatoração - Para resolver problemas de review e modularidade - Quebra nos métodos com pedaços de código exterior p/ evitar repetição de várias linhas. - Reaju discute e elimina-á. - Refatoração automatizada - Esses ferramentas não dão nenhuma garantia de preservação de comportamento (testes deveriam ser aplicado tal qual como antes). - Extract class - Quando a classe está fazendo trabalho que deveria ser feito por 2. - Cria-se uma nova classe e transfere os campos relevantes e métodos da classe antiga p/ a - Mantemos os seguidores e necessitamos do que não entra abstrativo p/ exec saye - Como escolher os alvos de refatoração? - Mau cheiro baseado em valores, princípios e padrões. - Estratégia: 1) Identifica o problema,2)há algum padrão p/ problema neste contexto? 3) Nú- a solu. baseada em valores e princípios? 4)Aplique x fatorações apropriadas, 5)Testi - Questões 1)Teste de regressão é aquele que verifica se a alteração feita no código quebrou algo que antes da mudança estava funcionando. Benefício para a refatoração se baseia na validade da fase pre- servare o comportamento do código, o que o teste de regressão verifica. 2)Quando uma classe está fazendo um trabalho que deveria ser feito por 2, por exemplo uma classe que implementa um objeto fortemente resu muitas coo coordsinsacatípprlhos, especifica de tel- feie obcl. b) Cria-se uma nova classe e distribui os campos e métodos relevantes a cada classe (antiga e nova). A relação contínua p/a realização de serviços ou manutenção envolve vários fatores internos de qualidade, como reusabilidade e legibilidade, o que é extremamente benéfico, pois diminui o custo de transição e qual garante a maior que o desenvolvimento de novos. Algumas empresas não realizam esta atividade constantemente, pois observam os altos custos de dinheiro e de tempo fortes custos de essa atividade que ocorre facilitar a precisão e o resultado pontual p/o os objetos q a empresa pode desenvolver rapidamente no momento e se preocupar com a a parte pertinente da manutenção (que tende p/o mercado dominância de novos o sistema por longa tempo e porque a empresa trocassem a manutenção seré estou visto na apeia a empresa na preoupar com a relaçãoção. Quando um método está grande demais, compreende a legibilidade de código peo exam- e: a maneira razoável é pegar um pacote de código que pode ser agrupados separadamente e criar um novo código com esta parte, removendo o método de ferro. que ficar rõere= e que Esoe assuato nita aluno de relalaçao. Design, implementação e manutenção MDD (Model Driven Development) Design em todos níveis Deve ser guiado por valores, princípios e padrões (arquiteturais, de design e de implementação) Valores de design: - Comunicação: foco no leitor - Simplicity: eliminar excessos de complexidade - Flexibilidade: fácil de mudar, discerníveis separados - Reação: classes correspondem ao comportamento Princípios de design SOLID - Single Responsibility: uma classe deve ter uma única responsabilidade. Open Closed: um módulo deve estar aberto p/ extensão e fechado p/ modificação Liskov Substitution sub classes devem ser substituíveis pela sua classe base Introverce deruid vier classesol gedermade eu til dns non set erv de el eped de pelinatio discragiess de ed de ni inoe que unlde deve mat emtiação un roto e rou die del disras Dependon Armstrong: ei hes dearece rui es dercendo ve de entre rreted de e dardes de edés de eurmelina de e iadl de Recvos mnolaie no edido de en y ou de doroto de campo de C - Demeter: um método de classe C deve chamar somente métodos de si ou de classes Mais princípios de design - Dependency Injection: dependa de abstratos, não concretos - Inverion of controll cod resendvel cicama cod reserondel gestel abstracenes derem concretas - Interface coerestaten: creer interfaces especias p/el cle nes e imiter qui 1 geral. Princípios de pacotes: - Relaxe seus caminhos: a granularidade de reuse e a granularidade de desempenho - Coemons classes: classes que movem juntos, devem permanecer juntos. - Common reuse aggregate: classes que não serão reutilizáveis juntos não devem ser agrupa- dos juntas. Princípios de acoplamento: - Acycle dependencies: as dependências entre pacotes não devem formar ciclos - Stable dependencies: dependa na direção de estabilidade - Stable abstractions: pacotes estáveis devem ser pacotes abstratos Estratégia - Analise o padrão de mudança - Alguém produziu p/ este contexto? - Nova solução baseada em valores e princípios? - Alguém produziu ao princípio apropriado. Cheque se nova funcionalidade quebra testes existentes. Questões 1) O princípio “Dependency Injection” diz que se 2 classes dependem uma da outra, mas novos im- plementações podem mudar, seria bens para ambos dependerem de uma interface abstrata sepa- rada que mais reutilizável, separa bem. As configurações tamb dar flexibilidade; já que uma classe pode usar outra implementação, p/ex um heranca, em p/ basicpo coletar e trabalhar com DI, da 02, se orccpm in- clavant que, mundial conta flexívels tro. ateca.- a da vays o fici unio depenek a DI, sem inclvant remeníme: das no remix TFue codtanteco asarsoincer edar O padré de projeto “Adaptar tem oor objeto de fecer com que a clousan uson APIs alysem ienz infecturimendes poro connection urna API etfram elem outw canomi mantim les uma gouricomps emine. Diagrames de classes: 1 Client Adapter Request Tuner Required 3) Ao seguir o princípio ‘Acycle dependencies’ tomos uma alv calcular n một dependencia monte os poctols evita que um altera m soft enpato a delvo de ma{ peeldento urua aIlncraoe oo de exgtotomic aboteca o alto, o que faz umdo pne clases qui so- lan sns molts metlen, inquiner nachmes que veche ter em pococs altabitens não deves aependie uia da altrs-o isse menduar flores merulaus. 4) O padrão de projeto ‘Decorator quit duplicação de código, o ceual er orba que o alocaçõe te- ma que rex wppelet, pop clarero de outros on to calalhid em peua avancari cor latados sonro nã que rex pacionales, poia serdo de una crase deoto a que geneni conrucion constridontapen em umy edare plemiou o melado bosico que aiusa edun cena a toleo e pemmit o cimnopotoe canadores que propico o reuse do ciodepoes são dias naoos, eprovissade, un ove clone qui implement e.functionsliendles pao qual so? he tem causa peproe nente executora código de funcionalidades que el lado comop lecesidam e emualmente ente de feo na que saDiecramas de clorese@niotel son calolo nos fimel comunsoudem Companent otapedkan (opeation cilmscar rotnde non var ours Decorater Lasios oputletion Componebacen ComcoreDecortores, urto (nod CON cera gesdeises Ccereterleoras O deimplo Smtp tance kencaipoom ocr com uma nozepege deptoote, ple buddy cat orcerexns indlo- pois penoresto, epreara do works leo pora male atace m et pte crede, che pare pline ofe sultez fhne que cu o weiß pul propeo temple contus antcon do não havere muijo remookes pure mil meode seen. peu que toda el clarse exeex por pamets 8 se ownc O promulg primtue dumma iai anex certeza dei mas claerva param ne of denum randoge do tate infoenem Sto Epvcnond so uture pareposterins e lenceonate ips fd knowpevenotte idot modplye altowee documenten, do tegdo mettei daana da so more nem aete mareng, aetudes mane 6) ex oysprcance o Can eteen gets tuteenta aos tem alkete ectae cavoke le o sona eoteumo reunto de weto os brackpodounxnale odterne heekome no beere aur mungoit modemeterrosoptronez overr çenli T mod hneetoeoog sioeneawi wi tera meny moerennnment,nu agmo de ete no peciesiopio de mereropontam o Do do noc roemroa oslu Cmaabulary 0) O padrão de projeto Abstract Factory cria uma classe específica para criar objetos de forma at ouamdeadcnsta mt páefore bass dooßc do dissesthdoonokaepotet Gaeatem anl hast ass doentos dem at homeier metros doer oræra ben–caya defic per month mtaikememit docomo caturo bo boed... rettogtuira of cotoe: a linha strated etyt wy cl oherayeenwote de ety phor otes we org voltar sonte us région cée sidel stricter rendigi Peas fro cadado se note love nor rete do aimeu e operend uns compen got eu menny ntrartopetpadaemep of os outso permene noten weconett boqneobder ther C (dextapiote omeotes queles eqlone-ne ur quegotelar empero noma novas hepfon ou go piwnytary Leonte tevepetiner vo cuit Para el pad ler de wry cleze temdrke (ros conto own one (no cole do note er bellows praticup a etuqemeciente son tunes serrenti. 7) O padrão de projeto ‘Abstract Factory’ cria uma classe específica para criar objetos de forma ave nas simplicação menor colocacao e for leis um compositor com coiego muitas erie tendenial Pethala a classiye prejudicando a legibilidade). Diagrama de classes: Client AbstractFactory (iabstroct) (AbstractProdue) , AbstractProduct-factory (‘abstract) Icmptuefactury. ConcreteProduct apeitudi P pacte (reference 1 Produc Concretefactory Operation ‘0 eet tionsمین operation