TDD denovo/TDD again

•maio 15, 2011 • 2 Comentários

No meu último post, coloquei alguns frameworks de TDD que mais me interessaram para fazer o porte. Conversando com o Guru de C da equipe (obrigado pela ajuda Leo) acabamos escolhendo o FCTX, um dos motivos é porque simplesmente colocando o seu header você já está apto a trabalhar com ele e segundo não usa nenhuma instrução jump que poderia ser um problema para as plataformas que usamos.

On my last post, I put few TDD’s frameworks that were more interesting to do the port. Talking with Guru of C in the team (thanks Leo) we end up with FCTX, because: first if you simply put its header you already done to work with FCTX and in second it doesn’t use any jump instructions, which would be a problem on ours platforms.

Bom se não falei antes, eu trabalho com POS, eles normalmente tem 2MB de FLASH e 1 MB de RAM para heap, stack e arquivos(existe uma nova geração com muito mais memória), são big e little endian, a maioria trabalha com ARM e são 32 bits, cada fabricante usa um compilador, tem muitas conexões e periféricos, sistemas de arquivos diferentes e gerenciamento de memória (quando tem) diferentes também. Então é mais ou menos como programar na época antes da IBM ter aberto a sua arquitetura de PC.

Sorry if I didn’t told you before, I work with POS, they come with 2MB of FLASH and 1MB of RAM for heap, stack and files (there is a new generation with much more memory), and they are big and little endian. Most of them use ARM and are 32 bits, each manufacturer use a different compiler, they have a lot of connections and peripherals, different file systems and memory managements (when they have) too. In conclusion it’s similar to develop in early days before IBM opens its PC architecture.

Nosso Guru teve que programar a parte da saída do relatório dos testes em arquivo, pois ver isso numa tela de 8Lx21C é cruel demais. E depois de alguns ajustes de memória no FCTX podemos já usar o TDD no POS. O mais importante é que nosso Guru criou uma biblioteca de funções básicas que são praticamente sendo usadas em todos os projetos e essa biblioteca roda no PC, então já podia rodar os testes tanto no PC quanto no POS. (obrigado de novo Leo).

Our Guru had to develop test’s reports into file, because see these reports on a screen with 8 lines by 21 columns is too bad idea. And after a few adjustments on FCTX’s memory’s use, we can run TDD on POS. The most important thing is that our Guru has created a lib of basic functions that are coming to be used in all ours projects and this lib runs on PC, thus I could run the tests on PC and POS. (thanks again Leo)

Eu já usei o FCTX em um POS que rodava LINUX, mas a forma que fiz não ficou muito elegante, o código ficou um sujo e complicado para ler devido às referências de mocks/stubs. Bom não gostando muito do que fiz e acreditando que podia melhorar, conversei com alguns no time e eu consegui bolar algumas idéias para organizar o código:

I already used FCTX on POS with LINUX, but the way that I did it was not elegant, the code was dirty and complicated to read due references of mocks/stubs. Well, I don’t like what I did and I’m convinced that it could be better, I talked to a few in the team and I get few ideas about how to organize the code:

  1. Qualquer referencia a mocks/stubs devem estar em um .h.
    Any reference for mocks/stubs must be on .h.
  2. Uma definição deve ligar/desligar o modo de TDD.
    One define must turn on/off TDD’s mode.
  3. Uma definição deve ligar/desligar o modo de TDD no PC.
    One define must turn on/off TDD on PC’s mode.
  4. Todas as funções que forem mocks/stubs, em sua definição devem manter os seus nomes originais seguidos de um underscore.
    All functions that become mocks/stubs, in their definitions must keep their original’s name followed by a underscore.
  5. Todas as suítes de teste devem estar dentro de uma pasta (TDD) e nome do arquivo fonte deve ser o mesmo do arquivo fonte que está sendo testado seguido de um “_tdd”.
    All suites must be inside of a folder (TDD) and the source code’s file name must be the same of the source code’s file name that is being tested followed by “_tdd”.
// on the showLine.h
#ifndef _TDD_PC_
#include <manufactHeader.h> //original header
#else
#include <fakeManufactHeader.h> //few needed definitions copied from original header
#endif

// this is how the code can call the orginal function or the original one.
#ifndef _TDD_
#define displayLine_(text, line, sizeText) displayLine(text, line, sizeTex)
#else
extern int (*mockDisplayLine)(char*,int,int); // mock definition must be on suite source code.
#define displayLine_(text, line, sizeText) mockDisplayLine(text, line, sizeTex)
#endif

// on the showLine.c
#include <showLine.h>
int showLine(char* text, int line)
{
   int ret = displayLine_(text, line, strlen(text));
   if(ret != strlen(text)) ret = (-1);
   return ret;
}

Até o momento essas regras tem funcionado bem.

Until the moment these rules had been working well.

TDD framework Embedded C

•março 22, 2011 • Deixe um comentário

No meu trabalho fiz uma pesquisa sobre frameworks para aplicar TDD e vou mostrar a vocês os mais interessantes:

On my work I did research about TDD’s frameworks to put in practice TDD and I will show you the most interesting ones:

FrameWork Descritivo simples Vantagens Desvantagens Licença Site Doc Saída Funções usadas Compatível com VC Teste Nurit
FCTX tudo em um .h basta colocar o .h no fonte que for testar que está pronto. repetição de código para cada módulo testado (aumenta o binário?) BSD http://fctx.wildbearsoftware.com/ SIM XML padrão JUNI string.h assert.h stdarg.h stdlib.h stdio.h time.h float.h math.h ctype.h unistd.h SIM; projeto TddTestwithFct
xUnit compatível Macro expansiveis, que podem não ser fáceis de lidar em todos compiladores. próprio (linhas com os teste feitos) _pipe, assert, stdout, sdterr, va_xxx, strings, malloc/realloc, calloc, free, memXXX, clock_t, goto, fprintf
ANSI pipes mínima (pontinhos correndo) macros ##, #arg, double, int
Fixture
CU simples framework para testes automatizados tudo em um .c e um .h Não é xUnit GNU http://cu.danfis.cz/ SIM texto stdlib.h stdio.h string.h sys/wait.h
ANSI Macro expansiveis, que podem não ser fáceis de lidar em todos compiladores. pipe,perror, fork, WIFEXITED, WIFSIGNALED, stdout, sterr, fprintf, flush, snprintf, strings
pipes macro ##name
fork
C unit frame work bem completo (idependente de OS) xUnit compatível tem install para plataformas feito em JAM (parece ser um make) GNU – LGPL-2 http://sourceforge.net/projects/cunit/ SIM próprio stdio.h stdlib.h ctype.h assert.h string.h limits.h time.h,math.h
flexivel muitos módulos XML fprintf,assert,stdout,printf,fopen,setvbuf, size_t,snprintf,longjmp/setjump, double, clock(), exit, va_start/list, toupper,getchar,fgets, time,ctime, malloc,cmalloc
talvez seja possivel cortar os módulos não necessários. Console (testes com interatividade)
Cu Test simples e direto. Feito para GNU portable xUnit compatível simples zlib/libpng http://cutest.sourceforge.net/ simples, mas o próprio fonte vem com os testes do framework texto setjmp.h,stdarg.h, assert.h,stdlib.h,stdio.h,string.h
cross-plataform strXXX,malloc,STRINGMAX, va_start,va_end,vsprintf,memmove,memcpy,setjmp,sprintf
tudo em um .c e um .h
Embedded Unit desenvolvido para embedded e tudo é colocado numa global. Não usa std lib, tudo é feito na lib xUnit compatível projeto um pouco complexo devido não usar o std lib. GNU http://embunit.sourceforge.net/ SIM XML stdio.h (PARA OS OUTPUTTERS)
Fixture faz uns 3 anos que não é alterado texto fprintf,stdout
feito no Japão (?) bom, deve ser limitado em algumas coisas
em tese mais simples de portar
2 libs, uma os testes e outra o outputters

Eles chegaram / They arrived

•dezembro 3, 2010 • Deixe um comentário

Eu estou em um emprego novo e estou louco para colocar um TDD e SCRUM, nem que seja uma parte dele. Bom para isso me equipei com alguns livros que chegaram hoje da Amazon:

  • Agile Product Management with Scrum, Roman Pichler
  • Working Effectively with Legacy Code, Michael C. Feathers
  • Clean Code, Robert C. Martin
  • Head First Software Development, Dan Pilone & Russ Miles

Bom agora é ler todos…

I am in a new job and I’m insane to work with TDD and SCRUM, even it is to do just a bit part of it. Well, to make this true, I bought some books that arrived today from Amazon:

  • Agile Product Management with Scrum, Roman Pichler
  • Working Effectively with Legacy Code, Michael C. Feathers
  • Clean Code, Robert C. Martin
  • Head First Software Development, Dan Pilone & Russ Miles

Now, it up to me read them…

 

 

BlackBerry Developer Day Brazil

•março 20, 2010 • Deixe um comentário

No último dia 18 de março de 2010, foi realizado o BlackBerry developer em São Paulo, Brasil. Ali eles mostraram que querem expandir o número de aplicativos para sua plataforma de celular. A RIM quer entrar com tudo no mercado de consumidor e não ficar somente no mercado corporativo.

Com um sistema muito parecido com o da Apple, onde cada desenvolvedor no mundo pode ter uma idéia genial e ganhar dinheiro sozinho enviando a aplicação para a loja de aplicação (AppWorld) onde a BlackBerry fica com 20% do preço que você por. Você pode baixar todo o kit de desenvolvimento do BlackBerry para o seu PC Windows e começar a programar em Java ou Java script e testar no simulador todos os modelos de smartphone da empresa. Tudo de graça? Nem tanto, você paga no momento que tem que enviar o seu aplicativo para o smartphone e para usar o AppWorld. Ainda não está definido como programadores brasileiros poderão receber o dinheiro da AppWorld, mas, isso será definido até o fim do semestre.

No ponto de programação, eu fiquei surpreso com a quantidade de APIs para propaganda e com o servidor/serviço para gerenciá-las. E claro toda a parte de APIs para trabalhar com GPS. Os simuladores parecem bem completos, podendo simular problemas de comunicação e a navegação do GPS. Eles têm fórum, suporte e treinamento no site: http://na.blackberry.com/eng/developers/ .

O evento foi grande, e muito bem feito. Adorei tudo lá. Foi bom sentir-me como pessoa importante e necessária.

Last March 18th, it was realized the BlackBerry developer in São Paulo, Brazil. There they showed that they want to expand the number of application for their mobile platform. RIM will enter with a big bang in the consumer market and not stay only in corporate.

Similar system of Apple, where each developer in the world can have an original idea and earn money alone, sending his application to application store (AppWorld)  where BlackBerry takes 20%  of the price chosen by you. Now, you are able to download all SDK to your PC Windows and start to program in Java or Java script, test it in a simulator that has all smartphones models of RIM. Everything free? Not so much, you must pay to download your application into a real smartphone and to use the AppWorld. Yet, it is not defined how Brazilian programmers will earn the money in AppWorld, but, it will be defined until the end of this semester.

At programming, I was surprised with the number of APIs to work with ad and the server/service to manage them. Off course all part of APIS to work with GPS. The simulator showed been very completed, where it can simulate communications problems and GPS. They got forums, support and training in the site:
http://na.blackberry.com/eng/developers/ .

It was big event, and very well done. I love everything there. It was good to feel as important and need person.

Precedência dos operadores C / Precedence of C operators

•fevereiro 21, 2010 • Deixe um comentário

Olhando um livro antigo de C, achei uma tabela interessante sobre a precedência dos operadores C.

I was reading an old book of C, I found an interessting table about precedence of C operators.

Do mais alto para o mais baixo/ higher to lowest:

  1. ( )  [ ]  -  ->  .
  2. !  ~  ++  – (cast)  *  &  sizeof
  3. *  /  %
  4. +  -
  5. <<  >>
  6. <<=  >>=
  7. ==  !=
  8. &
  9. ^
  10. |
  11. &&
  12. ||
  13. ?:
  14. =  +=  -=  *=  /=
  15. ,

Simples webcam vira um scanner 3D/ Ordinary webcam becomes 3D scanner

•fevereiro 7, 2010 • Deixe um comentário

A turma da universidade de Cambridge criou o ProFORMA: Probabilistic Feature-based On-line Rapid Model Acquisition, em livre tradução: aquisição rápida de modelos baseados em probabilidade. O que é bacana desse nesse software é que ele cria modelos 3D rapidamente utilizando uma simples webcam. Divertido é o vídeo do software trabalhando, como ele vai eliminando os pontos desnecessários. http://mi.eng.cam.ac.uk/~qp202/my_papers/BMVC09/

Some guys of Cambridge have created ProFORMA: Probabilistic Feature-based On-line Rapid Model Acquisition. The nice point of this software is that it creates 3D models quickly way using only an ordinary webcam. Funny is to watch the software’s working video and see how it eliminates all unnecessary points.  http://mi.eng.cam.ac.uk/~qp202/my_papers/BMVC09/

Blog da INFO/ INFO’s blog

•novembro 30, 2009 • Deixe um comentário

Eu mexo com computadores desde os 10 anos de idade. E digo: naquela época não tinha internet (pelo menos acessível) no Brasil. 99% da fonte de informação era de revistas. Uma das mais antigas é a atual Info (http://info.abril.com.br/blog). Compro esta revista desde que era chamada de Informática quando os 386 dominavam o mundo.

Bom, o legal da revista agora é os seus blogs, e você pode confiar no seu conteúdo por ser uma revista de renome. Os blogs que eu mais curto são: Gadgets, Como se faz e Download da hora.

I work with computers since I was 10. And I going to tell you, in those days there is no internet (accessible ones at least) in Brazil. Magazines were 99% information source. One of old ones is now the Info (http://info.abril.com.br/blog/). I have been buying this magazine since it was called Informática when 386 rules the world.
Well, the good of this magazine is its blogs and you can trust it because it is well-known magazine. Blogs that I love are: Gadgets, How I do, and Downloads.

C não tem tipo Bool?

•novembro 26, 2009 • Deixe um comentário

Reparei isso semana passada, quando estava tentando reaproveitar alguns códigos.
Achando que estava tudo certo o compilador reclamou que não tinha o TRUE. Realmente tinha esquecido um header.
Foi aí que reparei nisso: o C não tem o tipo bool ou muito menos algum valor definido para true ou false.
Boa parte dos programadores ou definem um int, um char ou unsigned char.
Bom, no C qualquer coisa diferente de zero é considerado verdadeiro. Isso é onde muitos iniciantes erram, invés de colocar dois iguais para comparação “==” colocam somente um igual “=” que é atribuição onde é verdadeiro. Graças a evolução dos compiladores muitos avisam sobre isso.

Relax…

•novembro 22, 2009 • Deixe um comentário

Nada melhor do que dar algumas risadas certo? E melhor ainda é dar risadas de nós mesmos programadores, administradores de sistemas, DBAs e etc…
Bom são poucas pessoas que conseguem colocar isso em forma de quadrinhos, e uma delas é o Scott Adams, para quem não sabe ele é o criador de Dilbert. www.dilbert.com
Sempre que possível eu entro no site para dar umas boas risadas, tanto quanto nos infelizes encontros do Dilbert (convenhamos nessa área de TI não somos fortes em flertes), ou dos planos insanos de Dogbert ( cachorro de Dilbert) ou mesmo, como a maioria irá se identificar, o dia a dia do trabalho em uma empresa TI.
Dilbert.com

Sys Internals

•novembro 18, 2009 • 1 Comentário

Bom se você é um programador que não fica feliz em ter objetos prontos ou é um administrador de sistemas que quer ver passo a passo as coisas acontecendo no Windows pode entrar em  http://www.sysinternals.com .
Esse site tem um monte de ferramentas úteis para resolver / analisar problemas.

Os que eu mais gostei foram o proccess Explorer e o tcpipView.
O primeiro é útil até quando você acha que tem algum vírus ou trojan na sua máquina. É um task manager mil anos a frente do que acompanha o Windows.
O segundo é extremamente útil para ver portas TCP e UDP abertas e os processos que estão utilizando quase que em tempo real. Para quem já montou programas servidores isto é essencial.

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.