Poems

A natureza do software 1

Description
A natureza do software 1 Depois de me mostrar a construção mais recente de um dos games de tiro em primeira pessoa mais populares do mundo, o jovem desenvolvedor riu. Você não joga, né?, ele perguntou.
Categories
Published
of 13
2
Categories
Published
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Share
Transcript
A natureza do software 1 Depois de me mostrar a construção mais recente de um dos games de tiro em primeira pessoa mais populares do mundo, o jovem desenvolvedor riu. Você não joga, né?, ele perguntou. Eu sorri. Como adivinhou? O jovem estava de bermuda e camiseta. Sua perna balançava para cima e para baixo como um pistão, queimando a tensa energia que parecia ser comum entre seus colegas. Porque, se jogasse, ele disse, estaria muito mais empolgado. Você acabou de ver nosso mais novo produto, algo que nossos clientes matariam para ver sem trocadilhos. Estávamos na área de desenvolvimento de uma das empresas de games mais bem-sucedidas do planeta. Ao longo dos anos, as gerações anteriores do game que ele demonstrou venderam mais de 50 milhões de cópias e geraram uma receita de bilhões de dólares. Então, quando essa versão estará no mercado?, perguntei. Ele encolheu os ombros. Em cerca de cinco meses. Ainda temos muito trabalho a fazer. Ele era responsável pela jogabilidade e pela funcionalidade de inteligência artificial de um aplicativo que abrangia mais de três milhões de linhas de código. Vocês usam técnicas de engenharia de software?, perguntei, meio que esperando sua risada e sua resposta negativa. Conceitos-chave aplicativos móveis campos de aplicação computação em nuvem.. 10 curvas de defeitos deterioração linha de produtos software, definição de software legado software, natureza do software, perguntas sobre. 4 WebApps PANORAMA O que é? Software de computador é o produto que profissionais de software desenvolvem e ao qual dão suporte no longo prazo. Abrange programas executáveis em um computador de qualquer porte ou arquitetura, conteúdos (apresentados à medida que os programas são executados), informações descritivas tanto na forma impressa (hard copy) quanto na virtual, abrangendo praticamente qualquer mídia eletrônica. Quem realiza? Os engenheiros de software criam e dão suporte a ele, e praticamente todos que têm contato com o mundo industrializado o utilizam, direta ou indiretamente. Por que é importante? Porque afeta quase todos os aspectos de nossa vida e se difundiu no comércio, na cultura e em nossas atividades cotidianas. Quais são as etapas envolvidas? Os clientes e outros envolvidos expressam a necessidade pelo software de computador, os engenheiros constroem o produto de software e os usuários o utilizam para resolver um problema específico ou para tratar de uma necessidade específica. Qual é o artefato? Um programa de computador que funciona em um ou mais ambientes específicos e atende às necessidades de um ou mais usuários. Como garantir que o trabalho foi realizado corretamente? Se você é engenheiro de software, aplique as ideias contidas no restante deste livro. Se for usuário, conheça sua necessidade e seu ambiente e escolha uma aplicação que seja a mais adequada a ambos. 2 Engenharia de Software Ele fez uma pausa e pensou por uns instantes. Então, lentamente, fez que sim com a cabeça. Adaptamos às nossas necessidades, mas, claro, usamos. Onde?, perguntei, sondando. Geralmente, nosso problema é traduzir os requisitos que os criativos nos dão. Os criativos?, interrompi. Você sabe, os caras que projetam a história, os personagens, todas as coisas que tornam o jogo um sucesso. Temos de pegar o que eles nos dão e produzir um conjunto de requisitos técnicos que nos permita construir o jogo. E depois os requisitos são fixados? Ele encolheu os ombros. Precisamos ampliar e adaptar a arquitetura da versão anterior do jogo e criar um novo produto. Temos de criar código a partir dos requisitos, testá-lo com construções diárias e fazer muitas coisas que seu livro recomenda. Conhece meu livro? Eu estava sinceramente surpreso. Claro, usei na faculdade. Há muita coisa lá. Falei com alguns de seus colegas aqui e eles são mais céticos a respeito do material de meu livro. Ele franziu as sobrancelhas. Olha, não somos um departamento de TI nem uma empresa aeroespacial, então, temos de adaptar o que você defende. Mas o resultado final é o mesmo precisamos criar um produto de alta qualidade, e o único jeito de conseguirmos isso sempre é adaptar nosso próprio subconjunto de técnicas de engenharia de software. E como seu subconjunto mudará com o passar dos anos? Ele fez uma pausa como se estivesse pensando no futuro. Os games vão se tornar maiores e mais complexos, com certeza. E nossos cronogramas de desenvolvimento vão ser mais apertados, à medida que a concorrência surgir. Lentamente, os próprios jogos nos obrigarão a aplicar um pouco mais de disciplina de desenvolvimento. Se não fizermos isso, estaremos mortos. Ideias e descobertas tecnológicas são os mecanismos que impulsionam o crescimento econômico. Wall Street Journal Software de computador continua a ser a tecnologia mais importante no cenário mundial. E é também um ótimo exemplo da lei das consequências não intencionais. Há 60 anos, ninguém poderia prever que o software se tornaria uma tecnologia indispensável para negócios, ciência e engenharia; que software viabilizaria a criação de novas tecnologias (por exemplo, engenharia genética e nanotecnologia), a extensão de tecnologias existentes (por exemplo, telecomunicações) e a mudança radical nas tecnologias mais antigas (por exemplo, a mídia); que software se tornaria a força motriz por trás da revolução do computador pessoal; que aplicativos de software seriam comprados pelos consumidores com seus smartphones; que o software evoluiria lentamente de produto para serviço, à medida que empresas de software sob encomenda oferecessem funcionalidade imediata (just-in-time), via um navegador Web; que uma empresa de software se tornaria maior e mais influente do que todas as empresas da era industrial; que uma vasta rede comandada por software evoluiria e modificaria tudo: de pesquisa em bibliotecas a compras feitas pelos consumidores, de discursos políticos a comportamentos de namoro entre jovens e adultos não tão jovens. Ninguém poderia prever que o software seria incorporado a sistemas de todas as áreas: transportes, medicina, telecomunicações, militar, industrial, entretenimento, máquinas de escritório... a lista é quase infindável. E se você Capítulo 1 A natureza do software 3 acredita na lei das consequências não intencionais, há muitos efeitos que ainda não somos capazes de prever. Também ninguém poderia prever que milhões de programas de computador teriam de ser corrigidos, adaptados e ampliados à medida que o tempo passasse. A realização dessas atividades de manutenção absorve mais pessoas e recursos do que todo o esforço aplicado na criação de um novo software. À medida que aumenta a importância do software, a comunidade da área tenta criar tecnologias que tornem mais fácil, mais rápido e mais barato desenvolver e manter programas de computador de alta qualidade. Algumas dessas tecnologias são direcionadas a um campo de aplicação específico (por exemplo, projeto e implementação de sites); outras são focadas em um campo de tecnologia (por exemplo, sistemas orientados a objetos ou programação orientada a aspectos); e outras ainda são de bases amplas (por exemplo, sistemas operacionais como o Linux). Entretanto, nós ainda temos de desenvolver uma tecnologia de software que faça tudo isso e a probabilidade de surgir tal tecnologia no futuro é pequena. Ainda assim, as pessoas apostam seus empregos, seu conforto, sua segurança, seu entretenimento, suas decisões e suas próprias vidas em software. Tomara que estejam certas. Este livro apresenta uma estrutura que pode ser utilizada por aqueles que desenvolvem software pessoas que devem fazê-lo corretamente. A estrutura abrange um processo, um conjunto de métodos e uma gama de ferramentas que chamaremos de engenharia de software. 1.1 A natureza do software Hoje, o software tem um duplo papel. Ele é um produto e, ao mesmo tempo, o veículo para distribuir um produto. Como produto, fornece o potencial computacional representado pelo hardware ou, de forma mais abrangente, por uma rede de computadores que podem ser acessados por hardware local. Seja residindo em um celular, seja em um tablet, em um computador de mesa ou em um mainframe, o software é um transformador de informações produzindo, gerenciando, adquirindo, modificando, exibindo ou transmitindo informações que podem ser tão simples quanto um único bit ou tão complexas quanto uma apresentação multimídia derivada de dados obtidos de dezenas de fontes independentes. Como veículo de distribuição do produto, o software atua como a base para o controle do computador (sistemas operacionais), a comunicação de informações (redes) e a criação e o controle de outros programas (ferramentas de software e ambientes). O software distribui o produto mais importante de nossa era a informação. Ele transforma dados pessoais (por exemplo, transações financeiras de um indivíduo) de modo que possam ser mais úteis em determinado contexto; gerencia informações comerciais para aumentar a competitividade; fornece um portal para redes mundiais de informação (Internet) e os meios para obter informações sob todas as suas formas. Também propicia um veículo que pode ameaçar a privacidade pessoal e é uma porta que permite a pessoas mal-intencionadas cometer crimes. Software é tanto um produto quanto um veículo que distribui um produto. 4 Engenharia de Software Software é um lugar onde sonhos são plantados e pesadelos são colhidos, um pântano abstrato e místico onde demônios terríveis competem com mágicas panaceias, um mundo de lobisomens e balas de prata. Brad J. Cox O papel do software passou por uma mudança significativa no decorrer da metade final do século passado. Aperfeiçoamentos significativos no desempenho do hardware, mudanças profundas nas arquiteturas computacionais, um vasto aumento na capacidade de memória e armazenamento e uma ampla variedade exótica de opções de entrada e saída; tudo isso resultou em sistemas computacionais mais sofisticados e complexos. Sofisticação e complexidade podem produzir resultados impressionantes quando um sistema é bem- -sucedido; porém, também podem trazer enormes problemas para aqueles que precisam desenvolver e projetar sistemas robustos. Atualmente, uma enorme indústria de software tornou-se fator dominante nas economias do mundo industrializado. Equipes de especialistas em software, cada qual concentrando-se numa parte da tecnologia necessária para distribuir uma aplicação complexa, substituíram o programador solitário de antigamente. Ainda assim, as questões levantadas por esse programador solitário continuam as mesmas hoje, quando os modernos sistemas computacionais são desenvolvidos: 1 Por que a conclusão de um software leva tanto tempo? Por que os custos de desenvolvimento são tão altos? Por que não conseguimos encontrar todos os erros antes de entregarmos o software aos clientes? Por que gastamos tanto tempo e esforço realizando a manutenção de programas existentes? Por que ainda temos dificuldades de medir o progresso de desenvolvimento e a manutenção de um software? Essas e muitas outras questões demonstram a preocupação com o software e a maneira como é desenvolvido uma preocupação que tem levado à adoção da prática da engenharia de software Definição de software Hoje, a maior parte dos profissionais e muitos outros integrantes do público em geral acham que entendem de software. Mas será que entendem mesmo? Uma descrição de software em um livro-texto poderia ser a seguinte: Como devemos definir software? Software consiste em: (1) instruções (programas de computador) que, quando executadas, fornecem características, funções e desempenho desejados; (2) estruturas de dados que possibilitam aos programas manipular informações adequadamente; e (3) informação descritiva, tanto na forma impressa quanto na virtual, descrevendo a operação e o uso dos programas. Sem dúvida, poderíamos dar outras definições mais completas, mas, provavelmente, uma definição mais formal não melhoraria, consideravelmente, a compreensão do que é software. 1 Em um excelente livro de ensaio sobre o setor de software, Tom DeMarco [DeM95] contesta. Segundo ele: Em vez de perguntar por que software custa tanto, precisamos começar perguntando: O que fizemos para que o software atual custe tão pouco? A resposta a essa pergunta nos ajudará a continuar com o extraordinário nível de realização que tem distinguido a indústria de software. Capítulo 1 A natureza do software 5 Taxa de defeitos* Mortalidade infantil Tempo Desgaste Caso queira reduzir a deterioração do software, terá de fazer um projeto de software melhor (Capítulos 12 a 18). FIGURA 1.1 Curva de defeitos para hardware. Para conseguir isso, é importante examinar as características do software que o tornam diferenciado de outras coisas que os seres humanos constroem. Software é mais um elemento de sistema lógico do que físico. Portanto, o software tem uma característica fundamental que o torna consideravelmente diferente do hardware: software não se desgasta. A Figura 1.1 representa a taxa de defeitos em função do tempo para hardware. Essa relação, normalmente denominada curva da banheira, indica que o hardware apresenta taxas de defeitos relativamente altas no início de sua vida (geralmente, atribuídas a defeitos de projeto ou de fabricação); os defeitos são corrigidos; e a taxa cai para um nível estável (felizmente, bastante baixo) por certo período. Entretanto, à medida que o tempo passa, a taxa aumenta novamente, conforme os componentes de hardware sofrem os efeitos cumulativos de poeira, vibração, impactos, temperaturas extremas e vários outros fatores maléficos do ambiente. Resumindo, o hardware começa a se desgastar. Software não é suscetível aos fatores maléficos do ambiente que fazem com que o hardware se desgaste. Portanto, teoricamente, a curva da taxa de defeitos para software deveria assumir a forma da curva idealizada, mostrada na Figura 1.2. Defeitos ainda não descobertos irão resultar em altas taxas logo no início da vida de um programa. Entretanto, esses serão corrigidos, e a curva se achata, como mostrado. A curva idealizada é uma simplificação grosseira de modelos de defeitos reais para software. Porém, a implicação é clara: software não se desgasta. Mas deteriora! Essa aparente contradição pode ser elucidada pela curva real apresentada na Figura 1.2. Durante sua vida 2, o software passará por alterações. À * N. de R.T.: Os defeitos do software nem sempre se manifestam como falha, geralmente devido a tratamentos dos erros decorrentes desses defeitos pelo software. Esses conceitos serão mais detalhados e diferenciados nos capítulos sobre qualidade. Neste ponto, optou-se por traduzir failure rate por taxa de defeitos, sem prejuízo para a assimilação dos conceitos apresentados pelo autor neste capítulo. 2 De fato, desde o momento em que o desenvolvimento começa, e muito antes de a primeira versão ser entregue, podem ser solicitadas mudanças por uma variedade de diferentes envolvidos. 6 Engenharia de Software Aumento da taxa de defeitos devido a efeitos colaterais Taxa de defeitos Mudança Curva real Curva idealizada Tempo FIGURA 1.2 Curva de defeitos para software. Os métodos de engenharia de software tentam reduzir ao máximo a magnitude das elevações (picos) e a inclinação da curva real da Figura 1.2. medida que elas ocorram, é provável que sejam introduzidos erros, fazendo com que a curva de taxa de defeitos se acentue, conforme mostrado na curva real (Figura 1.2). Antes que a curva possa retornar à taxa estável original, outra alteração é requisitada, fazendo com que a curva se acentue novamente. Lentamente, o nível mínimo da taxa começa a aumentar o software está deteriorando devido à modificação. Outro aspecto do desgaste ilustra a diferença entre hardware e software. Quando um componente de hardware se desgasta, ele é substituído por uma peça de reposição. Não existem peças de reposição de software. Cada defeito de software indica um erro no projeto ou no processo pelo qual o projeto foi traduzido em código de máquina executável. Portanto, as tarefas de manutenção de software, que envolvem solicitações de mudanças, implicam complexidade consideravelmente maior do que a de manutenção de hardware Campos de aplicação de software Atualmente, sete grandes categorias de software apresentam desafios contínuos para os engenheiros de software: Software de sistema Conjunto de programas feito para atender a outros programas. Certos softwares de sistema (por exemplo, compiladores, editores e utilitários para gerenciamento de arquivos) processam estruturas de informação complexas; porém, determinadas. 3 Outras aplicações de sistema (por exemplo, componentes de sistema operacional, drivers, software de rede, processadores de telecomunicações) processam dados amplamente indeterminados. 3 Um software é determinado se a ordem e o timing (periodicidade, frequência, medidas de tempo) de entradas, processamento e saídas forem previsíveis. É indeterminado se a ordem e o timing de entradas, processamento e saídas não puderem ser previstos antecipadamente. Capítulo 1 A natureza do software 7 Software de aplicação Programas independentes que solucionam uma necessidade específica de negócio. Aplicações nessa área processam dados comerciais ou técnicos de uma forma que facilite operações comerciais ou tomadas de decisão administrativas/técnicas. Software de engenharia/científico Uma ampla variedade de programas de cálculo em massa que abrangem astronomia, vulcanologia, análise de estresse automotivo, dinâmica orbital, projeto auxiliado por computador, biologia molecular, análise genética e meteorologia, entre outros. Uma das mais abrangentes bibliotecas de shareware/ freeware (software compartilhado/livre) pode ser encontrada em shareware.cnet.com. Software embarcado Residente num produto ou sistema e utilizado para implementar e controlar características e funções para o usuário e para o próprio sistema. Executa funções limitadas e específicas (por exemplo, controle do painel de um forno micro-ondas) ou fornece função significativa e capacidade de controle (por exemplo, funções digitais de automóveis, tal como controle do nível de combustível, painéis de controle e sistemas de freio). Software para linha de produtos Projetado para prover capacidade específica de utilização por muitos clientes diferentes. Software para linha de produtos pode se concentrar em um mercado hermético e limitado (por exemplo, produtos de controle de inventário) ou lidar com consumidor de massa. Aplicações Web/aplicativos móveis Esta categoria de software voltada às redes abrange uma ampla variedade de aplicações, contemplando aplicativos voltados para navegadores e software residente em dispositivos móveis. Software de inteligência artificial Faz uso de algoritmos não numéricos para solucionar problemas complexos que não são passíveis de computação ou de análise direta. Aplicações nessa área incluem: robótica, sistemas especialistas, reconhecimento de padrões (de imagem e de voz), redes neurais artificiais, prova de teoremas e jogos. Milhões de engenheiros de software em todo o mundo trabalham arduamente em projetos de software em uma ou mais dessas categorias. Em alguns casos, novos sistemas estão sendo construídos, mas, em muitos outros, aplicações já existentes estão sendo corrigidas, adaptadas e aperfeiçoadas. Não é incomum um jovem engenheiro de software trabalhar em um programa mais velho do que ele! Gerações passadas de pessoal de software deixaram um legado em cada uma das categorias discutidas. Espera-se que o legado a ser deixado por esta geração facilite o trabalho dos futuros engenheiros de software. Para mim, o computador é a ferramenta mais extraordinária que já inventamos. É o equivalente de uma bicicleta para nossas mentes. Steve Jobs Software legado Centenas de milhares de programas de computador caem em um dos sete amplos campos de aplicação discutidos na subseção anterior. Alguns deles são software de ponta recém-lançados para indivíduos, indústria e governo. Outros progr
Search
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks
SAVE OUR EARTH

We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

More details...

Sign Now!

We are very appreciated for your Prompt Action!

x