Inżynieria oprogramowania

Inżynieria oprogramowania to system tworzenia oprogramowania w stylu inżynierskim . Inżynier oprogramowania to osoba, która stosuje zasady inżynierii oprogramowania do projektowania, rozwijania, utrzymywania, testowania i oceny oprogramowania komputerowego . Termin programista jest czasami używany jako synonim, ale może również nie mieć konotacji z wykształceniem lub umiejętnościami inżynierskimi.

Techniki inżynierskie są wykorzystywane do informowania o procesie tworzenia oprogramowania , który obejmuje definiowanie, wdrażanie, ocenę, pomiary, zarządzanie, zmianę i doskonalenie samego procesu cyklu życia oprogramowania. W dużym stopniu wykorzystuje zarządzanie konfiguracją oprogramowania , które polega na systematycznym kontrolowaniu zmian w konfiguracji oraz utrzymywaniu integralności i identyfikowalności konfiguracji i kodu przez cały cykl życia systemu. Nowoczesne procesy wykorzystują wersjonowanie oprogramowania .

Historia

Począwszy od lat 60. inżynieria oprogramowania była postrzegana jako odrębny rodzaj inżynierii . Ponadto rozwój inżynierii oprogramowania był postrzegany jako walka. Trudno było nadążyć za sprzętem, co powodowało wiele problemów dla inżynierów oprogramowania. Problemy obejmowały oprogramowanie, które przekraczało budżet, przekraczało terminy, wymagało szeroko zakrojonego usuwania błędów i konserwacji oraz bezskutecznie zaspokajało potrzeby konsumentów lub nigdy nie zostało ukończone. W 1968 NATO zorganizowała pierwszą konferencję Inżynierii Oprogramowania, na której poruszono zagadnienia związane z oprogramowaniem: ustalono wytyczne i najlepsze praktyki tworzenia oprogramowania.

Początki terminu „inżynieria oprogramowania” przypisuje się różnym źródłom. Termin „inżynieria oprogramowania” pojawił się na liście usług oferowanych przez firmy w wydaniu COMPUTERS and AUTOMATION z czerwca 1965 roku i był używany bardziej formalnie w wydaniu Communications of the ACM z sierpnia 1966 roku (tom 9, numer 8) „list do Członkostwo w ACM” przez prezesa ACM Anthony'ego A. Oettingera, wiąże się również z tytułem konferencji NATO w 1968 roku prof. Friedricha L. Bauera , pierwszej konferencji poświęconej inżynierii oprogramowania. Małgorzata Hamilton opisali dyscyplinę „inżynieria oprogramowania” podczas misji Apollo, aby nadać temu, co robią, legitymację. W tamtym czasie uważano, że nastąpił „ kryzys oprogramowania ”. 40. Międzynarodowa Konferencja Inżynierii Oprogramowania (ICSE 2018) świętuje 50 lat „Inżynierii Oprogramowania” z przemówieniami na sesjach plenarnych Fredericka Brooksa i Margaret Hamilton .

W 1984 roku powstał Software Engineering Institute (SEI) jako finansowane ze środków federalnych centrum badawczo-rozwojowe z siedzibą na kampusie Carnegie Mellon University w Pittsburghu w Pensylwanii w Stanach Zjednoczonych. Watts Humphrey założył SEI Software Process Program, mający na celu zrozumienie procesu inżynierii oprogramowania i zarządzanie nim. Wprowadzone poziomy dojrzałości procesu stałyby się modelem integracji zdolności dojrzałości na rzecz rozwoju (CMMI-DEV), który określa, w jaki sposób rząd USA ocenia umiejętności zespołu programistów.

Nowoczesne, powszechnie akceptowane najlepsze praktyki w zakresie inżynierii oprogramowania zostały zebrane przez podkomitet ISO/IEC JTC 1/SC 7 i opublikowane jako Software Engineering Body of Knowledge (SWEBOK). Inżynieria oprogramowania jest uważana za jedną z głównych komputerowych .

Definicje i terminologia

Godne uwagi definicje inżynierii oprogramowania obejmują:

  • „Systematyczne stosowanie naukowej i technologicznej wiedzy, metod i doświadczenia w projektowaniu, wdrażaniu, testowaniu i dokumentacji oprogramowania” — The Bureau of Labor Statistics — IEEE Inżynieria systemów i oprogramowania Słownictwo
  • „Zastosowanie systematycznego, zdyscyplinowanego, wymiernego podejścia do tworzenia, obsługi i konserwacji oprogramowania IEEE Standard Glossary of Software Engineering Terminology
  • „dyscyplina inżynierska zajmująca się wszystkimi aspektami produkcji oprogramowania” — Ian Sommerville
  • „ustanowienie i wykorzystanie solidnych zasad inżynierii w celu ekonomicznego uzyskania oprogramowania, które jest niezawodne i działa wydajnie na rzeczywistych maszynach” - Fritz Bauer
  • „dział informatyki zajmujący się projektowaniem, wdrażaniem i konserwacją złożonych programów komputerowych ” — Merriam-Webster
  • „inżynieria oprogramowania” obejmuje nie tylko czynność pisania kodu, ale wszystkie narzędzia i procesy używane przez organizację do tworzenia i utrzymywania tego kodu w czasie. […] Inżynierię oprogramowania można traktować jako „programowanie zintegrowane w czasie .'” — Inżynieria oprogramowania w Google

Termin ten był również używany mniej formalnie:

  • jako nieformalny współczesny termin określający szeroki zakres działań, które wcześniej nazywano programowaniem komputerowym i analizą systemów ;
  • jako szerokie określenie wszystkich aspektów praktyki programowania komputerowego, w przeciwieństwie do teorii programowania komputerowego, która jest formalnie studiowana jako subdyscyplina informatyki ;
  • jako termin ucieleśniający rzecznictwo określonego podejścia do programowania komputerowego, nakłaniający do traktowania go jako dyscypliny inżynierskiej , a nie sztuki czy rzemiosła, oraz opowiadający się za kodyfikacją zalecanych praktyk.

Etymologia słowa „inżynier oprogramowania”

Margaret Hamilton promowała termin „inżynieria oprogramowania” podczas swojej pracy nad programem Apollo . Termin „inżynieria” został użyty, aby potwierdzić, że praca powinna być traktowana tak samo poważnie, jak inne wkłady w rozwój technologii. Hamilton szczegółowo opisuje jej użycie tego terminu:

Kiedy po raz pierwszy wymyśliłem ten termin, nikt wcześniej o nim nie słyszał, przynajmniej w naszym świecie. Przez długi czas był to żart. Lubili żartować sobie z moich radykalnych pomysłów. To był pamiętny dzień, kiedy jeden z najbardziej szanowanych guru sprzętu komputerowego wyjaśnił wszystkim na spotkaniu, że zgadza się ze mną, że proces tworzenia oprogramowania również powinien być uważany za dyscyplinę inżynierską, podobnie jak w przypadku sprzętu. Nie dlatego, że zaakceptował nowy „termin” jako taki, ale dlatego, że zasłużyliśmy na jego i akceptację innych w pokoju jako osobną dziedzinę inżynierii.

Odpowiedniość terminu

Poszczególni komentatorzy ostro nie zgadzali się co do tego, jak zdefiniować inżynierię oprogramowania lub jej zasadność jako dyscypliny inżynierskiej. David Parnas powiedział, że inżynieria oprogramowania jest w rzeczywistości formą inżynierii. Steve McConnell powiedział, że tak nie jest, ale tak powinno być. Donald Knuth powiedział, że programowanie jest sztuką i nauką. Edsger W. Dijkstra twierdził, że terminy inżynieria oprogramowania i inżynier oprogramowania były nadużywane [ niewłaściwa synteza? ] i powinny być uważane za szkodliwe, szczególnie w Stanach Zjednoczonych.

Zadania w dużych projektach

Wymagania Systemowe

Inżynieria wymagań polega na pozyskiwaniu, analizie, specyfikacji i walidacji wymagań dla oprogramowania . Wymagania dotyczące oprogramowania mogą być trzech różnych typów. Istnieją wymagania funkcjonalne , wymagania niefunkcjonalne i wymagania domenowe. Operacja oprogramowania powinna być wykonana i należy oczekiwać odpowiedniego wyjścia dla użytkownika. Wymagania niefunkcjonalne dotyczą takich kwestii, jak przenośność, bezpieczeństwo, łatwość konserwacji, niezawodność, skalowalność, wydajność, możliwość ponownego użycia i elastyczność. Są one podzielone na następujące typy: ograniczenia interfejsu, ograniczenia wydajności (takie jak czas reakcji, bezpieczeństwo, przestrzeń dyskowa itp.), ograniczenia operacyjne, ograniczenia cyklu życia (możliwość konserwacji, przenośność itp.) oraz ograniczenia ekonomiczne. Znajomość sposobu działania systemu lub programistyczne są potrzebne, jeśli chodzi o określenie wymagań niefunkcjonalnych. Wymagania domeny mają związek z charakterystyką określonej kategorii lub domeny projektów.

Projektowanie Oprogramowania

Projektowanie oprogramowania dotyczy procesu definiowania architektury, komponentów, interfejsów i innych cech systemu lub komponentu. Jest to również nazywane architekturą oprogramowania . Projektowanie oprogramowania dzieli się na trzy różne poziomy projektowania . Trzy poziomy to projekt interfejsu , projekt architektoniczny i projekt szczegółowy . Projekt interfejsu to interakcja między systemem a jego środowiskiem. Dzieje się tak na wysokim poziomie abstrakcji wraz z wewnętrznym działaniem systemu. Projekt architektoniczny ma związek z głównymi komponentami systemu i ich obowiązkami, właściwościami, interfejsami oraz ich relacjami i interakcjami, które zachodzą między nimi. Szczegółowy projekt to wewnętrzne elementy wszystkich głównych komponentów systemu, ich właściwości, relacje, przetwarzanie i zwykle ich algorytmy oraz struktury danych .

Budowa oprogramowania

Budowa oprogramowania, główna działalność związana z tworzeniem oprogramowania, to połączenie programowania , testów jednostkowych , testów integracyjnych i debugowania . Testowanie w tej fazie jest zazwyczaj przeprowadzane przez programistę, gdy oprogramowanie jest w trakcie tworzenia, aby zweryfikować, co właśnie zostało napisane i zdecydować, kiedy kod jest gotowy do wysłania do następnego kroku.

Testowanie oprogramowania

Testowanie oprogramowania to empiryczne, techniczne badanie przeprowadzane w celu dostarczenia interesariuszom informacji o jakości testowanego produktu lub usługi, przy użyciu różnych podejść, takich jak testy jednostkowe i testy integracyjne . Jest to jeden z aspektów jakości oprogramowania . Jako oddzielna faza rozwoju oprogramowania jest zwykle wykonywana przez ds. zapewnienia jakości lub programistę innego niż ten, który napisał kod.

Analiza oprogramowania

Analiza oprogramowania to proces analizowania zachowania programów komputerowych pod kątem takich właściwości, jak wydajność , solidność i bezpieczeństwo . Można ją przeprowadzić bez wykonywania programu ( analiza statyczna programu ), w czasie wykonywania ( analiza programu dynamicznego ) lub w połączeniu obu .

Konserwacja oprogramowania

Konserwacja oprogramowania odnosi się do czynności wymaganych do zapewnienia opłacalnego wsparcia po dostarczeniu oprogramowania. Konserwacja oprogramowania polega na modyfikowaniu i aktualizowaniu aplikacji oprogramowania po dystrybucji w celu naprawienia błędów i poprawy jego wydajności. Oprogramowanie ma wiele wspólnego z rzeczywistym światem, a kiedy świat się zmienia, wymagana jest konserwacja oprogramowania. Konserwacja oprogramowania obejmuje: poprawianie błędów , optymalizację, usuwanie nieużywanych i odrzuconych funkcji oraz ulepszanie funkcji już istniejących. Zwykle konserwacja pochłania około 40% do 80% kosztów projektu, dlatego skupienie się na konserwacji pozwala obniżyć koszty.

Edukacja

Znajomość programowania komputerowego jest warunkiem wstępnym zostania inżynierem oprogramowania. W 2004 roku IEEE Computer Society wydało SWEBOK , który został opublikowany jako Raport techniczny ISO/IEC 1979:2005, opisujący zbiór wiedzy, który zaleca się opanować przez absolwenta inżyniera oprogramowania z czteroletnim doświadczeniem. Wielu inżynierów oprogramowania wchodzi do zawodu po ukończeniu studiów wyższych lub szkoleniu zawodowym. Jeden standardowy międzynarodowy program nauczania dla studiów licencjackich z inżynierii oprogramowania został zdefiniowany przez Joint Task Force on Computing Curricula of the IEEE Computer Society and the Association for Computing Machinery i zaktualizowane w 2014 r. Wiele uniwersytetów ma programy studiów z zakresu inżynierii oprogramowania; od 2010 r. w Stanach Zjednoczonych istniały 244 programy Campus Bachelor of Software Engineering , 70 programów online, 230 programów magisterskich, 41 programów doktoranckich i 69 programów na poziomie certyfikatów.

Oprócz edukacji uniwersyteckiej wiele firm sponsoruje staże dla studentów pragnących rozpocząć karierę w branży informatycznej. Te staże mogą wprowadzić studenta do interesujących, rzeczywistych zadań, z którymi spotykają się na co dzień typowi inżynierowie oprogramowania. Podobne doświadczenie można zdobyć poprzez służbę wojskową w inżynierii oprogramowania.

Programy inżynierii oprogramowania

Połowa wszystkich praktyków posiada obecnie stopnie naukowe w dziedzinie informatyki , systemów informatycznych lub technologii informatycznych . [ potrzebne źródło ] Niewielka, ale rosnąca liczba praktyków posiada stopnie inżynierii oprogramowania. W 1987 r. Wydział Informatyki Imperial College London wprowadził pierwszy trzyletni tytuł licencjata z inżynierii oprogramowania w Wielkiej Brytanii i na świecie; w następnym roku na Uniwersytecie w Sheffield ustanowił podobny program. W 1996 roku Rochester Institute of Technology ustanowił pierwszy program licencjata z inżynierii oprogramowania w Stanach Zjednoczonych, jednak akredytację ABET uzyskał dopiero w 2003 roku, w tym samym czasie co Rice University , Clarkson University , Milwaukee School of Engineering i Mississippi State University uzyskali swoje. W 1997 roku PSG College of Technology w Coimbatore w Indiach jako pierwszy rozpoczął pięcioletnie zintegrowane studia magisterskie z inżynierii oprogramowania. [ potrzebny cytat ]

Od tego czasu na wielu uniwersytetach ustanowiono stopnie licencjackie z inżynierii oprogramowania. W latach 2001-2004 komitet sterujący określił standardowy międzynarodowy program studiów licencjackich z zakresu inżynierii oprogramowania, przy wsparciu finansowym Association for Computing Machinery i IEEE Computer Society . Od 2004 r. w Stanach Zjednoczonych około 50 uniwersytetów oferuje stopnie inżynierii oprogramowania, na których można uczyć zarówno zasad i praktyk w zakresie informatyki, jak i inżynierii. Pierwszy tytuł magistra inżynierii oprogramowania powstał w Seattle University w 1979 r. Od tego czasu stopnie inżynierii oprogramowania zostały udostępnione na wielu innych uniwersytetach. Podobnie w Kanadzie, Canadian Engineering Accreditation Board (CEAB) należąca do Canadian Council of Professional Engineers uznała kilka programów inżynierii oprogramowania.

W 1998 roku Szkoła Podyplomowa Marynarki Wojennej Stanów Zjednoczonych (NPS) ustanowiła pierwszy na świecie program doktorancki z inżynierii oprogramowania. [ potrzebne źródło ] Ponadto pojawiło się wiele internetowych stopni naukowych z inżynierii oprogramowania, takich jak tytuł magistra inżynierii oprogramowania (MSE) oferowany przez Wydział Informatyki i Inżynierii Uniwersytetu Stanowego Kalifornii w Fullerton . Steve McConnell uważa, że ​​ponieważ większość uniwersytetów uczy informatyki, a nie inżynierii oprogramowania, brakuje prawdziwych inżynierów oprogramowania. ETS (École de technology supérieure) i UQAM (Université du Québec à Montréal) zostały upoważnione przez IEEE do opracowania zbioru wiedzy o inżynierii oprogramowania ( SWEBOK ), który stał się standardem ISO opisującym zakres wiedzy inżyniera oprogramowania.

Zawód

prawne dotyczące licencjonowania lub certyfikacji profesjonalnych inżynierów oprogramowania różnią się na całym świecie. W Wielkiej Brytanii nie ma wymogu licencyjnego ani prawnego, aby przyjąć lub używać tytułu inżyniera oprogramowania. W niektórych obszarach Kanady, takich jak Alberta, Kolumbia Brytyjska, Ontario i Quebec, inżynierowie oprogramowania mogą posiadać tytuł Professional Engineer (P.Eng) i/lub tytuł Information Systems Professional (ISP). W Europie Inżynierowie Oprogramowania mogą uzyskać tytuł zawodowy Inżyniera Europejskiego (EUR ING).

Stany Zjednoczone od 2013 roku oferują egzamin NCEES Professional Engineer w zakresie inżynierii oprogramowania, umożliwiając w ten sposób licencjonowanie i uznanie inżynierów oprogramowania. NCEES zakończy egzamin po kwietniu 2019 r. z powodu braku uczestnictwa. Obowiązkowe licencje są obecnie nadal szeroko dyskutowane i postrzegane jako kontrowersyjne. [ potrzebne źródło ] W niektórych częściach Stanów Zjednoczonych, takich jak Teksas, użycie terminu Inżynier jest regulowane przez prawo i zastrzeżone tylko dla osób posiadających licencję profesjonalnego inżyniera . [ potrzebny cytat ]

IEEE Computer Society i ACM , dwie główne organizacje zawodowe inżynierii oprogramowania z siedzibą w USA, publikują przewodniki po zawodzie inżyniera oprogramowania. Przewodnik IEEE po zbiorze wiedzy o inżynierii oprogramowania – wersja 2004 lub SWEBOK definiuje dziedzinę i opisuje wiedzę, jakiej IEEE oczekuje od praktykującego inżyniera oprogramowania. Najnowsza wersja SWEBOK v3 jest zaktualizowaną wersją i została wydana w 2014 r. IEEE ogłasza również „Kodeks etyki inżynierii oprogramowania”.

Zatrudnienie

Szacuje się, że w 2022 roku na świecie jest około 26,9 miliona profesjonalnych inżynierów oprogramowania, w porównaniu z 21 milionami w 2016 roku.

Wielu inżynierów oprogramowania pracuje jako pracownicy lub kontrahenci. Inżynierowie oprogramowania współpracują z firmami, agencjami rządowymi (cywilnymi lub wojskowymi) oraz organizacjami non-profit. Niektórzy inżynierowie oprogramowania pracują dla siebie jako freelancerzy . Niektóre organizacje zatrudniają specjalistów do wykonywania każdego zadania w procesie wytwarzania oprogramowania . Inne organizacje wymagają, aby inżynierowie oprogramowania wykonali wiele lub wszystkie z nich. W dużych projektach ludzie mogą specjalizować się tylko w jednej roli. W małych projektach ludzie mogą jednocześnie pełnić kilka lub wszystkie role. Wiele firm zatrudnia stażystów , często studenci uniwersytetu lub college'u podczas letniej przerwy lub staży . Specjalizacje obejmują analityków , architektów , programistów , testerów , wsparcie techniczne , analityków oprogramowania pośredniczącego , kierowników projektów , edukatorów i badaczy .

Większość inżynierów oprogramowania i programistów pracuje 40 godzin tygodniowo, ale w 2008 roku około 15 procent inżynierów oprogramowania i 11 procent programistów pracowało ponad 50 godzin tygodniowo. Potencjalne urazy w tych zawodach są możliwe, ponieważ podobnie jak inni pracownicy spędzający długie okresy siedząc w Przed terminalem komputerowym, pisząc na klawiaturze, inżynierowie i programiści są narażeni na przemęczenie oczu, dyskomfort w plecach oraz problemy z dłońmi i nadgarstkami, takie jak zespół cieśni nadgarstka .

Stany Zjednoczone

Amerykańskie Biuro Statystyki Pracy (BLS) naliczyło 1 365 500 programistów zatrudnionych w Stanach Zjednoczonych w 2018 r. Ze względu na względną nowość jako kierunek studiów formalna edukacja w zakresie inżynierii oprogramowania jest często nauczana jako część programu nauczania informatyki, a wiele inżynierowie oprogramowania posiadają stopnie naukowe z informatyki. BLS szacuje, że w latach 2014-2024 inżynieria oprogramowania komputerowego wzrośnie o 17%. To spadek w porównaniu z szacunkami BLS 2012-2022 wynoszącymi 22% dla inżynierii oprogramowania. I jest dalej w dół od ich 30% szacunków BLS w latach 2010-2020. Ze względu na ten trend wzrost liczby miejsc pracy może nie być tak szybki jak w ostatniej dekadzie, ponieważ miejsca pracy, które trafiałyby do inżynierów oprogramowania komputerowego w Stanach Zjednoczonych, byłyby zamiast tego zlecane inżynierom oprogramowania komputerowego w krajach takich jak Indie i inne kraje. Ponadto BLS Job Outlook for Computer Programmers, 2014-24 przewiduje -8% (spadek, ich słowami), następnie spadek Job Outlook, 2019-29 o -9% i 10% spadek dla 2021-2031 dla programistów komputerów. Ponadto liczba kobiet w wielu dziedzinach oprogramowania spadała z biegiem lat w porównaniu z innymi dziedzinami inżynierii. Jednak ten trend może się zmienić lub spowolnić w przyszłości, ponieważ wielu obecnych inżynierów oprogramowania na rynku amerykańskim opuszcza zawód lub znikną z rynku w ciągu najbliższych kilku dekad.

Orzecznictwo

Instytut Inżynierii Oprogramowania oferuje certyfikacje w zakresie określonych zagadnień, takich jak bezpieczeństwo , doskonalenie procesów i architektura oprogramowania . IBM , Microsoft i inne firmy również sponsorują własne egzaminy certyfikacyjne. Wiele certyfikacji IT jest zorientowanych na określone technologie i zarządzanych przez dostawców tych technologii. Te programy certyfikacji są dostosowane do instytucji, które zatrudniałyby osoby korzystające z tych technologii.

Szersza certyfikacja ogólnych umiejętności inżynierii oprogramowania jest dostępna w różnych stowarzyszeniach zawodowych. Od 2006 r. IEEE przyznało ponad 575 specjalistom ds. oprogramowania certyfikaty Certified Software Development Professional (CSDP). W 2008 roku dodali podstawowy certyfikat znany jako Certified Software Development Associate (CSDA). ACM miał profesjonalny program certyfikacji na początku lat 80. [ potrzebne źródło ] który został przerwany z powodu braku zainteresowania. ACM zbadała możliwość profesjonalnej certyfikacji inżynierów oprogramowania pod koniec lat 90., ale ostatecznie zdecydowała, że ​​taka certyfikacja jest nieodpowiednia dla profesjonalnej praktyki przemysłowej inżynierii oprogramowania.

W Wielkiej Brytanii British Computer Society opracowało prawnie uznawany certyfikat zawodowy o nazwie Chartered IT Professional (CITP) , dostępny dla w pełni wykwalifikowanych członków ( MBCS ). Inżynierowie oprogramowania mogą kwalifikować się do członkostwa w Institution of Engineering and Technology , a tym samym kwalifikować się do statusu Chartered Engineer. W Kanadzie Kanadyjskie Towarzystwo Przetwarzania Informacji opracowało prawnie uznawany certyfikat zawodowy o nazwie Information Systems Professional (ISP) . W Ontario w Kanadzie inżynierowie oprogramowania, którzy ukończyli program akredytowany przez Canadian Engineering Accreditation Board (CEAB) , pomyślnie ukończyli egzamin PEO ( Professional Engineers Ontario ) Professional Practice Examination (PPE) i mają co najmniej 48 miesięcy akceptowalnego doświadczenia inżynierskiego, mogą uzyskać licencję przez Professional Engineers Ontario i może zostać zawodowym inżynierem P.Eng. PEO nie uznaje jednak żadnej edukacji online ani na odległość; i nie uważa programów informatycznych za równoważne programom inżynierii oprogramowania, pomimo ogromnego nakładania się między nimi. Wywołało to kontrowersje i wojnę certyfikacyjną. Utrzymał również wyjątkowo niską liczbę posiadaczy tytułu inżyniera dla tego zawodu. Zdecydowana większość pracujących profesjonalistów w tej dziedzinie posiada stopień naukowy CS, a nie SE. Biorąc pod uwagę trudną ścieżkę certyfikacji dla posiadaczy stopni innych niż SE, większość nigdy nie zawraca sobie głowy zdobywaniem licencji.

Wpływ globalizacji

Początkowy wpływ outsourcingu i stosunkowo niższe koszty międzynarodowych zasobów ludzkich w rozwijających się krajach trzeciego świata doprowadziły do ​​masowej migracji działalności związanej z tworzeniem oprogramowania z korporacji w Ameryce Północnej i Europie do Indii, a później do Chin, Rosji i innych krajów rozwijających się. To podejście miało pewne wady, głównie różnicę odległości/strefy czasowej, która uniemożliwiała interakcję między klientami a programistami oraz masowe przenoszenie zadań. Miało to negatywny wpływ na wiele aspektów zawodu inżyniera oprogramowania. Na przykład niektórzy studenci w krajach rozwiniętych unikają edukacji związanej z inżynierią oprogramowania ze względu na obawę przed outsourcingiem offshore (import oprogramowania lub usług z innych krajów) i wyparciem przez zagranicznych pracowników wizowych . Chociaż statystyki nie wskazują obecnie na zagrożenie dla samej inżynierii oprogramowania; pokrewnej karierze, wydaje się, że miało to wpływ na programowanie komputerowe . Niemniej jednak zdolność do inteligentnego wykorzystania zasobów morskich i przybrzeżnych za pośrednictwem technologii podążania za słońcem przepływ pracy poprawił ogólną zdolność operacyjną wielu organizacji. Kiedy Amerykanie z Ameryki Północnej wychodzą z pracy, Azjaci właśnie przyjeżdżają do pracy. Kiedy Azjaci wychodzą z pracy, Europejczycy przyjeżdżają do pracy. Zapewnia to ciągłą możliwość sprawowania przez człowieka nadzoru nad procesami o znaczeniu krytycznym przez 24 godziny na dobę, bez płacenia wynagrodzenia za nadgodziny lub zakłócania wzorców snu kluczowych zasobów ludzkich.

Podczas gdy globalny outsourcing ma kilka zalet, globalny – i generalnie rozproszony – rozwój może napotkać poważne trudności wynikające z odległości między programistami. Wynika to z kluczowych elementów tego typu odległości, które zostały zidentyfikowane jako geograficzne, czasowe, kulturowe i komunikacyjne (co obejmuje używanie różnych języków i dialektów języka angielskiego w różnych lokalizacjach). W ciągu ostatnich 15 lat przeprowadzono badania w dziedzinie globalnego rozwoju oprogramowania i opublikowano obszerny zbiór odpowiednich prac, które podkreślają korzyści i problemy związane ze złożoną działalnością. Podobnie jak w przypadku innych aspektów inżynierii oprogramowania, w tej i pokrewnych obszarach trwają badania.

Nagrody

Istnieje kilka nagród w dziedzinie inżynierii oprogramowania:

  • Nagrody Codie to coroczna nagroda przyznawana przez Software and Information Industry Association za doskonałość w tworzeniu oprogramowania w branży oprogramowania.
  • Jolt Awards to nagrody w branży oprogramowania.
  • Stevens Award to nagroda inżynierii oprogramowania przyznawana ku pamięci Wayne'a Stevensa.
  • Harlan Mills Award za „wkład w teorię i praktykę nauk informacyjnych, skoncentrowaną na inżynierii oprogramowania”.

Krytyka

Inżynieria oprogramowania postrzega swoich praktyków jako osoby, które stosują dobrze zdefiniowane podejście inżynierskie do rozwiązywania problemów. Podejścia te są wyszczególnione w różnych książkach i artykułach naukowych dotyczących inżynierii oprogramowania, zawsze z konotacjami przewidywalności, precyzji, ograniczonego ryzyka i profesjonalizmu. Ta perspektywa doprowadziła do wezwań [ przez kogo? ] dla licencjonowania, certyfikacji i skodyfikowanych zasobów wiedzy jako mechanizmów rozpowszechniania wiedzy inżynierskiej i dojrzewania dziedziny.

Inżynieria oprogramowania rozszerza inżynierię i opiera się na modelu inżynierskim, tj. procesie inżynieryjnym, zarządzaniu projektami inżynierskimi, wymaganiach inżynierskich, projektowaniu inżynierskim, konstrukcji inżynierskiej i walidacji inżynierskiej. Koncepcja jest tak nowa, że ​​rzadko jest rozumiana i jest powszechnie błędnie interpretowana, w tym w podręcznikach inżynierii oprogramowania, artykułach oraz wśród społeczności programistów i rzemieślników.

Jednym z podstawowych problemów w inżynierii oprogramowania jest to, że jej podejścia nie są wystarczająco empiryczne, ponieważ walidacja podejść w świecie rzeczywistym jest zwykle nieobecna lub bardzo ograniczona, a zatem inżynieria oprogramowania jest często błędnie interpretowana jako wykonalna tylko w „środowisku teoretycznym”.

Edsger Dijkstra , twórca wielu koncepcji stosowanych obecnie w tworzeniu oprogramowania, odrzucał ideę „inżynierii oprogramowania” aż do swojej śmierci w 2002 roku, argumentując, że terminy te były kiepskimi analogiami do tego, co nazwał „radykalną nowością” informatyki :

Wiele z tych zjawisk zostało zebranych pod nazwą „Inżynieria oprogramowania”. Ponieważ ekonomia jest znana jako „Nędzna nauka”, inżynieria oprogramowania powinna być znana jako „Przeklęta dyscyplina”, skazana na porażkę, ponieważ nie może nawet zbliżyć się do celu, ponieważ jej cel jest wewnętrznie sprzeczny. Inżynieria oprogramowania oczywiście przedstawia się jako kolejny wartościowy cel, ale to mydlenie oczu: jeśli uważnie przeczytasz jej literaturę i przeanalizujesz, co faktycznie robią jej wielbiciele, odkryjesz, że inżynieria oprogramowania przyjęła jako swoją kartę „Jak programować, jeśli nie możesz ”.

Zobacz też

Studiuj i ćwicz

Role

Aspekty zawodowe

Cytaty

Źródła

Dalsza lektura

Linki zewnętrzne