Qualidade de Software
O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade: muitas regras, muitas linhas de código e desenvolvedores com ideias diferentes, mas que podem levar à mesma solução. Invisibilidade e intangibilidade: invisível para o usuário. O que se vê são as consequências da execução do software. Os desenvolvedores necessitam utilizar modelos para representar o sistema de software. Ex. UML Produção sob medida: Cada usuário é um cliente que usa o software a sua maneira, com ênfase em partes diferentes. Não se degasta com o uso: Em software os componentes lógicos são duráveis.
A ISO 9126, na versão brasileira NBR 13596, define qualidade de software como: A totalidade de características de um produto de software que lhe confere a capacidade de satisfazer necessidades explícitas e implícitas. Necessidades explícitas: fatores relativos à qualidade do processo de desenvolvimento do produto, percebidos somente pelas pessoas que trabalham no seu desenvolvimento. Necessidades implícitas: percebidas pelos desenvolvedores e pelos usuários. Conhecidas como qualidade em uso, devem permitir aos usuários efetividade, produtividade, segurança e satisfação em um contexto de uso especificado.
Segundo (Pezzé & Young, 2008), as qualidades de um produto de software podem ser divididas entre: Aquelas que afetam principalmente o desenvolvimento de software, tais como manutenibilidade, reusabilidade e rastreabilidade, embora suas consequências possam afetar ao cliente de forma indireta, aumentando o tempo entre a liberação de novas versões, por exemplo. São chamadas de propriedades internas; Visíveis pelos usuários do produto de software, tais como confiança, usabilidade e taxa de atendimento. São chamadas de propriedades externas;.
A qualidade de Software, envolve todo o ciclo de vida de Engenharia de Softwares, entretanto, é mais frequentemente associada a fase de Testes do ciclo de vida, porém estes estão longe de serem suficientes. A qualidade depende de cada parte do processo de software, não apenas do teste. Nenhuma quantidade de teste pode compensar a baixa qualidade causada por outras atividades do processo.
Uma grande ameaça à qualidade de software são as mudanças. De acordo com Weinberg (1997), na resolução de falhas, as maiores perdas podem vir de efeitos colaterais ou falhas introduzidas ao se resolver outras falhas. O processo de controle de mudanças contribui diretamente para a qualidade do software ao formalizar pedidos de mudança, avaliar a natureza da mudança e controlar o impacto da mudança. Pode ser utilizado a aplicação de modelos de gestão de serviços, tal como ITIL para o efetivo Gerenciamento de Mudanças.
Garantia de qualidade de software SQA (Software Quality Assurance) De acordo com (Côrtes & Chiossi, 2001), define -se como sendo um conjunto de atividades que assegura que todos os esforços serão feitos para garantir que os produtos de softwares tenham a qualidade desejada. Essas atividades devem: Minimizar o número de defeitos; Criar mecanismos para controlar o desenvolvimento e a manutenção de forma a preservar prazos e custo; Garantir que o produto possa ser usado no mercado; Melhorar a qualidade de versões futuras do produto ou de novos produtos A garantia de qualidade de software é uma atividade que é aplicada ao longo de todo o processo de engenharia de software, e abrange: Métodos e ferramentas de análise, projeto, codificação e teste; Revisões técnicas aplicadas durante cada fase de engenharia de software; Estratégia de testes de múltiplas fases; Controle da documentação de software e das mudanças feitas nela; Procedimento para garantir a adequação aos padrões de desenvolvimento de software;
Escolha de modelos e ferramentas para desenvolvimento e testes de software
UML (Unified Modeling Language) É uma linguagem de modelagem não proprietária de terceira geração. A UML não é uma metodologia de desenvolvimento, o que significa que ela não diz para você o que fazer primeiro e em seguida ou como projetar seu sistema, mas ela lhe auxilia a visualizar seu desenho e a comunicação entre objetos. Basicamente, a UML permite que desenvolvedores visualizem os produtos de seus trabalhos em diagramas padronizados. [UML] http://www.devmedia.com.br/uml-para-java/2711
LINGUAGEM ESTRUTURADA VS ORIENTADA A OBJETOS PARADIGMA DA LINGUAGEM ESTRUTURADA É um tipo de programação orientada para a ação, sendo que a unidade de programação é a função. grupos de ações que realizam alguma tarefa comum são reunidos em funções e as funções são agrupadas para formar programas. (DEITEL, PG.15) PARADIGMA DA LINGUAGEM ORIENTADA A OBJETOS A idéia da orientação a objetos é desenvolver programas baseados em objetos do mundo real. Para onde você olhar irá se deparar com objetos, sejam eles animados ou inanimados: pessoas, animais, carros, motos, etc. Os objetos possuem: Caracteristicas - tamanho, forma, cor, etc Comportamentos andar, falar, comer, etc. Na linguagem O.O a unidade de programação é a CLASSE a partir do qual os objetos são instanciados (criados)
Exemplo de código em C (Paradigma da Programação Estruturada) #include <sdtio.h> #include <conio.h> void main () { float NotaP1, NotaP2; float Media; } clrscr(); NotaDaP1 = 5.4; NotaDaP2 = 9.7; Media = (NotaP1 + NotaP2) / 2.0; printf("média Final : %f", Media); getch();
Exemplo de código em Java (Paradigma Orientação a Objetos) public class Carros { public static void main (String[] args) { Carros carro1 = new Carros( ); carro1.ligar( ); carro1.acelerar(50); } // atributos String cor; String modelo; double velocidade; int marcha; //construtor public Carros (String cores, int marchas) { this.cor=cores; this.marcha=marchas; this.modelo= Ferrari ; this.velocidade=0.0; } // métodos public void ligar () { System.out.println( Carro ligado ); } } public void acelerar(double valor) { this.velocidade+= valor; }
Linguagens orientadas a objetos facilitam a manutenção e documentação. Máquinas Virtuais Algumas linguagens, tais como Java, C#, entre outras, utilizam máquinas virtuais que conferem portabilidade as aplicações. Ex. Java Virtual Machine (JVM) Fonte: http://viralpatel.net/blogs/2008/12/java-virtual-machine-an-inside-story.htm A JVM, possui ainda coletor automático de lixo para liberar a memória não usada (Garbage Collector); Interpretação em tempo de execução (JIT)
IDE (Integrated Development Environment) Ambiente Integrado de Desenvolvimento, é uma aplicação que reúne características e ferramentas de apoio ao desenvolvimento de software. O objetivo é automatizar processos de codificação. Agiliza a construção de aplicações, gerando mais produtividade. Ex: Eclipse, NetBeans e Visual Studio
As características e ferramentas mais comuns encontradas nos IDEs são: Editor - edita o código-fonte do programa (linguagem suportada pela IDE); Modelagem auxilio na criação de classes, objetos, interfaces, projetos, pacotes, etc Depurador - auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa Geração de código auxilio na construção de software, ferramentas de ajuda, auto completar, imports automáticos. Distribuição - auxilia no processo de distribuição do software. Documentação geração de documentação em função do código construído Refatoração - melhoria constante do código-fonte, construção de código mais limpo e de melhor entendimento. Testes Automatizados - realiza testes no software de forma automatizada, auxiliando na análise do impacto das alterações no código-fonte.
Referências [NETBEANS] dispon[ivel em: http://netbeans.org/ [ECLIPSE] dispon[ivel em: http://www.eclipse.org/ [VISUAL STUDIO] http://www.microsoft.com/visualstudio/11/pt-br/products/visualstudio [UML] http://blogdosanalistas.wordpress.com/uml/ [Qualidade de Software] Professor Ivanir Costa. UNIP Interativa