sexta-feira, 12 de março de 2010

Sistema de Controle de Versão

SISTEMA DE CONTROLE DE VERSÃO


Um sistema de controle de versão (ou versionamento), VCS (do inglês version control system) ou ainda SCM (do inglês source code management) na função prática da Ciência da Computação e da Engenharia de Software, é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões – histórico e desenvolvimento – dos códigos-fontes e também da documentação.
Esse tipo de sistema é muito presente em empresas e instituições de tecnologia e desenvolvimento de software. É também muito comum no desenvolvimento de software livre. É útil, em diversos aspectos, tanto para projetos pessoais pequenos e simples como também para grandes projetos comerciais.
Entre os mais comuns encontram-se as soluções livres: CVS e SVN; e as comerciais: SourceSafe e ClearCase. O desenvolvimento de software livre prefere o SVN que vem substituindo o clássico CVS. Muitas empresas também adotam o SVN, embora algumas empresas prefiram uma solução comercial, optando pelo ClearCase (da IBM) ou SourceSafe (da Microsoft). Optar por uma solução comercial geralmente está relacionada à garantia, pois as soluções livres não se responsabilizam por erros no software e perdas de informações, apesar das soluções livres poderem ter melhor desempenho e segurança que as comerciais.
A eficácia do controle de versão de software é comprovada por fazer parte das exigências para melhorias do processo de desenvolvimento de certificações tais como CMMI e SPICE.

O Controle de versão apóia o desenvolvimento de diversas maneiras:

· Histórico. Registra toda a evolução do projeto, cada alteração sobre cada arquivo. Com essas informações sabe-se quem fez o que, quando e onde. Além disso, permite reconstruir uma revisão específica do arquivo sempre que desejado;
· Colaboração. O controle de versão possibilita que vários desenvolvedores trabalhem em paralelo sobre os mesmo arquivos sem que um sobrescreva o código de outro, o que traria reaparecimento de defeitos e perda de funcionalidades;
· Variações no Projeto. Mantém linhas diferentes de evolução do mesmo projeto. Por exemplo, mantendo uma versão 1.0 enquanto a equipe prepara uma versão 2.0.
Enfim, controle de versão é fundamental para o desenvolvimento de software. Todos os ambientes de desenvolvimento modernos, tais como o Eclipse e o NetBeans, já possuem plugins para integração com algum sistema de controle de versão.

Funcionamento do Controle de Versão

O controle de versão é composto de duas partes: o repositório e a área de trabalho. O repositório armazena todo o histórico de evolução do projeto, registrando toda e qualquer alteração feita em cada item versionado.
O desenvolvedor não trabalha diretamente nos arquivos do repositório. Ao invés disso, usa uma área/cópia de trabalho que contém a cópia dos arquivos do projeto e que é monitorada para identificar as mudanças realizadas. Essa área é individual e isolada das demais áreas de trabalho.
Estrutura de um controle de versão é composta por repositório e área de trabalho. A comunicação entre elas se dá através de operações de commit e update.
A sincronização entre a área de trabalho e o repositório é feita através dos comandos de commit e update.
O commit envia um pacote contendo uma ou mais modificações feitas na área de trabalho (origem) ao repositório (destino). O update faz o inverso, isto é, envia as modificações contidas no repositório (origem) para a área de trabalho (destino).
Cada commit gera uma nova revisão no repositório, contendo as modificações feitas, data e autor. Uma revisão funciona como uma "foto" de todos os arquivos e diretórios em um determinado momento da evolução do projeto. As "fotos" antigas são mantidas e podem ser recuperadas e analisadas sempre que desejado. O conjunto dessas revisões é justamente o histórico do projeto.

Principais vantagens

As principais vantagens de se utilizar um sistema de controle de versão para rastrear as alterações feitas durante o desenvolvimento de software ou o desenvolvimento de um documento de texto qualquer são:
Controle do histórico: facilidade em desfazer e possibilidade de analisar o histórico do desenvolvimento, como também facilidade no resgate de versões mais antigas e estáveis. A maioria das implementações permitem analisar as alterações com detalhes, desde a primeira versão até a última.
Trabalho em equipe: um sistema de controle de versão permite que diversas pessoas trabalhem sobre o mesmo conjunto de documentos ao mesmo tempo e minimiza o desgaste provocado por problemas com conflitos de edições. É possível que a implementação também tenha um controle sofisticado de acesso para cada usuário ou grupo de usuários.
Marcação e resgate de versões estáveis: a maioria dos sistemas permite marcar onde é que o documento estava com uma versão estável, podendo ser facilmente resgatado no futuro.
Ramificação de projeto: a maioria das implementações possibilita a divisão do projeto em várias linhas de desenvolvimento, que podem ser trabalhadas paralelamente, sem que uma interfira na outra.

Integração com outros softwares

Os sistemas de controle de versões mais flexíveis permitem que seja possível integrá-los a outros softwares. A integração mais comum é em IDE (ambientes de desenvolvimento) através de plugins. Alguns ambientes que suportam a integração de alguns sistemas são: IntelliJ IDEA, Eclipse, NetBeans e Visual Studio. O TortoiseSVN, o TortoiseCVS e o TortoiseHg, clientes do SVN, do CVS e do Mercurial, respectivamente, funcionam sobre o Windows Explorer.

Lista de sistemas de controle de versão

Segue uma lista dos mais conhecidos:
Soluções comerciais
Microsoft Visual SourceSafe (VSS) - produto da Microsoft para controle de versão, integrado a muitas IDEs da Microsoft;
Rational ClearCase - produto da IBM para controle de versão; e
Borland StarTeam - produto da Borland para controle de versão e de equipe.
Soluções livres
Concurrent Version System (CVS) - software livre clássico e bem testado;
Subversion (SVN) - está substituindo o CVS aos poucos; é uma alternativa também livre e mais eficiente. Muitas fundações não-governamentais sem fins lucrativos ligadas ao desenvolvimento de software internacionalmente reconhecidas como a Apache Foundation já adotaram o Subversion como padrão;
Git - Software para controle de versão distribuído com foco na velocidade;
MediaWiki - software livre que possui um sistema integrado de controle de versões. Sites com os projetos da Wikimedia, tal como a Wikipédia mantém o sistema MediaWiki para o controle das versões dos documentos. Esse sistema permite o trabalho simultâneo de milhares de voluntários;
GNU CSSC;
Revision Control System (RCS);
Bazaar;
Darcs;
Mercurial - SCM usado para gerenciar o código fonte do Python;
Monotone; e
SVK.

Conclusão

Controle de versão resolve diversos problemas intrínsecos ao desenvolvimento de software. É uma prática de engenharia de software comprovadamente eficaz. Por isso, faz parte das exigências para melhorias do processo de desenvolvimento de certificações tais como CMMi, MPS-Br e SPICE.
Existem várias ferramentas disponíveis para controle de versão. Para o controle de versão centralizado, o mais recomendável é o Subversion. Para quem deseja usar o controle de versão distribuído, é sugerido o Mercurial ou o Git.

Ferramenta CASE

FERRAMENTA CASE

Ferramentas CASE (do inglês Computer-Aided Software Engineering) é uma classificação que abrange todas ferramentas baseada em computadores que auxiliam atividades de engenharia de software, desde análise de requisitos e modelagem até programação e testes. Podem ser consideradas como ferramentas automatizadas que tem como objetivo auxiliar o desenvolvedor de sistemas em uma ou várias etapas do ciclo de desenvolvimento de software.

Categorização

a) Front End ou Upper CASE: apóiam as etapas iniciais de criação dos sistemas: as fases de planejamento, análise e projeto do programa ou aplicação.
b) Back End ou Lower CASE: dão apoio à parte física, isto é, a codificação testes e manutenção da aplicação.
c) I-CASE ou Integrated CASE: classifica os produtos que cobrem todo o ciclo de vida do software, desde os requisitos do sistema até o controle final da qualidade.

Objetivos

A Ferramenta Case tem por objetivos principais o melhoria da qualidade de software e o aumento da produtividade no processo de software.

Vantagens e desvantagens da utilização da Ferramenta Case

Vantagens:
· Qualidade no produto final;
· Produtividade;
· Agilizar o tempo para tomada de decisão;
· Menor quantidade de códigos de programação;
· Melhoria e redução de custos na manutenção; e
· Agilidade no retrabalho do software .

Conclusão

As ferramentas CASE são softwares que estão sendo cada vez mais utilizados na engenharia de sistemas. Há vários tipos de ferramentas no mercado tanto para análise estruturada quanto análise orientada a objeto, mas não foi o foco do artigo discuti-lás, e sim mostrar seu funcionamento geral. Um dos grandes desafios que essa tecnologia ainda deve superar é sua integração com outras ferramentas, para que se possa estabelecer um ambiente CASE integrado, compartilhando dados de um único banco de dados. Não obstante a isso, uma ferramenta CASE trás vários benefícios ao desenvolvimento de software, como aceleração do ciclo de desenvolvimento, sistemas com maior qualidade, documentação eficiente, facilidade de manutenção e, conseqüentemente a tudo isso, um maior grau de satisfação do cliente.

Conhecendo a Engenharia de Software

ENGENHARIA DE SOFTWARE


DEFINIÇÃO


Engenharia: Arte de aplicar os conhecimentos científicos à invenção, aperfeiçoamento ou utilização da técnica industrial em todas as suas determinações.


Software: qualquer programa ou grupo de programas que instrui o hardware sobre a maneira como ele deve executar uma tarefa, inclusive sistemas operacionais, processadores de texto e programas de aplicação. (Definições retiradas do dicionário Michaelis).


O software pode ser classificado em:
· Sistemas genéricos, produzidos e vendidos no mercado a qualquer pessoa que queira comprá-los.
· Sistemas específicos, encomendados especificamente por um determinado cliente.



Ciclo de vida de um Sistema:
· Concepção;
· Especificação;
· Projeto Físico;
· Implementação;
· Validação;
· Avaliação;
· Manutenção
Ø Corretiva;
Ø Adaptativa.

Tipos de Software:
· Tempo Real;
· On-Line;
· Embarcado; e
· Científico.


Engenharia de software é uma área do conhecimento da computação voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade.
Atualmente, essas tecnologias e práticas englobam linguagens de programação, banco de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software.

OBJETIVOS DA ENGENHARIA DE SOFTWARE

O seu objetivo é estabelecer uma sistemática abordagem de desenvolvimento, através de
ferramentas e técnicas apropriadas, dependendo do problema a ser abordado, considerando restrições e recursos disponíveis.
A Engenharia de Software visa sistematizar a produção, a manutenção, a evolução e a recuperação de produtos intensivos de software, de modo que ocorra dentro de prazos e custos estimados, com progresso controlado e utilizando princípios, métodos, tecnologia e processos em contínuo aprimoramento. Os produtos desenvolvidos e mantidos, seguindo um processo efetivo e segundo os preceitos da Engenharia de Software, asseguram, por construção, qualidade satisfatória, apoiando adequadamente os seus usuários na realização de suas tarefas, operam satisfatória e economicamente em ambientes reais e podem evoluir continuamente, adaptando-se a um mundo em constante evolução. (Retirado do livro Engenharia de Software e Sistemas de Informação de Denis Alcides Rezende).

ENGENHARIA DE SOFTWARE X CIÊNCIA DA COMPUTAÇÃO
A Ciência da Computação tem como objetivo o desenvolvimento de teorias e fundamentações, enquanto que a Engenharia de Software se preocupa com as práticas de desenvolvimento de software.

ENGENHARIA DE SOFTWARE X ENGENHARIA DE SISTEMAS
A Engenharia de Sistemas trata dos sistemas baseados em computadores, que inclui
hardware e software. Enquanto a Engenharia de Software trata apenas dos aspectos de
desenvolvimento de software.

A Engenharia de Software é uma disciplina que reúne:
· Processos.
· Métodos.
· Ferramentas.

PROCESSOS


Um processo de software pode ser visto como o conjunto de atividades, métodos, práticas e transformações que guiam pessoas na produção de software. Um processo eficaz deve, claramente, considerar as relações entre as atividades, os artefatos produzidos no desenvolvimento, as ferramentas e os procedimentos necessários e a habilidade, o treinamento e a motivação do pessoal envolvido.

MÉTODOS


Método é a forma (ou caminho) que será utilizado para desenvolver um determinado processo.

FERRAMENTAS


Ferramentas é o material que será necessário para que se desenvolva com sucesso um processo.

STAKES HOLDERS


São pessoas envolvidas no processo de construção de um software. É composto por:
· Gerente de Projeto;
· Analista de Sistema;
· Programador;
· Patrocinador; e
· Cliente (Usuário).