Extreme Programming
Ne avevo già parlato in un precedente post,
ma provo ad illustrare altri aspetti che avevo ignorato.
Una delle cose che viene data per scontato in XP è che si sappia pensare ad oggetti che è un prerequisito per il simple design.
Ma cosa significa veramente?
Nella programmazione tradizionale o formale un oggetto è dato dai suoi dati (attributi) e i metodi che agiscono su tali dati.
Questo però porta ad un esplosione del numero di classi perché basta un solo dato diverso e devo creare una nuova classe.
L'idea centrale del...
Una delle pratiche più invasive di extreme programming oltre al pair programming è il TDD (Test Driven Development) ed è anche la più difficile da padroneggiare.
In questo post cercherò di analizzare i motivi, fornendo alcuni spunti su come superare le difficoltà.
Le cose più difficili da accettare soprattutto se si ha già una certa esperienza è il fare emergenere il design dai test.
Questo implica di non anticipare eventuali feature successive o test successivi e scrivere il codice minimo indispensabile per fare passare il test appena scritto. Nella fase di refactoring poi si toglieranno tutti gli smell introdotti a partire dal più...
Il coach del mio team xp di nome Nautilus
ci ha proposto un'interessante esercizio per mettere alla prova la qualità della nostra codebase.
Scrivere il test dello scenario che si vuole sviluppare come lo vorremmo, ignorando l'attuale architettura, misurando il tempo impiegato.
Provare poi a scriverlo usando i nostri oggetti misurando nuovamente il tempo impiegato.
Nel caso specifico la coppia, in quanto sviluppiamo in pair, ha impiegato 2 minuti a scrivere il test per il primo caso e tre
pomodori (circa un ora e mezza) nel secondo caso.
La differenza tra i due tempi indica quanto la nostra codebase è lontana dalla qualità che vorremmo...
Continua l'elenco dal post precedente
Iterazione 7
Dal libro Design Patterns:
Preface to Book
Introduction
What is a Design Pattern?
Design Patterns in Smalltalk MVC
Describing Design Patterns
Introduzione Creational patterns
Factory Method (pag. 107)
Extreme programming explained: embrace change - Beck Cap 5 e Cap 6
The Three Laws of TDD - Bob Martin
OCP sul libro Agile Software Development, Principles,...
Vorrei condivere il percorso di studio del team xp per approfondire la conoscenza della programmazione ad oggetti e del ciclo di sviluppo software.
Il percorso è utile sia per chi non conosce l'argomento e vuole apprendere le tecniche di sviluppo seguendo il paradigma OOP, sia per chi vuole ripassare concetti già noti.
Iterazione 1
Improving Software Productivity - Barry W. Boehm, TRW
Iterative and Incremental Development - Robert C. Martin (Engineering Notebook C++ Report, Feb, 1999)
Iterative and Incremental Development (IID) - Robert C. Martin Engineering (Notebook Column April, 1999, C++ Report.)
Iterazione 2
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative...
Ogni tanto, nello sviluppo software, emerge qualche meme come ad esempio: tutte le dipendenze devono essere
disaccoppiate tramite un interface, tutte gli oggetti devono essere creati tramite factory, l'accesso ad un database
deve avvenire tramite un ORM, il TDD genera un buon design ecc.
Cosa hanno in comune tutte le frasi precedenti? Semplice: creano scorciatoie per evitare di pensare.
Sarebbe bello se potessimo scrivere codice seguendo alla lettera un manuale, ma sarebbe anche terribilmente noioso
e probabilmente verremmo sostituiti da qualche tipo di bot.
Prendiamo la prima affermazione: tutte le dipendenze devono essere disaccoppiate tramite un interface
e cerchiamo di capire da dove nasce questa esigenza. Il...
Se avete seguito i passi del post precedente
e provate a lanciare il test dovrebbe aprirsi una finestra che si chiude quasi istantaneamente.
Proviamo ora a simulare il click ad un pulsante. Per prima cosa aggiungiamo il controllo alla main window ricordandoci
di dargli un nome (nel nostro caso buttonControl).
Lo xaml dovrebbe essere qualcosa di analogo:
<Window x:Class="WPFAndNUnit.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Button Name="buttonControl" >A button</Button>
</Canvas>
</Window>
Ora...
Gli acceptance test servono a verificare che una user story
sia stata realizzata correttamente, quindi sono test definiti insieme al cliente o addirittura scritti dal cliente.
L'applicazione che stiamo scrivendo utilizza wpf, quindi la nostra necessità è quella di poter aprire finestre,
cliccare sui pulsanti, ecc. all'interno di un test automatico.
Esistono approcci alternativi a quello che propongo in questo post, come ad esempio le
TestApi, le quali utilizzano le
automation api mentre per l'input del mouse e della tastiera
utilizzano l'API SendInput.
Le TestApi fanno molto di più di quello che a noi serve e quindi ho cercato un approccio più adatto al nostro caso.
Per...
Per stimare o sviluppare una user story a volte è necessario documentarsi su aspetti tecnici che non padroneggiamo. Nel mondo agile questa pratica viene chiamata spike
Uno degli aspetti che si sottovalutano degli spike è che con il tempo costituiscono una knowledge base molto utile per lo sviluppatore. Un altro aspetto importante è che non vengono fatti esperimenti sul codice di produzione.
Personalmente gli spike li committo in un repository chiamato Spikes cercando di dare dei nomi significativi alle varie solution in modo da poterli ritrovare facilmente in seguito...
il post di Riccardo mi ha dato l'occasione per riflettere su un disagio che sento presso le aziende che intendono iniziare o già utilizzano i metodi agili.
Credo che la questione sia dovuta alla differenza della situazione delle aziende italiane, formate soprattutto da PMI, rispetto a quelle anglosassoni.
In generale ho visto l'interesse ad utilizzare alcune pratiche agili (soprattutto l'introduzione dei test e la continuous integration) in situazioni dove è presente quello che io chiamo il cowboy programming.
Sostanzialmente una situazione...
Full Extreme Programming Archive