segunda-feira, 7 de novembro de 2011

Fatos e falácias de Engenharia de Software - Testes de Software

Bom pessoal, após mais uma curta temporada sem atualizações por aqui, estou retornando para dar continuidade a série de discussões a respeito de pontos importantes da engenharia de software. O tema abordado na discussão dessa postagem divide opiniões e talvez traga comentários interessantes a respeito de experiências pessoais. Pois bem, hoje falaremos a respeito de Testes de Software.

Essa é a penúltima postagem da série inicial de discussões planejada, sendo assim aproveitem pois está acabando. =)


Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo nº 05

Fatos
31 - Remoção de erro é a fase mais demorada do ciclo de vida.
32 - Software que um típico programador acredita ser testado várias vezes, tinha apenas cerca de 55 a 60% dos caminhos de sua lógica executada. Utilizar o suporte automatizado, como os analisadores de cobertura, pode aumentar para cerca de 85 a 90%. É quase impossível testar 100% dos caminhos lógicos de software.
33 - Mesmo se uma cobertura de 100% de teste fosse possível, isso não seria um critério suficiente para o teste. Cerca de 35% de defeitos de software emerge da falta de caminhos lógicos, e outros 40% da execução de uma combinação única de caminhos lógicos. Eles não vão ser apanhados por uma cobertura de 100%.
34 - É quase impossível fazer um bom trabalho de remoção de erro sem ferramentas. Depuradores são comumente utilizados, mas outros, como os analisadores de cobertura, não são.

Discussão
Os fatos estudados analisam os principais problemas relacionados aos testes de software. O fato 31 trata do tempo demandado para a remoção de erros de software. Muitos autores chamam essa fase do processo de desenvolvimento de software por nomes diferentes. Os nomes mais comuns de se ver são Teste, Verificação e Validação. Glass prefere chamar essa fase pelo nome de Remoção de erros, pois considera esse o nome que melhor descreve a atividade.

Segundo Glass [1], a fase de remoção de erros de software é a que gasta mais tempo em todo o processo, podendo gastar até o dobro do tempo gasto em cada uma das outras fases do processo de software (Análise de requisitos, projeto e implementação). Isso geralmente causa grandes surpresas aos desenvolvedores, pois de certa maneira, é possível mensurar o tempo demandado em um projeto para recolher requisitos, projetá-los e codificá-los, porém o tempo gasto na remoção de erros de software é muito relativo, pois este vai depender da qualidade do trabalho realizado nas outras fases do processo. Portanto, quanto pior forem executadas as fases anteriores, maior será o tempo demandado na remoção de erros.

Uma maneira eficiente para diminuir o tempo demandado para remoção de erros de software é enfatizar mais a essência do problema a ser resolvido, ou seja, quanto mais atenção for dada para a análise dos requisitos e o projeto, menor será o tempo gasto com remoção de erros, pois erros de codificação são muito mais simples e menos custosos de serem resolvidos do que erros de requisitos.

Considerando que o desenvolvimento de software seja iterativo, a remoção de erros é conseqüentemente feita também de forma iterativa durante todo o processo.

O fato 32 é relacionado à cobertura dos testes de software. Como sua própria descrição já fala, é praticamente impossível testar 100% de um software. Glass julga como ingênuas as pessoas que acreditam nessa possibilidade.

O autor classifica as abordagens de testes de software em quatro diferentes tipos:
  • Testes orientados a requisitos;
  • Testes orientados a estruturas;
  • Testes orientados a estatísticas;
  • Testes orientados a riscos;
Os dados citados pelo autor são baseados em testes estruturais, que são aqueles que verificam os caminhos lógicos de programação. Segundo Glass [1], os testes estruturais de software normalmente cobrem apenas de 55 a 60% dos caminhos lógicos de um software. Com o auxílio de analisadores automáticos de cobertura de testes fica mais fácil identificar as partes do software que ainda não foram abrangidas pelos testes, sendo assim a utilização dos mesmos aumentam a cobertura dos testes para entorno de 85 a 90% dos caminhos lógicos. É praticamente impossível atingir aos 100% de cobertura devido às obscuridades advindas da natureza do software.

É essencial a realização de testes em software utilizando as abordagens que forem relevantes ao projeto em execução, porém dificilmente as baterias de testes na qual os softwares são submetidos irão retirar todos os seus erros.

O fato 33 mostra que mesmo que fosse possível realizar testes de software com 100% de cobertura dos caminhos lógicos, isso ainda não daria garantia da criação de um software livre de erros.

Esse fato é gerado a partir da pesquisa pessoal de Glass. Ao analisar uma série de relatório de erros na indústria aeroespacial, Glass chegou à conclusão de que 35% dos erros encontrados na base de dados analisada eram erros de omissão de lógica, ou seja, requisitos que possivelmente não foram levantados e conseqüentemente não foram implementados. Esse tipo de erro não seria identificado em testes estruturais, pois esse tipo de teste é feito baseando-se na especificação do software.

Outro tipo de erro que não seria identificado mesmo com a execução de testes com 100% de cobertura seriam os erros de análise combinatória. Esses são os erros ocasionados pela combinação de caminhos lógicos. Geralmente os testes estruturais testam os caminhos lógicos separadamente, mas não a combinação deles. Esse tipo de erro de analise combinatória representaram 40% dos erros encontrados por Glass na base de dados analisada.

Em suma, se fosse possível realizar testes de software com 100% de cobertura dos caminhos lógicos, ainda assim, apenas 25% dos erros de software seriam detectados com certeza.

O fato 34 diz respeito à falta de uso de ferramentas para as fases de back-end do desenvolvimento de software. Ao contrário das fases de front-end, onde um grande número de ferramentas para análise e projeto são difundidas e usadas, nas fases de back-end a maioria dos desenvolvedores utiliza apenas ferramentas depuradoras, ignorando analisadores automáticos de cobertura de testes e outras ferramentas.

Há vários fatores que contribuem para a falta de atenção despendida pelos desenvolvedores às ferramentas de back-end. Dentre esses fatores, a super atenção dada às ferramentas de front-end é um dos motivos, pois ao atacar a essência do software no front-end e codificarem seguindo padrões, alguns desenvolvedores acreditam ser desnecessário despender atenção às fases de testes e manutenção.

Em estudo realizado por Zhao e Elhaum [4], foi demonstrado que em apenas 39,6% dos projetos de software-livre, alguma ferramenta de teste foi utilizada e a grande maioria dessas ferramentas eram depuradores. Muito provavelmente esses dados refletem de forma semelhante à situação de projetos de software de uma forma geral, não apenas de software-livre. Porém o motivo principal desse acontecimento em projetos de software livre é a crença na “Lei de Linus”, descrita por Raymond [5] da seguinte maneira: “Dado uma base grande o suficiente de beta-testers e co-desenvolvedores, praticamente todo problema será caracterizado rapidamente e a solução será óbvia para alguém”.

Isso pode ser uma verdade em projetos de software livre detentores de comunidades ativas, entretanto não tem como os desenvolvedores garantirem a existência de uma grande quantidade de pessoas interessadas em colaborar com a evolução do software para fazer assim valer a Lei de Linus. Dessa maneira é muito perigosa essa falta de atenção à utilização de ferramentas nas fases de back-end do desenvolvimento.

Controvérsia
No fato 31 a maior controvérsia está relacionada à descrença de que a remoção de erros gaste tanto tempo do processo de software. Porém, segundo Glass [1], em média 20% do tempo do processo é gasto com a análise de requisitos, outros 20% projetando, mais 20% codificando e impressionantes 40% removendo erros. O dobro gasto em cada uma das outras fases.

Considerando que desenvolver software é uma tarefa complexa e propensa a erros, é muito improvável que surjam técnicas para a construção de software que o livre de erros a serem removidos nos testes, porém fica claro pelos estudos de Glass que ao focar mais atenções na essência do problema a ser resolvido, o número de erros cai consideravelmente.

No fato 32, a maior controvérsia está relacionada à noção de softwares isentos de erros. Muitos especialistas consideram ser possível isso ser feito, embora na prática isso só aconteça geralmente para software de pouca complexidade. O objetivo ideal para projetos de software complexos é realização de testes que garantam que o software esteja isento de erros críticos.

Muitas equipes não dão a atenção adequada para a fase de testes de software e a grande maioria não utiliza nenhuma ferramenta que analise automaticamente a cobertura dos testes já realizados na estrutura. Essa falta de motivação para utilizar ferramentas que automatizem a analise de cobertura geralmente ocorre por não acharem viável investir recursos para isso ou até mesmo pelo desconhecimento dessas ferramentas.

O Emma é uma ferramenta open source que ajuda nesta tarefa, fazendo a análise da cobertura de testes de um projeto Java e gerando um relatório em formato texto ou HTML. Esse relatório representa um feedback importante para os desenvolvedores, pois indica quais áreas do projeto ainda não estão sendo cobertas por testes automatizados e portanto devem ser tratadas prioritariamente [2].

A figura 1 apresenta um exemplo de relatório gerado pela ferramenta Emma. Esse relatório informa a porcentagem de cobertura de teste em cada parte da estrutura de um software. 
Figura 1: Relatório HTML para cobertura de teste no Apache Velocity 1.4
Para maiores informações sobre a ferramenta Emma, consulte o site oficial da mesma em [3].

A controvérsia ao fato 33 é referente ao desconhecimento da informação dada pelo mesmo. A pesquisa realizada por Glass que o proporcionou chegar a tal conclusão não foi devidamente divulgada, sendo assim muitos pesquisadores discordaram desse fato por desconhecerem a pesquisa.

Não existe bala de prata capaz de proporcionar o desenvolvimento de um software isento de erros, porém a combinação das abordagens de testes, juntamente com uma maior atenção demandada à essência do software, proporciona softwares com o menor número de erros.

Existem poucas controvérsias a respeito do fato 34. Talvez o motivo disso não seja relacionado à concordância ou discordância com o fato, mas sim com a falta de interesse nele.

Referências
[1] Glass, Robert L. 1992. Software Quality Building. Englewood Cliffs, NJ: Prentice-Hall. Englewood Cliffs, NJ: Prentice-Hall.

[2] TELES, V. M. Cobertura de Testes na Prática. Disponível em : http://www.devmedia.com.br/articles/viewcomp.asp?comp=8973. Acesso em 22 Maio. 2010.

[3] EMMA: a free Java code coverage tool. Disponível em: http://emma.sourceforge.net/index.html. Acesso em 22 Maio. 2010.

[4] Zhao, Luyin e Elbaum Sebastian. "A Survey on Quality Related Activities in Open Source." Software Engineering Notes, May. 2000.

[5] RAYMOND, E.S. The Cathedral and Bazaar. O’Reilly Books, 1999.

quinta-feira, 29 de setembro de 2011

O que é uma Infraestrutura de Dados Espaciais?

Dentre os diversos temas que estudei e continuo estudando no mestrado, um dos que mais li a respeito e passei a conhecer melhor foi IDE. Não falo exatamente daquele cabo de transferência de dados do HD (Integrated Drive Electronics), muito menos de um ambiente de desenvolvimento de software (Integrated development environment), estou falando mais precisamente sobre Infraestrutura de Dados Espaciais.

O que é uma IDE? 
Esse termo surgiu no início da década de 90 nos EUA devido a necessidade de se ter acesso a informação geográfica padronizada e desde então vem sendo cada vez mais debatido e recebido investimentos em escalas globais, regionais, nacionais, estaduais e municipais. O  US  Federal Geographic Data Committee define IDE como um conjunto de tecnologias, políticas, pessoal e atividades correlatas, necessárias para adquirir, processar, distribuir, utilizar, manter e preservar os dados espaciais em todos os níveis de governo, setor privado, terceiro setor e também o meio acadêmico.

Assim como toda região civilizada possui infraestruturas elétrica, de água, esgoto, telefone e etc... para fornecer acesso a esses respectivos recursos para a população, uma IDE serve para fornecer acesso a informações geográficas.

O desenvolvimento de uma região esta diretamente relacionado com a utilização adequada de recursos. Tendo posse de informações geográficas precisas, é possível realizar planejamento estratégico em diversos aspectos. Vamos imaginar que estudos consigam prever com antecedência a ocorrência de um desastre natural em uma determinada região e que existam informações geográficas disponíveis para estudos sobre a área que será atingida. A partir dessas informações é possível traçar diversas medidas estratégicas como rotas de fuga para a população, possíveis locais seguros para estabelecimento de abrigos e tomar outras medidas preventivas de maneira a minimizar o número de mortes e prejuízos materiais.

É importante destacar que não basta simplesmente distribuir a informação geográfica, ela precisa seguir padrões definidos pela IDE em que ela é disponibilizada. Devido a diferenças políticas e culturais, é muito comum que IDEs pelo mundo sigam padrões diferentes, dessa maneira torna-se um grande desafio a criação de IDEs de âmbitos maiores como nacionais ou continentais (regionais), pois é necessário que os nodos menores (municipais e estaduais) sejam compatíveis com os nodos maiores. Esse processo envolve principalmente as questões políticas e é ai que mora o grande problema...

Para ilustrar essa situação posso citar como exemplo o problema enfrentado pela Europa em 2002 com as inundações no Rio Danúbio. O Rio Danúbio é o 2º maior da Europa, fluindo por 2857 km e cortando 16 países europeus. Em 2002 inundações no Danúbio causaram 700 mortes, desabrigou 500 mil pessoas e causou prejuízos de €25 bilhões. Por mais que alguns países europeus já possuíssem iniciativas de IDE nessa época, não foi o suficiente para traçar medidas estratégicas preventivas mais eficientes, pois essas IDEs seguiam padrões diferentes que inviabilizavam um planejamento em escala continental.

Atualmente a Europa passa por um processo de criação de sua IDE continental, a INSPIRE. A iniciativa INSPIRE começou em meados de 2000 e está prevista para ficar pronta somente em 2019. Esse é um projeto muito audacioso e complexo, se já é complicado pensar em padronização a nível nacional, imaginem a nível continental! Vários fatores estão envolvidos nesse processo, mas isso já é tema para uma futura postagem.

Para terminar essa postagem eu gostaria de falar rapidamente a respeito de uma IDE que estamos desenvolvendo no Departamento de Informática da UFV, a IDE GeoMINAS. Esta é uma IDE de âmbito estadual que surgiu a partir de um projeto de reestruturação do portal de dados do Projeto GeoMINAS, sendo assim ela disponibiliza os dados espaciais disponíveis no antigo site do GeoMINAS porém agora documentados de acordo com o padrão de metadados (Perfil MGB) da Infraestrutura Nacional de Dados Espaciais (INDE), IDE brasileira lançada no ano passado.

O antigo projeto GeoMINAS foi uma iniciativa pioneira na disponibilização de dados espaciais em âmbito estadual. Ele foi articulado por um grupo de instituições sediadas no estado de Minas Gerais mas acabou abandonado devido a falta de apoio político.

Para quem tiver interesse em conhecer a IDE GeoMINAS, ela encontra-se disponível em: http://www.ide.ufv.br/geominas

Futuramente falarei mais sobre IDEs por aqui. Em caso de dúvidas e sugestões comentem!

sábado, 10 de setembro de 2011

Fatos e falácias de Engenharia de Software - Requisitos de Software

Pra compensar o tempo sem muitas novidades por aqui, vamos logo retomar às discussões sobre pontos chave da Engenharia de Software.

Depois de abordar tópicos importantes como Reutilização, Estimativas e Profissionais, discutiremos nessa postagem sobre Requisitos de Software, nada mais nada menos que a espinha dorsal de todo o processo de desenvolvimento!

Para quem já vem acompanhando as discussões anteriores relacionadas a Engenharia de Software, acredito que aos poucos está ficando mais claro a relação existente entre os temas discutidos. Isso proporcionará uma visão crítica muito importante sobre todo o processo de desenvolvimento de software.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo nº. 04

Fatos
23 - Um dos dois motivos mais comuns de projetos saírem de controle são os requisitos instáveis.
24 - Requisitos errados são mais caros para reparar quando encontrados durante a produção, porém são mais baratos para corrigir no início do desenvolvimento.
25 - Requisitos ausentes são os erros de requisitos mais difíceis de corrigir.

Discussão
Os fatos estudados estão relacionados a problemas com requisitos de software e os impactos causados por eles no andamento de um projeto.

O fato 23 trata especificamente de requisitos instáveis. Segundo Glass [1], requisitos instáveis, juntamente com estimativas pobres e muito otimistas, são as principais causas dos projetos de software saírem de controle. Os problemas causados por estimativas falhas não são diretamente relacionados ao desenvolvimento de software, mas sim à gerência. Já os problemas ocasionados por requisitos instáveis são de desenvolvimento de software e são mais complexos de serem resolvidos que os outros.

Grande parte dos problemas causados por requisitos instáveis são gerados por clientes e usuários não entenderem o problema real que desejam solucionar com o software a ser desenvolvido.

Comparada a outras engenharias, como a civil, por exemplo, a engenharia de software é um tópico relativamente novo, portanto é normal que tantos problemas por requisitos instáveis existam, haja vista que muitas das soluções propostas por software ainda são inéditas, e quando esse tipo de solução está em desenvolvimento, o fato de não ter um padrão de comparação com algo já feito pra mesma finalidade, acaba gerando grandes incertezas.

Muitas soluções para requisitos instáveis foram tentadas ao decorrer dos anos. Inicialmente achava-se que o congelamento dos requisitos resolveria tais problemas e assim surgiu a proposta de especificação de software a partir de notações matemáticas, os chamados métodos formais. Segundo Sommerville [2], métodos formais oferecem a possibilidade de analisar através do emprego de cálculos matemáticos a consistência e provar que a implementação de um software corresponde à especificação.

Na prática observou-se que o congelamento dos requisitos, assim como a utilização de métodos formais de especificação de software não são eficientes para resolver o problema de requisitos instáveis, pelo contrário, eles podem atrapalhar e muito devido ao engessamento do processo.

Com o tempo ficou claro que para lidar com requisitos instáveis, o projeto teria que ficar em constante refinamento em busca da desejada estabilidade conceitual. Para isso o uso de protótipos da solução é uma boa prática, pois nem sempre o cliente sabe o que quer, mas geralmente sabe o que não quer. Nesse sentido, todo contato do cliente com novos protótipos gera o refinamento dos requisitos já levantados, pois o feedback do cliente com relação ao protótipo serve para direcionar a equipe de desenvolvimento a um caminho cada vez mais próximo do ideal.

Muitas técnicas surgiram com intuito de inserir cada vez mais os usuários no processo de desenvolvimento do software, especialmente no levantamento de requisitos. JAD (Joint Application Development) é uma dessas técnicas. Ela foi criada pela IBM na década de 70 e propõe que clientes/usuários e desenvolvedores trabalhem juntos em reuniões com objetivo de identificar o problema a ser resolvido pelo software, propor elementos de solução, negociar diferentes abordagens e por fim, especificar um conjunto preliminar de requisitos de solução [3]. A metodologia XP (eXtreme Programming) também prevê dentre suas várias propostas, uma interação semelhante entre cliente e desenvolvedor com o intuito de entender melhor o problema e levantar requisitos mais refinados, porém ambas as propostas devem ser muito bem aplicadas para atingirem sucesso, pois de nada adianta se o usuário/cliente escalado para participar do processo não tiver pontos de vista equivalentes ao da maioria dos clientes e usuários potenciais do software.

O desenvolvimento de software baseado em processos auxilia muito na gerência de projetos de software com requisitos instáveis, pois para lidar com tantas requisições de mudanças, é muito importante a gestão ter um processo de gerenciamento de mudanças bem definido. Dessa forma, toda requisição de mudança passa a ser analisada detalhadamente, observando todos os impactos que ela causaria no projeto e nível de custos, tempo e riscos. Após essa análise, a gerência pode tomar a decisão precisa juntamente com o cliente, avaliando se as mudanças solicitadas são viáveis ou não, evitando assim que o projeto saia de controle por uma decisão imprópria.

O fato 24 é um senso comum entre todos envolvidos com projetos, sejam eles de software ou não. Quanto mais cedo requisitos errados forem identificados, menos custoso será para corrigi-los. A correção de erros durante o desenvolvimento pode ser até 100 vezes mais custosa do que as correções feitas nas fases iniciais do processo [4]. A Figura 1, presente em [5], representa exatamente a ordem de crescimento dos custos para correções ao decorrer do progresso de um projeto.

Figura 1: Custos para correção de erros.

Para diminuir os custos com as mudanças e correções, o ideal é refinar os requisitos do projeto o quanto antes possível. Para isso, várias técnicas podem ser usadas e o feedback do cliente nas fases iniciais é de extrema importância para evitar que problemas sejam detectados em fases muito avançadas da produção acarretando em custos e riscos elevados.

O fato 25 trata de algo interessante para refletir, que são os requisitos omitidos de software. Segundo o autor, um dos erros de requisitos mais difíceis de serem corrigidos é o de requisitos ausentes. Existem diversas técnicas de testes dos requisitos para identificar se eles correspondem ao que se espera do software, porém, um requisito não levantado, conseqüentemente também não será testado, porque teoricamente ele não existe.

Requisitos são levantados de diversas formas, mas de forma geral, o processo de levantamento de requisitos se baseia em interações de pessoas e análises de documentos. Devido à alta subjetividade dessas atividades, o risco de que algum requisito do cliente seja desconsiderado no levantamento está sempre presente.

Segundo o estudo realizado pelo autor, 30% dos erros de software são oriundos de lógicas omitidas de programação. Esse tipo de omissão é geralmente causada por requisitos não levantados. Testes geralmente baseiam-se em requisitos presentes no projeto, portanto, esses erros acabam passando despercebidos nos testes. A dificuldade de identificação desse tipo de erro acaba tornando-os difíceis de serem corrigidos.

Para tornar a análise de requisitos mais eficiente, o levantamento deve ser feito de forma iterativa, pois dessa forma a idéia sobre o problema principal a ser resolvido ficará mais madura e conseqüentemente os analistas passam a ter uma visão mais crítica sobre o problema, identificando os requisitos mais facilmente assim. A interação entre os analistas também é muito importante, pois a troca de informações entre diferentes pontos de vista pode também aumentar essa visão crítica de todos envolvidos.

Controvérsia
Existem poucas controvérsias sobre o fato 23. Antigamente a controvérsia principal a ele era com relação ao congelamento dos requisitos. Hoje é raro encontrar quem discorde de que o congelamento de requisitos é sinônimo de falhas no projeto.

Atualmente a principal controvérsia ao fato 23 gira em torno da utilização de métodos formais para especificação de software. Na prática eles são pouco utilizados pelos profissionais de software, porém a academia ainda defende a “eficiência” de sua aplicação.

Como o fato 24 é um consenso geral, praticamente não existem controvérsias ao seu respeito. As únicas divergências ao fato 24 são relacionadas às formas de evitar que erros demorem a ser detectados. Existem diversas maneiras de fazer isso, porém dependendo da função que determinada pessoa exerce no processo de desenvolvimento, elas tendem a optar por métodos específicos relacionados a tal função.

A dificuldade para identificar e distinguir entre os tipos de erros cometidos acaba gerando poucas controvérsias sobre o fato 25.

Referências
[1] Glass, R. Facts and Fallacies of Software Engineering. Addison Wesley. October 2002.

[2] SOMMERVILLE, I. Software Engineering, 5th edn, Addison-Wesley Publishing Company, Wokingham England. 1996.

[3] GUIMARÃES, E. C. F. O uso da técnica JAD - Joint Application Design para levantamento de requisites. Disponível em: . Acesso em 7 Maio. 2010.

[4] Boehm, Barry, and Victor R. Basili. 2001. "Software Defect Reduction Top 10 List." IEEE Computer, Jan. "Finding and fixing a software problem after delivery is often 100 times more expensive than finding and fixing it during the requirements and design stage."

[5] ANDERSON, K. M. Lecture 04: Software Process, Part 1. Disponível em: http://www.cs.colorado.edu/~kena/classes/5828/s07/lectures/04/index.html. Acesso em 7 Maio. 2010.

quarta-feira, 31 de agosto de 2011

Banco de Dados em Nuvem


Computação em nuvens é um tópico muito discutido atualmente nas diversas áreas da computação. No início do mestrado tinha ideia de realizar minha pesquisa envolvendo banco de dados em nuvens e por isso realizei uma boa revisão bibliográfica a respeito do tema. Embora tenha tido novas ideias ao decorrer do mestrado e mudado o tema da minha pesquisa, essa revisão que realizei me mostrou que existem diversas possibilidades de pesquisa em aberto envolvendo esse tema.

Nessa postagem venho disponibilizar pra vocês um seminário que apresentei a respeito desse tema. Nele apresentei uma visão geral sobre o tema, abordei diversos tópicos importantes, problemas em aberto, principais tecnologias existentes, principais pesquisadores, conferências e revistas para publicar...etc. Acredito que esse possa ser um material muito útil para quem tiver interesse em pesquisar nessa linha.

Em caso de dúvidas, comentem a seguir...

Banco de Dados Em Nuvens