Últimos posts


Com a liberação do GCC 4.8.0, os desenvolvedores do GNU Compiler Collection completaram a migração para o C++ como a linguagem de implementação para o seu software. O trabalho de desenvolvimento durou anos, e o GCC 4.8 também traz melhorias de desempenho, novo nível de otimização e adiciona o detector de erro de memória AddressSanitizer, assim como a ferramenta ThreadSanitizer.

A mudança para o C++ significa que os desenvolvedores que querem construir sua própria versão do GCC agora precisam de um compilador C++ que entende C++ 2003. Os desenvolvedores explicam neste wiki as razões para a mudança. A página também lista os patches individuais para o compilador que foram comitados como parte da migração. Usuários que querem habilitar o framework Graphite no GCC 4.8 precisarão de novas versões de CLooG e ISL, que podem Sr baixados a partir do diretório de infraestrutura nos servidores GCC.

O código fonte do GCC 4.8.0 está disponível a partir de vários mirrors e do servidor SVN do projeto. Mais informações estão disponíveis neste link e no change log.

Fonte: Feed Carreira – GCC 4.8 completa migração para C++


Um dos princípios fundamentais do desenvolvimento Agile é que o teste é uma responsabilidade comum. Todo mundo na equipe deverá descobrir o que testar e testar o produto. Em essência, toda a equipe é co-proprietária de todos os testes.

No entanto, alguns tipos de testes, especialmente os testes funcionais, são difíceis de ser compartilhados. Ao contrário dos testes unitários, que são conceituados e implementados por desenvolvedores, os testes funcionais são geralmente implementados por desenvolvedores, mas conceituados por outra pessoa (podendo ser engenheiros de produto, QA, BA, testadores, ou outros papéis. Pelo bem da sanidade, vou me referir a esse grupo como QA). Essa dinâmica força uma transferência, o que torna difícil de realmente compartilhar de testes.

Uma maneira de lidar com essa questão é exigir que todos os membros de uma equipe Agile possa tanto conceituar quanto implementar testes funcionais. Em outras palavras, certifique-se de que cada membro da equipe possa codar. Apesar de possível, essa abordagem elimina todo um grupo de profissionais de QA que são ótimos para entender o que testar e encontrar bugs, mas não estão interessados em escrever código. Isso não é o ideal.

Uma maneira melhor é o QA e os devs unirem forças e escreverem testes juntos. Essa colaboração poderia funcionar como a técnica de “teste ping-pong”, comum no pareamento TDD. Ao usar essa técnica, um desenvolvedor escreve um teste de falha e seu par escreve o código de passagem. Não seria ótimo se houvesse uma maneira de fazer algo semelhante com um pareamento QA/Dev?

Felizmente, existem ferramentas disponíveis que tornam esse tipo de colaboração possível. Vou me concentrar em duas: Test Manager e Twist.

Os competidores

Microsoft Test Manager

A Microsoft lançou o Test Manager como parte do Visual Studio 2010. Ele permite que você defina casos de teste e organize-os. Cada caso de teste é um conjunto de passos, e eles podem ser compartilhados (o que significa que um passo pode ser reutilizado em diferentes casos de teste). Eles podem ser automatizados usando Coded UI Tests, que são escritos em C# e podem ser executados contra um navegador.

Twist

O Twist é uma ferramenta da ThoughtWorks Studios. Ele também permite que você defina casos de teste, organize seus testes, e automatize os passos dentro de um caso de teste usando Sahi ou Selenium. Você interage com o Twist por meio de uma versão personalizada do Eclipse, e os testes são automatizados em Java.

A comparação

Sei que essas duas ferramentas são muito mais do que apenas a criação de testes, mas estou basicamente interessado em saber como elas solucionam o problema da colaboração. Para entender isso, precisamos considerar como cada ferramenta facilita “passar o bastão” entre QA e desenvolvedores. Correndo o risco de simplificação excessiva, deve ser fácil fazer algo assim:

  • QA escreve um teste e entrega o teclado ao Dev
  • O Dev escreve o código para implementar o teste
  • Ambas as partes executam o teste e se certificam de que ele passa
  • Dev entrega o teclado de volta para QA
  • Enxágue e repita a operação para melhores resultados

Com a solução da Microsoft, os QAs deverão trabalhar em um ambiente (Test Manager), enquanto os devs estarão em outro (Visual Studio). Esse fato por si só torna a colaboração que eu descrevi acima relativamente envolvida e desnecessariamente complicada:

No Visual Studio:

Visual Studio

No Text Manager:

Text Manager

Por outro lado, o Twist permite que ambas as partes coexistam no mesmo ambiente, e transferir um teste escrito para implementação é literalmente tão simples quanto selecioná-lo e pressionar e Ctrl + Clique. O Twist cria automaticamente (ou reutiliza) uma classe conteiner Java com uma função nomeada com o mesmo nome que a etapa de teste:

Twist

O ponto principal

Mesmo correndo o risco de dizer o óbvio, vou afirmar que apenas uma dessas ferramentas torna mais fácil colaborar, e ela não é o Test Manager. Para ser honesto, isso é bastante decepcionante, pois o Test Manager se integra muito bem no desenvolvimento do ecossistema da Microsoft e ele teria sido bom de usar.

***

Texto original disponível em http://tatiyants.com/agile-testing-dev-qa-collaboration/


O Facebook anunciou que está utilizando HHMV, uma HipHop VM com compilação JIT, em produção, uma solução que unificou seus ambientes de desenvolvimento e deployment, fornecendo ganhos significativos de desempenho para desenvolvedores.

Facebook agora utiliza HHVM/JIT em desenvolvimento e produção

Por razões de desempenho de carregamento de página, o Facebook decidiu implementar uma cadeia de ferramenta PHP-para-C++, cujo código foi aberto em 2010, sob o nome HipHop PHP, sendo que o compilador se chamava HPHPc. A ferramenta converte PHP em uma Abstract Syntax Tree (AST) e, depois, em C++, que é compilado de forma estática para código binário x64. Enquanto isso aumentava a velocidade das páginas web, tinha impacto no desenvolvimento, já que cada desenvolvedor no Facebook possuía uma cópia completa da árvore de código do site e tinha que esperar que toda a base de código fosse compilada. Devido ao fato de o site ter continuado a crescer a uma taxa elevada, a fase de compilação cresceu para cerca de 10 minutos, o que é muito tempo de espera para um desenvolvedor.

Para resolver o problema, uma decisão foi tomada para manter o compilador para código de produção e criar um interpretador (HPHPi) para desenvolvimento, que deveria eliminar o longo tempo de compilação. O resultado foi que esse ambiente de produção se tornou diferente do de desenvolvimento, e um dos problemas foi o uso de diferentes ASTs por razões de desempenho, o que tornou o HPHPi mais lento que o mecanismo Zend usado anteriormente, que trazia HipHop, segundo Drew Paroski, um engenheiro da rede social. (mais…)


Miguel de Icaza anunciou o lançamento do Mono 3.0. A nova versão da implementação de código aberto .NET da Microsoft se baseia em características e desenvolvimentos do Mono 2.10 , lançado em fevereiro de 2011, e no “experimental” Mono 2.11 a partir de março de 2012. A nova versão adiciona um compilador que suporta C# 5.0 – uma versão do C#, que é projetada para permitir a programação assíncrona, através da async e na busca por palavras-chave. O compilador C# (backend) também foi reescrito, de modo que os compiladores mcs, gmcs, dmcs e smcs estejam agora combinados em um único compilador mcs.

Mono 3.0

Os desenvolvedores adicionaram recentemente uma série de tecnologias de código aberto da Microsoft, incluindo ASP.NET MVC 4, páginas da Web ASP.NET, Entity Framework, Razor e System.JSON. A nova versão também inclui o que promete ser um garbage collector mais rápido (SGen) e trazer uma melhor shell C#. Além disso, a equipe de desenvolvimento tem, adicionalmente, atualizado o tempo de execução e as bibliotecas de classes. (mais…)


Com o lançamento da versão 4.4 do KDevelop, a equipe de desenvolvimento do projeto adicionou uma nova tela de boas-vindas contextual para seu ambiente integrado de desenvolvimento (IDE) open source C++.

Criada pelo colaborador Aleix Pol, a nova tela de boas-vindas, baseada em QML/Plasma, fornece aos usuários uma lista de projetos e sessões, assim como ações para criar um novo projeto ou importar um já existente. Os desenvolvedores esperam que a tela ajude os novos usuários a começarem com o KDevelop, enquanto fornece um fluxo de trabalho mais rápido para os usuários já existentes.

Além da página de boas-vindas, a nova versão do IDE, que é focada no KDE, traz outras mudanças. Segundo os desenvolvedores, a lista de mudanças notáveis é pequena, mas eles afirmaram terem corrigido muitos bugs e otimizado funcionalidades existentes, que devem melhorar a estabilidade e o desempenho geral da aplicação.

Mais informações podem ser encontradas no anúncio de lançamento. O KDevelop pode ser baixado aqui. (mais…)


IronJS é uma implementação do ECMAScript 3.0 sobre o DLR (Dynamic Language Runtime). Em entrevista recente concedida ao i-programmer, o criador do IronJSFredrik Holmström, comenta os detalhes da implementação de uma linguagem sobre o DLR do .Net. Um detalhe enfatizado por Fredrik é a quantidade de trabalho que se reduz com o uso do runtime:

O DLR oferece muitos benefícios, sem custos, como a interoperabilidade com linguagens, além da confiabilidade no código do próprio DLR. Grande parte do problema tecnológico é resolvida devido à geração do IL (Intermediate Language).

Fredrik aponta duas formas de se utilizar o DLR – por meio do uso de binders associados – ou por intermédio do DLR, como gerador de linguagem intermediária e ferramenta de compilação, fazendo-se o próprio binding. Como a primeira opção é mais lenta, o IronJS usa a segunda. O efeito colateral de se fazer as próprias associações, porém, é a perda de interoperabilidade com outras linguagens que rodam sobre o DLR.

IronJS: uma linguagem sobre o DLR do .Net

parser do IronJS é atualmente escrito em F#, com o runtime principal escrito em C#. Fredrik planeja substituir todo o código escrito em F# por C#, com o intuito de aumentar ainda mais a velocidade do IronJS. No entanto, em entrevista a Scott Hanselmann, Fredrik declara que mais cedo ou mais tarde o IronJS chegará ao limite de desempenho, por ser implementado sobre o CLR (Common Language Runtime) – isso se comparado a soluções como o V8, escrito em código nativo.

Caso deseje implementar sua própria linguagem sobre o DLR, um bom lugar para começar é a documentação. Pode-se também estudar o código-fonte de uma das linguagens “Iron“, como IronPython ou IronRuby. (mais…)


O Google liberou o Supersonic, um mecanismo de busca voltado para trabalhar de forma eficiente com bancos de dados orientados a colunas. O anúncio sugere que o Supersonic seria “extremamente útil para criar um back-end de banco de dados orientado a colunas”, e visa a oferecer “tempos de execução excelentes.

Para atingir essa meta de design, a biblioteca C++ usa várias otimizações de baixo nível e de cache, instruções SIMD e execução vetorizada para fazer o melhor uso dos CPUs modernos, enquanto trabalha como um processo único.

O Supersonic pode executar “Operations” em dados armazenados nas colunas, como Compute, Filter, Sort, HashJoin, e mais; em views, essas operações podem ser ligadas para produzir um resultado final. Dados para essas operações estão sendo retidos na memória; ainda não dá um formato para armazenamento de dados embutido, mas os desenvolvedores disseram que há uma forte intenção de desenvolver um. (mais…)


A Google tornou a Octane um projeto open source. O projeto consiste de uma suite de benchmark para JavaScript composta de 13 testes para medir o desempenho dos navegadores ao carregar e executar grandes e complexas aplicações JavaScript como games, páginas web ricas e interativas, e ferramentas online. A Octane consiste de 8 testes que fazem parte da V8 Benchmark Suite, além de 5 novos testes – pdf.js, Mandreel, GB Emulator, Code Loading, Box2DWeb - que medem o desempenho de áreas não cobertas pelos outros. Segue a lista completa: (mais…)


O branch de desenvolvimento do GNU Compiler Collection (GCC) agora inclui grandes modificações que fornecem uma reimplementação do C++ do código C que foi originalmente acumulada quando a coleção foi criada. Antes dessa reimplemetação, o código usado no stage 1 do build process do GCC era implementado na linguagem C. O código utilizado nos stages 2 e 3 têm estado disponíveis em C++ há algum tempo.

Com essa mudança, os desenvolvedores do GCC deram um passo bem sucedido em direção à migração do GCC do C para o C++. A ideia tomou forma em maio de 2010, depois de os desenvolvedores terem resolvido que o C++ é uma linguagem aceitável para o GCC. As primeiras modificações de código foram planejadas e implementadas como parte do projeto “GCC in Cxx“.  No projeto complementar, “Cxx conversion“, os programadores desenvolveram as mudanças que agora foram integradas ao branch de desenvolvimento, que vai criar a próxima geração do GCC 4.7. (mais…)


Promoção de Aniversário

Calendário Calendário

Ferramentas para Automação de Teste de Software / Duração: 20h

30 de julho a 03 de agosto / Noite: 18:45 às 22:45 / Local: TargetTrust Confirmada
27 de agosto a 31 de agosto / Manhã: 8:00 às 12:00 / Local: TargetTrust
30 de outubro a 06 de novembro / Noite: 18:45 às 22:45 / Local: TargetTrust
08 de dezembro a 22 de dezembro / Sábado Integral: 8:30 às 12:30 e 13:30 às 17:30 / Local: TargetTrust
17 de dezembro a 21 de dezembro / Noite: 18:45 às 22:45 / Local: TargetTrust

Oracle 11g: Administração do Banco de Dados II / Duração: 30h

31 de julho a 09 de agosto / Noite: 18:45 às 22:45 / Local: TargetTrust Confirmada
03 de setembro a 13 de setembro / Manhã: 8:00 às 12:00 / Local: TargetTrust
18 de setembro a 28 de setembro / Noite: 18:45 às 22:45 / Local: TargetTrust
06 de outubro a 10 de novembro / Sábado Integral: 8:30 às 12:30 e 13:30 às 17:30 / Local: TargetTrust Confirmada
30 de outubro a 09 de novembro / Manhã: 8:00 às 12:00 / Local: TargetTrust
13 de novembro a 23 de novembro / Noite: 18:45 às 22:45 / Local: TargetTrust

Orientação a Objetos com UML / Duração: 20h

01 de agosto a 07 de agosto / Manhã: 8:00 às 12:00 / Local: TargetTrust
04 de agosto a 18 de agosto / Sábado Integral: 8:30 às 12:30 e 13:30 às 17:30 / Local: TargetTrust Confirmada
06 de agosto a 10 de agosto / Noite: 18:45 às 22:45 / Local: TargetTrust Confirmada
03 de setembro a 10 de setembro / Noite: 18:45 às 22:45 / Local: TargetTrust
01 de outubro a 05 de outubro / Manhã: 8:00 às 12:00 / Local: TargetTrust
01 de outubro a 05 de outubro / Noite: 18:45 às 22:45 / Local: TargetTrust
05 de novembro a 09 de novembro / Manhã: 8:00 às 12:00 / Local: TargetTrust
05 de novembro a 09 de novembro / Noite: 18:45 às 22:45 / Local: TargetTrust
03 de dezembro a 07 de dezembro / Manhã: 8:00 às 12:00 / Local: TargetTrust
03 de dezembro a 07 de dezembro / Noite: 18:45 às 22:45 / Local: TargetTrust

(mais…)