Software House

Typy Software House


Określenie Software House odnosi się do możliwości stworzenia przez przedsiębiorstwo działalności głównie polegającej na tworzeniu oprogramowania czyli programów komputerowych. 

Rodzaje Software House:


  • in-house - dostarczenie oprogramowania do celów wewnętrznych (dla różnych departamentów w obrębie jednego dużego przedsiębiorstwa)
  • contractual (kontraktowe) - w tym przypadku celem działania Software House jest dostarczenie pewnego szczególnie określonego oprogramowania z zewnątrz przedsiębiorstwa (outsourcing oprogramowania)
  • product development (rozwój produktu) – sytuacja, kiedy wytwarza się i sprzedaje gotowe do użycia,  „pudełkowe” oprogramowanie


Wspólne role Software House


Organizacja Software House jest bardzo wyspecjalizowanym rodzajem umiejętności zarządzania, gdzie zespół doświadczonych osób może przemienić organizacyjny problem w unikatowe korzyści.  Na przykład, posiadanie podzespołów rozmieszczonych w różnych strefach czasowych może zezwolić na 24-godzinny dzień roboczy spółki, jeżeli zespoły, systemy i procedury są organizacyjnie dobrze ukształtowane. Dobrym przykładem jest kwestia strefy czasowej w zespole: 8-godzinna różnica w pracy zespołu, która może ustalać błędy w oprogramowaniu znalezione przez testerów. Profesjonalne Software House składa się zazwyczaj z co najmniej trzech dedykowanych podzespołów:


  • analitycy biznesowi, którzy określają potrzeby biznesowe na rynku
  • projektanci oprogramowania / programiści, którzy tworzą specyfikację techniczną projektu i napisanie kodu oprogramowania
  • testerzy oprogramowania, którzy są odpowiedzialni za cały proces zarządzania jakością wytwarzanego oprogramowania


Przy większej zatrudnionej liczbie specjalistów, w Software House dość często znajdują się również:


  • techwriterzy, których zadaniem jest napisanie całej dokumentacji, takiej jak przewodniki użytkownika czy instrukcje obsługi
  • specjaliści ds. releasów, którzy są odpowiedzialni za kontrolę procesu budowy całego produktu i wersji oprogramowania
  • graficy, którzy są odpowiedzialni np. za projekty graficznego interfejsu użytkownika
  • inżynierowie utrzymania, którzy są dostępni pod dwiema, trzema lub więcej liniami wsparcia
  • konsultanci odpowiedzialni za dokonywanie rozwiązań operacyjnych, zwłaszcza w konieczności szczegółowej wiedzy specjalistycznej. Przykłady mogą obejmować: budowę wielowymiarowych kostek w oprogramowaniu business intelligence software, integrację z istniejącymi rozwiązaniami, wdrożenie scenariuszy biznesowych w Business Process Management Software.


Struktura Software House


Kierownictwo Software House jest zazwyczaj określone przez osobę na stanowisku Kierownika ds. Rozwoju (Head of Development), oraz sprawozdania zainteresowanych stron.

Kierownik ds. Rozwoju prowadzi podzespoły programistów bezpośrednio lub za pośrednictwem podległych mu kierowników/liderów zespołów, w zależności od wielkości organizacji. Zazwyczaj zespoły zawierające maksymalnie 10 osób są najbardziej operacyjne.



Cykl życiowy (Life Cycle) produktu w Software House


Cykl życia produktu zazwyczaj składa się z co najmniej trzech etapów:

  • projektowanie – zarówno planów biznesowych, jak i specyfikacji technicznej
  • programowanie (coding) – sam rozwój oprogramowania
  • testy – zarządzanie jakością wytwarzanego oprogramowania

Każdy z etapów w idealnych warunkach powinien zabierać 30 % całkowitego czasu, pozostałe 10% czasu są przeznaczone do tzw. „rezerwy”. Na każdym etapie różne grupy odgrywają różne role, jednak każdy rodzaj roli musi być zaaganżowany do całego procesu rozwoju:


  • Analitycy, po zakończeniu specyfikacji biznesowej, zarządzają zmieniającymi się sytuacjami, aby zminimalizować możliwość zmian w czasie. Analitycy wspierają także zarówno programistów jak i testerów w trakcie całego procesu rozwoju – ma to zapewnić, że końcowy produkt spełni określone początkowe wymagania biznesowe. Proces działania analityków biznesowych najlepiej oddaje sytuacja odgrywanej przez nich kluczowej roli w trakcie ostatecznego dostarczenia rozwiązania/oprogramowania do Klienta, ponieważ są oni najbardziej predysponowani do zapewnienia najlepszej warstwy biznesowej.
  • Programiści wykonują specyfikację techniczną w fazie projektowej projektu (dlatego są oni nazywani programistami/projektantami), a podczas testowania produktu poprawiają błędy.
  • Testerzy tworzą scenariusze testowe w fazie projektowej, a także oceniają je w trakcie etapu programowania/codingu


Systemy i procedury


Dobrze zarządzane Software House’y posiadają w różnoraki sposób wdrażane i działające wewnętrznie dla wszystkich podzespołów systemy oraz procedury. Należą do nich:


Analitycy biznesowi

  • Modelowanie i zarządzanie narzędziami, takimi jak Sparx Enterprise Architect czy IBM Rational Rose


Programiści

  • Systemy kontroli wersji oraz procedury wersjonowania oprogramowania
  • Narzędzia do analizy kodu oraz standardy kodowania, zatwierdzone automatycznie bądź ręcznie
  • Wdrażanie mechanizmów


Testerzy

  • Systemy śledzenia błędów
  • Narzędzia automatyzacji testów
  • Narzędzia testów obciążeniowych oraz testów wydajności


Product/Project Managerowie

  • Systemy oraz procedury Enterprise Project Management (EPM)
  • Systemy oraz procedury Product Portfolio Management (PPM)
  • Systemy oraz procedury Zarządzania zmianami (Change Management)


Istnieją również takie procedury jak Application Lifecycle Management (ALM), które mieszczą w sobie niektóre z wyżej wymienionych funkcji w jednym wspólnym pakiecie oraz są stosowane przez grupy użytkowników.


Audyt efektywności Software House


Powszechnie uznane Software House’y mają zwykle jakiś sposób pomiaru własnej skuteczności. Jest to zazwyczaj robione poprzez zdefiniowanie zestawu kluczowych wskaźników wydajności (KPI), takich jak:


  • Średnia liczba błędów wykonanych przez deweloperów na jednostkę czasu lub linii kodu źródłowego
  • Liczba błędów znalezionych przez testera w fazie testów
  • Średnia liczba faz testów, aż do wyniku zera błędów
  • Średni czas fazy testów
  • Szacowany czas zadania w stosunku do rzeczywistego czasu realizacji zadania (tzw. dokładność planowania)
  • Liczba korekt do wartości wyjściowych


Niektóre firmy Software House koncentrują się na osiągnięciu optymalnego poziomu  Capability Maturity Model (Dojrzałość Wydajności Modelu), gdzie „optymalne” nie musi oznaczać „największe”. Istnieją również inne systemy, takie jak chociażby szczególne normy ISO. Każda firma obecnie wytwarza własny styl, który można określić pomiędzy całkowitą technokracją (gdzie wszystko jest zdefiniowane przez ilość wykonanej pracy) do całkowitej anarchii (gdzie nie ma żadnych ilości wykonanej pracy).


Realizacja koncepcji Software House w itBCG


Proces realizacji oprogramowania w naszej firmie realizowany jest kaskadowo z wewnętrznymi cyklami iteracyjnymi. 

Każdy etap realizacji oprogramowania kończy się wspólną decyzją o przejściu do kolejnego etapu podejmowaną wspólnie z Klientem. Dzięki stałemu kontaktowi z Klientem, i wspólną pracą nad realizacją projektu jesteśmy w stanie wyeliminować wszelkie niedociągnięcia projektowe w pierwszych etapach realizacji projektu, – kiedy to dokonywanie zmian i dostosowanie zmian jest najtańsze.


Główne etapy dostarczenia oprogramowania:


  • Analiza wymagań
  • Projektowanie
  • Prototypowanie
  • Implementacja
  • Testowanie
  • Wdrażanie
  • Dokumentowanie
  • Utrzymanie


Realizowane przez nas projekty polegające na tworzeniu dedykowanego rozwiązania zgodnie z oczekiwaniami klienta może obejmować wszystkie wymienione etapy bądź tylko wybrane – zależnie od dokładności dokumentacji dostarczonej od Klienta.

W trakcie tworzenia oprogramowania staramy korzystać z doświadczeń naszego zespołu oraz wzorców projektowych – tworząc elastyczne oraz wydajne rozwiązania. Staramy się korzystać z „framework'ów”, unikając implementacji gotowych już funkcjonalności – korzystając z atutów narzędzi przetestowanych i używanych przez kluczowych dostawców rozwiązań IT na całym świecie – obniżając cenę i podnosząc jakość rozwiązań dostarczanych naszym klientom. Posiadamy również zestaw własnych bibliotek i gotowych komponentów obsługujące procesy związane z:


  • Podpisem elektronicznym, składaniem oraz weryfikacją
  • Inteligentną wysyłką e-maili
  • Archiwizacja dokumentów elektronicznych


Główne etapy dostarczenia oprogramowania


Analiza wymagań

Etap Analizy Wymagań jest pierwszym i najważniejszym etapem w dostarczaniu oprogramowania. To od decyzji podjętych w trakcie Analizy zależeć będzie sukces, bądź też porażka projektu.W trakcie tego etapu wspólnie z Klientem analizujemy działanie rozwiązania. Etap ten kończy się przegotowaną dokumentacją, w której wyspecyfikowane są dokładnie wszystkie wymagania klienta.


Projektowanie

W trakcie etapu Projektowanie Oferent prowadzimy prace analityczne w celu zaprojektowania architektury systemu oraz interfejsów komunikacji pomiędzy komponentami


Prototypowanie

W trakcie etapu prototypowania przygotowujemy prototypy rozwiązania, które będzie dostarczone do klienta.
Rozwiązanie prototypowe nie posiada działających funkcjonalności, klient może zobaczyć pierwsze efekty wspólnie realizowanej analizy.


Implementacja

W trakcie etapu Implementacji przeprowadzone zostaną prace programistyczne zgodnie z przygotowaną dokumentacją oraz zaplanowaną architekturą rozwiązania.


Testowanie

W trakcie testów przeprowadzamy zestaw testów na przygotowanym systemie w celu wykrycia błędów oraz niezgodności z dokumentem określającym wymagania.


Testy wchodzące w skład etapu:


  • Testy systemowe
  • Testy użytkownika
  • Testy integracyjne
  • Testy wydajnościowe


Wdrażanie

W trakcie wdrożenia Oferent bądź Zleceniodawca dokona instalacji systemu na środowiskach wskazanych przez Zleceniodawcę.


Dokumentowanie

Dokumentacja to jeden z ważniejszych elementów dostarczonego oprogramowania. W trakcie dokumentacji rozwiązania opisujemy wszystkie aspekty związane z wykonaniem aplikacji, strukturą danych, które przetwarza. Przygotowujemy stosowne dokumentację dla Użytkowników i Administratorów.


Utrzymanie

W trakcie tego etapu monitorujemy działające rozwiązanie, dbamy o jego stabilność oraz poprawiamy niedociągnięcia, które zostaną wykryte dopiero w rozwiązaniu produkcyjnym.