domingo, 17 de julho de 2011

Windows Phone 7 Day em Florianópolis

Participei no dia 16 de julho de um evento especial sobre desenvolvimento para Windows Phone 7. O evento organizado pelo grupo DotNetFloripa contou com a participação de mais de cem pessoas, onde a grande maioria eram desenvolvedores buscando informações e troca de conhecimentos nesse ambiente de desenvolvimento que está crescendo a cada dia. Vários palestrantes da região de Florianópolis e representantes da Microsoft detalharam as principais novidades e os recursos e tecnologias disponíveis para iniciar o desenvolvimento de aplicações para Windows Phone 7.

                Abertura do evento foi feita por Fernando Fiqueira, funcionário e entusiasta Microsoft. Destacou as principais novidades no Windows Phone 7, demonstrando ao vivo a utilização do sistema operacional, com ênfase na sua interface baseada no conceito “metro” e na facilidade de uso e navegação entre as muitas funcionalidades do sistema. Foi apresentada a nova versão do sistema chamada carinhosamente de “Mango”.

                Iniciando as palestras, Renato Haddad falou muito bem sobre como desenvolver aplicações para o Windows Phone 7. Relacionou o que é preciso para desenvolver aplicações WP7, as linguagens utilizadas, as ferramentas necessárias, os recursos de softwares e hardwares, como usar o emulador e mostrou muito bem em exemplos práticos. Haddad é daqueles palestrantes “feras” que usa poucos slides e muito mais código e demo. Dentre as ferramentas e tecnologias utilizadas estão o Visual Studio .NET 2010, Silverlight e  Expression Blend.

                Aplicações com gráficos em 3D são ótimas no Windows Phone 7. Rodolpho Marques do Carmo apresentou o uso de Silverlight e XNA na mesma aplicação rodando no WP7. Com a integração dessas duas tecnologias podemos criar aplicações ainda mais ricas visualmente e usando todos os recursos gráficos em jogos e imagens em 3D.

                Um grande destaque do Windows Phone 7 é a sua bela interface com a linguagem visual “metro”. Manoel dos Santos apresentou os principais conceitos desta linguagem e um passo a passo para criar uma interface desde a prototipação até a implementação em Silverlight. Podemos avaliar que a experiência de usuário no WP7 é sensacional. Ele também apresentou diversos “templates” que podem ser utilizados e que facilitam muito o desenvolvimento de novas aplicações aplicando todos os conceitos de “metro”.


Veja os princípios da interface metro:
. Interface limpa, leve e rápida
- Concentração em tarefas primárias
- Fazer muito com pouco
. Destaque no conteúdo
- O conteúdo é a interface do usuário
- A interação direta com o conteúdo
. Celebrar a tipografia
- Tipo bonito, não apenas legível
. Demonstrar em movimentos (animação, efeitos)
- Transição entre a interface do usuário é tão importante quanto o design
- Adiciona dimensão e profundidade
Seguindo esses princípios podemos criar interfaces realmente ricas proporcionando uma sensacional experiência para o usuário.

                Utilizar o WP7 sem conexão com a internet “não tem graça”. Seguindo nessa linha, Bruno Belizário mostrou como voar nas nuvens (cloud) acessando serviços WCF (Windows Communication Foundation) e Azure no Windows Phone 7. Utilizando o Visual Studio .NET 2010 podemos construir aplicações dinâmicas com a acesso a serviços via WCF e/ou na nuvem com total segurança em todas as transações.

                Para desenvolver as aplicações em Silverlight no WP7, podemos fazer de forma tradicional ou amadora. Ou então aplicar os conceitos de arquitetura e engenharia de software e ainda aplicar padrões de desenvolvimento. Um padrão muito utilizado apresentado por André Carlucci é o MVVM (Model-View-ViewModel). Utilizando esses padrões, teremos mais facilidade em desenvolver aplicações mais fáceis de manter, organizadas, testáveis e fáceis de manter.

                Porém, nem todas as aplicações poderão ser 100% conectadas. É necessário utilizarmos recursos para gravar as informações diretamente no seu “celular”. Renato Haddad mostrou como é fácil usar o SQL Compact no Windows Phone 7 para criar aplicação usando o banco de dados para manter e manipular informações dessas aplicações desconectadas. Apresentou também os recursos que auxiliam no desenvolvimento da aplicação, fazendo o mapeamento objeto relacional com ferramenta SqlMetal e acesso ao banco de dados utilizado LINQ (Language integrated query).

                Durante as palestras, os participantes trocavam informações e faziam avaliações via Twitter com a hashtag #WP7Day. As apresentações se realizaram durante todo o dia, encerrando com o sorteio de vários brindes, com destaque para uma licença do Windows 7 autografada por Steve Balmer e um celular HTC com Windows Phone 7.

Não ganhei os brindes, mas como em todo evento desta natureza, recebi informações privilegiadas sobre tecnologias de ponta, as quais podemos utilizar para fazer a diferença, na nossa vida pessoal e profissional.

[]

domingo, 10 de julho de 2011

Teste de software vai muito além do passou/falhou


Qualidade é um processo contínuo e de responsabilidade de todo o time de desenvolvimento de software. Para atestar qualidade, além de um bom processo de desenvolvimento, é necessário testar. Testar não é a última coisa a fazer num projeto de software. Deveria ser a primeira e, continuar por todo o projeto. Os testes devem atestar a qualidade dos sistemas construídos ou modificados pelo desenvolvimento.

Mas não basta ter responsabilidade com a qualidade, é necessário colaboração, confiança e transparência entre testadores e desenvolvedores. Todo o time deve entender e compartilhar do que está sendo construído. Desta forma poderão criar o produto certo, ou pelo menos de maneira certa.

O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos.

Independentemente da metodologia de trabalho empregada no desenvolvimento de um software, para que se obtenha um produto final com um certo nível de qualidade, é imprescindível a melhoria dos processos de engenharia de software. Um desenvolvimento de software organizado tem como premissa uma metodologia de trabalho. Esta deve ter como base conceitos que visem a construção de um produto de software de forma eficaz. (Wikipédia)

Para atestar qualidade, você precisa ter especificações, algo que você pode avaliar. Você especifica o sistema para depois testar? Ou testa para gerar especificações de seu sistema? Uma sugestão é focar em “test driven” e não em “defect driven”. Se você esperar o sistema ficar pronto para testar, certamente encontrará erros.

É muito comum falar que teste de software demora e é perda de tempo, pois os programadores deveriam entregar o produto “pronto” e sem erros. Mas você pode utilizar ferramentas para ajudar na automação de testes. Num ambiente ágil você deve aplicar os princípios ágeis para automatizar testes. O teste deve fazer parte do “done” “pronto”.  Mas lembre-se, ferramentas de automação não são a solução para todos os seus problemas de qualidade de software. Teste automatizado não é moleza. Não é só gravar um script e depois executar. Testes simples e repetitivos podem ser automatizados. Invista tempo em testes manuais mais complexos. A maioria dos defeitos ainda é encontrada por testes manuais de sistema e aceitação.

É importante eliminar desperdícios nos testes.
. Testar rápido: usar processos ágeis;
. Testar melhor: maior cobertura, múltiplas visões do teste, foco na qualidade;
. Testar mais barato: redução de retrabalho, menor ciclo de testes, não duplicar testes;
. Não adianta “tentar testar o máximo” tem que ter metodologia e estratégia de teste;
. Testes de sistema e de aceite podem aumentar a produtividade dos desenvolvedores e a qualidade dos seus produtos se software.

Software muda constantemente e, quando uma nova funcionalidade é adicionada a um sistema que já estava testado e funcionava bem, sempre existe a possibilidade desta funcionalidade afetar outras. Uma boa maneira de assegurar que tanto esta funcionalidade, como todo o resto do sistema esteja funcionando corretamente, é fazer a integração contínua, ou seja, faça o “checkin” de seus códigos e “build” de seus sistemas constantemente.

Testar software é uma arte, que a maioria dos analistas e desenvolvedores não fazem com grande apreço. Desenvolvedor gosta de testar para “fazer funcionar” e não para garantir qualidade. Neste cenário, pensar em criar uma equipe de teste para formar um time com esses desenvolvedores pode ser considerado um grande avanço.

É importante definir algumas diretrizes e responsabilidades para a área de testes, como por exemplos:
. Vamos testar todos os softwares?
. Quanto tempo vamos investir nos testes? Este tempo é investimento mesmo ou é visto como custo para a empresa?
. Qual o nível de abrangência? Vamos testar tudo? O que é essencial?
. Qual o foco do teste? Vamos focar mais em teste de regras de negócio ou testes técnicos do sistema?
. Quais as características de qualidade serão avaliadas e, qual a peso de cada uma dentro desta avaliação?
. Como o time será avaliado?

As respostas para essas perguntas poderão ser assunto para outro post.

[]

sábado, 2 de julho de 2011

Usabilidade de software

Usabilidade é um dos muitos atributos que podem ser percebidos e avaliados pelos usuários de um sistema computacional. É um indicador que mostra se o sistema é intuitivo, fácil de utilizar e fácil de aprender a utilizar o software.  Essa característica influencia diretamente no interesse e aceitação do usuário que, pode simplesmente não gostar de software e, muitas vezes não sabe nem explicar o porquê.
O desenvolvimento de software deve colocar a usabilidade como um dos atributos chaves, durante a concepção e criação dos sistemas. A usabilidade deve ser pensada durante todo o processo de desenvolvimento, visando atender todas as características de qualidade.

Conforme o modelo de qualidade da Norma ISO 9126 (http://pt.wikipedia.org/wiki/ISO_9126), a característica da usabilidade é a capacidade do produto de software ser compreendido, seu funcionamento aprendido, ser operado e ser atraente ao usuário e pode ser avaliada e subdivida nas seguintes sub-características:
Inteligibilidade que representa a facilidade com que o usuário pode compreender as suas funcionalidades e avaliar se o mesmo pode ser usado para satisfazer as suas necessidades específicas;
Apreensibilidade identifica a facilidade de aprendizado do sistema para os seus potenciais usuários;
Operacionalidade é como o produto facilita a sua operação por parte do usuário, incluindo a maneira como ele tolera erros de operação;
Atratividade envolve características que possam atrair um potencial usuário para o sistema, o que pode incluir desde a adequação das informações prestadas para o usuário até os requintes visuais utilizados na sua interface gráfica.

A utilização de sistemas de software pode feita por qualquer pessoa, independente do nível de instrução. Os usuários preferem um sistema de seja fácil de utilizar, onde ele não perca tempo, por exemplo, procurando opções ou menus, que na visão do usuário deveriam estar ali, ao alcance do mouse ou tecla de atalho. O usuário não pode perder tempo durante a execução de suas atividades no software.
A característica da usabilidade deve fazer cada vez mais parte do vocabulário e do ambiente de desenvolvimento, principalmente agora com a explosão da utilização de dispositivos móveis, que, com sua limitação de tamanho, requisitam ainda mais usabilidade nos sistemas utilizados pelos usuários.
Durante a implantação de um sistema com alto grau de usabilidade, podemos notar boa avaliação dos usuários que realizam suas tarefas com mais eficiência, diminuição da necessidade de apoio aos usuários e facilidade na utilização e aprendizados dos recursos do novo sistema.

Avaliar a usabilidade de um sistema pode não ser tão simples quanto parece. Devemos avaliar todas as características e utilizar métricas e critérios de avaliação. Exemplos de informações que podemos coletar para ajudar na avaliação:
. Número de vezes que o usuário expressa satisfação ou frustação.
. Tempo que o usuário demora a realizar uma tarefa.
. Percentual de tarefas concluídas.
. Percentual de sucessos ou falhas na execução.
. Tempo perdido com erros ou tentativa de execução com erros.
. Percentual de erros encontrados.
. Número de opções utilizadas para executar uma tarefa.
. Número de opções disponíveis e não utilizadas.

Podemos notar que todos os critérios de avaliação da usabilidade da interface de um software compreendem vários fatores, principalmente facilidade de uso e satisfação do usuário na utilização do sistema para realizar suas tarefas.
Para os desenvolvedores de sistemas fica o desafio de perceber essas necessidades dos usuários, aplicarem os conceitos de usabilidade e qualidade de software e disponibilizar software cada vez melhores e mais usuais.

[]