úterý 25. září 2012

Agilní metodiky - poznámky

  • Jedním z největších rizik softwarových projektů je riziko špatné definice požadavků. Tedy že dokončíme projekt včas a s plánovaným rozpočtem, avšak doručíme co nikdo nechtěl.
  • Kvalitní change management: "V průběhu projektu nemáme se změnou požadavků problémy, protože máme výborný change management. Všechny nové požadavky rovnou zamítáme." (banka)
  • Takhle nikdy ne! Zákazník souhlasí s agilním přístupem, to znamená na začátku se do detailu nedefinují požadavky na systém. Nicméně zákazník, chce pevný rozpočet.

SCRUM

  • Pigs vs. chickens
  • Scrum master (SM) - jeho rolí je odstraňování problémů, které tým má. Což může vést milnému závěru, že je týmovou sekretářkou, která všechno zařídí a o všechno se postará. Scrum master by měl tým vést k samostatnosti a současně ho tlačit do změn a vylepšení současných procesů. Nicméně všchny změny by měli být vysvětleny a odsouhlaseny týmem, direktivní nařízení změn by mohlo vést k sabotování změn samotnými členy týmu.
  • Project owner - definuje směřování a cíl projektu. Vytváří seznam požadavků na projekt.
  • ostatní členové týmu

User stories

Jako [kdo], chci [co], protože/abych...
INVEST - by Bill Wake http://xp123.com/articles/invest-in-good-stories-and-smart-tasks/
Independent, Negotiable, Valuable, Estimable, Sized appropriately (small), testable

Tvorba odhadů

 Odhadování trvání úkolů na základě člověkohodin má při použití agilních metodik několik nevýhod.
  • volné zadání - neumožnuje odhadnout úkoly, které nejsou detailně zadány a popsány. Pokud nevíme co přesně se má udělat nemůžeme přesně odhadnout počet člověkohodin.
  • vazba na konkrétní lidi - Úkol musí být navázán na konkrétního člověka, který bude úkol zpracovávat. Každý pracovník má jiné tempo práce.
  • nezohledňuje vývoj v týmu - Do odhadu se špatně zahrnují například nároky na komunikaci v týmu.
Scrum z toho důvodu zavádí tzv. Story points. Jedná se o jednotku, kterou můžeme zahledňuje poměr náročnosti zpracování jednotlivých úkolů. Uveďme tento postup na příkladu, například máte za úkol složit kubík uhlí. Pokud nemáte předchozí zkušenost, těžko můžete přesně na člověkohodiny odhadnout jak dlouho vám složení tohoto množství uhlí zabere. Nicméně jste vcelku přesně schopni říci, že dva kubíky uhlí vám potrvají dvakrát déle. Přesně takto postuje Scrum při odhadování úkolů. Například si určíme, že vytvoření přihlašovacího formuláře zabere například 10 story points. Počet story points u ostatních úkolů určujeme podle toho o kolik jsou náročnější případně jednoduší než vytvoření přihlašovacího formuláře.

Samotné odhadování náročnosti úkolů provádí vývojový tým sám. Šikovnou metodou pro určení odhadů je například Planning poker.

Úkoly

  • podporovat zastupitelnost lidí v týmu
  • nastavit limit pro počet rozpracovaných ůkolů - špatné je když na konci sprintu máme množství rozpracovaných úkolů, nicméně žádný není hotový
  • udržovat projektový backlog aktuální - přidávání/úprava úkolů, upřesnění odhadů

KANBAN 

minimum plánování, pouze řešení úkolů. Minimalizace rozpracovaných úkolů

Zdroje

  1. Petr Flégr, PV201 Portálové technologie v praxi, Řízení projektů v Seznamu.cz

Doporučená literatura

  • Blog Zuzany Šochové
  • Mike Cohn, Recommentations not Rules, http://www.mountaingoatsoftware.com/blog/recommendations-not-rules

středa 12. září 2012

How restart sequence in PostgreSQL?

After importing some data to PostgreSQL database my Django application started throwing exception while I tried insert new row to table:
IntegrityError at /url/
duplicate key value violates unique constraint "table_name_pkey"
Problem was in sequence, which returned already taken ids.

Diagnosis:

SELECT MAX(id) FROM table_name;
SELECT nextval('table_name_id_seq');
/* Max(id) is greater than nextval. */

Fix:

SELECT setval('table_name_id_seq', (SELECT max(id) FROM table_name)+1);
/* or set next id exacly */
SELECT setval('table_name_id_seq', 123456);
/* or */
ALTER SEQUENCE table_name_id_seq RESTART WITH 123456; 

pondělí 10. září 2012

Forms are escaped [Jinja2, Jingo, Django-Bootstrap]

Django-bootstrap is great app for generating nice forms in Django. But be careful together with template system Jinja2 and adapter Jingo, you can be surprised by unexpected behaviour. Form fields are escaped in default. You can simply get rid of this in settings.py:
JINGO_EXCLUDE_APPS += 'bootstrap'
Form fields are escaped unexpectly.