Testes de Software
27/10/09
Recentemente estive envolvido em um projeto onde qualidade e tempo andavam em lados opostos, qualidade a equipe tem e muita, porém nos faltava tempo. “O projeto deve ser entregue dentro de 15 dias” e após muita luta e esforço de todos, conseguimos o prazo de 30 dias, dependendo do tamanho do projeto isso poderia ser um ótimo prazo, mas não para esse.
Um portal para fins educativos, com conceitos chaves como COMUNICAÇÃO, GESTÃO E CONTEÚDO.
Infelizmente não posso falar o nome da empresa. Você agora deve esta se perguntando certo mais o que isso tem haver com TESTES DE SOFTWARE, pois bem a equipe conseguiu terminar o projeto dentro do prazo, porém na apresentação para a direção da empresa, vários repito vários BUGS foram surgindo na apresentação.
O que ficou claro para todos foi a equipe esqueceu uma fase importante e talvez junto com a implementação a fase mais dispendiosa, mais cara como alguns acadêmicos definem, a fase de TESTES. Não que nenhum dos programadores não tenha testado o que faziam, sim eles faziam isso, porém não realizavam testes mais profundos no momento em que as funcionalidades eram adicionadas, isso gerou a equipe RETRABALHO, pois além de parar todo o desenvolvimento para realizar os testes, “Já que éramos uma equipe pequena que fazia uso de metodologia ágil”, nos tínhamos uma certeza “falhamos”, não pelo que foi feito e sim pelo o que não foi feito.
Mas Rafael por que contar toda essa historinha para falar de testes? Por que não ir direto ao ponto, onde você falaria das questões como testes servem para detectar defeitos e não acertos. Por que não falar das estatísticas que mostram que empresa que investem no estudos e aplicações de testes como algo primordial para o processo de desenvolvimento de software obtém ótimos resultados do ponto de vista de qualidade, satisfação do cliente, menos retrabalho.
Não falei, pois tudo isso já é falado aos quatro cantos do mundo. O que queria mostrar é que até mesmo uma equipe de alto nível pode falhar feio, se subestimar a engenharia de software, pois para muitos, o que Summerville, Pressman entre outros pregam não são aplicáveis ao mundo real de desenvolvimento de software.
Não é ter que aplicar tudo que esta na teoria para a prática e sim os conceitos ou boas práticas junto com suas necessidades é claro. No próximo POST “amanhã”, eu irei falar sobre uma outra forma de evitar problemas com bugs INSPEÇÃO DE SOFTWARE.
OO parte III – Atributos
08/10/09
Atributos, que também podem ser chamados de propriedades, são responsáveis por representar as características de uma classe, permitindo assim diferenciar um objeto do outro, por exemplo, o atributo cor da classe Carro irá identificar a cor de cada Objeto do tipo carro. Assim o carro1 poderá ter a cor vermelha e o carro2 poderá ser azul.
Atributos são representados na segunda divisão da classe, geralmente possuem dois campos, um destinado ao nome do atributo e outro destinado ao tipo de dado armazenado pelo atributo, por exemplo, integer, float, character ou boolean, sendo que esse ultimo não é obrigatório.
Assim, todo objeto possui atributo e esse atributos são responsáveis por dar características ao objeto, como por exemplo na classe Cliente do exemplo abaixo, da representação de uma classe com atributos.
OO parte II – Classe
07/10/09
A classe é uma estrutura estática e será útil para descrever os objetos, seus atributos (propriedades) e métodos (funcionalidades). A classe é um modelo ou template para criação destes objetos. Podem ser classes, qualquer entidade do negócio da sua aplicação (Usuário, Cliente, Filme).
No momento que modelamos um Cliente, por exemplo, são suas propriedades (nome, idade, sexo). E temos como métodos, funcionalidades desempenhadas pela classe. No caso de Cliente, poderiam ser métodos (Comprar(), Alugar(), Vender()).
Uma classe pode ser representada por um retângulo, dividido em 3 partes. A primeira armazena o nome da classe, a segunda lista os atributos da classe e a última lista os métodos que a classe possui. Podemos encontrar classes que possuam apenas uma dessas partes ou características.
A figura acima mostra o exemplo de uma classe, note que nesse caso só possui uma divisão, já que não é obrigatório representar a classe expandida.
*Nos Próximos posts estaremos falando mais das outras divisões.
Introdução a orientação a objetos
06/10/09
O que é OO?
Orientação a objetos (OO) é um paradigma de desenvolvimento de softwares. Que em vez de construir um sistema baseado num conjunto de procedimentos e variáveis, que nem sempre são agrupados de acordo com o contexto, na orientação a objetos utiliza-se uma ótica mais próxima do mundo real, onde se lida com objetos, onde muitas vezes são estruturas já conhecidas no dia-a-dia e as quais são mais bem-compreendidas.
Vantagens
- maior facilidade para reutilização de código e por conseqüência do projeto.
- possibilidade do desenvolvedor trabalhar em um nível mais elevado de abstração.
- utilização de um único padrão conceitual durante todo o processo de criação de software.
- maior adequação à arquitetura cliente/servidor.
- maior facilidade de comunicação com os usuários e com outros profissionais de informática.
- ciclo de vida mais longo para os sistemas.
- desenvolvimento acelerado de sistemas.
- possibilidade de se construir sistemas muito mais complexos, pela incorporação de funções prontas.
- menor custo para desenvolvimento e manutenção de sistemas.
Desvantagens
- complexidade no aprendizado para desenvolvedores de linguagens estruturadas.
- maior esforço na modelagem de um sistema OO do que estruturado (porém menor esforço de – codificação, sendo uma vantagen).
- funcionalidades limitadas por interface, quando estas estão incompletas (problemas na modelagem).
- dependência de funcionalidades já implementadas em superclasses no caso da herança, implementações espalhadas em classes diferentes.
* No proximo post estaremos falando sobre classes, não percam.
Jovens Empreendedores
15/09/09
Matéria do jornal hoje do dia 31/08/2009
Mostra como anda uma empresa formada por jovens que usam uma forma descontraída para eliminar o stress diário do trabalho junto com seus colaboradores.
Assistam, vale a pena.
Paradigma de Programação Imperativo
14/06/09
Uma linguagem de programação que utiliza paradigma imperativo, manipula variáveis a partir de ordens ou
comandos. Por exemplo, determinado número de váriáveis são lidas na entrada, são manipuladas e colodas
em outras variáveis, ditas saídas, manipulando estados.
Um programa imperativo realiza uma série de tarefas, uma atrás da outra, que o computador tende a executar.
Alguns exemplos de linguagens que utilizam paradigma imperativo são: Ada, Algol, C, Fortran, Pascal,
entre outras.
Essa imagem mostra de forma bem interessante o fluxo dos dados num paradigma Imperativo.
Vantagens:
- Eficiência (embute modelo de Von Neumann);
- Modelagem “natural” de aplicações do mundo real;
- Paradigma dominante e bem estabelecido;
- É altamente flexível, podendo ser migrado para outras paradigmas facilmente;
Desvantagens:
- Difícil legibilidade;
- Erros introduzidos durante manutenção;
- descrições demasiadamente operacionais focalizam o como e não o que
- Relacionamento indireto com a E/S (indução a erros/estados)
No próximo post falaremos sobre o Paradigma Funcional.

Paradigmas de programação
14/06/09
Consiste em modelos ou padrões adotados por linguagens de programação que agrupam caracteristicas em comum, a classificação de um paradigma é decorrente de decisões de projetos de projeto que impactam radicalmente na forma como um problema real é modelado do ponto de vista computacional.
Classificação:
Imperativa, Funcional, Orientado a objetos, Lógico e orientado a aspectos. Existem outras classificações porém as mais “comerciais” são essa listadas acima. Vamos durante essa semana estudar o que diz cada paradigma, quais suas vantagens e desvantagens e faremos um quadro comparativo entre elas.
Aritmética computacional – parte II – Adição e Subtração
25/08/08
Numa soma os bits são somados um a um da direita para a esquerda, com os carries sendo passados para o próximo bit à esquerda. A operação de subtração usa a adição. O subtraendo é simplesmente negado antes de ser somado ao minuendo. Lembre-se que a máquina trata com números representados em complemento a 2. O exemplo a seguir mostra as operações de soma (6+7) e subtração (7-6) bit a bit entre dois números representados com 4 dígitos binários.
Como citado anteriormente, tanto a soma como a subtração podem gerar overflow ou underflow, se o resultado obtido não puder ser representado pela quantidade de bits que formam uma palavra. Se somarmos ou subtrairmos dois números com sinais contrários, nunca ocorrerá overflow ou underflow. Isto porque operandos com sinais contrários nunca
podem ser maior do que qualquer dos operandos.
O overflow ocorre quando somamos dois operandos positivos e obtemos um resultado negativo, ou vice-versa. Isto significa que utilizamos o bit de sinal, gerando um carry, para armazenar um valor pertencente ao resultado da operação. Raciocínio semelhante é realizado para detectar a ocorrência do underflow numa subtração. Neste caso, o bit de sinal também é usado para armazenar um valor pertencente ao resultado da operação.
Os projetistas de um sistema devem decidir onde tratar a ocorrência de overflow ou de underflow em operações aritméticas. Elas podem ser tratadas tanto por hardware quanto por software. Pode existir a detecção por hardware que gera uma exceção, e que depois é tratada por software.
Aritmética computacional – parte I – Números com sinal e números sem sinal
18/08/08
Estaremos nos próximos dias falando sobre a aritmética computacional, onde o objetivo é mostrar como o hardware implementa a representação dos números, os algoritmos para operações aritméticas e sua implicação no conjunto de instruções da máquina.
Números com sinal e números sem sinal
Por serem implementados com maior facilidade nos circuitos elétricos a base 2 é a mais adequada para os computadores pois trabalham somente com dois valores 0 e 1.
Ex:
Faixa de numero sem sinal para 8 bits seria: (0 a 255)
0000 0000(2) = 0(10)
0000 0001(2) = 1(10)
0000 0010(2) = 2(10)
…
1111 1100(2) = 252(10)
1111 1101(2) = 253(10)
1111 1110(2) = 254(10)
1111 1111(2) = 255(10)
Como o tamanho de uma palavra manipulada por um computador tem tamanho limitado, os números que podem ser representados também têm tamanho limitado. Se o tamanho de uma palavra é igual a n bits, o maior número possível de ser representado é igual a 2n. Se ao realizarmos operações sobre os números, elas gerarem resultados que não podem ser representados na quantidade de bits reservados ocorre o que denominados de overflow (números muito grandes) ou underflow (números muito pequenos). Tanto o overflow quanto o underflow geram exceções e são tratados pelo sistema operacional.
Representação dos números:
- Números reais: infinitos.
- No computador: finitos.
- Maioria: grande quantidade de zeros à esquerda.
- Computador: pode lidar com números até um certo tamanho.
- Overflow: tratado pelo sistema operacional.
- No computador: é preciso representar números com sinal.
Solução: usar 1 bit (sinal magnitude).
- Primeira tentativa: o bit mais significativos (MSB) é usado para sinal.
Problema: duas representações para o zero
Solução mais usada: complemento a 2
Próximo post estaremos abordando a adição e subtração, aguardem.
Tipos de programação parte 4
13/08/08
Programação Modular
O que é:
Programação modular como próprio nome ja sugere é um paradgima de desenvolvimento de software no qual as rotinas são divididas em módulos e são interligados entre si através de uma interface comun.
Na programação modular, o programa principal coordena as chamadas aos módulos secundários e passa os dados necessários em forma de parâmetros.
Por sua vez cada módulo pode conter seus próprios dados e chamar a outros módulos ou funções.
Conceitos Básicos:
Existem dois tipos de SubProgramas:
Os que retornam um valor (funções)
Os que executam acções (procedimentos)
Um Módulo ou SubPrograma
· É um grupo de acções identificado por um nome.
· Pode executar as mesmas acções que um programa, receber valores, manipular esses valores, e produzir novos valores.
· Recebe informação do programa a que pertence e retorna a informação produzida a esse programa.
· Introduz uma nova estrutura de controlo: a chamada ou invocação de um subprograma.
· Quando é chamado (invocado), as acções do programa deixam
· Temporariamente de ser executadas e o computador começa executar as acções do subprograma.
· Quando termina a sua execução, o computador recomeça a execução das acções do programa, a partir da instrução que “chamou” o subprograma.
Principais Vantagens:
· Estrutura do programa fica mais clara ao agrupar funções e variáveis relacionadas num mesmo módulo.
· Possibilidade de compilar cada um dos módulos separadamente, poupando tempo.
· A reutilização das funções é facilitada
· Programas mais fáceis de escrever
· Programas mais fáceis de ler
· Programas, em geral, mais curtos
· Programas mais fáceis de modificar
· Abstração
Objetivo:
Facilitar a construção de grandes programas, através de sua divisão em pequenas etapas.(Módulos);







