Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!
Comecei a ler muito sobre TDD, depois na comunidade rails-br descobri o BDD li e me pareceu mais simples do que TDD.
Para fazer TDD no rails é bem mais simples do que parece, é só executar os scripts de criação de models, controllers e views que o framework já cria os arquivos básicos para fazer TDD, bastando apenas escrever os casos de testes e executar o comando rake para tudo funcionar.
Para fazer BDD em rails é necessário a instalação de um plugin chamado RSPec, esse plugin é responsável pela criação das especificações em BDD.
Em rails é muito simples fazer TDD e BDD, já que o próprio ambiente te prepara para desenvolver se utilizando dessas técnicas, diferente dos frameworks PHP que poucos deles possuem facilidades como rails (Na sua última versão, o CodeIgniter introduziu TDD em seu core, ainda não tive tempo para dar uma olhada de como funciona. No cakePHP, pelo que eu vi na comunidade, é capaz de se fazer TDD.
Para se fazer TDD e BDD no PHP é necessário a instalação de frameworks para o mesmo, no meu caso eu escolhi o PHPUnit para testes unitários e para BDD eu escolhi o PHPSpec. Só que essa escolha foi por livre e espontânea pressão, é que somente existe esse framework para se trabalhar com BDD em PHP.
Ele foi escrito após o desenvolvedor (Pádraic Brady) ter se aventurado por Ruby e Rails e conhecido RSpec, ele resolveu desenvolver o “RSpec” para PHP e o batizou de PHPSpec.
A documentação é bastante simples e fácil de ler, usei algumas horas e li toda a documentação, e agora estou planejando para utiliza-los nos projetos que faço parte.
Agora vou explicar um pouco de como funciona com um exemplo.
Primeiro, antes da gente começar, devemos especificar o problema, no caso, como um usuário irá fazer um comentário.
Usuário deverá colocar seu nome, depois ele deverá colocar seu email.
Se o usuário tiver um site, poderá coloca-lo.
Então depois o usuário coloca o conteúdo do comentário e clica em enviar.
Agora que temos a especificação, vamos criar nosso primeiro exemplo:
require_once "Post.php";class DescribeNewPostInBlog extends PHPSpec_Context { private $post = null; public function before() { $this->post = new Post; } public function itShouldSetName() { $this->post->setName("Cairo Noleto"); $this->spec($this->post->getName())->should->beEqualTo("Cairo Noleto"); } public function itShouldSetEmail() { $this->post->setEmail("caironoleto@gmail.com"); $this->spec($this->post->getEmail())->should->beEqualTo("caironoleto@gmail.com"); } public function itShouldSetWebSite() { if ("user set as website") { $this->post->setWebSite("http://www.caironoleto.com/"); } $this->spec($this->post->getWebSite())->should->beEmpty(); } public function itShouldSetContent() { $this->post->setContent("Aqui vai o comentário do post :P"); $this->spec($this->post->getContent())->should->be("Aqui vai o comentário do post :P"); }}
Se rodarmos no terminal, teremos o resultado:
12345
cairo@angus:~/BDDonPHP$ phpspec DescribeNewPostInBlog
E
Fatal error: Call to undefined method Post::setName() in /home/cairo/BDDonPHP/DescribeNewPostInBlog.php on line 15
Da erro por que nossa classe Post não contém o método setName, e vai da erro a cada um dos métodos que não funciona, então irei cria-los:
class Post { private $name; private $email; private $website; private $content; public function setName($name) { $this->name = $name; } public function setEmail ($email) { $this->email = $email; } public function setWebSite($website) { $this->website = $website; } public function setContent($content) { $this->content = $content; } public function getName() { return $this->name; } public function getEmail() { return $this->email; } public function getWebSite() { return $this->website; } public function getContent() { return $this->content; }}
Agora rode mais uma o código e veja tudo rodando perfeitinho :D
Algumas considerações:
A primeira e mais importante é que o framework está na versão 0.2.3 e ainda não saiu nenhuma versão release, todas as versões são betas.
Por ser beta, falta alguns métodos (Como os “Matchers” beAnInstaceOf, beString, beOfType). Por assinar a lista, foi resolvido hoje e inserido o método beString, ainda não sei como faço pra pegar a versão do SVN que seria bem mais interessante, vou colocar um email na lista perguntando como faço e blogo aqui.
O Framework como está funcionando já da pra escrever muita especificação, então é bola pra frente.
Qualidade do software é uma das áreas de estudo em Engenharia de Software onde o principal objetivo é que o produto final atenda ao maior numero de requisitos em que ele foi solicitado.
Só que aí entra um grande problema, que é a definição do termo “Qualidade” e o termo “Qualidade do software”.
O termo “Qualidade” é definido como “aquilo que caracteriza uma pessoa ou coisa e que a distingue das outras”. Só que a interpretação do termo é extremamente pessoal, o que pode ser qualidade para uma pessoa, pode não ser para outra pessoa, que pode ser ou não para o restante das pessoas.
E isso se extende a qualidade do software. É dificil definir se um software é de boa ou má qualidade, por conta desse conceito ser extremamente pessoal.
Mas uma coisa é certa, o que determina a qualidade do software, é a qualidade no processo de desenvolvimento de softwares (Mas não é difícil determinar qualidade?).
Analisando os resultados dos softwares, foi detectado vários padrões e criado várias metodologias de desenvolvimento. CMMI, SPICE, ISO 12207, MPS.BR, SCRUM, XP, e muito mais foram criados para determinar essa qualidade do software.
Mas o mais importante, independente de se usar padrões, metodologias ou qualquer outro tipo de tendencia, é garantir com que o seu software atenda aos requisitos de seu cliente, e que este atenda as necessidades do mesmo. Assim você está garantindo que seu software tem a qualidade ideal para seu cliente.
Scrum é uma Metodologia de Desenvolvimento Ágil. Que utiliza um processo interativo e incremental. Foi criado para gerencias equipes de projetos e integrar equipes no desenvolvimento de softwares e principalmente, para lidar com os problemas encontrador na metodologia em cascata (Waterfall).
O maior problema era que o produto final quase sempre estava diferente do que o cliente solicitou. Justamente por que o acompanhamento do cliente com o produto não existia. A metodologia Scrum foi feita para diminuir o tempo de releases, e mostrar ao cliente que o produto pode e deve ser do jeito que ele quiser.
Para os desenvolvedores, ficou melhor de lidar com o gerenciamento de tarefas, manter o foco no desenvolvimento e por haver muita interação e comunicação é mais fácil saber o que cada um deve fazer e o seu papel nas atividades.
TDD um acronimo para Test-Driven Development, que significa desenvolvimento orientado a testes, e BDD um acronimo para Behavior Driven Development, que significa desenvolvimento orientando a comportamentos.
TDD e BDD são técnicas de desenvolvimento que priorizam os testes de código, integração contínua e desenvolvimento Ágil. Essas técnicas são para desenvolvimento orientado a testes. Mas tem uma pequena diferença, em TDD você escreve os testes e os valida de forma que eles funcionem. Já em BDD, você escreve como deve se comportar seu problema. Além disso, em BDD é mais humano do que os testes.
Existe um framework em ruby chamado RSpec que você deve ser bom em inglês, já que você praticamente “fala” com o framework e diz como vai se comportar as coisas. Em php, foi criado um framework chamado PHPSpec, que uma “versão” do RSpec para PHP.
BDD foi originalmente criado para suprir a necessidade que começou a ser criada em TDD. E também, por que escrever orientado a testes é mais chato, principalmente para quem não tem experiência com testes, ou tem muita experiência.
Quando se programa em TDD, com o passar do tempo, o seus testes se tornam o comportamento que você quer na sua aplicao, algumas pessoas consideram o BDD uma evolução natural do TDD. Independente de usar técnicas ou não, é necessário que a aplicação seja testada. E testes devem ser automáticos, manuais, documentados e validados.
Música? Interessante, fui atrás da história do CodeIgniter, e acabei me deparando com uma história muito boa.
Rick Ellis é um músico, engenheiro e designer musical. Na década de 90 começou a criar web sites apenas por hobby.
Em 2001 ele foi ao Japão e criou um sistema de blog, quando voltou a Los Angeles, ele trabalhou duramente em um protótipo para o site da filha de Frank Sinatra, Nancy Sinatra. Ela amou e Rick decidiu chamar de pMacinhe.
Em 2002, o pMachine foi referencia nas maiores revistas como Mac World ou Mac Addict e um livro sobre blogagem.
ExpressionEngine, foi o lançamento de 2004, intitulada como a próxima geração dos sistemas de publicações de contéudo.
E em 2006, a EllisLab lança o CodeIgniter, uma plataforma de desenvolvimento para desenvolvedores PHP.
No ano de 2007 eu descobri esse framework e utilizo até hoje em meus projetos.
E para quem acha que ele apenas ficou como músico ledo engano, ele se especializou em gerenciamento de projetos pela PMAlliance, enfim, alguem que por hobby acabou tornando isso profissionalmente e hoje é bem conhecido.
Uma história legal e até inspiradora. Agora é correr atrás e se especializar.
PHP foi criada em 1995, originalmente designada para produção de web-sites dinâmicos, por Rasmus Lerdorf.
Concebida para mostrar as estatísticas de sua página pessoal, substituindo alguns scripts feitos em Perl. Em 1997, Zeev Suraski e Andi Gutmans, dois israelenses, construiram a base para o PHP 3, estes tambem criaram o Zend Engine e a Zend Technologies.
Curiosidade: Rasmus foi programador Unix em Porto Alegre nos anos de 1991 a 1993.
Bom, mudei meus planos para meu trabalho de conclusão, irei fazer um estudo comparativo entre as práticas Ágeis em diferentes linguagens e frameworks, por isso conto com o apoio de vocês, leitores do meu blog, me ajudando com materiais, livros, slides, posts em outros blogs, apoio psicológico e entre outras coisas!
Olá, muita gente viu o post me despedindo da W7 Solutions, muitos acharam que iam embora, bom, não fui embora, estou ainda em Teresina, mas o futuro ninguém sabe ;P.
Mas o intuito do post é outro, quero dizer aqui o que eu faço na Add4 Comunicação.
Quando fui convidado para a Add4 Comunicação, além de trabalhar nos projetos e produtos da empresa, fui convidado a fazer parte de um projeto OpenSource, um framework em PHP patrocinado pela empresa.
Esse framework batizado de phpBurn inicialmente é um ORM, que futuramente será um framework MVC para desenvolvimento de aplicativos web em php.
A gente se perguntou o por quê de não utilizar frameworks prontos e somente adapta-los a nossa necessidade, e depois de se levantar os prós e os contras, ficou evidenciado que as soluções que encontramos são soluções que solucionam nossos problemas, mas que ficariamos com vários frameworks diferentes para cada situação.
A minha ideia com esse framework, é tratar uma coisa muito legal que existe no Rails, a utilização de plugins. Hoje existe uns milhares de plugins para rails, uma grande comunidade e um montão de gente se ajudando, e é o que queremos com esse framework.
E o desenvolvimento dele está muito acelerado, em breve teremos uma primeira versão alpha para testes. Espero contar com o apoio de todos que gostam de causas OpenSource e nos ajudar a fazer a coisa crescer.