New Post

Rss

Showing posts with label Software. Show all posts
Showing posts with label Software. Show all posts
Tuesday, July 3, 2012
no image

Dicas para o desenvolvimento de um software funcional – Parte IV

O quarto e último artigo sobre dicas para desenvolver um software funcional abrange alguns conceitos ligeiramente mais avançados. Após as doze dicas abordadas nos três primeiros artigos, este último envolve aspectos relacionados ao aperfeiçoamento das funcionalidades de um sistema. Agradeço novamente a todos os leitores que acompanharam os artigos, e espero que de alguma forma essas dicas tenham agregado um pouco mais de conhecimento.

Normalização de dados

Na maioria dos cursos relacionados a desenvolvimento de sistemas, é comum encontrar uma disciplina que mencione a Normalização de Dados, fundamental para a formação de analistas e programadores. Este assunto sugere uma série de procedimentos aplicados ao levantamento de requisitos para garantir a boa modelagem de um banco de dados. Essa modelagem será responsável pela integridade, confiabilidade e desempenho das operações realizadas nas tabelas. Alguns dos pontos mais importantes abordados pela normalização de dados é a utilização imprescindível de chaves primárias, chaves estrangeiras, criação de tabelas para relacionamentos muitos-para-muitos (N:N) e criação de tabelas para campos multivalorados, como e-mails e telefones. Além de ser uma prática essencial para o projeto de um sistema, a Normalização de Dados também garante a organização dos relacionamentos entre as tabelas e facilita futuras manutenções na estrutura.

Os requisitos de um sistema devem passar basicamente por algumas formas normais da Normalização de Dados, que consistem em eliminar campos repetitivos entre tabelas, impedir valores redundantes e relacionar todas as tabelas por meio de chaves estrangeiras.

Consultas compostas

A maioria dos sistemas atuais possuem uma padronização de consultas de dados, normalmente pelos campos mais comuns da tabela. Por exemplo, em um cadastro de clientes, a consulta pode ser realizada somente por nome, cidade ou CPF. No entanto, há situações onde o usuário pode precisar consultar clientes por endereço, telefone, estado, profissão ou estado civil. Basta então adicionar estes campos às opções de consulta, correto? Bem, é uma alternativa, mas imagine que o usuário também possa querer pesquisar os clientes que moram no estado de São Paulo, são do sexo masculino e trabalhem como motorista. Neste caso, a solução é criar uma consulta composta, que consiste em uma busca por vários campos ao mesmo tempo. Uma ideia para suprir essa necessidade seria utilizar os mesmos campos de cadastro para consultar os dados. Dessa forma, o usuário pode preencher quaisquer campos por qual deseja consultar, e ao clicar no botão de pesquisa, o sistema verifica os campos preenchidos e concatena uma SQL internamente para enviar ao banco de dados. É uma funcionalidade bem interessante, mas caso for utilizá-la, atente-se às cláusulas “where” e “and“, e confira se a busca corresponde ao que foi digitado pelo usuário.

Integração com serviços web

Com o advento da internet e de recursos online, tornou-se comum a integração de sistemas desktop com serviços web para facilitar ou agilizar operações rotineiras. Um exemplo bem prático é a validação de arquivos de Nota Fiscal Eletrônica. Nos primórdios da sua utilização, os usuários geravam um arquivo XML pelo sistema, acessavam outro aplicativo para envio de arquivos, validavam o arquivo e em seguida imprimiam a DANFE. Todo este processo era considerado burocrático e criou uma resistência dos usuários. A integração dos sistemas desktop com os web services possibilitou que este procedimento fosse realizado diretamente pela aplicação, sem a intervenção do usuário para manipular os arquivos XML. Além deste exemplo, outros serviços web também podem ser agregados à aplicação, como consulta de endereços por CEP, mapas de localização (Google Maps), feed de notícias e outros tipos de informações online. Os desenvolvedores podem ainda disponibilizar um módulo do sistema na web interligado com o sistema desktop, permitindo, por exemplo, que um usuário tenha acesso às informações pela internet, sem necessariamente usar o sistema desktop.

Cuidado com o que o seu cliente pede

Há muito que ser abordado neste último item, por tratar-se de uma questão mais voltada para análise do que desenvolvimento. Normalmente, os usuários que operam o sistema no dia-a-dia sentem a falta de um determinado campo em uma tela, um botão para uma nova funcionalidade ou atalhos para agilizar as operações. É muito comum ouvirmos frases como:

“Há possibilidade de colocar um ‘botãozinho’ aqui?”
“Eu precisava de um campo aqui para digitar tal informação…”

É claro, bons analistas e desenvolvedores devem prestar o máximo de suporte, visando suprir qualquer necessidade do cliente. Mas há casos onde é preciso rejeitar a sugestão do cliente para garantir a integridade e simplicidade do software. Quando o cliente pede um novo campo na tela, deve-se fazer um estudo da real utilidade da inclusão deste campo, e se este também será útil para outros clientes que operam o sistema. Há situações onde o campo já existe, mas não é de conhecimento do cliente. Neste ponto vale ressaltar a importância da apresentação e de treinamentos do sistema, além da capacitação de equipe de suporte em identificar esse tipo de situação. Uma simples orientação sobre a tela pode evitar que a equipe de desenvolvimento adicione uma nova funcionalidade sem fundamento. Além disso, adicionar um novo campo, botão ou funcionalidade no sistema pode comprometer o visual, trazer inconsistências no cadastro ou causar redundância de informações. Analisar detalhadamente as sugestões de clientes sempre será uma prática essencial para o desenvolvimento de um sistema.

Obrigado novamente pela atenção, leitores!

Desenvolvedor de sistemas há 6 anos em linguagens Delphi, C# e PHP. Bacharel em Sistemas de Informação, colunista sobre tecnologia e entusiasta em Desenvolvimento Ágil. Atualmente trabalha com processamento de dados e desenvolvimento de sistemas voltados para gestão administrativa.

Veja perfil e 8 post(s)

Thursday, June 7, 2012
no image

Dicas para o desenvolvimento de um software funcional – Parte III

Este é o terceiro artigo sobre algumas dicas para o desenvolvimento de um bom software. Aproveito a oportunidade para agradecer a todos que leram, comentaram e compartilharam o primeiro e o segundo artigo sobre este assunto. Espero que as dicas neste artigo tragam um pouco mais de conhecimento aos leitores, e mais uma vez, quero que sintam-se à vontade para expressar qualquer opinião sobre este texto.

Padronização de código

Este item é bastante importante quando o projeto é desenvolvido por mais de uma pessoa, ou melhor, uma equipe de desenvolvimento. Definir uma padronização do código auxilia na legibilidade e no entendimento do que está sendo executado na aplicação. Identar o código nos blocos de condição “if-else” e nos laços de repetição são uma das práticas que ajudam os desenvolvedores a identificar facilmente a execução de um método. Identação significa “estruturar” as linhas do código em tabulações de acordo com o nível de execução.

Quando há uma grande quantidade de aninhamento de blocos no código-fonte, a identação se torna ainda mais importante para associar o início e o fim de cada bloco aninhado. Algumas ferramentas de desenvolvimento, como o NetBeans e o Visual Studio, possuem o recurso de destacar o aninhamento quando o cursor do mouse é posicionado na chave que abre ou fecha o bloco. Desenvolvedores em Delphi também podem adquirir essa funcionalidade com o addon gratuito cnWizards.

As variáveis, classes, métodos e funções também devem possuir nomes sugestivos de acordo com o seu objetivo. Portanto, uma variável com o nome “SomaTotalPedidos” é bem mais fácil de ser identificada do que uma variável chamada “vSTotPed”. Mesmo que o nome seja ligeiramente maior, o código fica mais legível quando se trabalha com esse tipo de nomenclatura.

Tratamento de exceções

Por mais que o desenvolvedor faça testes na aplicação antes de publicá-la, é natural que alguns erros ainda possam ocorrer inesperadamente para o usuário. Estes erros são decorrentes de problemas de semântica, gravação de dados inconsistentes, falhas de acesso à memória ou até mesmo eventos inesperados do sistema operacional. No ambiente de programação, os erros são conhecidos tecnicamente como “exceções”. Uma boa prática de programação exige que exista um tratamento de exceções em todos os pontos mais sensíveis do código. Inserções e atualizações no banco de dados são exemplos de operações que possivelmente podem retornar algum erro para o usuário.

A recomendação é envolver este código em um bloco de tratamento de exceção e executar uma função de rollback (desfazer as alterações no banco de dados) caso algum erro seja encontrado. Ao utilizar tratamento de exceções, também é possível criar mensagens mais transparentes para reportar a exceção ao usuário. Dessa forma, faz mais sentido exibir a mensagem “Ocorreu um erro. Tente novamente.” ao invés de “An error occurred. Access violation at address 004068EC“. Estes tipos de mensagens em inglês técnico geralmente são desconhecidas para o usuário e não trazem nenhum tipo de informação para auxiliá-lo.

Atualização do sistema

A cada atualização do sistema, normalmente é necessário substituir o executável no computador do cliente, rodar scripts SQL e alterar alguns parâmetros de configuração. Sendo assim, é preciso ir até o cliente e fazer todo o processo manualmente no computador local. Para evitar a viagem, uma alternativa é realizar a atualização remotamente através de softwares como o TeamViewer, LogMeIn ou VNC. O problema surge quando há dezenas ou até centenas de computadores para serem atualizados. Se a atualização for feita em um computador por vez, pode demorar dias para terminar a atualização em todos as máquinas.

Portanto, ao invés de realizar a atualização manualmente, crie um módulo exclusivo para automatizar este processo. A atualização automática está presente na maioria dos softwares atuais, como navegadores e antivírus. O objetivo é permitir que o próprio sistema verifique novas versões, baixe o arquivo de atualização e realize todo o processo automaticamente, sem a intervenção do usuário. Este tipo de módulo não é simples de ser desenvolvido, mas é plenamente funcional e permite atualizar vários computador simultaneamente.

Programação Orientada a Objetos

No mundo da programação, a maioria dos métodos e componentes são modelados em classes para facilitar a reutilização de código e a manipulação de objetos. Trabalhar com classes e objetos pode ser relativamente complexo, mas sem dúvida garante um maior controle de tudo o que acontece dentro da aplicação. Através da Programação Orientada a Objetos (POO), é possível reaproveitar várias linhas de código por meio de técnicas como herança e polimorfismo. Além disso, definir a visibilidade dos atributos de uma classe e criar métodos para manipulação de valores permitem que a estrutura interna da aplicação não seja exposta a nível de usuário.

Utilizar POO no desenvolvimento de um sistema também facilita a produção de regras de negócio, abstração de dados e a integração com padrões de projeto.

Durante a fase de projeto, a Programação Orientada a Objetos é amplamente praticada por projetistas e analistas de sistemas através da linguagem UML para modelagem de dados. O Diagrama de Classes, por exemplo, fornece uma grande quantidade de informações detalhadas para simplificar a modelagem das classes do projeto e das tabelas do banco de dados. Em conclusão, a utilização da POO na modelagem evita que o sistema sofra constantes alterações e adaptações durante o andamento do projeto, reduzindo o tempo de desenvolvimento e minimizando os erros de implementação.

Muito obrigado mais uma vez pela leitura. Um abraço a todos!

Desenvolvedor de sistemas há 6 anos em linguagens Delphi, C# e PHP. Bacharel em Sistemas de Informação, colunista sobre tecnologia e entusiasta em Desenvolvimento Ágil. Atualmente trabalha com processamento de dados e desenvolvimento de sistemas voltados para gestão administrativa.

Veja perfil e 7 post(s)

no image

Qualidade de Software – Uma Necessidade Competitiva e Necessária

Ao se falar em qualidade de software, podemos distinguir de algumas maneiras o significado do termo “qualidade” para cada grupo de interesse no projeto, ou seja, o seu significado na visão dos maiores interessados (stakeholders), na visão dos usuários – pessoas/colaboradores da organização ao qual utilizarão o software e a equipe de projeto, em outras palavras, as pessoas que irão desenvolver o software.

Na visão do usuário, podemos dizer que a qualidade se resume em: Facilidade de uso, desempenho, confiabilidade dos resultados, etc.

Na visão do desenvolvedor, podemos dizer que qualidade se resume em: Taxa de defeitos, facilidade de manutenção e conformidade em relação aos requisitos dos usuários, etc.

Na visão da organização, qualidade de software está relacionada à: Cumprimento de prazo, boa previsão de custo, boa produtividade, etc.

Contudo, como já disse em um de meus artigos, desde que iniciei meus estudos em Análise e Desenvolvimento de Sistemas, não consigo “enxergar” um produto de software sem qualidade, seja ele pequeno, médio ou de grande porte.

O sentido da palavra enxergar tem haver com o modo que ele será desenvolvido. Quando sou convidado (de maneira direta ou indireta) a participar de um projeto de produto de software, uma das primeiras coisas que me vem em mente é pensar numa metodologia que melhor se aplique ao tamanho do produto que se pensa em desenvolver, quantidade de pessoas envolvidas e o quanto o cliente tem de capital para investir no projeto.

A segunda coisa em mente é planejar tudo isto dentro desta metodologia. Em alguns casos, o projeto é bem simples, não sendo necessário grandes formalizações e burocracias, mas sempre sendo essencial, tendo como base, gerenciar: escopo, requisitos, riscos de projeto, configuração, recursos (incluindo os meios de comunicação), testes, compatibilidade de versão (na maioria dos casos é uma melhoria de algo já existente) e manutenção.

Considero isto um passo inicial, ao qual temos um objetivo e uma meta em rumo a uma direção e fazendo o gerenciamento das áreas descritas acima, a fim de identificar quaisquer artefatos que desvie do caminho traçado.

O termo qualidade, mesmo que em diferentes visões deve ter um único foco, em outras palavras, deve ser uma busca contínua dentro da organização de desenvolvimento de software, revendo os processos, mensurando resultados, enfim, tentar aperfeiçoar o que já parece estar bom e melhorar pontos negativos. Para uma melhor abordagem sobre Processos de Software, convido-os a lerem meu artigo sobre Processo de Software e a Qualidade do Produto.

Tenho visto que mesmo para construir um “pequeno site” muitos dos responsáveis pela construção do projeto (empresas / desenvolvedores) não tem dada a atenção devida para uma maneira mais correta de fazer este trabalho. Em alguns casos isto se deve pelo fato de fornecer um preço abaixo de mercado devido à concorrência construída pela prostituição de mercado e em outros casos, pela falta de capacitação técnica, deixando-se levar pela lábia do cliente, que utiliza deste artifício dizendo: é só um “sitezinho” simples sem muita coisa, apenas isto, aquilo e mais aquele outro… Entretanto, muitos caem neste papo e acabam tendo problemas futuros por não ter adotado um bom processo e acabam tornando-se mais uma FazSite LTDA.

Para quem desconhece a FazSite LTDA, vale a pena assistir ao vídeo e ver que ainda existem muitas delas espalhadas. Conheci algumas e confesso sem receio que eu também já fui uma um dia.

Você não precisa ser um CMMI de nível 3, 4 ou 5 para fazer um trabalho de qualidade. Também, de maneira alguma estou fazendo apologia ao não uso do CMMI, muito pelo contrário, se sua empresa pode investir neste tipo de processo, vá em frente. Porém, os gastos que se obtêm não são a realidade de muitas delas. Mas, quero chamar a atenção do leitor que uma pequena parte de gerência de algumas áreas poderá garantir a qualidade do produto e uma melhor satisfação do seu cliente.

Então, se você viu o vídeo e se identificou com a FazSite LTDA, é hora de mudar sua estratégia de trabalho, se capacitar contratando uma consultoria, aplicar os conhecimentos e começar a produzir produtos de software em conformidade com os requisitos de seus clientes, garantindo assim que sua empresa produza com eficiência e eficácia, em outras palavras, mantendo a qualidade.

Fonte: Blog Rafael Amaral
Twitter: @rafaelamaralll

Thursday, May 24, 2012
no image

Dicas para o desenvolvimento de um software funcional – Parte II

Em continuidade ao artigo anterior, esta segunda parte abrange mais algumas boas práticas para o desenvolvimento de um sistema. Espero que tais práticas sejam úteis e ofereçam mais algum conhecimento aos leitores. Sintam-se à vontade para postar comentários ou críticas sobre o artigo!

Exportação de relatórios

Criar relatórios bem elaborados é fundamental, mas é importante que exista opções para exportá-lo em outros formatos, caso o usuário queira salvá-lo no computador ou enviá-lo por e-mail. O formato PDF é um dos mais utilizados entre as opções de exportação, principalmente por ser um tipo de arquivo com tamanho pequeno e não permitir modificações após ser criado. A maioria dos componentes atuais para elaboração de relatórios já possuem métodos que permitem a exportação para os formatos mais comuns, mas caso esta opção não exista, basta utilizar o software CutePDF Writer, que adiciona uma impressora virtual no computador para criar arquivos PDF a partir da impressão de qualquer documento.

Exportar dados de uma tabela ou de uma grade de registros também pode ser de grande utilidade para o usuário, como uma tabela de preços em formato XLS (Excel) ou a ficha completa de um cliente em formato DOC (Microsoft Word). Esse tipo de prática garante uma maior versatilidade do sistema por meio da integração com aplicações externas comumente utilizadas pelo usuário.

Teclas de Atalho

Quando um menu é acessado com bastante frequência, pode ser interessante associar teclas de atalho para acessá-lo com mais agilidade. Quem utiliza o Microsoft Windows já deve conhecer algumas combinações de teclas disponíveis para abrir as janelas mais comuns do sistema, como o “Windows + E” para abrir o Windows Explorer e o “Windows + F” que abre a janela para pesquisa de arquivos. O mesmo pode ser adaptado a um sistema, por exemplo, para abrir a tela de cadastro de clientes e a tela de consulta de vendas. As teclas de atalho também podem ser atribuídas a determinados eventos do sistema, como recalcular a soma de um valor ou preencher um campo automaticamente. Usuários mais experientes geralmente preferem utilizar teclas de atalho ao invés de acessar as funções do sistema utilizando o mouse, principalmente por agilizar as operações rotineiras. Porém, atribuir teclas de atalho em todos os menus e sub-menus no sistema é desnecessário, além de confundir a memória do usuário. Procure atribuí-las somente nas principais funções do sistema e utilizar combinações de teclas simples para facilitar a memorização.

Utilitários

Quanto mais recursos úteis o sistema possuir, mais ele atenderá as necessidades eventuais do usuário. A ideia é incluir calendário, calculadora, campo de anotações e telas informativas dentro do sistema, para evitar que o usuário tenha que instalar ou recorrer a outros aplicativos com essas utilidades. Uma boa prática é associar teclas de atalho globais à essas funcionalidades, como o F6 para Calculadora e F7 para Calendário, por exemplo.

Outra utilidade importante é permitir que o usuário configure o sistema conforme o seu perfil. O sistema pode possuir uma tela de configuração e armazenar as preferências do usuário em um arquivo do tipo “INI”. Todas as vezes que o sistema for inicializado, as preferências contidas neste arquivo são carregadas e aplicadas ao sistema. O arquivo de configuração pode conter o diretório do banco de dados, ordenação padrão dos registros de uma tabela, agendamento de backup e outras configurações internas do sistema. Este arquivo se torna ainda mais útil quando existe mais de um usuário utilizando o sistema e cada um possui preferências diferentes. Assim, não é preciso criar uma versão exclusiva para cada usuário, basta apenas guardar as configurações em um arquivo INI.

Threads e telas de espera

Algumas operações do sistema podem demorar um certo tempo para serem processadas, principalmente instruções SQL complexas que envolvam cálculos ou consultas em tabelas com vários registros. Quando isso ocorre, normalmente o sistema “congela” ou pára de responder durante o processamento até que a operação seja finalizada. Porém, o usuário pode pensar que a aplicação parou de funcionar e forçar o encerramento do processo, comprometendo a instrução em execução.

Para evitar este tipo de transtorno, é conveniente criar telas de espera para informar o usuário de que um processamento está em execução. Essa tela fica ainda mais intuitiva quando há alguma imagem animada (GIF) ou uma barra de progresso indicando o processamento. Entretanto, como a tela de espera e a instrução SQL compartilham o mesmo processo na memória, é provável que a aplicação fique travada da mesma forma, sem resposta. A solução é utilizar unidades chamadas Threads, capazes de criar fluxos paralelos ao processo principal para executar uma operação em segundo plano. Basta então exibir uma tela de espera e transferir a execução da instrução SQL dentro de uma Thread para que o sistema não se torne instável.

A verificação automática de ortografia no Microsoft Word é um exemplo de Thread. Repare que o programa não trava enquanto a verificação é realizada a cada palavra digitada. No Microsoft Outlook, observe também que é possível utilizar normalmente o software ao mesmo tempo que novos e-mails são baixados na caixa de entrada. Portanto, Threads não servem apenas para desenvolver telas de espera, mas sempre quando for necessário executar instruções em paralelo sem afetar o desempenho do sistema.

Em breve segue o terceiro artigo sobre este tema. Muito obrigado pela leitura. Até a próxima!

Publicado originalmente em O Núcleo

Desenvolvedor de sistemas há 6 anos em linguagens Delphi, C# e PHP. Bacharel em Sistemas de Informação, colunista sobre tecnologia e entusiasta em Desenvolvimento Ágil. Atualmente trabalha com processamento de dados e desenvolvimento de sistemas voltados para gestão administrativa.

Veja perfil e 6 post(s)

Monday, May 21, 2012
no image

Dicas para o desenvolvimento de um software funcional – Parte I

Embora a internet esteja repleta de tutoriais e dicas sobre desenvolvimento, sempre surge a dúvida de como um sistema deve ser devidamente desenvolvido dentro de padrões. Na verdade, não há uma regra geral ou um processo único para o desenvolvimento de um sistema, mas existem boas práticas que, quando adotadas, podem trazer grandes vantagens em um projeto, tanto para o cliente quanto para o próprio desenvolvedor. Em muitas empresas de software, tais práticas são consideradas como uma metodologia de desenvolvimento, principalmente por facilitar a manutenção e atualização do software, além de garantir uma personalidade única para o sistema. Este é o primeiro de três artigos sobre este assunto, onde o objetivo é transmitir um base sólida sobre alguns pontos importantes para o desenvolvimento de um sistema, envolvendo a implementação do código e o visual da aplicação.

Facilidade de uso

Colocar vários botões e informações em excesso em uma janela pode comprometer a usabilidade da aplicação. Simplicidade e objetividade devem estar casados com a funcionalidade do sistema para proporcionar um maior “conforto” ao usuário. Procure simplificar o visual das janelas, adicionando somente os componentes necessários que o usuário irá utilizar. Estruture a janela de forma que os campos fiquem em uma sequência objetiva, agrupados por assunto ou categoria. Em um cadastro de clientes, por exemplo, divida os campos por seções, como dados pessoais, dados profissionais, contato e informações adicionais. Assim a localização de informações fica bem mais fácil e evita que o usuário fique confuso em meio a tantos componentes. Procure também organizar a ordem de tabulação dos campos, para que a digitação de dados se torne mais rápida através do TAB ou ENTER para avançar o cursor entre os campos.

A questão do visual das janelas deve ser discutida em fase de planejamento do projeto durante a análise e levantamento de requisitos. Para garantir que o visual fique conforme a expectativa do usuário, os projetistas utilizam uma técnica conhecida como Prototipação, que consiste em uma prévia da tela desenhada em um documento. Este desenho é apresentado ao cliente para avaliação, e após a aprovação ela finalmente passa a ser desenvolvida.

Splash Screen

Durante o desenvolvimento de um software, é natural que haja a necessidade de executar uma série de instruções e validações durante a inicialização do sistema, como verificar o caminho do banco de dados, criar backups, carregar módulos e abrir tabelas. Essas instruções podem atrasar a inicialização e a exibição do sistema para o usuário. Consequentemente, o usuário pode pensar que o sistema não foi aberto e tentar abri-lo novamente, criando duas instâncias iguais do sistema na memória. Para evitar este problema, desenvolvedores criam telas de inicialização, também conhecidas como Splash Screen. Essa tela geralmente contém o nome do software e uma barra de progresso indicando o andamento da inicialização enquanto todas as instruções necessárias são executadas em segundo plano.

Backup

Sem dúvidas, este item é indispensável! Manter cópias do banco de dados garante uma maior confiabilidade no sistema quando for necessário recuperar informações. Porém, de nada adianta criar backups no próprio computador do cliente já que existe a possibilidade do disco rígido local ser danificado. Neste caso, o banco de dados e todos os seus backups serão perdidos, a menos que exista uma cópia em outro computador. Portanto, procure disponibilizar no sistema a opção para criar backups em locais remotos, como discos externos ou em outro computador na rede local. Outra opção bastante segura é salvar o backup em um diretório virtual na internet, popularmente conhecido como “nuvem”. Mesmo que aconteça uma falha geral na rede e nos dispositivos móveis do cliente, o backup estará armazenado na internet e poderá ser recuperado através de um simples download.

Embora este recurso esteja disponível, é provável que o usuário esqueça de salvar backups do banco de dados periodicamente. A solução é criar caixas de diálogo para avisá-lo do backup ou realizar a cópia silenciosamente, sem a intervenção do usuário. Um bom exemplo disso é configurar o sistema para salvar o backup em um diretório FTP todas as vezes que o sistema for finalizado ao final do dia.

Visual da aplicação

Este item não é obrigatório, mas com certeza é um diferencial importante em uma aplicação. Um visual agradável, com letras nítidas e cores leves traz uma maior comodidade para o usuário. A aplicação fica ainda mais rica quando dispõe a opção de personalização do visual, como aplicação de cores e temas. Atualmente é comum encontrar componentes na web com a finalidade de aperfeiçoar o visual de uma aplicação. Por exemplo, a interface Ribbon, presente nas versões 2007 e 2010 do pacote Microsoft Office, é uma das opções para modernizar a tela principal do sistema. O Ribbon pode ser utilizado no Visual Studio com o componente Elegant UI ou no Delphi com o pacote TMS Component Pack.

Procure também utilizar imagens bem definidas em menus e botões, de preferência no formato PNG. Na internet há dezenas de sites com pacotes de ícones e imagens para serem utilizadas em aplicações desktop e páginas web, como o IconArchive. Utilize imagens sugestivas de acordo com a função e procure padronizá-las nas telas em comum. Por exemplo, utilize a mesma imagem para os botões de relatórios e a mesma imagem distinta para os botões de Salvar, Alterar e Excluir. Essa prática permite que o usuário “associe” a imagem à funcionalidade do botão, minimizando a complexidade do sistema.

Em breve postarei o segundo artigo sobre este tema! Um abraço!

Publicado originalmente em O Núcleo

Desenvolvedor de sistemas há 6 anos em linguagens Delphi, C# e PHP. Bacharel em Sistemas de Informação, colunista sobre tecnologia e entusiasta em Desenvolvimento Ágil. Atualmente trabalha com processamento de dados e desenvolvimento de sistemas voltados para gestão administrativa.

Veja perfil e 5 post(s)

Sunday, April 8, 2012
no image

Palestra sobre Software Livre no Volday III (RJ)

Palestra ministrada no Volday III na La Salle em Niterói Rio de Janeiro, dia 24/3/2012.

Sorry, I could not read the content fromt this page.
Friday, March 16, 2012
no image

Mercado de Software: você é uma pessoa legal?

Muito se fala em primeiro computador e inclusão digital. O Brasil segue firme e forte como um dos principais mercados de tecnologia do mundo, vendendo milhões de computadores. Mas será que o brasileiro pensa no software?

Essa é uma questão vital e que gera imensas discussões. O brasileiro compra o produto bonitinho em sua loja preferida, leva para casa, liga tudo e aí faz o quê? Instala o software pirata que um amigo lhe emprestou, que comprou em um mercado ilegal qualquer ou mesmo baixou da internet. Essa é a triste realidade de um mercado que sofre muito por várias causas. Vamos começar por elas.

Primeiramente, softwares são os famosos programas: aplicativos feitos para o usuário instalar e realizar alguma tarefa em específico. Temos exemplos famosos, como PHOTOSHOP, COREL DRAW, EXCEL, WORD e por aí vai. Quando você pensa no computador, dificilmente pensa na máquina apenas (seja ele um desktop convencional ou um notebook).

Você compra o PC para realizar algo com ele e nisso está incluso o software. Mas esse é um aspecto que, na maioria das vezes, você consegue encontrar uma versão “genérica” (leia-se pirata) que vai sair muito mais baratinha. Imagine só pagar uma fortuna por um programa. Isso é um absurdo! Neste momento crítico está o maior absurdo de todos: você comprando algo ilegal.

Entende-se por ilegal tudo que é contrário à lei, ilícito, ilegítimo. Ou seja, você está (mesmo sem querer) matando o mercado de software e, com isso, fazendo com que as pessoas que ficam horas pensando em programas para agilizar a sua vida ganhem menos e parem de dedicar horas de trabalho a algo benéfico para você. Adquirindo software ilegal, você contribui para aumento de criminalidade, redução da arrecadação de impostos, além do aumento considerável do risco para o usuário. Lembre-se de que computadores com programas piratas têm riscos de segurança muito maiores.

Em um exemplo prático: em caso de roubo de informações em uma transação bancária ou compra qualquer, você perde automaticamente qualquer chance de apelo, pois está usando um software ilegal. SIM! Os bancos não se responsabilizam nesses casos. Claro que você não tem acesso aos principais recursos e documentação, nem qualquer garantia ou opções de atualização.

Não estou defendendo ou acusando quaisquer partes: fabricantes, revendedores ou consumidores. A questão aqui é que comercializar ou usar tais produtos é completamente contra a lei. Será que você usaria ou compraria um computador roubado ou de origem ilícita? Então, por que usaria um software? Pense nisso. Esta é uma questão em que nós, brasileiros, devemos pensar muito, pois essa conduta errada está se perpetuando como correta.

E você, é uma pessoa legal?

por Bruno Coelho: Gerente de Marketing da AGIS, uma das principais distribuidoras de TI e Telecom do país.

Eventos, cursos, livros, certificações, empregos, notícias e muito mais do mundo da TI (Tecnologia da Informação).

Veja perfil e 1308 post(s)

Monday, December 5, 2011
no image

Testes de software – As principais técnicas e porque realizar

A etapa de testes no processo de desenvolvimento de software ainda é vista com olhos ruins por muita gente. Na verdade, isso existe pelo conflito de interesses: os desenvolvedores de um lado, querendo mostrar que o seu programa é isento de falhas, e a equipe de QA do outro, buscando a qualquer custo encontrar falhas no sistema.

Mesmo que de certa forma tenhamos que trabalhar esses conflitos, é importante ter outra equipe que teste o que foi desenvolvido. Como já disseram por aí, “não existe filho feio para a mãe”, e o programador tem um tendência natural a achar que tudo que desenvolveu está perfeito.

Contudo trabalhar com somente com uma equipe pode não resolver todos os problemas. Ainda que essa seja boa o suficiente para cumprir o seu papel, o usuário é o verdadeiro tester, já que é quem usará o programa no dia-a-dia. Com a ideia do usuário como tester surgem dois conceitos, chamados de Teste Alfa e Teste Beta.

O Teste Alfa  é aquele realizado no ambiente do desenvolvedor, mas pelo usuário final do programa. Já o Teste Beta é realizado no ambiente do cliente, sem a presença do desenvolvedor, aonde o próprio cliente relata quais são erros observados que serão posteriormente corrigidos.

Os testes de software podem ainda ser classificados quanto a  técnica utilizada. Dentre eles os principais são:

Teste Caixa Branca: São os testes estruturais, baseando-se na estrutura e procedimentos utilizados no programa, analisando os laços, condições de if/else. Através do código (ou algoritmo) são analisados casos a busca de erros.
Teste Caixa Preta: O teste caixa preta baseia na especificação de interface do programa, observando-se entradas e saídas, ou seja, se a saída produzida realmente condiz com a saída esperada, em relação ao que foi inserido como dado de entrada.

Existe ainda a Técnica Baseada em Erros, que se baseiam na inclusão de erros propositais (artificiais) como forma de revelar erros existentes previamente (naturais).

Por fim, lembre-se: bons testes de software são aqueles que apresentam maior probabilidade de revelar erros ainda não descobertos!

Marcadores: , ,

Gabriella Fonseca é desenvolvedora web com boa experiência em empresas como CPM Braxis Capgemini e VELP Tecnologia. É ainda universitária, cursando Sistemas de Informação na PUC-MG. Desenvolvimento é sua paixão e teve certeza disso depois do convívio com os colegas de estágio enquanto fazia o curso de Matemática Computacional na UFMG. Apesar de relativamente curta, sua carreira é marcada pelo reconhecimento do que tenta fazer de melhor. Em 2010 recebeu a premiação de Melhor Projeto Asp.Net pelo programa Microsoft Students to Bussiness. Como sempre foi apaixonada por Matemática, durante o ensino médio recebi Menções Honrosas na OBMEP 2005, OBM 2005, OBMEP 2006, OBMEP 2008 e medalha de bronze na OBMEP 2007. Tem um bom conhecimento de desenvolvimento Web - especialmente .Net, mas é capaz de desenvolver aplicações simples para Android ou fazer correções e adicionar funcionalidades em um sistema PHP. Foca em desenvolvimento web, pesquisa e otimização de sites, marketing digital, redes sociais e comunicação interativa. Bloga em www.eufacoprogramas.wordpress.com e dá pitacos em www.techlivre.com.br

Veja perfil e 26 post(s)

Sunday, December 4, 2011
no image

Processo de Software e a Qualidade de Produto

Quando aprendemos a programar, tão pouco imaginamos o quanto é extenso o mundo de Processo de Software ou tão pouco sabemos que ele existe. Em alguns casos, quando somos apenas “meros” programadores, o fato de dominar uma linguagem em si e ter uma excelente lógica de programação, nos passa uma falsa segurança de achar que são suficientemente únicos para gerar um produto de “qualidade”.

Acredito que todo bom programador já deve ter tido sua fase de modo “REC”, no qual já inicia o desenvolvimento do código enquanto o cliente “expõe” suas ideias.

No final, os resultados são sempre os mesmos. Frustrações! Produto gerado sem conformidades com o que realmente o cliente precisa, gastos excessivos com manutenções e correções, etc. Contudo, isso não quer dizer que o programador é ruim. Apenas faltou o emprego de um Processo de Software.

Mas o que é afinal, um Processo de Software?

Um Processo Software é um conjunto de atividades, parcialmente ordenadas com a finalidade de obter um produto de software e é considerado um dos principais mecanismos para se obter um software de qualidade. (Wikipédia)

Então, tudo que precisamos para gerar um produto de software de qualidade é um bom Processo de Software que se adapte a realidade de uma empresa. Porém, não basta “apenas” implementá-lo, ou seja, deve-se ter o gerenciamento do processo como um todo a fim de garantir que ele seja executado corretamente entre os envolvidos, ou caso contrário, o caos tomará conta de tudo trazendo o resultado inverso do que se esperava.

Ao implementar o processo, você poderá encontrar algumas pedras pelo caminho. Implementar um processo confronta diretamente a cultura da empresa, resistência e falta de cooperação dos envolvidos, falta de estrutura, de pessoal qualificado, etc. Porém, é como a maioria das coisas, que no início, é muito complicado e trabalhoso.

Como vimos na definição, o Processo de Software visa à qualidade do produto de software. Mas como podemos definir esta qualidade?

Este conceito pode ser considerado como um processo sistemático que focaliza todas as etapas e artefatos produzidos com o objetivo de garantir a conformidade de processos e produtos especificados, prevenindo e eliminando defeitos.

Em outras palavras, a qualidade de software é estar em conformidade com requisitos funcionais e de desempenho explicitamente declarados de desenvolvimento, que devem ser claramente documentados e as características implícitas que são esperadas de todo o software desenvolvido.

Para que isso seja possível, as fases do processo devem ser bem elaboradas e trabalhadas, efetuando devidas revisões para uma contínua melhoria e amadurecimento do processo e de seus artefatos. Um exemplo de modelo, podemos citar como fases: Concepção, Elaboração, Construção e Transição, no qual é feito um estudo de viabilidade, coletas de casos de uso, análise de requisitos, modelagem, desenvolvimento, revisões, etc.

Outra característica importante de um Processo de Software é que ele visa à diminuição de falhas, ou seja, elaborar de forma sistemática Casos de Teste a fim de identificar e corrigir erros já na fase inicial do projeto. Corrigir erros no início do projeto é bem mais barato do que depois de entregue. Em outras palavras, entregar um produto de software sem falhas garante a confiabilidade, eficiência e integridade do produto.

Mas, por que utilizar um Processo de Software?

Dentre os fatos acima e muitos outros, posso citar também que:

Mais de 30% dos projetos são cancelados antes de serem finalizados.Mais de 70% dos projetos falham nas entregas das funcionalidades.Os custos extrapolam em mais de 180% do orçamento inicial.Os prazos excedem em mais de 200% os cronogramas originais.

Existem alguns modelos de Processos de Software, como os modelos em Cascata (CMMI), Espiral, Ciclo de Vida, Ágeis (SCRUM, XP), etc.

Para escolher o modelo ideal, é preciso conhecer um pouco sobre cada um deles e ver qual se adapta melhor à realidade da empresa, levando em consideração fatores como: investimento, tamanho de equipe, pessoal qualificado, entre outros.

Sem dúvidas, podemos definir que o Processo de Software amadurece a equipe e a visão sobre o desenvolvimento como um todo, garantindo um produto de software com qualidade e de consequência, a satisfação do cliente.

Fonte: Blog Rafael Amaral
Twitter: @rafaelamaralll

Wednesday, November 30, 2011
no image

Desenvolvimento de Software: Custo da Qualidade

Segundo a American Society for Quality a qualidade é o “grau até o qual um conjunto de características inerentes satisfaz as necessidades”. No contexto de qualidade temos duas visões:

Visão do Produtor: a qualidade do produto está totalmente relacionada com os requisitos estabelecidos.Visão do Cliente: a qualidade está relacionada a “adequação ao uso” ou as necessidades do usuário.

Os times destinados a trabalhar neste meio devem encurtar o gap existente nestas duas visões. Para tal objetivo trabalha-se na Garantia da Qualidade e o Controle da Qualidade.

A Garantia da Qualidade são todas as atividades com o intuito de prover uma confiança adequada para os produtos e serviços de acordo com os requisitos especificados. O time da Garantia da Qualidade deve definir políticas e seguir modelos para desenvolver de forma contínua melhorias no processo de desenvolvimento. Metodologias de desenvolvimento, estimativa do processo, processos de manutenção, processos de definição de requisitos, processos de teste, padrões de desenvolvimento, treinamentos, documentação são exemplos de ações que um time de garantia pode realizar. Lembre-se que a qualidade do produto está relacionada a qualidade do processo.

Todo o trabalho e/ou ações que são produzidos na Garantia da Qualidade devem ser controlados. Com este objetivo definimos atividades para o processo de Controle da Qualidade. O foco do Controle da Qualidade é identificar defeitos nos produtos ou artefatos produzidos. Teste de software é uma atividade do Controle da Qualidade. A atividade de teste pode ser incluída em todas as fases do desenvolvimento de software, através de inspeções, revisões e execução de casos de teste.

Todas estas atividades têm um custo associado, sendo que, para que possamos calcular o custo da qualidade devemos considerar três elementos: o custo da falha, o custo da prevenção e o custo da avaliação, sendo cada um deles apresentados abaixo:

Custo da falha: custos associados com produtos defeituosos entregues ao cliente. Podemos associar a este custo os reparos, a utilização da equipe de help desk, bem como, os danos causados por um defeito.Custos da prevenção: são todos os custos associados com atividades que objetivam evitar defeitos. Podemos citar treinamentos, definição de métodos e procedimentos e aquisição de ferramentas. Observe que praticamente todas as atividades do time de Garantia da Qualidade estão associadas a este custo.Custo da avaliação: por fim, são todos os custos associados com a detecção de defeitos. Neste elemento podemos citar as atividades de teste de software, tempo gasto na automação de scripts de teste, revisões e inspeções.

Obviamente que o custo irá variar de uma organização para outra considerando a atividade que cada uma delas está disposta a fazer. A equipe de Garantia da Qualidade deve ser a responsável por identificar os custos destes três elementos, bem como, prover ações para minimizar o custo da falha.

Normalmente as organizações focam no custo de avaliação, porém, se o investimento for maior na prevenção ao longo do tempo o custo da falha e da avaliação tende a diminuir.

André Tocchetto. Meste em Computação Aplicada, CSTE e ITIL v2 Foundation. Atualmente atua como Coodenador da TI, Professor e Coodenador de Curso Tecnólogo em Análise e Desenvolvimento de Sistemas. Twitter: @tocchetto

Veja perfil e 1 post(s)

Tuesday, November 1, 2011
no image

Software livre na educação

Os alunos estão mais exigentes e os professores precisam se adequar a essa nova realidade. Como ferramenta para auxiliar o professor o computador vem sendo introduzido na educação, mas devido ao custo alto dos softwares proprietários, algumas escolas não tem conseguido atingir esse objetivo. Como alternativa ao custo alto do software proprietário esse trabalho apresenta softwares livres educacionais que facilitam a inclusão do computador no meio educacional.

Chamar a atenção de alunos que tem acesso o tempo todo a diversos tipos de informação não é fácil. O modelo educacional onde o professor fala e o aluno ouve e aceita não funciona mais. Hoje, o papel do professor é o de aproveitar o conhecimento já adquirido pelo aluno e mostrar-lhe o caminho para aprimorar e aumentar seu conhecimento.

O computador tornou-se indispensável no meio educacional e desde que utilizado de forma planejada, tem se apresentado a favor de uma educação mais dinâmica, trazendo de volta o interesse do aluno em aprender. O uso de tecnologias possibilita ao professor uma diversidade maior de atividades fazendo com que o aluno desenvolva melhor algumas habilidades como autonomia, resolução de problemas de forma mais próxima da sua realidade, organização de suas informações, habilidade investigativa, entre outras dependendo da faixa etária de cada aluno. Um dos inviabilizadores da implementação do computador nas escolas é a falta de recursos financeiros. Os softwares proprietários encarecem e muito o preço final do computador devido à cobrança de licenças para sua utilização. Na contra mão do problema tem-se os softwares livres que são de acesso gratuito.

O uso do software livre, hoje em dia oferecidos com grande diversidade em língua portuguesa, dispensa gasto com licenças proprietárias e assim, como salienta Silveira (2003 p.41), ao invés de sermos eternos pagadores de royalties, “tais recursos poderiam ser canalizados para outros fins, como a compra de hardware ou empregados na formação, treinamento e educação digital”, pois tão importante quanto garantir o acesso as TICs (Tecnologia da Informação e Comunicação) é capacitar as pessoas, em especial, as comunidades mais desfavorecidas para a utilização da tecnologia em favor do exercício da cidadania.

O processo ensino-aprendizagem se dá na interação entre professor e aluno, aluno e aluno e de ambos com o mundo e seus acontecimentos provocando mudanças no indivíduo, podendo ser permanentes ou não. Aprender é o processo de adquirir conhecimento, valores, habilidades e essencialmente do desenvolvimento da capacidade de pensar. Devemos nos preocupar com um sistema educativo muito padronizado, pois este pode produzir sujeitos muito acomodados, desvalorizando a autonomia da criatividade.

Com a mudança do paradigma educacional, aprender tem o significado de ir além da instrução direta podendo acontecer em ambientes virtuais criativos e mais chamativos para o indivíduo. O uso de novas tecnologias como o computador, tem facilitado a vida de professores que já aceitaram essa nova realidade, proporcionando interação e um ensino mais eficaz para a realidade atual.

Os primeiros experimentos do uso do computador na educação começaram na década de 50 logo depois do início de sua comercialização. Pouco tempo depois, Burrhus Frederic Skinner (1904-1990) criou a Máquina de Ensinar. Em 1970 Seymour Papert desenvolveu a Linguagem de Programação Logo. Esses dois experimentos propiciavam ao aluno deixar de lado a preocupação no certo e errado, dando mais importância ao processo como as coisas acontecem e com a solução para os problemas apresentados, deixando o sinônimo de erro como punição, intimidação e frustração de lado, fazendo com que cada aluno aprendesse no seu ritmo sem desestimular aqueles com um pouco mais de dificuldade.

Muitos foram os experimentos e desde os primeiros os professores foram temerosos em relação a adotar essa nova ferramenta que deixa de lado a imagem do professor como detentor do saber e desterritorializa a instituição escolar. As novas tecnologias são importantes, pois ampliam o conceito de aula, espaço e tempo e de comunicação audiovisual, estabelecendo novas referências em relação ao presencial e o virtual, tomando o devido cuidado para que o computador não seja considerado apenas mais um aparato de alto custo não proporcionando uma aprendizagem significativa para o aluno. Cabe lembrar que o computador não é a solução para os diversos problemas da educação e sim, um facilitador, um motivador ao aprendizado, uma ferramenta que veio para somar, através de uma linguagem com a qual os estudantes estão familiarizados.

Com o passar dos anos, a visão dos professores em relação ao uso do computador na educação mudou, os professores estão mais abertos a essa nova situação e os alunos estão mais colaborativos. O uso do computador na escola deve vir acompanhado da reflexão a respeito da necessidade de mudança na forma de geração da aprendizagem.

Experiências realizadas em países onde as escolas já oferecem aos seus estudantes a tecnologia como facilitadora do ensino indica que o computador graças à internet, tem uma grande capacidade de formar redes, efeito imprescindível também fora do ambiente escolar. Tudo isso incentiva o aluno a desenvolver rapidez de raciocínio, ser humano multitarefa, tomada de decisão de forma mais eficiente, abrir novas dimensões intelectuais e, principalmente desenvolver o trabalho em equipe tão exigido atualmente fora do ambiente escolar.

Nada como ensinar geografia de forma que o aluno possa “sobrevoar” diversos relevos e vegetações do planeta e executar experiências com substâncias tóxicas sem o perigo de explodir o laboratório. Tudo isso o computador propicia a alunos e professores através dos softwares educacionais.

Podem ser considerados softwares educacionais aqueles que foram projetados com base em uma metodologia que os contextualiza no processo de ensino-aprendizagem. O primeiro indício do uso de um software educativo foi em uma máquina para corrigir testes de múltipla escolha criada por Dr. Sidney Pressey em 1924. Nessa máquina, o módulo era apresentado o conteúdo e no final, o aluno deveria responder uma questão em um espaço em branco ou escolher uma resposta correta entre diversas alternativas apresentadas. Se a resposta estivesse correta o aluno passaria para o próximo módulo, caso contrário, o programa forneceria a resposta correta ou o aluno poderia ser convidado a rever o módulo com o objetivo de remediar o processo de ensino. Empresas no início dos anos 60 investiram muito na produção de softwares educacionais com a ideia de revolucionar a educação. O problema é que os computadores nessa época ainda eram muito caros para que as escolas os adquirissem. A disseminação do software educacional somente aconteceu com a chegada dos microcomputadores.

O software educacional somente poderá contribuir como facilitador do processo de ensino-aprendizagem, se alguns fatores forem obedecidos a rigor como metodologia empregada no software, qualidade, se atendem as necessidades e a faixa etária indicativa. Os testes também são muito importantes, pois não devemos simplesmente escolher um software de qualquer tipo que seja somente pela embalagem. O professor deve também se preocupar com o contexto onde este software será utilizado.

O software educacional pode apresentar várias vantagens como aumentar a interação do aluno com o conteúdo apresentado, permitir a individualização na aprendizagem do aluno, estimular e promove a autoestima no aluno, apresentar lições de modo criativo, atrativo e integrado, proporcionar retroalimentação, controle e avaliação imediatos da aprendizagem.

Como principal e mais problemática desvantagem encontramos o custo para aquisição do software proprietário, que são produtos criados por desenvolvedores ou empresas que detêm os direitos sobre o produto onde a cópia, modificação ou redistribuição são de alguma forma proibida pelo seu desenvolvedor ou distribuidor. Para que os itens citados sejam permitidos, faz-se necessário a aquisição de uma licença de alto custo, principal inviabilizador do uso do software educacional. Todos estes custos com o software proprietário acabam inviabilizando o uso do software educacional. Uma alternativa aos softwares proprietários seriam os softwares livres que tem como principal vantagem o custo quase zero.

O Software Livre é todo aquele que oferece ao seu usuário a liberdade de utilizá-lo para seu proveito, executando os programas para quaisquer propósitos, copiando, distribuindo, estudando seu funcionamento, modificando, aperfeiçoando e customizando seu código fonte, sem precisar pedir autorização para outrem, de modo que toda a sociedade se beneficie (LAMAS, 2004).

A maior vantagem do uso do software livre na educação é que se faz desnecessário investir em licenças para sua aquisição, futuras atualizações e customizações. Com o investimento que se faz para montar um laboratório de informática com equipamentos utilizando software proprietário é possível montar dois laboratórios de informática. Na educação, o dinheiro economizado com a não atualização forçada do hardware pode ser aplicado de outra forma como, por exemplo, na capacitação dos professores. Máquinas que seriam consideradas obsoletas para se utilizar software proprietário são usadas por usuários de software livre, pois este tipo de software pode ser customizado para um hardware considerado ultrapassado.

Para Silveira e Cassino (2003), o Software Livre representa uma opção pela criação, pela colaboração e pela independência tecnológica e cultural, uma vez que é baseado no princípio do compartilhamento do conhecimento e na solidariedade praticada pela inteligência coletiva conectada na rede mundial de computadores.

Como exemplos de softwares livres educacionais podemos citar o Edubuntu, distribuição Linux desenvolvida pela Canonical Ltda. baseada no sistema operacional Ubuntu especificamente para ambientes escolares, o Gcompris, coletânea com 80 atividades muito atraente para as crianças, o KBruch que apresenta as operações matemáticas de forma bem colorida, o TkGeomap que mostra dados geográficos. A lista é muito variada e com certeza dificilmente deixará o professor na mão. A educação deve favorecer a ética e a formação da cidadania. Independentemente de escola pública ou privada. A educação não é mercadoria e não deve ser tratada como tal.

Referências

LAMAS, M. Software livre ao seu alcance. Rio de Janeiro: Beto Brito, 2004.
SILVEIRA, S. A.; CASSINO (Org.). Software Livre e Inclusão Digital. São Paulo: Conrad Editora do Brasil, 2003.
SILVEIRA, S. A.; CASSINO (Org.). Software Livre e Inclusão Digital. São Paulo: Conrad Editora do Brasil, 2003.

Professora de informática, graduanda do curso Análise e Desenvolvimento de Sistemas da FATEC de Presidente Prudente - SP

Veja perfil e 1 post(s)

Wednesday, September 14, 2011
no image

Sr Software Engineer

Sorry, I could not read the content fromt this page.Sorry, I could not read the content fromt this page.

View the original article here

Thursday, September 1, 2011
no image

Brasil é 5º país em pirataria de software

Segundo o levantamento da Business Software Alliance (BSA), o Brasil é o 5º país no ranking global de pirataria de softwares com quase 97 mil downloads sem licença no período de janeiro a junho de 2011.

À frente do Brasil estão os Estados Unidos, Itália, França e Espanha. O ranking leva em conta os downloads realizados em redes de compartilhamento de arquivos, redes sociais e outros canais.

O estudo começou a ser feito no segundo trimestre de 2010, quando o Brasil registrou 139 mil downloads, o que mostra que a taxa de pirataria vem diminuindo. Mas, esse número pode não revelar a realidade, pois muitos usuários fazem downloads de sites hospedados fora do país.

O prejuízo registrado pelos fabricantes de software causado pela pirataria no Brasil foi de US$ 2,62 bilhões em 2010, contra US$ 2,25 bilhões em 2009.

Com informações de INFO

Friday, August 12, 2011
no image

Os principais mitos do desenvolvimento de Software

Os mitos de software são “falsas verdades” que existem no mundo da indústria de software. Tanto jovens engenheiros quanto pessoas mais experientes tendem a acreditar neles, distorcendo a verdadeira face do processo de engenharia. Os mais comuns são:

Desenvolvimento não é uma receita de bolo! Os clientes são diferentes, os projetos são diferentes, os programadores são diferentes, as prioridades dependem do projeto. Basicamente, TUDO é diferente. Não pense que um site de ecommerce que você desenvolveu para a empresa X valerá para a empresa Y, e vice-versa. O planejamento é fundamental e só então você poderá levantar os requisitos necessários e trabalhar em cima de um novo projeto.

Por mais que exista o conceito de “Fábrica de Software” não podemos pensar no processo de desenvolvimento como uma linha de produção. Ao se inserir um programador em um projeto, ele levará algum tempo para se familiarizar com o código e com o que está sendo feito, para então, começar de fato a produzir. Outro grande pecado que muitos gestores comentem é tratar o programador como “pedreiro”, como um “peão”. Se o o desenvolvedor não entende nada do processo da empresa para o qual está desenvolvendo, tenha certeza que não poderá contribuir da melhor maneira possível. Mais um vez, quero frisar: Desenvolvimento não é linha de produção. Alocar programadores para resolver um problema de cronograma poderá surgir efeito contrário, causando mais problemas!

Quando um projeto é muito trabalhoso, requer know-how maior do que a sua equipe possui ou o cronograma está apertado, muitos optam pela terceirização achando que esta é uma garantia de tranquilidade e nenhum trabalho. Contudo, tome cuidado: Se a empresa X contratou você, você é o responsável pelo trabalho que está entregando. Ou seja, qualquer problema será um problema seu também! A maioria das empresas terceiriza o serviço, mas ao comprar o código, fica responsável por suas manutenções. Aí fica a pergunta: A terceirização fez o serviço direito? Comentou o código? Documentou o que foi feito? Sua equipe tem pessoal para trabalhar nesse código? Pense bem antes de terceirizar algo que não poderá trabalhar bem no futuro. É melhor recusar um projeto do que faze-lo mal feito.

Se você é desenvolvedor já deve ter se deparado com um usuário que só queria um ajustizinho no sistema: “só adicione um botão que faça isso e busque aquilo e faça isso ficar cor de rosa e brilhar girando”. Sim, essas coisas acontecem! Ao se pensar em um software deve-se mapear o máximo possível de suas funcionalidades a serem desempenhadas. É claro que em um primeiro momento é difícil pensar em tudo, alguma coisa ou outra vai entrar como correção. Mas pensar em algo básico demais e querer enfeita-lo demais depois, envolve mais tempo e o pior: retrabalho! Desenvolvedores geralmente não gostam de destruir algo para faze-lo de outra forma, pois o cliente mudou de ideia. Aliás, ninguém gosta. Como eu disse, existem exceções, mas se você não entende de desenvolvimento e só gerencia o processo, não pense que os seus “detalhes” são realmente detalhes quando viram linhas de código!

Mais uma vez, se você não é desenvolver e não entende do processo, não julgue uma atualização como simples. Somente um programador poderá avaliar o quão simples uma alteração é – e muitas vezes, ela só vai realmente ter a ideia depois que estiver trabalhando com o código. Mesmo que você tenha uma boa equipe, modificações devem ser analisadas, discutidas com relação a sua viabilidade e testadas. Lembre-se sempre: alocar um programador requer algum tempo para que esse se familiarize com o que vem sendo feito. As coisas não são tão simples.

Esses dois tópicos são assutadoramente passados adiante e você já deve ter ouvido isso de alguém. Se um programa roda isso não garante que o seu trabalho está feito. Todo o processo de desenvolvimento deve buscar a qualidade e apenas funcionar não lhe garante isso – ou seja, o processo da avaliação de qualidade não se limita a essa etapa. O seu código é bem comentado? Está bem feito? Otimizado? A tecnologia utilizada é adequada? Os banco de dados estão otimizados? Sua relações foram criadas corretamente? A infraestrutura do cliente suporta o que está sendo desenvolvido? Se o seu sistema foi feito para suportar vários acessos, ele realmente suporta isso? Um programa é mais do que o executável. Você vende todo o processo.

Em alguns casos, o produto “palpável” que o cliente recebe é somente o executável. Em outros, trabalha-se com o código fonte e com a documentação. Contudo, independente do caso, lembre que, como foi dito no item anterior: Um programa é mais do que o executável. Você vende todo o processo de desenvolvimento. Por isso, deve-se pensar e faze-lo com perfeição.

Planejamento é fundamental! Muitas pessoas aindam confundem planejamento com “papelada” e estas estão terrivelmente enganadas! Mesmo trabalhando-se em um time Agile, planejar é fundamental! A documentação do projeto será trabalhada na melhor metodologia adotada mas um plano do que será feito deverá ser estudado antes de “colocar a mão na massa”. Somente com o estudo dos processos e necessidades do cliente você conseguirá criar um software que trabalhe com excelência!

Originalmente postado em Eu Faço Programas

Wednesday, July 27, 2011
no image

Atualize seu Blackberry para o “BlackBerry Device Software v5.0 ou v6.0″

A Research in Motion (RIM) liberou uma nova versão do sistema operacional do BlackBerry, o BlackBerry Device Software v5.0 ou v6.0, dependendo do aparelho.

A empresa destaca as seguintes novidades:

Melhorias no BlackBerry® Maps;Mensagens SMS com visual de bate-papo e emoticons;Recursos do Gmail™ integrados;Melhorias para o BlackBerry® Browser;entre outros.

Os aparelhos compatíveis com a atualização, são:

Smartphone BlackBerry® Curve™ 8330Smartphone BlackBerry® Curve™ 8350iSmartphone BlackBerry® Curve™ 8520Smartphone BlackBerry® Curve™ 8530Smartphone BlackBerry® Curve™ 8900Smartphone BlackBerry® Storm™ 9530Smartphone BlackBerry® Storm2™ 9550Smartphone BlackBerry® Tour™ 9630Smartphone BlackBerry® Bold™ 9000Smartphone BlackBerry® Bold™ 9650Smartphone BlackBerry® Bold™ 9700

Para baixar esta nova versão, abra a página de atualização, clique no botão "Atualização" e salve ou execute diretamente o aplicativo. Acompanhe os passos que o software apresentar e siga-os rigorosamente para não ter problemas!

*Se você não visualizar o botão "Atualização", abra o link no Internet Explorer que o mesmo vai aparecer.

Lembre-se: mantenha sempre seus softwares atualizados, não só para ter acesso a novas funcionalidades, mas por questões de segurança também!

Até a próxima!

Tuesday, July 5, 2011
no image

Custo de software, qual a melhor maneira de reduzí-lo?

Todos desejamos reduzir custos de qualquer tipo, tanto os pessoais como o de empresas. Na área de TI, podemos utilizar o TCO (Total Cost of Ownership) para nos ajudar a verificar custos e ações gerenciais para reduzi-los, relacionados a sistemas da empresa.

Utilizado pela primeira vez em 1987, o TCO  foi criado pelo Gartner Group, como medida e aproximação para gerenciamento e redução de custos, envolvendo pessoas, processos e tecnologia. Neste cenário, precisamos estar cientes que os custos relacionados a sistemas, não estão restritos apenas aos custos de aquisição ou desenvolvimento dos mesmos.

Na verdade, o ciclo de vida de um sistema incorpora o ciclo de desenvolvimento do mesmo além do custo operacional que considera os envolvidos em manutenções, tanto corretivas quanto evolutivas.

Neste contexto, a ISO/IEC 12207 considera o desenvolvimento e manutenção do software como processos que compõem o ciclo de vida de software, desde sua criação até a descontinuação do mesmo, compondo o TCO relacionado ao produto de software.

Deste modo, o custo de manutenção torna-se um ponto de grande importância para as empresas. No dia a dia percebe-se que muitas pessoas não possuem um sentimento claro, do quanto pode custar a manter um sistema de baixa qualidade em operação após sua implantação.

Já presenciei empresas com legado composto por diversos sistemas sem documentação, baixa qualidade e que, frequentemente, apresentam problemas de funcionamento. Além das paradas no negócio da empresa, estes sistemas geram perdas imensuráveis, relacionadas à sua imagem perante o mercado e clientes. Isto quando os usuários previstos para o sistema acabam nunca utilizando o mesmo, devido a ele cair em descrédito. Neste caso, todo o investimento é perdido por desinteresse em sua utilização.

Você continuaria utilizando uma operadora de telefonia celular que vivesse fora do ar? Para quantas pessoas você falaria mal desta empresa e qual seria o impacto no negócio da mesma? Qual o prejuízo gerado para ela?

O que já vi algumas vezes e que infelizmente acabarei vendo novamente, são pessoas acreditando que desenvolver software utilizando processos e o paradigma Orientado a Objetos, não são necessários e até mesmo, bobagem. Simplesmente acham que não vale a pena gastar e esperar mais, para ter seus sistemas desenvolvidos utilizando as melhores práticas de Engenharia de Software de mercado.

A verdade é que tudo que deixa de se gastar desenvolvendo software AD HOC, se gasta muitas vezes mais nos processos de manutenção dos sistemas, além de eventuais impactos imensuráveis de imagem junto ao usuário e/ou cliente.

Mas pense bem, se fosse realmente bobagem utilizar metodologias e orientação a objetos, por exemplo, por que grandes empresas como a Sun Microsystems, atualmente adquirida pela Oracle, teria gasto tanto esforço de excelentes profissionais nesta área?

Estudos mostram que cerca de 50% do tempo gasto em manutenções é gasto no processo de entendimento do código a ser manutenido (Fjeldstad & Hamlen, 1983; Standish, 1984). Isto evidencia a importância de um código bem implementado e documentado.

Redução de custos, o que todos desejam

Com o propósito de reduzir custos, podemos mesclar uma série de opções, tais como, renegociar com fornecedores, trocar fornecedores, ajustar Acordos de Nível de Serviço, realizar (re)engenharia de processos de negócios, rastrear gastos, considerar alternativas de Outsourcing, trocar recursos para localização de custos mais baixos substituir tecnologias/sistemas ultrapassados, gerenciar portfólio TI e minimizar custos operacionais com TI.

Dos pontos apresentados acima, percebemos que substituir tecnologias/sistemas ultrapassados, através de outras mais alinhadas ao negócio da empresa e minimizar custos operacionais com TI, através da utilização de sistemas com custos de manutenção menor e maior qualidade, estão alinhados aos objetivos da Engenharia de Software.

A grosso modo, todas as empresas querem e precisam gastar o mínimo possível na aquisição e manutenção de sistemas.

Também as empresas que desenvolvem software querem produzi-los no menor custo e prazo.

Novamente, a Engenharia de Software pode ajudar muito para se atingir estas metas.

Mas como aumentar a qualidade do software?

Podemos citar algumas sugestões, tais como, utilização de uma Metodologia de Desenvolvimento de Sistemas faseada, que possua processo formal de testes/qualidade e documentação, esta para agilizar eventuais manutenções evolutivas e correção de bugs. Primordialmente devemos ter um eficaz levantamento e gerenciamento de requisitos, utilizar equipes de desenvolvimento e testes com pelo menos um profissional sênior, utilizar as melhores práticas de mercado, utilizar design patterns que são soluções de mercado testadas e utilizadas por centenas de profissionais e empresas há muito tempo.

Para saber mais, leia o livro Engenharia de Software na Prática: Editora Novatec, 2010. ISBN 978-85-7522-217-1

Tuesday, June 7, 2011
no image

Software Development Manager (m/f)

Our client is a leading e-commerce company acting globally. The product range has been continuously expanded and a worldwide network of logictics and customer service centers has been built.
For the Development Centre in South Africa we are currently searching for a strong
Your Key Responsibilities: Defining, implementing and maintaining a coherant and progressive development strategy for the client's product line Translation of functional and technical requirements into detailed project plans and schedulesEvolution of the software engineering practise within the organization, including better reporting, tools and evolution of development methodologyMaintaining current technical knowledge to support rapidly changing technologyManagement of departmental resources, staffing and maintaining a best-of-class engineering team
Your Profile:
Bachelor's or Master's Degreee in Computer Science or equivalent5-10 years experience in software development, 2-5 years as Development ManagerExperience with Ruby, Perl, Java or C/C++Experience with Java, Linux/Unix, XML, Web services and UNIX toolsProject management success on similar projects, emphasis on high-volume web-based applicationsStrong leadership and presentation skillsStrong customer focus and results-oriented person Excellent wirtten and oral communication skills in English

We are seeking for a motivated, dynamic and customer focused personality with strong leadership skills, who is looking for a challenge in a multicultural environment. We are looking forward to receiving your application incl. photo with reference number 28.685 by email or by our Online Application Portal.

Visit www.ISG.com- here your can find new job offers every day.



View the original article here

Sunday, May 29, 2011
no image

Overview de Qualidade de Software

O conceito de qualidade de software é muito extenso e vai muito além de ter problemas ou os populares “bugs”, existem muitos fatores determinantes para a qualidade de um software, o principal como em qualquer segmento é “atender as necessidades do cliente”. Trato neste artigo principalmente sobre qualidade de processos, mas afinal para que serve um processo?

Um processo é um conjunto de atividades que devem ser feitas para chegar a uma meta. Atualmente qualidade de processo tem Sido preocupação de empresas que visam crescimento, aumento do número de clientes e consequentemente de trabalho. O que acontece em uma empresa sem processos é que as coisas são feitas “conforme a cabeça do desenvolvedor”, não é seguida uma linha de trabalho ou mesmo de raciocínio coletivo, o que ocasiona uma certa confusão.

Melhorar processos atingindo uma qualidade de processos é fator altamente determinante para a qualidade do produto, eu disse altamente determinante e não garantia de qualidade de produto. Buscar um caminho é o primeiro passo para uma empresa que pretende organizar seus processos. Escolher um guia, como o CMMI, por exemplo, saber aonde esta, aonde o mercado esta e aonde quer chegar, para a partir dai poder caminhar. “Quando não se sabe para onde esta indo, qualquer lugar serve”.

Uma empresa sem controle de processo enfrenta algumas dificuldades, como o improviso pelos profissionais de gerencia que vivem basicamente “apagando fogo”, os profissionais da empresa acabam não confiando em processos e aí mesmo o que tiver documentado não é seguido por não verem motivos para seguir e muito do conhecimento da empresa fica apenas na cabeça de um ou outro profissional, sendo que no momento que este se ausenta a empresa tem grandes prejuízos e dificuldades. Enquanto que uma empresa com processos bem controlados as equipes trabalham com apoio da alta gerencia, os profissionais seguem os processos, a qualidade de produto e processo é avaliada com métricas exatas e a empresa sabe bem em que tecnologias investir tratando-se de hardware e software.

Hoje a qualidade de processos já tem sido usada inclusive como marketing para algumas empresas. O fato é que grandes potências já aceitam como fornecedores apenas empresas com seus processos certificados, vejo este ponto como positivo pois incentiva o empreendedor a qualificar seus projetos e cria uma visão critica do cliente, que vem a valorizar as empresas que investem e visam sempre a qualidade.

Na empresa que você trabalha, como é o controle de processos? Compartilhe suas experiências (sem citar nomes, claro).

Referências:

TQC – Controle da Qualidade Total – Vicente Falconi CamposQualidade de Software – Andre Koscianski   Michel dos Santos SoaresEngenharia de Software – Ian Sommerville
Saturday, February 19, 2011
no image

Porque software proprietário não é bom pra ninguém

Com essa onda anti-pirataria, quem tem perna de pau e um tapa-olho que se cuide.

Mas daí vem aquela pergunta: “Como usar um sistema operacional sem ter que pagar por ele?”

É claro que logo vem os xiitas de plantão dizer que a melhor opção é o Linux, que é gratuíto, atualiza normalmente, é seguro, é rápido, mas vale a pena deixar de lado todo um processo de adaptação dos sistemas da Microsoft para uma nova (quase sempre confusa) realidade?

Minha resposta é: Sim, vale!!!

Tanto Windows, MAC e Linux são proprietários, a diferença entre eles é que no Windows e no MAC o sistema está “atrelado” ao equipamento.

Software proprietário não é bom pra ninguém porque pra quem não sabe, a licença de sistema operacional morre com o equipamento. Se acontece um desastre do usuário ter que trocar o equipamento ou o mesmo é roubado, a sua licença não servirá para o novo equipamento.

Ah, mas isto não é novidade, não é? Mas quem pensa nessa possibilidade?

Órgãos públicos vivem na ilegalidade, pelo menos os que eu conheço. Os equipamentos rodam o famoso “XP” pirateado e há uma certa resistência em mudar essa realidade porque as pessoas parecem que tem preguiça de aprender, não querem se readaptar – embora o custo seja bem menor.

Outro dia um desses defensores de software proprietário me questionou se eu estava preparado para suportar a pressão no caso de uma mudança drástica de sistema operacional e migrar tudo para linux. Sim, se as pessoas se empenharem em aprender  (porque o maior entrave que eu vejo é no desejo pessoal de cada um) e quiserem realmente mudar. Onde está o espírito aventureiro?

Quando se opta pelo software proprietário o investimento para tornar legal 150 computadores fica dispendioso para uma empresa (ou órgão público), pois deve-se prever que a tecnologia melhora a cada dia, cada vez mais recursos são exigidos pelos sistemas e dispor de um capital comprar uma licença para em curto prazo ter que emigrar recursos para um novo sistema me parece um custo não muito econômico.

Tudo bem, o Windows XP tem suporte quase-garantido até 2014… o tempo passa muito rápido.

Alguns perguntam: Quem precisa de atualizar o XP? Todos! HTML5, CSS3 são uma realidade, ficar alheio às redes sociais é atirar no próprio pé… o XP vai conseguir sobreviver à essa realidade? É claro que não!

Como quem não quer nada, a Microsoft vai tornando a transposição do XP para Seven automaticamente. O Windows Live Messenger e o Explorer 9 são os maiores exemplos disso.

Apesar de muitas opções de navegadores, como Mozilla Firefox e Google Chrome, mesmo que surjam alternativas ao Windows Live Messenger, como é o caso do Emesene, é impossível ignorar as recentes inovações que vem surgindo.  De acordo com a MicroSoft  o Internet Explorer 9 necessita sistemas operacionais mais atualizados, pois exige novas tecnologias, como a aceleração por hardware, deixando o Windows XP de fora.

Por trás dessa “chantagem digital” há um marketing para alavancar as vendas do Windows 7 e tentar minimizar o rastro que a pirataria deixou com a geração XP, pois o novo sistema de autenticação do Seven, o WAT, é mais eficiente. A cada 90 dias o WAT automaticamente checa a autenticidade do sistema, ou seja, uma hora ou outra o Seven pirata será descoberto, dando dor de cabeça ao usuário.

É claro que isso não significa que o sistema WAT seja anti-pirataria, mas pelo menos aquele usuário que não sabe o que está sendo atualizado (que não tenha conhecimento técnico ou que não presta atenção nos detalhes) fatalmente será bloqueado.

O quê ficaria mais dispendioso para a empresa? Ter um sistema operacional que necessita ser autenticado e que em caso de uma troca de equipamentos tenha que adquirir uma nova licença ou usar um sistema operacional que é constantemente atualizado sem prejuízos, que pode ser transferido para outro equipamento sem custo adicional?

Gente se adapta! Equipamento se troca!

E para o usuário comum são as mesmas regras: se quiser aproveitar o que há de novo, melhor e eficiente sem ter que arcar com o “peso” de uma licença, o Linux é a melhor opção, pois mesmo sendo um sistema também proprietário pode ser livremente atualizado, customizado e adequado à sua nova realidade.

Seja Windows, Linux ou MAC, entre todos estes a opção mais lucrativa é o Linux, com certeza.

Abraços

Gostou? Comente! Espalhe!

Não gostou? Critique educadamente.

Visite meu blog | Siga-me no Twitter.

Sunday, December 12, 2010
no image

Engenheiro de Vendas de Tecnologia, Software CAD/CAE

Descri??o da vaga: Prospecting and creating new customers, analyzing potential customer needs, creating new opportunities, advising & answering their sales questions and closing sales contracts, in order to achieve the revenue objectives and to optimize the relationship with SCIA. The level I indicates the accountability.Account management the sales engineer is responsible for ?small and middle large? accounts, sales skills will be deployed in assigned product/markets where is responsible for is able to have a technical sales conversation and demonstrate the software in a technical sales manner to provide new opportunities to achieve the commercial objectives at accounts where the management is part of the technical staff. Starting up the ?vision lock selling? method and is learning to apply this method in daily sales work. Operate in an independent way, is able to manage his own agenda and time table, 2Prospecting & pre sales, responsible to follow up the incoming requests (by call/ by internet) of region. Able to cold call prospecting in his/her area in an independent way. As far as possible will stimulate existing clients to use automated sales tools such as iproposal a.o in order to handle efficiently small deals. Providing a punctual administration: generate a customer registration for each action in Lotus Notes, meeting reports, calls , opportunities, letters, and e-mails. Responsible for updating the client database by generating a customer report, discuss the report with the client and update the information in Lotus Notes. For customer registration, events he can work together with Office Support. Sales activities identifying & active searching in the field, contacting, informing and following up potential customers, in order to expand the SCIA customer base and to contribute to achieving the turnover targets. Reporting the sales results and forecast on a regular base. Contacting customers pro-actively, analyzing their needs and ultimately selling SCIA software, in order to achieve the turnover targets.Accountability each year a sales revenue budget will be worked out and agreed with the line manager (regional head of sales). Typically the yearly revenue target will be in the range 200 ? 500 k? multiplied with a country factor (as set in the product library). Product knowledge Gaining expertise of the product portfolio in order to know the unique selling points of the core of Nemetschek Scia products. Bachelor`s degree in Engineering Civil, Mechanical or Production.

View the original article here