Cairo Noleto

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

| Comments

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!

Tenha sempre um live cd por perto…

| Comments

É isso mesmo, você usuário linux, tenha sempre um Live CD por perto.

Agora a pouco passei por um “apérreio” que só consegui resolver com o live cd do ubuntu 8.04.

Até a próxima!

Behavior Driven Development em PHP com PHPSpec

| Comments

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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:

1
2
3
4
5
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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.

Até a próxima!

Qualidade do software

| Comments

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.

Até a próxima!

O que é scrum?

| Comments

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.

Até a próxima!

Diferença entre TDD e BDD

| Comments

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.

Até a próxima!

CodeIgniter, música e programação

| Comments

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.

Até a próxima!

Rasmus Lerdorf, criador do PHP

| Comments

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.

Até a próxima!

Quer saber mais sobre Scrum? Novas mudanças de plano!

| Comments

Infelizmente, o conteúdo ainda não vai ser totalmente meu!

Mas no blog do Henrik Kniberg você vai encontrar muita coisa, principalmente a experiência de quem gerencia equipes com mais de 50 pessoas.

Henrik Kniberg é o autor do livro Scrum and XP from the Trenches, que já comentei aqui no blog.

Trabalho de Conclusão

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!

Até a próxima!

E o que eu ando aprontando?

| Comments

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.

Até a proxima!