Firma programistyczna - Software company
Firma programistyczna to firma, której głównymi produktami są różne formy oprogramowania , technologia oprogramowania, dystrybucja i rozwój oprogramowania. Tworzą oni branżę oprogramowania .
Rodzaje
Istnieje wiele różnych rodzajów producentów oprogramowania:
- Istnieją firmy sprzedające dostępne do użytku komercyjne produkty z półki (COTS), takie jak Microsoft Outlook, Word i Excel, Adobe Systems Acrobat, Illustrator i inne narzędzia do projektowania lub aplikacje Google, takie jak Chrome.
- Wiele firm świadczy usługi opracowywania oprogramowania i ma strukturę umożliwiającą tworzenie niestandardowego oprogramowania dla innych firm i przedsiębiorstw.
- Firmy produkujące specjalistyczne, gotowe oprogramowanie komercyjne, takie jak Panorama , Hyperion i Siebel Systems
- Firmy dostarczające oprogramowanie jako usługa ( SaaS ), takie jak usługa poczty e-mail Google , Gmail, Voice i Mapy oraz firmy takie jak Salesforce i Zendesk.
- Technologia, która mobilizuje media społecznościowe, takie jak Facebook , LinkedIn , Instagram , Twitter i Parler .
- Istnieją również inne rodzaje produktów SaaS firm świadczących usługi infrastruktury IT i usługi Cloud Computing, takie jak Amazon Web Services (AWS) , Microsoft Azure Cloud Services i usługi hostingowe GoDaddy.
- API jako usługa, która pozwala programistom zewnętrznym na interakcję z oprogramowaniem firmy, takim jak Google Geo Location API, Google Calendar API itp.
- Firmy produkujące komponenty oprogramowania , takie jak Syncfusion , DevExpress, Telerik UI, Kendo UI i Dundas
- Dostawca usług aplikacyjnych, taki jak Salesforce
- Firmy produkujące oprogramowanie na zamówienie dla branż wertykalnych lub określonych regionów geograficznych
- Niezależni dostawcy oprogramowania (ISV), którzy tworzą, rozwijają i sprzedają oprogramowanie konsumenckie lub korporacyjne używane przez użytkowników końcowych
Wszystkie te można podzielić na jedną lub wiele z poniższych kategorii:
- kontraktowy - gdy firma programistyczna ma umowę na dostarczenie określonego oprogramowania z zewnątrz ( outsourcing oprogramowania )
- rozwój produktu - gdy wytwarza gotowe do użycia, pakietowe oprogramowanie; Komercyjne gotowe produkty
Wspólne role w firmie programistycznej
Organizowanie firmy programistycznej to bardzo wyspecjalizowana umiejętność zarządzania, w której doświadczone osoby mogą przekształcić problem organizacyjny w wyjątkową korzyść. Na przykład rozmieszczenie podzespołów w różnych strefach czasowych może umożliwić całodobowy dzień pracy firmy, jeśli zespoły, systemy i procedury są dobrze ugruntowane. Dobrym przykładem jest zespół testowy w strefie czasowej 8 godzin przed lub za zespołem programistów, który naprawia błędy w oprogramowaniu znalezione przez testerów.
Profesjonalna firma programistyczna zwykle składa się z co najmniej trzech dedykowanych zespołów podrzędnych:
- Analitycy biznesowi, którzy definiują potrzeby biznesowe rynku
- Programiści, którzy tworzą specyfikację techniczną i piszą oprogramowanie
- Testerzy oprogramowania odpowiedzialni za cały proces zarządzania jakością
W większych firmach programistycznych stosuje się większą specjalizację, a często są też:
- Pisarze techniczni, którzy piszą całą dokumentację, taką jak podręczniki użytkownika
- Specjaliści ds. wydania, którzy są odpowiedzialni za budowanie całego produktu i wersjonowanie oprogramowania
- Projektanci doświadczeń użytkowników , którzy tworzą architekturę projektowania w oparciu o wymagania biznesowe, badania użytkowników oraz wiedzę z zakresu użyteczności
- Projektanci graficzni, którzy zwykle są odpowiedzialni za projektowanie graficznego interfejsu użytkownika .
- Inżynierowie utrzymania ruchu, którzy stoją za dwiema, trzema lub więcej liniami wsparcia
- Konsultanci są odpowiedzialni za uruchomienie rozwiązania, zwłaszcza jeśli potrzebna jest specjalistyczna wiedza. Przykładami tego są: budowanie wielowymiarowych kostek w oprogramowaniu Business Intelligence , integracja z istniejącymi rozwiązaniami oraz implementacja scenariuszy biznesowych w oprogramowaniu Business Process Management .
Struktura
Menedżer firmy programistycznej jest zwykle nazywany Head Of Development (HOD) i podlega interesariuszom . Kieruje podzespołami bezpośrednio lub przez menedżerów/liderów, w zależności od wielkości organizacji . Zazwyczaj najbardziej sprawne są zespoły liczące do 10 osób. W większych organizacjach istnieją na ogół dwa modele hierarchii:
Wszystkie zespoły są w pełni niezależne i pracują oddzielnie nad różnymi projektami. Struktura jest dość prosta i wszyscy pracownicy podlegają jednej osobie, co sprawia, że sytuacja jest dość jasna, jednak nie jest to dobre rozwiązanie z punktu widzenia wymiany wiedzy i optymalnego wykorzystania zasobów ludzkich.
W tym modelu dedykowani menedżerowie/liderzy dla każdej głównej specjalizacji „wynajmują” swoich ludzi do poszczególnych projektów prowadzonych przez kierowników produktów/projektów, którzy formalnie lub nieformalnie kupują ludzi i płacą za ich czas. Prowadzi to do tego, że każdy prywatny pracownik ma dwóch szefów – kierownika produktu/projektu i wyspecjalizowanego kierownika ds. zasobów. Z jednej strony optymalizuje wykorzystanie zasobów ludzkich, z drugiej może rodzić konflikty, co do których jeden z menedżerów ma pierwszeństwo w strukturze.
Istnieje również wiele wariantów tych struktur, a wiele organizacji ma tę strukturę rozproszoną i podzieloną na różne działy i jednostki.
Metodologie
Firmy programistyczne mogą używać wielu różnych metodologii do tworzenia kodu. Mogą to być:
- Model kaskadowy , w tym metodyki zarządzania projektami, jak PRINCE2 czy PMBoK
- zwinne tworzenie oprogramowania , takie jak Extreme Programming i SCRUM
Istnieją również pewne metodologie, które łączą oba, takie jak model spiralny , Rational Unified Process (RUP) czy MSF .
Cykl życia produktu
Niezależnie od zastosowanej metodologii cykl życia produktu zawsze składa się z co najmniej trzech etapów:
- Projekt – obejmujący zarówno specyfikację biznesową, jak i techniczną
- Kodowanie – sam rozwój
- Testowanie – zarządzanie jakością
Idealnie, każdy etap zajmuje 30% całkowitego czasu, a pozostałe 10% w rezerwie.
UML schemat sekwencji interakcji pomiędzy te grupy mogą wyglądać następująco:
Na każdym etapie inna grupa odgrywa kluczową rolę, jednak każdy rodzaj roli musi być zaangażowany w cały proces rozwoju:
- Analitycy, po skompletowaniu specyfikacji biznesowej, zarządzają zmieniającą się sytuacją biznesową, aby zminimalizować możliwość zmian w czasie. Wspierają również programistów i testerów podczas całego procesu rozwoju, aby finalny produkt spełniał określone na starcie potrzeby biznesowe. Proces idealnie stawia analityków biznesowych jako kluczowych graczy podczas ostatecznego dostarczania rozwiązania do klienta, ponieważ są oni najlepiej przygotowani do zapewnienia najlepszej warstwy biznesowej.
- Programiści tworzą specyfikację techniczną w fazie projektowania, dlatego nazywani są programistami/projektantami, a podczas testów naprawiają błędy.
- Testerzy wypełniają scenariusze testowe w fazie projektowania i oceniają je w fazie kodowania
Systemy i procedury
firmy programistyczne posiadają różne systemy i procedury wdrożone i działające wewnętrznie we wszystkich podzespołach. Obejmują one:
Analitycy biznesowi
- Narzędzia do modelowania, takie jak Sparx Systems Enterprise Architect lub IBM Rational Rose
Programiści
- Systemy kontroli wersji i procedury wersjonowania oprogramowania
- Narzędzia do analizy kodu i standardy kodowania , walidowane ręcznie lub automatycznie
- Mechanizmy wdrażania
Testerzy
- Systemy śledzenia błędów
- Narzędzia do automatyzacji testów
- Narzędzia do testów wydajności i warunków skrajnych
Kierownicy projektów/produktów
- Systemy i procedury Enterprise Project Management (EPM)
- Zarządzanie portfelem produktów (PPM)
- Systemy i procedury zarządzania zmianą
Istnieje również zarządzanie cyklem życia aplikacji (ALM), które osadzają niektóre z tych funkcji w jednym pakiecie i są używane we wszystkich grupach. Dostarczane są od różnych dostawców, takich jak Borland , ECM czy Compuware .
Audyty efektywności
Firmy programistyczne o ugruntowanej pozycji zazwyczaj mają jakiś sposób mierzenia własnej wydajności. Odbywa się to zwykle poprzez zdefiniowanie zestawu kluczowych wskaźników wydajności (KPI), takich jak:
- Średnia liczba błędów wykonanych przez programistę na jednostkę czasu lub wiersze kodu źródłowego
- Liczba błędów znalezionych przez testera na cykl testowy
- Średnia liczba cykli testowych do Zero Bug Bounce (ZBB)
- Średni czas cyklu testowego
- Szacowany czas wykonania zadania w porównaniu do czasu rzeczywistego zadania (dokładność planowania)
- Liczba poprawek do linii bazowej
Wiele organizacji koncentruje się na osiągnięciu optymalnego poziomu Modelu Dojrzałości Zdolności (CMM), gdzie „optymalny” niekoniecznie oznacza najwyższy. Istnieją także inne systemy, takie jak Carnegie-Mellon University „s SEMA lub poszczególnych ISO standardów. Małe firmy programistyczne czasami stosują mniej sformalizowane podejście. Każda organizacja wypracowuje swój własny styl, który leży gdzieś pomiędzy totalną technokracją (gdzie wszystko jest definiowane przez liczby) a totalną anarchią (gdzie w ogóle nie ma liczb). Niezależnie od tego, w którą stronę pójdzie organizacja, rozważa piramidę opisującą koszt i ryzyko wprowadzenia zmian do już rozpoczętych procesów rozwojowych:
Zobacz też
Bibliografia
- ^ „Co to jest firma zajmująca się oprogramowaniem dzisiaj?” . Czerwony Mnich. 2014 . Źródło 2 czerwca 2017 .
- ^ Proces oprogramowania: zasady, metodologia i technologia Autor: Jean Claude Derniame, Badara Ali Kaba, David Wastell p.166
- ^ Greenlit: Rozwijanie rzeczywistych / Reality TV pomysłów od koncepcji do Pitch p.12
- ^ Zarządzanie udanymi projektami z PRINCE2
- ^ Podręcznik użytkownika do przewodnika PMBOK
- ^ Planowanie ekstremalnego programowania
- ^ Zwinne zarządzanie projektami za pomocą Scrum
- ^ Ułatwiony racjonalny, ujednolicony proces: przewodnik praktyka po RUP
- ^ Microsoft Solutions Framework (MSF): przewodnik kieszonkowy