04 maio 2009

SWEBOK - Um guia para a Engenharia de Software.


Provavelmente alguém já ouviu falar no PMBOK (Project Management Body of Knowledge), um livro que reúne todas as melhores práticas da gerência de projetos, fornecendo um arcabouço para aplicação metodológica. Pensando nisso o IEEE (Institute of Electrical and Electronics Engineers), elabou um livro similar para a engenharia de software o SWEBOK (Software Engineering Body of Knowledge) reunindo as melhores práticas da engenharia de software. O livro compreende 10 áreas, vamos cada uma delas a seguir:

  1. Requisitos de Software - requisitos definidos para resolução de problemas do mundo real;
  2. Projeto de Software - definição de arquitetura, componentes, interfaces, e outras características de um sistema ou componente;
  3. Construção de Software - detalhada criação através de um combinação de código, verificação, teste unitário, teste de integração e depuração;
  4. Teste de Software - verificação dinâmica de um programa em um finito conjunto de casos de teste;
  5. Manutenção de Software - fase que inicia após a entrega, seja por anomalias encontradas, novos requisitos ou mudança nos mesmos;
  6. Gerência de Configuração de Software - identificação da configuração do software em vários pontos distintos através do tempo com o objetivo de controlar a configuração e manter a integridade e rastreabilidade desta configuração através do ciclo de vida do software;
  7. Gestão - foca o gerenciamento e a mensuração do software;
  8. Processo - foca na definição, implementação, mudança e melhoria do processo de software;
  9. Ferramentas e Métodos - provê um guia para auxiliar na escolha de ferramentas para auxiliar nas outras 9 áreas, e métodos (heurístico, formal e prototipado);
  10. Qualidade de Software - trancende o ciclo de vida do processo de software, como é um conceito ubíquo, é subdivida em 3: fundamentos de qualidade, gerenciamento da qualidade e considerações práticas.
Pra quem não leu vale a pena ficar acompanhando o blog, pois vou estar abordando essas áreas nos próximos 10 posts.

Indicações:
http://www.swebok.org/
http://www.ieee.org/

11 março 2009

Causas do Software Aging

No princípio é tudo azul. Requisitos, modelos, protótipos... Aí que vem a primeira entrega, os testes, e então (depois de muitas horas de idas e vindas, iterativamente e incrementalmente) o software entra em produção. A partir deste ponto existem alguns aspectos que devem ser considerados para uma perfeita saúde de seu software, caso contrário, ele envelhece e morre.

Causas do Software Aging

Estagnação
Ocorre quando de alguma forma a equipe do projeto não consegue implementar melhorias solicitadas no software. Necessidades sempre são adiadas, desenvolvedores recebem sempre um grande volume de modificações a serem realizadas e o custo de resposta a essas solicitações sempre cresce de forma não linear, com o tempo, em relação ao tamanho das modificações.

Consequências:
  • Erosão estrutural - comprometimento da arquitetura, causado pelo grande volume de modificações em conflito com o projeto original;
  • Degradação de qualidades operacionais - usabilidade, confiabilidade, performance e facilidade de suporte.

Fadiga
Ocorre quando a equipe do projeto opera sob pressão ou falta de capacidade técnica para realização de certa modificação em um sistema, o que ocasiona alterações em sua estrutura original e queda no desempenho.

Consequências:
  • Comprometimento da arquitetura do software - devido a falta de capacidade técnica ou tempo da equipe o que geralmente ocorre é a adoção de estruturas que efetuem a modificação mais rapidamente, independente se seguem o padrão arquitetural ou não;
  • Código ruim - devido à pressão por resultados, o desenvolvedor acaba por não seguir certos padrões de codificação/revisão/testes;
  • Resposta ao usuário cada vez maior - em decorrência dos itens anteriores, ocorre uma degração da performance do sistema e uso cada vez maior de recursos de hardware.
Prevenção

É inevitável o envelhecimento de um software, o que podemos fazer é adiar este processo para que a vida útil de um software se torne o mais prolongada possível. Desta forma, temos como prevenção para a estagnação, a utilização de Métodos Ágeis. E para a fadiga, o uso de refatoração.

Tem sido registrado um número cada vez maior de casos de sucesso usando métodos ágeis (XP, DSDM, SCRUM, etc), baseados em desenvolvimento iterativo e incremental, envolvem o cliente no processo sendo otimizados para lidar com mudançase prevenir a estagnação.

Já a refatoração é um processo pelo qual não são alterados comportamentos externos do software sem que sejam melhoradas proporcionalmente a estrutura interna do mesmo.

19 fevereiro 2009

Seja um Testador !

No último sábado (14/02), participei de um experimento em engenharia de sofware. Este consistia em uma pesquisa sobre compreensão de sofware, um projeto para entender qual a melhor estratégia para efetuar manutenção em um dado software, através da plataforma eclipse.

Neste iterim, observei o quanto há em desinteresse, tanto na academia, quanto no mercado, na participação de experiências e questionários científicos. Lembrei-me também do tempo em que estava na conclusão do meu projeto de do curso de graduação ( ERPOO ), o quão difícil foi arrumar pessoas para utilizar e responder meus questionários !

Como podemos exigir qualidade de nossos softwares se não participamos dos testes, pesquisas , questionários de opnião? Como podemos criticar iniciativas volutárias de desenvolvimento, senão participamos (em pelo menos) na crítica do produto final? Nem todas as empresas/pessoas possuem as montanhas de dinheiro que a microsoft/apple/IBM e outros possuem e que podem pagar para pessoas especializadas testarem seus produtos.

Desta forma, fica o apelo aqui neste blog, que tal participar de uma equipe de desenvolvimento de software em um dos seus papéis principais? Seja um testador!

02 fevereiro 2009

A interface InterfaceAddress

Algo que não tinha sabido , até o momento, é dos recursos da nova interface InterfaceAddress (nova interface do jsdk 1.6). Através dela podemos obter uma lista de adaptadores de rede e suas respectivas informações, como por exemplo em um código como este:


import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Iterator;
import java.util.List;
import java.util.Enumeration;


public class NetworkInterfaces {
public static void main(String[] args) throws Exception {
NetworkParameter np = new NetworkParameter();

// obtem todas as interfaces de rede da máquina.
Enumeration en = NetworkInterface.getNetworkInterfaces();

// exibe informações
while (en.hasMoreElements()) {
NetworkInterface ni = en.nextElement();
np.printParameter(ni);
System.out.println("==================================");
}
}

}

class NetworkParameter {

public void printParameter(NetworkInterface ni) throws SocketException {

// Exibe todas as informações da interface de rede
System.out.println("Interface de rede:");
System.out.println("------------------");
System.out.println(" Nome = " + ni.getName());
System.out.println(" Nome de exibição = " + ni.getDisplayName());
System.out.println(" Está ativa = " + ni.isUp());
System.out.println(" Suporta multicast = " + ni.supportsMulticast());
System.out.println(" É local = " + ni.isLoopback());
System.out.println(" É virtual = " + ni.isVirtual());
System.out.println(" É ponto a ponto = " + ni.isPointToPoint());
System.out.println(" Endereço do hardware = " + ni.getHardwareAddress());
System.out.println(" MTU = " + ni.getMTU());

// Obtém uma lista de todas as interfaces de rede
System.out.println("\nLista de endereços da Interface:");
System.out.println("----------------------------");
List list = ni.getInterfaceAddresses();
Iterator it = list.iterator();

// iterar
while (it.hasNext()) {
InterfaceAddress ia = it.next();
System.out.println(" IP = " + ia.getAddress());
System.out.println(" Broadcast = " + ia.getBroadcast());
System.out.println(" Tamanho do prefixo da rede = " + ia.getNetworkPrefixLength());
System.out.println("");
}
}
}


Quando colocado em execução produz o resultado abaixo (aqui no meu notebook):

Interface de rede:
------------------
Nome = lo
Nome de exibição = MS TCP Loopback interface
Está ativa = true
Suporta multicast = true
É local = true
É virtual = false
É ponto a ponto = false
Endereço do hardware = null
MTU = 1520

Lista de endereços da Interface:
----------------------------
IP = /127.0.0.1
Broadcast = /127.255.255.255
Tamanho do prefixo da rede = 8

==================================
Interface de rede:
------------------
Nome = eth0
Nome de exibição = VIA Compatable Fast Ethernet Adapter - Miniporta do agendador de pacotes
Está ativa = true
Suporta multicast = true
É local = false
É virtual = false
É ponto a ponto = false
Endereço do hardware = [B@42e816
MTU = 1500

Lista de endereços da Interface:
----------------------------
IP = /192.168.254.2
Broadcast = /192.168.254.255
Tamanho do prefixo da rede = 24

==================================
Interface de rede:
------------------
Nome = eth1
Nome de exibição = RT73 USB Wireless LAN Card - Miniporta do agendador de pacotes
Está ativa = false
Suporta multicast = true
É local = false
É virtual = false
É ponto a ponto = false
Endereço do hardware = [B@9304b1
MTU = 1500

Lista de endereços da Interface:
----------------------------
==================================

09 janeiro 2009

Atualize seu navegador

Olá pessoal, este post é para divulgar a campanha do IMasters - Atualize seu navegador - segue texto da campanha:

Desenvolvedores ainda perdem muito em produtividade devido a navegadores desatualizados, sem suporte às funcionalidades e tecnologias atuais para alcançar seus clientes, limitando soluções e criando dores de cabeça desnecessárias.

O Internet Explorer 6.0 (lançado em 2001) ainda participa de 35% do mercado de navegadores*. É um browser que não acompanha o estágio atual da Internet, possui falhas de segurança e limita todo o potencial de uma Internet melhor para todos nós.

Esta campanha é uma iniciativa para excluir navegadores desatualizados do mapa da internet do Brasil. Basta inserir o código abaixo em todos os seus sites e de seus clientes. Desta forma, para todo usuário que acessá-los utilizando navegadores desatualizados, será exibida uma barra simples, sem marcas, orientando o usuário a atualizar o seu navegador e falando da importância desta atitude (veja a barra em ação). Mais segurança para o usuário, mais liberdade aos desenvolvedores.

Basta adicionar o código abaixo em sua página:





Fonte: http://imasters.uol.com.br/crossbrowser