1.0- INTRODUÇÃO. 1 API é a sigla em inglês para Interface de Programação de Aplicativos. - PDF
1.0- INTRODUÇÃO. 1 API é a sigla em inglês para Interface de Programação de Aplicativos.
Download "1.0- INTRODUÇÃO. 1 API é a sigla em inglês para Interface de Programação de Aplicativos."
Iago Peixoto Custódio
1 1.0- INTRODUÇÃO No início dos anos 60, surgiram os primeiros grandes projetos de software, como os sistemas operacionais: CTSS, desenvolvido pelo MIT, e o OS 360 para a família de computadores IBM 360. Atualmente o software é o principal componente de um sistema de computação. O software está cada vez mais integrado à sociedade, sendo usado para controlar sistemas críticos como: sistemas financeiros, gerenciamento de comércio eletrônico, controle de tráfego aéreo, controle de sistemas telefônicos, equipamentos médicos etc. A construção de sistemas de software desenvolveu-se com a produção de programas voltados para o ambiente empresarial. Inicialmente, para proporcionar à empresa o controle de todos os seus dados operacionais, surgiram os sistemas de banco de dados. Hoje em dia, esses sistemas evoluíram ao ponto de aproveitarem a tecnologia da Internet para se tornarem poderosos servidores de aplicações e de arquivos que aprenderam a "falar" Java e XML. Portanto, os bancos de dados além de guardar e gerenciar um enorme volume de informações, permitem que os dados sejam acessados a partir de um browser e trazem recursos que ajudam as empresas a criar aplicações para a Web, sejam simples sites corporativos ou complexas operações de comércio eletrônico. O ponto inicial para se pensar em aplicações orientadas a Web foi a possibilidade de atingir acessibilidade praticamente ilimitada. Exemplificando: um sistema, desenvolvido sob medida para uma empresa, visando disponibilizar o acesso a todos os seus fornecedores, parceiros e clientes. Para ampliar as capacidades de desenvolvimento de software foi projetada a plataforma.net. Esta plataforma foi lançada em julho de 2001, como a primeira atualização importante da plataforma de desenvolvimento de software da Microsoft desde que a API 1 Win32 apareceu no Windows NT 3.0 em julho de 1 API é a sigla em inglês para Interface de Programação de Aplicativos. 9
2 1993. Ao contrário da Win32, que oferecia APIs mais poderosas do que a Win16, mas não mudava ferramentas ou técnicas, a plataforma.net faz alterações fundamentais nas ferramentas e técnicas usadas pelos desenvolvedores para criar aplicativos [CHERRY, 2001]. A Microsoft garante que a.net foi construída sobre três pilares: Segurança: a plataforma Microsoft.NET atende aos padrões mais modernos de segurança. Através de um ambiente de execução seguro e desenhado tendo em mente a hostilidade natural de ambientes de computação altamente distribuídos. As ferramentas de desenvolvimento da plataforma Microsoft.NET induzem a adoção de práticas melhores de programação, resultando em software com menos erros. Finalmente, a plataforma Microsoft.NET inclui ferramentas e serviços que dão a indivíduos e organizações controle total sobre como e quando suas informações podem ser acessadas e utilizadas. Padrões de mercado: a Microsoft tem o firme compromisso de agir em parceria com o resto da indústria de tecnologia para assegurar que os padrões usados para a criação e fornecimento de Web Services XML permaneçam íntegros e abertos a todas as empresas, inclusive suas concorrentes, submetendose a entidades de padronização como o World Wide Web Consortium (W3C) e a European Manufactures Association (ECMA). Isso assegurará que todos os Web Services XML serão compatíveis, independentemente de que ferramentas tenham sido utilizadas para criá-los e que empresas as forneceu. Tudo conectado: os produtos e serviços da plataforma.net transformam as ilhas de informação isoladas e fechadas em sistemas proprietários ou inadequados à colaboração em um mundo em que tudo é conectado. PCs, PDAs, telefones celulares, consoles de videogame, sites Internet, aplicativos e serviços podem ser compartilhados através de protocolos comuns, de maneira transparente e segura. 10
3 Com a plataforma.net, o desenvolvedor pode criar aplicativos Web para executar no servidor Internet Information Server (IIS) com mais facilidade. Ela também facilita a criação de aplicativos estáveis, confiáveis e seguros para Windows desktop. A plataforma de desenvolvimento.net contém: O.NET Framework, que inclui o Common Language Runtime (CLR), um componente de software para carregar e executar aplicativos; e novas bibliotecas de classe, coleções de código organizadas hierarquicamente e usadas pelos desenvolvedores em seus aplicativos para criar interfaces gráficas com usuário, acessar bancos de dados e arquivos e comunicar-se através da Web. As ferramentas de desenvolvimento.net, incluindo o ambiente integrado de desenvolvimento (IDE) do Visual Studio.NET para desenvolver e testar aplicativos, as linguagens de programação.net (como Visual Basic.NET e o novo Visual C#) que executam sob o CLR e usam as bibliotecas de classe. ASP.NET, uma biblioteca de classe especializada que substitui o antigo Active Server Pages (ASP) para criar tanto conteúdo Web dinâmico quanto aplicativos para servidores Web que usam protocolos da Internet e formatos de dados como HTML, XML e Simple Object Access Protocol (SOAP). A plataforma.net proporciona o desenvolvimento de software com base na tecnologia de objetos e componentes. Esta abordagem tem se revelado com inúmeros benefícios. Dentre estes, pode-se destacar a modularidade, a flexibilidade e a reusabilidade, características essenciais para a qualidade e a produtividade do desenvolvimento de software. 11
4 O principal objetivo deste trabalho é apresentar esta plataforma através de seus principais componentes, seu novo modelo de programação e execução de aplicativos e principais vantagens e problemas. Além de mostrar uma visão geral da estratégia de mercado da Microsoft para a plataforma.net. Faz-se também uma comparação com a plataforma concorrente da Sun Microsystems Java Enterprise Edition: a J2EE. 12
5 2.0- REVISÃO DE LITERATURA 2.1- Computador digital: a evolução das engrenagens mecânicas Em 1642, o francês Blase Pascal construiu uma máquina de calcular, o ábaco, que utilizava engrenagens mecânicas. Esta máquina podia apenas somar e subtrair, mas pelo seu impacto na computação o nome Pascal foi dado a uma moderna linguagem de programação. Passados 30 anos, o matemático alemão Leibniz construiu uma máquina mecânica que podia, além de somar e subtrair, multiplicar e dividir. Podemos dizer que Leibniz construiu uma máquina equivalente a uma calculadora de bolso com quatro funções, três séculos atrás. Passaram-se 150 anos até que, em 1822, o matemático Charles Babbage, na Universidade de Cambridge, construiu uma máquina de calcular que perfurava os resultados em uma placa de metal. Essa forma de escrita foi a precursora da escrita em cartões perfurados e em discos ópticos. A coroa inglesa investiu no projeto dessa máquina e Babbage construiu a máquina analítica. Como esta era programável em uma linguagem, ela precisava de um software. Nesse ponto da história Ada Lovelace construiu a primeira linguagem de programação, além de ser a primeira pessoa a programar uma máquina. A moderna linguagem de programação Ada foi assim chamada em sua homenagem. Nos anos de 1930, John Atanasoff e George Stibbitz, no Bell Labs, construíram uma máquina com relês eletromagnéticos surpreendentemente avançada para sua época: com aritmética binária e circuitos de memória. E em 1944, na Universidade de Harvard, Aiken apresentou o primeiro computador eletrônico: o Mark II. Na Segunda Guerra Mundial, as mensagens enviadas pelos alemães aos seus submarinos eram captadas pelos ingleses. Como essas mensagens eram 13
6 criptografadas, o ex-presidente dos Estados Unidos Thomas Jefferson construiu o Enigma, um computador eletrônico para descriptografar essas mensagens. Os Estados Unidos então resolveram investir em computadores eletrônicos e em 1946 surgiu o ENIAC (Eletronic Numerical, Integrator Calculator). Ocupava uma sala inteira e tinha centenas de botões e cabos entrelaçados. John Von Neumann, um dos projetistas do ENIAC, organizou uma equipe que projetou um novo computador: composto por memória, processador e unidades de entrada e saída. Os computadores atuais são baseados na arquitetura de Von Neumann. O prêmio Nobel de Física de 1956 foi dado aos inventores dos transitores. Esta invenção do Bell Labs proporcionou um avanço aos computadores, tanto que no final dos anos 60 surgiam os projetos voltados para o software. Nesta época foi desenvolvida a linguagem Algol 60, precursora da linguagem Pascal. No início dos anos 60 os circuitos integrados possibilitaram a produção de computadores muito mais rápidos e menores a um custo muito menor. A tecnologia dos computadores foi incrementada com a multiprogramação e com o time-sharing, que proporciona a execução de múltiplas tarefas simultaneamente. Nessa época, o MIT desenvolveu sistemas operacionais que permitiam que terminais remotos fossem conectados a um computador central por meio de linhas telefônicas. A partir de 1980 a VLSI (Very Large Scale Integration) possibilitou a colocação de centenas de milhares de transistores em uma pastilha (circuito integrado). Os minicomputadores, com capacidade de processamento superior aos primeiros mainframes se tornaram amplamente utilizados em escritórios, escolas e até em ambientes domésticos. Informações detalhadas sobre a evolução dos computadores podem ser vistas em [TANEMBAU, 1995]. 14
7 2.2 A história do software Nas décadas de 1940 a 1970 o principal objetivo da computação era desenvolver um hardware que ampliasse as capacidades de processamento e memória. Nos anos 80, avanços na microeletrônica proporcionaram computadores digitais com altíssimo poder computacional a um custo relativamente baixo. No início dos anos 90 a computação passou o foco para soluções implementadas em software. Afinal, a capacidade de processamento de um mainframe lançado no mercado em 1980 estava disponível em nossas casas. No início da computação os problemas implementados pelos programadores eram simples: por exemplo: calcular uma equação diferencial. Não eram problemas surpreendentes como implementar um sistema de tempo real para controle de vôos ou sistemas de segurança para Internet Bankings. Os problemas se relacionavam com o usuário e o programador; não haviam pessoas envolvidas. Mas os computadores eram cada vez mais utilizados e mais pessoas estavam envolvidas. As linguagens de alto nível começavam a ser inventadas no início dos anos 50 para facilitar a comunicação com a máquina. Mas os programas eram desenvolvidos para tarefas bem definidas. A partir da década de 1970, a multiprogramação e os sistemas multiusuários foram a base para a implementação de aplicações muito mais sofisticadas; como sistemas de tempo real controlando grandes quantidades de dados em milisegundos e sistemas sistemas de gerenciamento de banco de dados com suporte a transações on-line. No final dos anos 70 surgiram também novas empresas da área de informática: as software houses, que se concentravam na produção de software em escala. Nessa época universidades e empresas alocavam seus recursos para pesquisa e desenvolvimento de pacotes de software. Em meados dos anos 80, sistemas distribuídos em que múltiplos 15
8 computadores executavam tarefas de forma concorrente e comunicavam-se entre si ampliaram a complexidade dos sistemas de computação. Também nessa época o microprocessador permitiu o lançamento de produtos inteligentes: do automóvel aos fornos de microondas, de robôs no chão de fábrica a equipamentos hospitalares. O software estava sendo integrado ao hardware. Em 1990 o conceito de redes de computadores se tornou popular e começava o sucesso do computador pessoal. Em 1994 algumas pessoas falavam em Internet e em 1999 centenas de milhões de pessoas navegavam na Web diariamente, esse fenômeno social implicou no crescimento, em escala exponencial, da demanda mundial por software. Na perspectiva industrial, [PAULA FILHO, 2001] explica que se voltássemos em 1969, veríamos que a grande maioria dos profissionais de informática trabalhava em computadores de grande porte. Equipamentos de milhões de dólares! Seguindo sua linha de raciocínio, o custo de desenvolvimento dos aplicativos possíveis com a tecnologia da época era relativamente pequeno, se comparado com o custo do hardware. Surpreendentemente, o projeto de desenvolvimento de um sistema de telefonia móvel, sob a coordenação da UFMG, há poucos anos, foi implementado em uma plataforma de hardware que custou alguns milhares de dólares. A plataforma de software custou algumas centenas de milhares de dólares. A economia que esse sistema trouxe para o cliente foi de alguns milhares de dólares. Em três décadas houve uma inversão radical na economia da informática: o software se tornou o ponto principal no projeto de sistemas de computação. Tanto que atualmente, o software é a chave para sistemas de computação e, mais ainda, é um fator de diferenciação para uma empresa em relação às suas concorrentes. 2.3 Engenharia de Software: projeto e análise de software No início dos anos 60, surgiram os grandes projetos de software 16
9 desenvolvidos pelos pioneiros da computação. Por exemplo, o Sistema Operacional CTSS desenvolvido pelo MIT foi um grande projeto desenvolvido em equipe. Já em 1965, foram lançados os primeiros softwares comerciais. O melhor exemplo é o Sistema Operacional OS 360 para a família de computadores IBM 360. Nesta época as equipes de desenvolvimento começavam a questionar os problemas relacionados a construção dos softwares. Já se começava a perceber que projetos de software exigem previsão de custos e um plano de produção. Mas na grande maioria das vezes o software era desenvolvido como uma arte. As estimativas feitas pela equipe de desenvolvimento freqüentemente estavam incorretas. Os programas tinham muitos erros e a tentativa de correção desses erros produzia mais erros. Em 1979, uma pesquisa realizada nos Estados Unidos revelou que 2% dos softwares atingiam a funcionalidade exigida pelo cliente. Essa estatística se explicava pela inexistência ou a não aplicação de métodos, técnicas e ferramentas para auxiliar e padronizar o processo de desenvolvimento de software. Então foi inventado o termo: Crise de Software para sintetizar os problemas: softwares grandes não funcionavam adequadamente; estimativas de custo e tempo de desenvolvimento eram imprecisas; os computadores se tornavam cada vez mais rápidos, fáceis de usar e acessíveis. Isto implicava em uma demanda crescente por software cada vez maior e mais complexo, enquanto a capacidade de produção não estava tão acelerada quanto esta demanda. Informações detalhadas sobre a crise de software podem ser encontradas em [PRESSMAN, 1995]. No contexto da crise do software e do declínio dos custos de hardware paralelo a ampliação dos custos de software (ampliação causada pela demanda crescente) foi inventada a Engenharia de Software. [PRESSMAN, 1995] usa a definição de [BAUER, 1969] que explica: a Engenharia de Software é a aplicação de metodologias e técnicas de engenharia 17
10 visando obter economicamente softwares confiáveis e que funcionem com eficiência em máquinas reais. Segundo [VASCONCELOS, 1999]: a Engenharia de Software é a aplicação de ciência e matemática visando tornar as capacidades do equipamento úteis para o ser humano através de programas, procedimentos e documentação. O principal objetivo da Engenharia de Software é construir software de qualidade com a mínima alocação de recursos possível. É fácil notar que o software está se integrando à sociedade. Cada vez mais, o software é usado para controlar sistemas críticos como: sistemas financeiros, gerenciamento de comércio eletrônico, controle de tráfego aéreo, controle de sistemas telefônicos, equipamentos médicos etc. Isto garante o interesse crescente da sociedade em depender de software e, principalmente, mostra a importância crescente em se aprender a construir um software melhor. A Engenharia de Software define as fases de desenvolvimento de software: 1. Concepção: entrevista com o cliente/usário para se criar uma lista de atividades e/ou tarefas realizadas diariamente, semanalmente, mensalmente, anualmente e esporadicamente pelo cliente/usuário. Depois de listadas as atividades é essencial dividi-las em grupos e escrever um documento que mostre como a empresa funciona, quais as atividades e serviços realizados por ela. Este documento é chamado escopo. Nesta fase de concepção também se faz a modelagem. Um modelo é uma simplificação da realidade. Modelos são construídos para se entender o problema e as necessidades do cliente e servir como base para projetar o que ele realmente precisa. Além disso, auxiliam no planejamento e na determinação do produto final a ser desenvolvido; das fases, etapas e tarefas; de um planejamento e um cronograma de 18
11 execução; das ferramentas e matéria prima; das equipes de desenvolvimento. A modelagem é uma parte central de todas as atividades que levam à implantação de um bom software e à criação de uma documentação completa. É importante destacar os problemas relacionados à modelagem que se refletem na qualidade final do software: alocar os profissionais ideais para uma determinada tarefa não é uma tarefa trivial, visto que a limitação financeira se contrapõe ao fato de esses profissionais serem mais caros; o cliente muda de idéia ao longo do tempo de desenvolvimento; os desenvolvedores nem sempre tem conhecimento e iniciativa suficientes para resolver problemas inesperados; o cronograma não é cumprido porque o problema se mostra mais complexo do que o esperado; o cliente não consegue definir exatamente as suas necessidades e expectativas. 2. Análise: nesta fase são construídos os diagramas de Caso de Uso, de Sequencia e de Classe. Informações detalhadas sobre esses diagramas podem ser encontradas em [PAULA FILHO, 2001]. Além de determinar as informações que serão guardadas no computador e como elas serão agrupadas de forma que o software possa realizar corretamente suas tarefas com eficiência. 3. Projeto: nesta fase faz-se um dicionário de dados e diagramas extras que podem ser necessários dependendo dos objetivos e da complexidade da aplicação. 4. Implementação: com base no projeto, os programadores implementam as estruturas de dados, as funções e os procedimentos concretizando o que se tem a nível abstrato e conceitual. 5. Teste: é matematicamente impossível testar um sistema por completo então nesta fase aplicam-se técnicas para se construir uma base de dados para testar a maior parte do sistema possível. 19
12 6. Manutenção: esta fase é iniciada com a implantação do sistema em ambientes organizados. A manutenção pode ser de correção, adaptação e atualização. Do ponto de vista de [VASCONCELOS, 1999], é comun ouvirmos falar em "crise de software". Mas nem todos os projetos são exemplos de falhas de gerenciamento ou de engenharia. Existem produtos com sucesso espetacular. Sem sucessos tão grandes, o software não seria integrado à sociedade. Na verdade estes sucessos é que tem causado a explosiva demanda por software. Além disso, o crescimento rápido na demanda por software, combinado com os esforços requeridos na manutenção do software existente, cria um grande backlog entre as aplicações de software que precisam ser desenvolvidas e a capacidade de desenvolvimento. Isto é, graficamente a curva que descreve o crescimento da demanda é muito mais acentuada que a curva que descreve a capacidade de produção de software. Este é um problema que está bloqueando o sucesso de muitas empresas: novos produtos não podem ser lançados no mercado, e às vezes não saem das pranchetas dos projetistas, e novos serviços não podem ser oferecidos porque o software que é necessário não pode ser desenvolvido com a rapidez suficiente. Nesse contexto, [VASCONCELOS, 1999] destaca que a reutilização é um fator essencial na produção de software. A reutilização do conhecimento e de projetos anteriores é uma prática padrão em outras engenharias e está se tornando cada vez mais utilizada em projetos de software desenvolvidos em ambientes organizados. Existe uma demanda crescente por software que exige que se encontre o melhor caminho para se desenvolver software rápido, confiável e seguro com a mínima alocação de recursos possível. Essa é exatamente a meta da Engenharia de Software. 20
13 2.4 Processos: a produção do software O ciclo de vida do software Um processo é um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos, práticas e transformações, usado para atingir uma meta. Esta meta geralmente está associada a um ou mais resultados concretos finais, que são os produtos da execução do processo [PAULA FILHO, 2001]. Do ponto de vista deste mesmo autor, o software é visto como um produto e como todo produto industrial, o software tem um ciclo de vida. Além disso, em um processo de desenvolvimento de software, o ponto de partida é a escolha de um modelo de ciclo de vida. O autor define os modelos: 1. Modelo de ciclo de vida em Cascata: são executados passos sequenciais que podem ser demarcados como pontos de controle que podem facilitar a gestão dos projetos. A primeira vista esse modelo parece totalmente confiável e utilizável em projetos de qualquer escala. Por outro lado, pode se visto como um modelo rígido e inflexível, em que as atividades de análise e projeto tem que ser muito bem dominadas. Isso porque erros nessas fases serão refletidos no produto final. Um outro ponto negativo é que o modelo em cascata puro é de baixa visibilidade para o cliente, que vê exclusivamente o resultado final do projeto. 2. Modelo de ciclo de vida em Sashimi: na prática é essencial permitir que, em fases posteriores, haja revisão e alteração de resultados das fases anteriores. Por exemplo, os modelos e documentos de análise e projeto podem ser alterados durante a fase 21
14 de implementação, na medida em que os problemas surgem. Este modelo é uma variação do modelo em cascata que permite a superposição entre as fases e a realimentação de correções. O ponto negativo é que esta superposição das fases é difícil de se gerenciar. 3. Modelo de ciclo de vida em Espiral: nesse modelo o produto é desenvolvido em uma série de iterações. Cada nova iteração corresponde a uma volta na espiral. Isso permite construir produtos em prazos curtos, com novas características e recursos que são acrescentados na medida em que a experiência descobre sua necessidade. As atividades de manutenção são usadas para identificar problemas; seus registros fornecem dados para definir os requisitos das próximas iterações. O principal problema do ciclo de vida em espiral é que ele exige gerenciamento sofsticado para garantir sua precisão e confiabilidade. 4. Modelo de ciclo de vida de Prototipagem Evolutiva: variação do modelo em espiral é usado para desenvolver o produto completo, mas construindo uma série de versões provisórias chamadas protótipos. Esses protótipos cobrem cada vez mais requisitos, até que se atinja o produto desejado. A Prototipagem Evolutiva permite que os requisitos sejam definidos progressivamente, e apresenta alta flexibilidade e visibilidade para os clientes. Os pontos negativos: gerenciamento sofisticado e a análise e o projeto devem ter excelente precisão para que o produto não se degenere ao longo dos protótipos. 5. Modelo de ciclo de vida por Estágios: uma variação do modelo em cascata em que o cliente recebe entregas de liberações parciais do produto. Isso amplia a visibilidade do projeto para o cliente. Mas continua com os outros pontos negativos do modelo em cascata puro. 6. Modelo de ciclo de vida de Entrega Evolutiva: combinação dos 22
15 modelos em Cascata e Prototipagem Evolutiva que permite que, em pontos bem definidos, os usuários possam avaliar partes do produto e fornecer realimentação quanto às decisões tomadas. Facilita também o acompanhamento do progresso de cada projeto, tanto por parte de seus gerentes como dos clientes. O ponto negativo continua fixado na análise e no projeto: devem produzir uma arquitetura robusta que mantenha a integridade ao longo dos ciclos de desenvolvimento. 7. Modelo de ciclo de vida Dirigido por Prazo: o produto é aquele desenvolvido em um prazo pré-determinado. Esse modelo é razoável quando se consegue definir um conjunto de requisitos em que se tem certeza que o prazo estabelecido é suficiente e as folgas são usadas para implementar requisitos opcionais. 8. Modelo de ciclo de vida Dirigido por Ferramenta: as ferramentas CASE (Engenharia de Software Auxiliada por Computador) impõe processos rígidos, que podem ser adequados para tipos bem específicos de produtos. A qualidade destes processos depende de forma fundamental da qualidade da ferramenta e do fato do uso do processo ser restrito ao domínio da aplicação. Uma solução alternativa ao desenvolvimento de software é comprá-lo. Quando se encontra um pacote de software que atende aos requisitos desejados, essa pode ser uma solução. [PAULA FILHO, 2001] explica que nesse caso, não há processo de desenvolvimento, mas processos de compra, de implantação e, possivelmente, de adaptação e integração com outros sistemas. E alerta que, dependendo do caso, isso pode ser mais complexo e caro que um processo de desenvolvimento. 23
16 2.4.2 A produção industrial de software Inicialmente um produto é construído por uma pessoa ou por uma equipe, mas na medida em que atinge sucesso no mercado, passa a evoluir. A partir daí, um número crescente de pessoas participa de sua manutenção e evolução. Por isso, quase todas as atividades de produção de software são empreendidas por organizações. Essa linha de raciocínio é de [PAULA FILHO, 2001]. Continuando nessa mesma linha, a maturidade de uma organização mede o grau de competência técnica e gerencial na produção de produtos de boa qualidade, dentro de prazos e custos razoáveis e previsíveis. A existência de processos definidos proporciona um nível operacional padronizado e reprodutível. Isso viabiliza a capacitação das pessoas de forma que se dependa menos de determinados indivíduos. A medida do êxito dos processos de produção é a medida de quanto eles contribuem para que os produtos sejam entregues aos clientes e usuários com melhor qualidade, pelo menor custo e no menor prazo possíveis. Diversas organizações no mundo conseguiram propor paradigmas do tipo modelos de capacitação. Em síntese, um modelo de capacitação tem o objetivo de avaliar a maturidade dos processos de produção. Um modelo de capacitação particularmente importante para a área de software é o CMM (Capability Maturity Model), do Software Engineering Institute. O CMM é patrocinado pelo Departamento de Defesa Americano, que o utiliza para a avaliação da capacidade de seus fornecedores de software. Esse modelo é amplamente aplicado na indústria americana de software, além de indústrias em todo o planeta. Partindo do princípio de que, para atingir os níveis superiores de maturidade, era necessário melhorar a prática dos processos em nível dos desenvolvedores individuais, Watts Humphrey propôs, em 1995, uma série de processos pessoais chamada de PSP, do inglês Personal Software Process 24
17 (Processo Pessoal de Software). Como conseqüência natural do PSP, Humphrey lançou uma publicação em 1999 com o TSP, do inglês Team Software Process (Processo de Software para times). O TSP usa um modelo em espiral. Os participantes do "time" de desenvolvedores são organizados de tal forma que cada desenvolvedor desenpenhe um ou dois papéis gerenciais bem definidos, além de dividir a carga de desenvolvimento. Os papéis suportados pelo processo são os de gerente de desenvolvimento, gerente de planejamento, gerente de qualidade, gerente de processos e gerente de suporte, além do líder do "time" Copyleft: a nova perspectiva para o software 2 No Instituto de Ciências Nucleares da Universidade Nacional Autônoma do México, o administrador de rede Miguel de Icaza em suas horas vagas coordena o projeto Gnome. Esse projeto mundial é um esforço mundial para desenvolver um sistema operacional para desktop que supere as múltiplas versões do Windows, a base do império Microsoft. Os programadores do Gnome dizem que este sistema será mais rápido, mais poderoso e terá menos probabilidades de quedas do que qualquer outro sistema criado em Redmond (cidade americana onde está instalada a matriz da Microsoft). É importante destacar que o Gnome é grátis, poderá ser obtido a custo zero da Internet. O objetivo principal do Gnome é reconquistar o comando dos sistemas operacionais das mãos da Microsoft. Eric S. Raymond, um defensor do software livre e editor do New Hacker's Dictionary diz: "o Gnome tem a chance de levar o mundo do software a um lugar muito diferente e melhor". Por que o Gnome obteria sucesso onde companhias maiores e mais ricas, como a Apple, fracassaram? Por dois motivos, de acordo com os defensores do 25
18 sistema. Primeiro: o Gnome foi criado para operar junto com o sistema operacional Linux. Famoso por sua velocidade, confiabilidade e eficiência, o Linux é operado em cerca de 17 milhões de sistemas de computadores em todo o mundo (estatística vista em de redes pequenas nos setores de computação de universidades a provedores de acesso à Internet e laboratórios de computação, passando por empresas de porte imenso como o Correio dos Estados Unidos. Com sua base de usuários crescendo à razão estimada de 40% ao ano (estatística: o Linux é o único sistema não criado pela Microsoft a expandir sua fatia de mercado. Os defensores do Linux dizem ainda que este sistema oferece, às pessoas, a oportunidade de conhecer o que é um "bom software" e estas, então, jamais voltarão a usar o Windows. A segunda e mais importante razão para que o Gnome tenha sucesso é que, como o Linux trata-se de um produto do movimento conhecido como software livre, ou de código fonte aberto. Não só o Gnome pode ser obtido grátis, como seu código fonte (as instruções básicas que a maior parte das empresas de software encara como as jóias de sua coroa) estará disponível para cópia e modificação. Ao liberar os códigos fonte do controle de uma única companhia, projetos como o Gnome podem contar com a contribuição de milhares de programadores. Porque nem mesmo a gigante Microsoft tem a capacidade de sobrepujar o talento unido de todo o mundo, alegam os defensores do software livre, o software de código fonte aberto sempre supera a competição. O Gnome, o Linux e o movimento do software livre têm uma origem única em 1979, quando a Xerox doou uma das primeiras impressoras a laser ao Laboratório de Inteligência Artificial do MIT. A máquina parava todo hora, o que induziu o programador Richard Stallman, do laboratório, a pedir à Xerox o código que controlava a máquina. Stallman planejava modificar o programa para 2 Da MIT'S MAGAZINE OF INNOVATION TECHNOLOGY REVIEW. 26
19 que ele respondesse a defeitos com a emissão de um alerta que chegaria às telas de todas as pessoas que estivessem esperando por impressão. Ou seja, todos teriam um incentivo para consertar a impressora imediatamente. Para fazer essa modificação, Stallman precisava do código fonte para o programa da impressora. Para ele tratava-se de um pedido corriqueiro. Na atmosfera de liberdade acadêmica do laboratório, os programadores trabalhavam em conjunto uns com os outros. Além do mais, a Xerox havia dado a Stallman o código fonte de uma impressora anterior, também problemática. Dessa vez, porém, a Xerox se recusou, pois adquiria copyright sobre o código fonte. Stallman achava que o copyright o impedia de melhorar o programa. A Xerox não estava sozinha. À medida que o software se transforma em um negócio de grande porte, o Vale do Silício começou a atrair muitos dos melhores programadores do laboratório de Inteligência Artificial. Quando esses programadores começaram a trabalhar para essas empresas de software, descobriu Stallman, os códigos que escreviam tornavam-se exclusivos e não mais podiam ser melhorados ou compartilhados. Copyright, conclui o idealista Stallman, estava destruindo a comunidade do software. Em 1984, Stallman fundou a Free Software Foundation. Sua meta principal era desenvolver um sistema operacional melhorado que fosse parecido com o Unix, mas que não usasse seu código fonte. Inventado em 1969 por dois pesquisadores do Bell Labs, o Unix agora está disponível em muitas versões diferentes, criadas por companhias com IBM, Compaq e Sun. Stallman batizou sua versão de GNU, um acrônimo para "GNU não é Unix". Numa espécie de homenagem a Stallman, o Gnome, quer dizer GNU Network Object Model Environment. O desafio GNU era enorme. Um sistema operacional define que tarefas os programadores podem solicitar de um computador (adicionar dois números, transferir dados a um disco rígido etc) e dirige os pedidos ao hardware (teclado, monitor, processador, e assim por diante). Mas o sistema é inútil sem centenas 27
20 de programas subsidiários para executar tarefas específicas, como administração de janelas e comunicação com impressora e outros periféricos. Para produzir um sistema funcional, o projeto GNU tinha de criar todos esses programas. Miguel de Icaza brincava: "É como construir um avião a jato a partir do zero em sua garagem". Em 1990, dezenas de programas haviam sido criados e estavam em uso em todo o mundo, mas o coração do sistema operacional GNU ainda não havia sido produzido. Parte da razão era que Stallman optara por não duplicar o kernel do Unix, mas basear o sistema GNU num kernel avançado e experimental desenvolvido pela Universidade Carnegie Mellon. Único programador a receber um fellowship MacArthur, láurea reservada a gênios, Stallman era uma das poucas pessoas no mundo com a capacidade de enfrentar a tarefa de desenvolver um kernel radicalmente novo, e possivelmente a única com a capacidade de fazê-lo por conta própria. Mas então suas mãos, esgotadas com a digitação de tantos códigos, começaram a lhe dar problemas e a dor o impedia de trabalhar com o teclado. Depois de Stallman, foi a vez de Linus Torvalds, que tinha 21 anos e estudava na Universidade de Helsink em Torvalds estava longe de ser um especialista em programação. Mas detestava o MS-DOS e ao comprar um 386 com 4 MB de memória percebeu que era uma máquina muito pequena para operar em Unix. Ignorando o DOS e classificando-o como software de "máqualidade", Torvalds mudou o kernel do projeto GNU para poder usá-lo. Eis que ele havia criado um sistema operacional completo. Pela primeira vez a potência do Unix estava disponível para pequenos computadores em um sistema operacional batizado pelos seus amigos de Linux. Torvalds registrou o Linux com o copyleft de Stallman e permitiu que quem o quisesse o obtivesse on-line; quando as pessoas melhoravam o código, ele colocava as versões aperfeiçoadas à disposição na Internet. Isso foi viabilizado porque como os preços dos 28