środa, 31 października 2012

How to create unit test for WIX installer (msi database)

If we want to test installer in WIX technology we can use API from Microsoft.Deployment.WindowsInstaller.dll which is included to WiX Toolset. Below is manual step by step how to test installer database for attached files.

1 Use WiX Toolset v3.6\bin\Microsoft.Deployment.WindowsInstaller.dll and decompile by .dotPeek (it's free) and browse Database class. Now you can execute SELECT query on installer database.
2 Create unit test project, for example for NUnit test framework.
3 Add reference to dll WiX Toolset v3.6\bin\Microsoft.Deployment.WindowsInstaller.dll
4 Create NUnit Test and add to test "Database database = new Database(path to msi, DatabaseOpenMode)
List listFiles = (database.ExecuteNonQuery("select 'FileName' from 'File' ")).Cast().ToList();”

5 Check expected file names in your WIX installer(like .wxs, wxi) with list listFiles. Data could be extracted from .wxs, .wxi by .Net xmlDoc class to read XML and next by foreach to compare file name with above listFiles.

Now you have unit test to check your files names from WIX Installer .wxs,.wxi configuration with compiled installer MSI.
The described unit test How To for WIX is only one of the ideas to test functionality of installer because we can also create unit test for custom actions or use Wix Lux.


dotPeek web site
WIX Lux
Useless WIX unit test example

czwartek, 25 października 2012

Installer w WIX - 3 linki wstępu

Narzędzie do tworzenia instalatora aplikacji/portalu/serwisu, które jest coraz bardziej popularne- mowa o WIX.

Interesujący jest fakt, że Visual Studio 2012 nie wspiera już tworzenia instalatora jako projekt .vdproj, co było często realizowane do wersji Visual Studio 2010. Microsoft oferuje tworzenie projektu instalatora w WIX-ie, choć sam Visual Studio 2012 nie posiada edytora WIX-a tak przyjaznego użytkownikowi jak WixEdit, IsWix, SharpDevelop.

Pierwsze praktyczne wrażenia: Projekt .vdproj może być skonwertowany do formatu WIX przez narzędzie WIX-a Dark. Niestety oceniam, że jest to narzędzie niezbyt przydatne przy konwersji dużego projektu .vdproj.

Artykuł w trakcie kończenia...

Seria artykułów o WIX
Tutorial WIX
Narzędzie Dark
SharpDevelop
WixEdit
IsWix

wtorek, 23 października 2012

Scrum, Kanban - Jira plugin

Miałem dzisiaj możliwość wysłuchania ciekawych informacji na kolejnej prezentacji o narzędziach(plugin-ach) dla metodyk Agile(Scrum, Kanban) w Issue-Track-erze Jira.

Plugin GreenHopper ma ciekawe wsparcie dla wyświetlania wykresu podsumowującego sprint w scrumie.
Wydaje mi się po tej prezentacji, że takie narzędzie jest warte używania, gdyż wykonuje dużo czasochłonnej pracy, jak różnorakie liczenie i podsumowywanie sprintu.

Choć jak wiadomo tym, którzy korzystają z fizycznej tablicy to przy karteczkach na takiej tablicy może występować lepsza komunikacja (w przypadku zespołu umieszczonego w jednym pomieszczeniu). Dla zespołu rozproszonego powyższe narzędzie prawdopodobnie może smiało zastąpić fizyczną tablicę z karteczkami.

Wikipedia JIRA
Strona plugin-u GreenHopper


Strona narzędzia JIRA
Greenhopper Overview, Source:  youtube.com.


Greenhopper prezentacja, Source:  youtube.com.



sobota, 6 października 2012

Maintenance produktu - metodologia Kanban

Obecny rozwój oprogramowania wiąże się z wykorzystaniem metodologii Kanban.

Artykuł w trakcie tworzenia...

Wikipedia Kanban
Szkolenia z metodologii Kanban
Artykuł o Kanban - www.poddrzewem.pl

środa, 11 lipca 2012

Jak ukończyć produkt, czyli zapewnienie jakości przez tworzenie testów jednostkowych NUnit, RhinoMocks

Na początku tworzenia projektu wydaje się, że testy jednostkowe są niepotrzebne. Jednakże gdy projekt jest przekazywany do testów okazuje się, że trzeba spędzić dużo czasu na poprawianie błędów i analizę przypadków, których się wcześniej nie przewidziało.

A można od początku realizacji projektu zastosować podejście TDD- tworzyć unit testy oraz testy integracyjne, nawet dla funkcjonalności, które jeszcze nie powstały. Funkcjonalności, interfejsy, które nie powstały, ale są choć częściowo opisane można zamokować używając np. RhinoMocks lub Moq. Mocki można także stosować do testów integracyjnych.

Strina główna projektu Rhino Mocks
Wikipedia Mock
Strona projektu NUnit (Ostatnia wersja 2.6, wspiera .Net 4.0)
NUnit Wikipedia
AddIn(plugin) NUnit-a dla Visual Studio 2010(2008)
Microsoft PEX - automatycznie generowane unit testy
Moq strona główna projektu

piątek, 22 czerwca 2012

Jak ugotować kodem dużą, nieznaną potrawę funkcjonalności dla wymagającego, "dociekliwego" klienta?

Jeśli do wykonania jest duża potrawa o częściowo nieznanym przepisie dla klienta, który jest dociekliwy(zmienia kolejne plany projektu; udoskonala go, wprowadza kolejne funkcjonalności, usuwa zatwierdzone interfejsy) to są dwie drogi na wykonanie jej przez grupę kucharzy w restauracji:

1 Stworzenie przez głównego kucharza planu wykonania mniejszych części potrawy oraz głównych składników, a następnie realizacja planu przez grupę.

2 Metodyka Scrum(Agile). Jak można wykonać potrawę według Scrum? Można porównać to do zjedzenia potrawy ugotowanej w francuskiej restauracji lub w restauracji Kotlecik(patrz punkt 1).

Jak działa francuska restauracja według Scrum?

Aby odpowiedzieć na to pytanie należy napisać sporą książkę o tej metodyce oraz o metodykach programistycznych.

Istotę Scrum oraz praktyczne elementy najlepiej zobaczyć podczas realizacji projektu zgodnie z Scrum lub przeczytać książkę choćby "Zwinny samuraj" oraz poznać metody programistyczne jak programowanie XP czy wykorzystanie build serwera.

Opis Scrum w Wikipedii.

Nadal nie dałem prostej odpowiedzi co to jest Scrum, bo takiego praktycznego opisu nie ma. Scrum Jest prosty w opisie, a skomplikowany w wykonaniu; upraszcza prace zespołu, ale jednocześnie wymaga większej dyscypliny i zaangażowania oraz zastosowania trudniejszych metod. Po prostu coś za coś

wtorek, 19 czerwca 2012

Wyszukiwanie po kolekcjach LINQ (.Net 3.5,.Net 4.0)

Kiedy można wykorzystać LINQ?

W przypadku, gdy mamy aplikację, która przetwarza dane na różne sposoby i chcemy skrócić czas na obsługę wyszukiwania po kolekcjach to począwszy od Net 3.5 przychodzi z pomocą mechanizm: LINQ. Język c sharp został wyposażony w mechanizm LINQ, aby nie trzeba było tworzyć samemu delegata z warunkami wyszukiwania np. dla metody  FindAll().


Nie będę przedstawiał zbyt dużej ilości kodu, gdyż w tych miejscach "Introducing LINQ" 101 LINQ Samples  jest świetne opisany LINQ.


Poniżej przedstawiłem LINQ z składnią znaną w języku SQL. Można także LINQ zapisać wykorzystując notację Lambda (Lambda Expressions).





     public void methodTest()
     {
            List<String> mainList = new List<string>();
            mainList.Add("first");
            mainList.Add("ala");

            List<String> foundAla = (from item in mainList where
                                         (item == "ala") select item ).ToList();
     }


Pytanie na ile krótsza notacja wyszukiwania LINQ oraz Lambda w języku c sharp zmniejsza wydajność aplikacji? Wydaje się, że jest to tylko umieszczenie odpowiedniego delegata w kodzie przez kompilator.