BELİRLEME
Azer ÇELİKTEN
YÜKSEK LİSANS TEZİ
BİLGİSAYAR MÜHENDİSLİĞİ ANA BİLİM DALI
GAZİ ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ
MART 2019
Azer ÇELİKTEN tarafından hazırlanan “YAZILIM PROJE YÖNETİMİNDE KİŞİLİK TİPLERİNE UYGUN ROL BELİRLEME” adlı tez çalışması aşağıdaki jüri tarafından OY BİRLİĞİ ile Gazi Üniversitesi Bilgisayar Mühendisliği Ana Bilim Dalında YÜKSEK LİSANS TEZİ olarak kabul edilmiştir.
Danışman: Doç. Dr. Aydın ÇETİN
Bilgisayar Mühendisliği Ana Bilim Dalı, Gazi Üniversitesi
Bu tezin, kapsam ve kalite olarak Yüksek Lisans Tezi olduğunu onaylıyorum. ...………
Başkan: Prof. Dr. O. Ayhan ERDEM Bilgisayar Mühendisliği Ana Bilim Dalı, Gazi Üniversitesi
Bu tezin, kapsam ve kalite olarak Yüksek Lisans Tezi olduğunu onaylıyorum. ………...
Üye: Dr. Öğretim Üyesi Abdullah ORMAN Bilgisayar Programcılığı, Ankara Yıldırım Beyazıt Üniversitesi
Bu tezin, kapsam ve kalite olarak Yüksek Lisans Tezi olduğunu onaylıyorum. ………...
Tez Savunma Tarihi: 04/03/2019
Jüri tarafından kabul edilen bu tezin Yüksek Lisans Tezi olması için gerekli şartları yerine getirdiğini onaylıyorum.
……….…….
Prof. Dr. Sena YAŞYERLİ Fen Bilimleri Enstitüsü Müdürü
Gazi Üniversitesi Fen Bilimleri Enstitüsü Tez Yazım Kurallarına uygun olarak hazırladığım bu tez çalışmasında;
Tez içinde sunduğum verileri, bilgileri ve dokümanları akademik ve etik kurallar çerçevesinde elde ettiğimi,
Tüm bilgi, belge, değerlendirme ve sonuçları bilimsel etik ve ahlak kurallarına uygun olarak sunduğumu,
Tez çalışmasında yararlandığım eserlerin tümüne uygun atıfta bulunarak kaynak gösterdiğimi,
Kullanılan verilerde herhangi bir değişiklik yapmadığımı,
Bu tezde sunduğum çalışmanın özgün olduğunu,
bildirir, aksi bir durumda aleyhime doğabilecek tüm hak kayıplarını kabullendiğimi beyan ederim.
Azer ÇELİKTEN 04/03/2019
YAZILIM PROJE YÖNETİMİNDE KİŞİLİK TİPLERİNE UYGUN ROL BELİRLEME (Yüksek Lisans Tezi)
Azer ÇELİKTEN GAZİ ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ
Mart 2019 ÖZET
Son zamanlarda yapılan çalışmalar, yazılım mühendisliğinde kişisel faktörlerin takım performansı, motivasyon ve iş kalitesi üzerinde etkili olduğunu göstermektedir. Yazılım proje çalışanlarının kişisel özelliklerine uygun rolde görev almaları çalışanların başarısını dolayısıyla takım performansını, proje süreçlerini ve proje maliyetini etkilemektedir. Bu tezde, yazılım proje takımlarının performansını arttırmak ve proje maliyetlerini düşürmek amacıyla, kişilik tiplerine göre takım üyesi seçmeyi sağlayan yeni bir yöntem geliştirilmiştir. Bu yöntem ile takım üyelerinin kişilik tip analizi yapılarak, sistem analisti, yazılım tasarımcısı, programcı, yazılım test uzmanı ve yazılım bakımcısı rollerine uygunluk dereceleri belirlenmiştir. Beş faktör model kişilik tip ölçümünde kullanılan IPI kişilik testi ile kişilik tip oranları tespit edilen takım üyelerinin, kişilik tipine uygun olabilecekleri roller bulanık kümeleme yöntemi ile tespit edilmiştir. Yazılım mühendisleri ile gerçekleştirilen deneysel çalışma ile yazılım proje çalışanlarının rollere uygunluk dereceleri belirlenerek, kişilik tipleri ve rollere uygunluk derecelerinin yer aldığı bir veri seti oluşturulmuştur.
Bilim Kodu : 92408
Anahtar Kelimeler : Yazılım takım performansı, beş faktör model, kişilik tipleri, bulanık kümeleme, yazılım proje yönetimi
Sayfa Adedi : 73
Danışman : Doç. Dr. Aydın ÇETİN
ROLE ASSIGNMENT SUITABLE TO PERSONALITY TYPES IN SOFTWARE PROJECT MANAGEMENT
(M. Sc. Thesis) Azer ÇELİKTEN GAZİ UNIVERSITY
GRADUATE SCHOOL OF NATURAL AND APPLIED SCIENCES March 2019
ABSTRACT
Recent studies show that personal factors in software engineering are effective on team performance, motivation and job quality. Assigning software project team members to suitable project roles based on their personality types affects the project team's work performance, hence the progress and cost of the project. In this thesis, a new method was developed to provide the ability to select team members according to personality types in order to improve the performance of software project teams and decrease project cost. The developed method, determines the suitability rate of system analyst, software designer, programmer, software tester and software maintainer project roles that can be appropriate by analyzing the personality type of the project team members. Personality types of software engineers were determined by IPI personality inventory that measures five factor model personality types. The fuzzy clustering method was used to determine suitability rate of role based on personality types. As a result of an emprical study conducted with software engineers, a new dataset which includes personality types and role suitability rate of software engineers was formed.
Science Code : 92408
Key Words : Software team performance, five factor model, personality types, fuzzy clustering, software project management
Page Number : 73
Supervisor : Assoc. Prof. Dr. Aydın ÇETİN
TEŞEKKÜR
Bilgi, tecrübe, sabır ve anlayışıyla tez çalışmam boyunca daima yanımda olan kıymetli danışman hocam Doç. Dr. Aydın Çetin’e, çalışmama yaptığı katkılarından dolayı Eda Kurt’a ve hayatımın her döneminde bana destek olan sevgili aileme teşekkürlerimi sunarım.
İÇİNDEKİLER
Sayfa
ÖZET ... iv
ABSTRACT ... v
TEŞEKKÜR ... vi
İÇİNDEKİLER ... vii
ÇİZELGELERİN LİSTESİ ... ix
ŞEKİLLERİN LİSTESİ ... xi
SİMGELER VE KISALTMALAR... xii
1. GİRİŞ
... 12. LİTERATÜR ÇALIŞMASI
... 93. YAZILIM GELİŞTİRME SÜREÇLERİ VE MESLEKİ TANIMLAMALAR
... 173.1. Mesleki Yeterlilik Kurumu Tanımlarına Göre Yazılım Rolleri için Gerekli Teknik Görevler ... 17
3.2. Uluslararası Meslek Sınıflaması (ISCO-08) Tanımlarına Göre Yazılım Rolleri için Gerekli Görevler ... 20
4. YAZILIM PROJELERİNDE KİŞİSEL ÖZELLİKLERİN ROLÜ
... 234.1. Yazılım Rol Tanımları ve Kişisel Beceriler ... 23
4.1.1. Sistem analisti için gerekli kişisel beceriler ... 23
4.1.2. Yazılım tasarımcısı için gerekli kişisel beceriler ... 24
4.1.3. Programcı için gerekli kişisel beceriler ... 26
4.1.4. Yazılım test uzmanı için gerekli kişisel beceriler ... 27
4.1.5. Yazılım bakımcısı için gerekli kişisel beceriler ... 28
4.2. Yazılım Rol Tanımları ve Kişilik Tipleri ... 29
5. YÖNTEM VE ARAÇLAR
... 335.1. Yazılım Proje Yönetiminde Kişilik Ölçme Araçları ... 33
Sayfa
5.1.1. MBTI kişilik tipleri ... 33
5.1.2. Beş faktör model kişilik tipleri... 34
5.2. Yöntem ... 37
5.2.1. Makine öğrenmesi yöntemleri ... 37
5.2.2. Bulanık kümeleme analizi ... 38
6. YAZILIM PROJE YÖNETİMİNDE KİŞİSEL ÖZELLİKLERE UYGUN ROL BELİRLEME
... 416.1. Beş Faktör Model Kişilik Tiplerine ait Alt Boyutların Önem Ağırlıklarının Belirlenmesi ... 41
6.2. Beş Faktör Model Kişilik Tiplerinin Roller için Önem Ağırlıklarının Belirlenmesi ... 42
6.3. IPI Türkçe Kişilik Testi ile Yazılım Mühendislerinin Kişilik Tiplerinin Belirlenmesi ... 43
6.4. Bulanık C-Ortalamalar Yöntemi ile Rol Uygunluk Derecesi Tespiti ... 45
6.5. Bulanık Kümeleme Tabanlı Karar Destek Sisteminin Geliştirilmesi ... 46
6.6. Araştırma Bulguları ... 46
7. SONUÇ VE ÖNERİLER
... 49KAYNAKLAR ... 51
EKLER ... 57
EK-1. IPI kişilik testi Türkçe uyarlaması anket soruları... 58
EK-2. Proje yöneticileri ve akademisyenlere uygulanan rollere göre kişisel özelliklerin ağırlıklarının tespit edilmesine yönelik anket ... 60
EK-3. Yazılım proje çalışanlarına uygulanan ıpı test sonuçları ... 64
EK-4. Rol belirleme projesi ekran görüntüleri (giriş ekranı) ... 66
EK-5. 90 Yazılım proje çalışanının bulanık kümeleme yöntemi ile belirlenen rol uygunluk dereceleri ... 69
ÖZGEÇMİŞ ... 72
ÇİZELGELERİN LİSTESİ
Çizelge Sayfa
Çizelge 2.1. Yazılım mühendisliğinde kişisel özellikler ile ilgili yapılan çalışmalar .. 9
Çizelge 3.1. MYK tanımlarına göre BT iş analisti görevleri ... 18
Çizelge 3.2. MYK tanımlarına göre yazılım geliştirici görevleri ... 19
Çizelge 3.3. ISCO-08 meslek sınıflamasına göre yazılım alanındaki meslekler ve görevler ... 20
Çizelge 3.4. SWEBOK tanımlarına göre yazılım geliştirme süreçlerinin ISCI-08 ve MYK’daki rol karşılıkları ... 22
Çizelge 3.5. Yazılım geliştirme süreçlerine ait literatürde kullanılan rol isimleri ... 22
Çizelge 4.1. Sistem Analisti için gereken beceriler ... 24
Çizelge 4.2. Yazılım Tasarımcısı için gereken beceriler ... 25
Çizelge 4.3. Programcı için gereken beceriler ... 26
Çizelge 4.4. Yazılım Test Uzmanı için gereken beceriler ... 28
Çizelge 4.5. Yazılım Bakımcısı için gereken beceriler ... 29
Çizelge 4.6. Yazılım proje rollerine ait kişisel beceriler ... 29
Çizelge 4.7. Beş faktör kişilik tip test sonuçlarının yazılım proje rolleri için ortalama değerleri ... 30
Çizelge 4.8. Yazılım proje rolleri için MBTI kişilik tiplerinin ağırlık değerleri ... 30
Çizelge 4.9. Yazılım proje rolleri için gereken kişisel becerilerin beş faktör model kişilik tipleri ile eşleştirilmesi ... 31
Çizelge 4.10. MBTI kişilik tiplerine göre yazılım proje rollerinin tercih edilme durumları ... 31
Çizelge 5.1. Beş Faktör Model Kişilik Tipleri ve Özellikleri ... 35
Çizelge 5.2. Beş faktör kişilik tipleri ile yazılım proje süreçleri için gerekli özelliklerin karşılaştırılması ... 36
Çizelge 6.1. Beş Faktör Kişilik tiplerine ait alt boyutlar ... 42
Çizelge 6.2. Yazılım proje rolleri için Beş Faktör Kişilik tiplerinin önem skorları ... 43
Çizelge 6.3. Rol uygunluk dereceleri ile kişilik tipleri arasındaki korelasyon değerleri ... 47
Çizelge Sayfa Çizelge 6.4. Yazılım Proje Rolleri ve korelasyonu yüksek kişilik tipleri ... 47
ŞEKİLLERİN LİSTESİ
Şekil Sayfa Şekil 2.1. Yıllara göre yazılım mühendisliğinde kişilik tipleri ile ilgili çalışmaların
dağılımı ... 14
Şekil 5.1. Makine öğrenmesi yöntemleri ... 37
Şekil 5.2. Koordinat düzleminde kümeleme örneği ... 38
Şekil 6.1. Rol uygunluk derecesi belirleme yöntemi uygulanış şeması ... 41
SİMGELER VE KISALTMALAR
Bu çalışmada kullanılmış kısaltmalar, açıklamaları ile birlikte aşağıda sunulmuştur.
Kısaltmalar Açıklamalar
IPI Uluslararası Kişilik Testi (International Personality Inventory)
MBTI Myers Briggs Tip Göstergesi (Myers Briggs Type Indicator) IEEE Elektrik ve Elektronik Mühendisleri Enstitüsü (The
Institute of Electrical and Electronics Engineers)
OECD Ekonomik İş Birliği ve Kalkınma Teşkilatı (Organization for Economic Cooperation and Development)
MYK Mesleki Yeterlilik Kurumu
ISCO Uluslararası Meslek Sınıflaması (International Standard Classification of Occupations)
1. GİRİŞ
Türk Dil Kurumu bilişim sözlüğündeki tanıma göre yazılım, bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümüdür [1]. Yazılım geliştirme ile ilgilenen bilim dalı yazılım mühendisliğidir. Yazılım mühendisliği terimi ilk olarak 1968 yılında gerçekleştirilen NATO toplantısında Almanya'da gündeme gelmiş ve çözülmesi gereken bir problem olarak öne sürülmüştür. IEEE (The Institute of Electrical and Electronics Engineers) tanımına göre yazılım mühendisliği, yazılım ürününün geliştirilmesi, işletilmesi ve bakımı için uygulanan; sistematik, disiplinli ve ölçülebilir yaklaşımdır [2]. Bilgi çağı denilen son yıllarda yazılım sosyal ve ekonomik yönden önemli bir kaynak haline gelmiştir. Sağlık, finans, eğitim, otomotiv, iletişim, uzay, savunma gibi alanlarda kullanılarak bu alanlara yenilikler ve kolaylıklar getirmektedir. Yazılım bir hesap makinesi programı yaparken kullanıldığı gibi bir roketin fırlatılmasında da kullanılan, sistematik işlemleri olan ve insan hayatını etkileyen çok yönlü ve geniş kapsamlı bir olgudur. Yeni sanayi devrimi olarak adlandırılan Sanayi 4.0; akıllı sistemler, yapay zekâ, nesnelerin interneti, 3 boyutlu yazıcılar, büyük veri, siber sistemler ve bulut bilişim gibi yazılım teknolojilerdeki gelişmeler sonucu ortaya çıkmıştır. Bu nedenle, uluslararası pazarda söz sahibi olabilmek ve rekabet edebilmek için ülkelerin bu gelişmeleri takip etmeleri ve kendi sanayilerini bu dönüşüme hazırlamaları gerekmektedir. Ülkelerin yazılım sektöründe beşeri ve teknik altyapılarda sağlayacağı gelişmeler, küresel pazardaki konumları açısından önem taşımaktadır. Forbes dergisi tarafından hazırlanan 2018 yılındaki dünyanın en büyük 2000 şirketinin olduğu Forbes Global 2000 listesindeki en büyük 10 yazılım şirketinden 7’si Amerika’da yer almaktadır. Microsoft ve Oracle listenin başındaki şirketlerdir [3]. Yazılım faaliyetlerinin yaygın olduğu Amerika’nın yazılım pazar verilerini incelendiğinde elde edilen sonuçlar şu şekildedir.
Amerika Ekonomist İstihbarat Birimi’nin 2017 Eylül ayında yayınlamış olduğu son rapora göre [4];
Amerika’da 2016 yılında yazılım sektörünün dolaylı veya doğrudan gayri safi yurtiçi hasılaya toplam katkısı 1,14 trilyon dolardır.
Doğrudan katkısı ise 564,4 milyar dolardır.
Yazılım alanındaki istihdam verileri ise şu şekildedir:
Amerika’da 2014 yılından bu yana yazılım sektörü iş büyümesi %11,4 artış göstermiştir. Doğrudan yazılıma yönelik istihdam oranı ise 2014 yılına göre %14,6 artış göstererek 2,9 milyona ulaşmıştır. Yazılım faaliyetleri ile doğrudan veya dolaylı ilgili toplam istihdam sayısı ise 10,5 milyondur.
Amerika’daki bir yazılım mühendisinin yıllık geliri 104,360 dolar olarak belirlenmiştir.
Bir yazılım mühendisinin yıllık geliri Amerika’daki diğer meslek gruplarının ortalama yıllık gelirinden 2 kat daha fazladır.
Son yıllarda çağın gereksinimleri ve ekonomik önemi nedeniyle ülkemizde de yazılım sektöründe ve istihdamda büyüme görülmektedir. TUBISAD 2017 Bilgi ve İletişim Teknolojileri pazar verilerine göre [5];
Bilgi ve İletişim Teknolojileri 2017 yılında 116,9 milyar TL (32,1 milyar dolar) sektör büyüklüğüne ulaşmıştır. 2018 yılı için büyüme beklentisi %10-15 arasındadır.
Bilgi ve İletişim Teknolojileri sektörünün %41,3’ünü bilgi teknolojileri oluşturmaktadır.
Bilgi teknolojileri pazar büyüklüğü ise 2013 yılından itibaren %1.4 oranında büyüme göstererek 11,3 milyar dolara ulaşmıştır.
Bilgi teknolojileri donanım, yazılım ve hizmet bileşenlerinden oluşmaktadır. Bu bileşenlerden yazılımın payı 2013 yılında %35 iken, 2017 yılında %45’e yükselmiştir.
Şekil 1.1’de Bilgi Teknolojileri sektörünün alt kategorilerdeki sektör büyüklükleri şu şekildedir
o Donanım: 16 milyar TL o Yazılım: 18,8 milyar TL o Hizmet: 6,4 milyar TL.
Şekil 1.1. Bilgi ve iletişim teknolojileri sektörü alt kategorileri [9]
Şekil 1.2. TUBISAD 2017 bilgi ve iletişim teknolojileri sektör verileri (milyar TL) [9]
TUBISAD 2017 istihdam verilerine göre;
Toplam istihdam sayısı 128 000’dir.
Bu rakamın %69’unu bilgi teknolojileri, %31’ini iletişim teknolojileri oluşturmaktadır.
Toplam istihdam sayısında bir önceki yıla göre %5 artış görülmektedir.
Türkiye’de yazılım faaliyetlerinin etkin olarak gerçekleştiği Teknoloji Geliştirme Bölgelerinde ise bir önceki yıla göre şirket ve çalışan sayısında %10 oranında artış gözlenmektedir. 2016 yılı çalışan sayısı 41 172 iken 2017 yılında bu sayı 45 274’e ulaşmıştır.
Şekil 1.3. TUBISAD 2017 Bilgi Teknolojileri ve İletişim Sektörü İstihdam Verileri [9]
Şekil 1.4. TUBISAD 2017 bilgi ve iletişim teknolojileri sektörü ihracat verileri [9]
Yazılımın ülke ekonomilerine en büyük katkısı ihracat ile olmaktadır. Yazılım pazarında en büyük paya sahip ülkeler yazılım ihracatının en fazla yapıldığı ülkelerdir. Bu perspektiften bakıldığında Amerika’nın yazılımdan doğrudan kazandığı gelir 564,4 milyar dolar iken, 2017 yılında Türkiye’de yazılım ihracatından elde edilen gelir, 2016 yılına göre
%10.6 büyüme oranı ile 1 289 milyon dolara ulaşmıştır.
Yeni sanayi devrimi ve yazılım sektöründeki büyüme Türkiye ekonomisinin büyümesinde önem arz ettiği için Bilim Sanayi ve Teknoloji Bakanlığı tarafından Türkiye Yazılım Sektörü Stratejisi ve Eylem Planı hazırlanmıştır. Türkiye Yazılım Sektörü Stratejisi ve Eylem Planı’nın genel amacı: “Yazılım pazarını büyütmek, ihracatı ve sektörün istihdamını artırmak amacıyla, yazılım ve bilgi teknolojileri alanlarında uluslararası standartlarda ürünler ve hizmetler üreten; sektörde söz sahibi ülke konumuna gelmek”
olarak saptanmıştır. Bu amaç doğrultusunda hazırlanan eylem planının vizyonu ise;
“Yazılım alanında teknik ve hukuki altyapısı ile beşeri kaynağının nitelik ve niceliğini sürekli olarak geliştiren, uluslararası pazarlarda rekabet gücü ve pazar payını artıran bir ülke olmak” olarak belirlenmiştir [6].
Yazılım projeleri için harcanan maliyet ve ülkelerin ekonomisindeki payı göz önüne alındığında, yazılım projelerinin çeşitli nedenlerle başarısız olmasının ekonomiye etkisi olumsuz yönde olmaktadır. Bunun yanında, sağlık alanında kullanılan cihaz sistemleri, bankacılık sistemleri, uzay araştırmaları için gönderilen uydu sistemleri, havacılık ve savunma alanı için kullanılan araçlar, nükleer teknoloji yazılımları, siber sistemler
yazılımın yaygın olarak kullanıldığı alanlardır. Bu alanlarda yapılan çalışmalar geniş kitleleri etkilediği ve toplumsal açıdan kritik sonuçlara sebep olacağı için, yazılımın geliştirme çalışmaları hatasız veya hatasıza en yakın şekilde gerçekleşmelidir. Tricentis 2016 yazılım proje başarısızlıkları raporuna göre, 4,4 milyar insan maliyeti ve 1,1 trilyon dolarlık bütçe maliyeti yazılım proje başarısızlıklarından etkilenmiştir. Zaman maliyeti açısından bakıldığında ise, proje başarısızlıkları nedeniyle son 1 yılda, 315 yıl 6 ay 2 hafta, 6 gün, 16 saat ve 26 dakikalık zaman kaybı meydana gelmiştir [7].
Yazılım, insanlar tarafından insanlar için ortaya çıkarılan bir ürün olduğundan, insan kaynağı yazılım için büyük önem taşımaktadır ve yazılım maliyetlerinin önemli bir kısmını oluşturmaktadır. Yazılım sektöründeki istihdam büyüklüğü de göz önüne alındığında yazılım projelerinde çalışanların nitelik ve nicelik olarak geliştirilmesi yazılım maliyet ve ekonomisini doğrudan etkilemektedir. Ayrıca, Türkiye’de 2015, 2016 ve 2017 yıllarında bilgi ve iletişim teknolojileri sektöründeki en önemli problem nitelikli iş gücü açığı olarak belirlenmiştir [5]. Yazılım projelerinin başarısızlığı teknik sorunların sonucu olabileceği gibi, bu başarısızlığa teknik olmayan sorunlar da sebebiyet verebilmektedir. Yazılım projelerindeki başarısızlık nedenleri üzerine yapılan bir çalışmada başarısızlık nedenlerini teknik, yönetimsel, sosyal ve diğer nedenler olarak sınıflandırılmıştır [8]. Başarısızlığa neden olan sosyal nedenlerden bazıları aşağıdaki gibidir:
Takım içi iletişim ortamının zayıf olması,
Alıcı ile zayıf bağlantı kurulması sonucu girdilerinin alınamaması
Alıcı ve diğer paydaşlar arasında şiddetli sürtüşmelerin yaşanması
Teknolojik gelişmelerden habersiz olunması
Yönetimin soğukluğundan kaynaklanan mesafeli iletişim
Teknik personelin sürekli zaman baskısı altında çalışması
Bölüm ve birimler arası iletişim ve desteğin olmaması
Teknik personelin genel becerilerinin dışındaki alanlarda yürütülen projeler
Ayrıca, deneyimsiz eleman almak, kaynak planlaması yapmamak ve takım arası iletişimi sağlayamamak gibi konular yazılım projelerinde karşılaşılan yönetim riskleri olarak ele alınmış ve yapılan kaynak taramasında yönetimsel riskleri konu alan çalışmaların %21 oranında olduğu görülmüştür [56]. İnsandan kaynaklanan bu sorunların çözüme ulaştırılmadığı projeler başarısız olacaktır. Bu nedenle, yazılım mühendislerinin teknik becerilerinin yanında, sosyal ve kişisel becerilerinin de verilen göreve uygun olması
gerekmektedir. Başta bilişim ve teknoloji olmak üzere birçok iş alanında uygun eğitim ve deneyimin yanında, değişime ayak uydurabilme, yenilikçi olma, problem çözme, takım içinde çalışabilme ve bireysel sorumluluk alırken yöneticinin taleplerini de yerine getirebilme gibi yetiler günümüz iş hayatında aranan niteliklerdendir. OECD’nin (Organization for Economic Cooperation and Development) Skills Outlook raporuna göre uzmanlık ve ileri düzeyde iletişim becerileri gerektiren, rutin olmayan analitik ve rutin olmayan etkileşimli işlerin ABD’de 1960’tan bu yana büyük artış gösterdiği ifade edilmektedir. Yaratıcı, probleme uygun çözüm üretebilme becerisi ve zihinsel çaba gerektiren işler rutin olmayan işler kapsamındadır. UNESCO’nun Herkes için Eğitim 2012 Küresel İzleme Raporu’na göre işverenler, iş başvurusu yapanların aldıkları eğitim ve bilgi birikimlerini günlük hayattaki problemleri çözmek için kullanabildiklerini, insiyatif aldıklarını ve iş arkadaşlarıyla iyi iletişim kurabildiklerini görmek istiyor. Türkiye’de de firmaların benzer talepleri var. Bilim, Sanayi ve Teknoloji Bakanlığı’nın 2013 yılında yaptığı ve 2.018 firmanın katıldığı anket çalışması, firmaların çalışanlarında takım çalışması, yönetim/liderlik ve problem çözme becerilerini de aradığını gösteriyor. Bu becerilere en fazla büyük ölçekli firmalarda ihtiyaç duyulduğu belirlenmiş. Tüm firmaların dörtte üçü çalışanlarında beceri eksiği gördüğünü belirtmiş. İşverenlerin iş piyasasında aradıkları becerilere sahip çalışanı bulmakta zorluk çektiklerini ifade etmesi ciddi bir
“yetenek açığı” olduğuna işaret etmektedir [9].
Bu tezin amaçları, kişisel özelliklerin yazılım projelerindeki etkilerini ortaya koymak, yazılım mühendislerinin kişisel özelliklerini ölçmek ve proje içerisinde kişisel özelliklere uygun görev atama yöntemini belirlemektir. Bu amaç doğrultusunda, yazılım proje sürecindeki meslek ve görev tanımları belirlenmiş, bu tanımlar için gereken rol, sorumluluklar ve kişisel özellikler tanımlanmış ve yazılım proje yönetiminde doğru kişilerin uygun rollere atanması için kişisel özellikleri esas alan yeni bir yöntem geliştirilmiştir. Geliştirilen yöntem, iş alım süreçlerinde teknik yeterlilikleri uygun olan kişilerin, kişisel özelliklerinin ilgili rol için hangi oranda uygun olduğunun belirlenmesinde kullanılabilir. Ayrıca, bu yöntem proje yöneticilerine mevcuttaki proje çalışanlarının hangi rollere hangi oranda uygun olduğunu göstererek, yazılım proje takımları oluşturulurken proje çalışanlarının kişisel özelliklerine uygun olarak çalışabilecekleri diğer proje rollerine karar verme aşamasında yardımcı olacaktır.
Çalışmada belirlenen kişisel özellik ölçüm yöntemi kullanılarak Türkçe test araçları ve Türkiye’de bulunan yazılım şirketlerinde çalışan yazılım mühendislerinin katılımı ile deneysel bir çalışma yapılmış ve çalışmanın sonucunda katılımcıların kişilil özelliklerine uygun rol uygunluk dereceleri belirlenmiştir. Bir yazılım mühendisi kişilik özelliklerine göre birden fazla role uygun olabileceği için rol belirleme yöntemi olarak bulanık kümeleme kullanılmıştır.
Tez 7 bölümden oluşmaktadır. 2. Bölümde literatür çalışmasına yer verilmiş, 3. Bölümde yazılım geliştirme süreçleri ve mesleki tanımlamalar açıklanmıştır. 4. Bölümde yazılım projelerinde kişisel özellikleri rolüne değinilmiştir. 5. Bölümde tezde kullanılan yöntem ve araçlar açıklanarak, 6. Bölümde kişisel özelliklere uygun rol belirleme yönteminin gerçekleştirimine yer verilmiştir. 7. Bölüm elde edilen sonuçlar ve önerilerden oluşmaktadır.
2. LİTERATÜR ÇALIŞMASI
Yazılım mühendisliği alanında, kişisel özelliklerin etkilerini incelemek üzere araştırmacılar farklı kişilik testleri kullanılarak çalışmalar yapmıştır. Çizelge 2’de bu konuda yapılan çalışmalar özet halinde yer almaktadır.
Çizelge 2.1. Yazılım mühendisliğinde kişisel özellikler ile ilgili yapılan çalışmalar
Yöntem Kapsam Yıl Kaynak
No Eşli programlama gözlemleme, Katılımcılar ile
görüşmeler.
Eşli Programlama için gereken kişisel özelliklerin
tespiti 2002 [10]
16PF kişilik testi kullanılmıştır Kişisel yeteneklere göre yazılım proje rol
tanımlarına uygun kişinin atanması 2004 [11]
MBTI (Myers Briggs Type Indicator) kişilik testi uygulanarak, kod bulgularını tespit edebilen kişilerin
gözlemlenmesi
Kod bulgularının tespitinde kişilik tiplerinin önemi 2007 [12]
Anahtar kelimeler kullanılarak makale veritabanlarından uygun çalışmaların tespit edilmesi
Yazılım Mühendisliğinde motivasyonu etkileyen
faktörlerin araştırılması 2007 [13]
Literatür taraması yapılmış, motivasyon yeni bir model
ile açıklanmıştır Motivasyon ile ilgili yeni bir model tespiti 2009 [14]
Beş faktör kişilik testi uygulanarak öğrenciler arasındaki kişilik farklarının eşli programlamaya
etkisinin tespiti
Eşli programlamanın 5 faktör kişilik boyutları ile
ilişkilendirilmesi 2009 [15]
Keirsey Temparement Sorter kişilik testi, diskriminant analiz.
Kişisel özellikler ve eşli programlama performansı
arasındaki ilişkinin tespiti 2009 [16]
Ses kayıtların analizi, Beş faktör kişilik modeli Eşli programlamada işbirliği ve kişilik arasındaki
ilişkinin tespiti 2009 [17]
Beş faktör kişilik boyutları İş tatmini ve ürün kalitesinin kişisel özellikler ile
ilişkisinin tespiti 2009 [18]
IPIP 50-item beş faktör kişilik testi İş tutumu ve kişilik tipleri arasındaki ilişki 2010 [19]
IPIP kişilik testi ve ANFIS(Bulanık mantık öğrenme
yöntemi) Yazılım projelerinde kişilik tiplerine uygun olarak
rol tanımlarına atama 2010 [20]
Beş faktör kişilik boyutları Tasarım desenlerine yaklaşım ve kişilik tipleri
arasındaki ilişki 2010 [21]
IPIP-NEO kişilik testi (Kısa versiyon). ANOVA ile analiz.
Sorumluluk özelliğinin eşli programlama üzerindeki
etkisinin incelenmesi 2010 [22]
MBTI Yazılım proje rol tanımları için uygun MBTI kişilik
tiplerinin tespit edilmesi 2010 [23]
MBTI, bulanık mantık (ağaç test modeli) MBTI kişilik tiplerine uygun olarak yazılım rol
tanımlarına atama işlemi 2011 [24]
Beş faktör kişilik boyutları Yazılım proje rol tanımları için uygun beş faktör
kişilik tiplerinin tespit edilmesi 2012 [25]
Beş faktör kişilik boyutları
Beş faktör model boyutlarından sorumluluk, deneyime açıklık ve duygusal dengenin eşli
programlamaya etkileri
2012 [26]
500 adet IT iş ilanının incelenmesi Yazılım proje rolleri için talep edilen yumuşak
becerilerin tespiti 2012 [27]
Kişilik ve iş tercihleri arasındaki ilişki Yazılım Mühendisliğinde duygusal zeka, kişilik ve iş
tercihleri arasındaki ilişkilerin incelenmesi 2014 [28]
Literatür taraması Yazılım Mühendisliğinde kişilik özellikleri ile ilgili
40 yıllık çalışmaların taraması 2015 [29]
MBTI kişilik tipleri kullanılmıştır. Yazılım projelerinde görev tercihinde kişilik
tiplerinin etkisi 2015 [30]
Beş faktör kişilik tipleri kullanılarak geliştirilen yeni anket ile deneysel çalışma yapılmıştır.
Kişisel özelliklerin yazılım takımlarına etkisinin
incelenmesi 2017 [31]
İncelemedir. Yazılımda insan etkisi ve yumuşak becerilerin önemi 2017 [32]
Dick ve Zarnett yaptıkları çalışmada iki kişinin aynı bilgisayar üzerinde çalışarak yazılım geliştirme yönteminin başarılı olabilmesi için gerekli olan kritik kişilik özellikleri incelemişlerdir. 8 yazılım geliştirici ile 3 hafta eşli programlama çalışması gözlemlenmiştir ve geliştiriciler ile süreç ile ilgili görüşmeler yapılmıştır. Bu süreç sonunda, eşli programlama için gereken özelliklerin iletişim, rahatlık, güven ve uzlaşma olduğu tespit edilmiştir. Eşli programlama için gereken kişilik özelliklerine sahip olan ekibin, sadece teknik beceriler ile oluşturulan bir programlama ekibinden daha başarılı olacağı ileri sürülmüştür [10].
Acuna ve Juristo proje rollerine uygun kişilerin atanması ile ilgili bir çalışma gerçekleştirdiler. Yazılım proje sürecindeki çeşitli görevleri yapmakla sorumlu 20 farklı rol tanımı için gereken kişisel yetenekleri tespit ederek yüksek ve orta olarak ağırlıklandırmışlardır. 16PF kişilik testini kullanarak yaptıkları deneysel çalışma ile kişilik rol eşleştirmesini yapmışlardır. Çalışma sonucunda yetenek odaklı yazılım süreç modelini ortaya koymuşlardır [11].
Cunha ve Greathead’ ın çalışmasında kodlardaki bulguları bulabilme yeteneği MBTI kişilik tipleri ile ilişkilendirilmiştir. 64 adet 2. Sınıf lisans öğrencisi ile yapılan deneysel çalışmada MBTI kişilik tiplerinden NT (Sezgilerini Kullanan - Düşünen) kişilik tipine sahip bireylerin kod bulgularını tespit etme konusunda daha başarılı oldukları ortaya çıkmıştır [12].
Beecham, Baddoo ve Hall yazılım mühendisliğinde motivasyon ile ilgili literatürde yapılan çalışmaları incelemişlerdir. Yaptıkları literatür taramasına göre 9 çalışmada çalışma koşulları ve kaynak eksikliği motivasyonu düşüren nedenler arasında gösterilmiştir.
Ücretin etkisi ise statüye bağlı olarak değişkenlik göstermektedir. Genç mühendislerde ücret motivasyonu arttırıcı bir etkiye sahipken, deneyimli mühendislerde motivasyon üzerinde çok fazla etkili olmadığı tespit edilmiştir [13].
Sharp ve arkadaşları literatür taraması yaparak yazılım mühendisliği ve motivasyon faktörleri ile ilişkili literatürdeki tüm modelleri açıklamışlardır. MOCC isminde yeni bir model geliştirerek yazılım mühendisliğindeki motivasyon kavramlarını MOCC (Motivators, Outcomes, Characteristics ve Context) modeli ile açıklamışlardır [14].
Salleh ve arkadaşlarının ikili programlama yapan öğrenciler üzerinde yaptıkları çalışmada kişilik tiplerindeki farklılığın akademik performans üzerinde etkili olmadığı belirtilmiştir.
Öğrencilerin %88 ve %87’si eşli çalışma sırasında tecrübe ve güven seviyesinin arttığını ifade etmişlerdir [15].
Sfetsos ve arkadaşları 70 lisans öğrencisi ile kişilik tiplerinin eşli programlama performansı ile ilişkisini incelemek amacıyla bir çalışma yapmışlardır. Farklı kişilik özelliklerine sahip programcı çiftlerinin başarısının aynı kişilik özelliklerine sahip çiftlere göre daha yüksek olduğu ortaya çıkmıştır. Kişisel özellikleri belirlemek için Keirsey Temparement Sorter envanteri, değerlendirme için istatistiksel testler ve diskriminant analiz kullanılmıştır [16].
Walle ve Hamoy eşli programlamada iş birliğinin önemini ve kişilik tiplerini incelediler.
44 adet profesyonel programcının ses kayıtları işbirliği sınıflamasına göre kategorize edilerek işbirliği kategorileri ve gruplardaki kişilerin kişilik tipleri arasındaki ilişki belirlenmiştir. Kişilik tipleri belirlenirken beş faktör model kişilik boyutlarından faydalanılmıştır. Kişiliğin çiftler arasındaki işbirliği tipi üzerinde etkili olduğu ve farklı özellikteki kişilik tiplerine sahip bireyler arasında işbirliği ve iletişimin daha fazla olduğu gözlemlenmiştir [17].
Acuna ve arkadaşları kişisel özelliklerin yazılım proje takımındaki iş tatmini ve yazılım kalitesine etkilerini ortaya koydular. Beş faktör kişilik boyutlarının 35 yazılım geliştirme takımı (105 kişi) üzerindeki ölçümlerinin sonucunda, yumuşak başlılık (agreeableness) ve sorumluluk (conscientiousness) kişilik özelliklerine sahip bireyler ile işlerini organize edebilen bireylerde iş tatminin daha fazla olduğu tespit edilmiştir. Ayrıca, dışadönüklük (extraversion) boyutu ile yazılım ürün kalitesi arasında pozitif bir bağlantı olduğu ortaya çıkmıştır [18].
Feldt ve arkadaşlarının yazılım mühendislerinin kişilik tipleri ve iş tutumları arasındaki bağlantıları ortaya çıkarmak için yaptıkları çalışma yapmışlardır. IPIP 50-item beş faktör kişilik testinin kullanıldığı çalışmada dışadönük kişilik tipine sahip mühendislerin planlı işlerde daha başarılı oldukları, gelişime açık kişilik tipine sahip mühendislerin tüm proje için sorumluluk alabildikleri ortaya çıkmıştır [19].
Martinez ve arkadaşları IPIP kişilik testi ve bir bulanık mantık metodu olan ANFIS öğrenme yöntemini kullanarak yazılım projelerinde görev ataması ile ilgili bir çalışma yapmışlardır. 72 yazılım mühendisi kendileri için uygun olan 6 rol tanımından birine bu yöntemle atanmıştır [20].
Bell ve arkadaşları, 2. Sınıf lisans öğrencileri üzerinde beş faktör kişilik testini kullanarak yaptıkları çalışmada kişisel özelliklerin tasarım desenleri ile ilgili çalışmalara ve performansa etkisini incelemişler fakat Acuna ve arkadaşlarının çalışmasının aksine performans ve kişilik özellikleri arasında çok güçlü ilişki tespit edememişlerdir [16]. Beş faktör boyutlarından duygusal denge (neurotism) ve tasarım desenleri arasında zayıf bir ilişki olduğunu belirtmişlerdir [21].
Salleh ve arkadaşları, lisans öğrencileri ile yaptıkları bir çalışmada beş faktör modeli boyutlarından biri olan sorumluluk boyutunun eşli çalışma üzerindeki etkisini araştırmışlardır. Çıkan sonuca göre sorumluluk boyutu eşli çalışma performansı üzerinde etkili değilken, deneyime açıklık boyutunun etkili olduğunu belirtmişlerdir [22].
Capretz ve Ahmed, yazılım proje rol tanımlarından sistem analisti, tasarımcı, programcı, test uzmanı ve bakımcı için gereken teknik ve yumuşak becerileri belirleyerek MBTI kişilik tipleri ile eşleştirmeler yapmışlardır. Proje rolleri için uygun MBTI kişilik tipleri tespit edilmiştir. Çalışmadaki eşleştirmeye göre, sistem analisti dışadönük ve duygusal, sistem tasarımcısı sezgisel ve düşünsel, programcı içe dönük, duyusal ve düşünsel, testçi duyusal ve yargılayıcı, bakımcı ise duyusal ve algılayıcı kişilik tipine sahip olmalıdır [23].
Martinez ve arkadaşları, bulanık mantık yöntemini kullanarak rol atamasında kullanılmak üzere yazılım mühendisliği dersleri için bir uygulama geliştirdiler. Kişilik tipleri belirlemede MBTI testi kullanılmıştır. Bu çalışmada MATLAB bulanık mantık aracını kullanılarak her bir rol tanımına uygun kişilik tipleri için ağırlıklandırma yapılarak rol ataması gerçekleştirilmiştir [24].
Rahman ve arkadaşları yazılım proje rol tanımlarından sistem analisti, tasarımcı, programcı, test uzmanı ve bakımcı için gereken teknik ve yumuşak becerileri belirleyerek beş faktör kişilik tipleri (dışadönüklük, yumuşak başlılık, deneyime açıklık, duygusal denge, sorumluluk) ile eşleştirmeler yapmışlardır. Proje rolleri için uygun beş faktör kişilik
tipleri tespit edilmiştir. Sistem analisti ve tasarımcısı rolü için deneyime açıklık ve yumuşak başlılık, programcı rolü için deneyime açıklık, yumuşak başlılık ve dışadönüklük, testçi ve bakımcı rolü için deneyime açıklık ve sorumluluk tiplerinin olması gerektiğini belirlemişlerdir [25].
Salleh ve arkadaşları yaptıkları çalışmalarda 2009 ve 2010 yıllarında Auckland Üniversitesi’nde 594 öğrenci ile yaptıkları deneysel çalışmalarda beş faktör kişilik modelinden deneyime açıklık, sorumluluk ve duygusal dengenin eşli programla performansı üzerindeki etkileri incelemişlerdir. Duygusal denge ve sorumluluk boyutunun ikili programlama üzerinde etkisi görülmezken, deneyime açık kişilik özelliğine sahip öğrencilerin ikili programlama çalışmasındaki akademik başarılarının daha yüksek olduğu ortaya çıkmıştır [26].
Ahmed ve arkadaşlarının çalışmalarında, Kuzey Amerika, Avrupa, Asya ve Avustralya bölgelerine ait 500 IT iş ilanı incelenerek yazılım proje rolleri için şirketlerin talep ettiği yumuşak beceriler belirlenmiştir. Talep derecesine göre yüksek, orta, düşük şeklinde sınıflandırma yapılmıştır. Roller için yüksek oranda talep edilen beceriler şu şekildedir:
Sistem Analisti: İletişim becerisi, analitik düşünme ve problem çözme becerisi, takım oyuncusu olma.
Sistem Tasarımcısı: İletişim becerisi, kişilerarası beceri
Programcı: İletişim becerisi
Testçi: İletişim becerisi
Bölgesel olarak talep edilen becerilerin değiştiği belirtilmiştir. Bakımcı için herhangi bir araştırma yapılmamıştır [27].
Kosti ve arkadaşları 279 yüksek lisans öğrencisi üzerinde gerçekleştirdikleri deneysel bir çalışma sonucunda, duygusal zekâ ve kişilik ile iş tercihleri arasında bağlantı olduğu, öz anlayış özelliği ile iş tercihleri arasında bir bağlantı kurulamadığı belirtilmiştir [28].
Cruz ve arkadaşları kişilik tiplerini konu alan son 40 yılı kapsayan bir literatür tarama çalışması gerçekleştirdiler. 1970 ve 2010 yılları arasındaki yazılım projelerine kişilik tiplerinin etkisini inceleyen çalışmada, 2002 yılı sonrasında, çalışmaların daha çok eğitim ve çift kişi programlama üzerine yoğunlaştığını tespit edilmiştir. Ayrıca, kişilik tiplerini
belirlemek için MBTI testinin en çok kullanılan kişilik testi olduğunu ortaya koyuldu.
Ayrıca deneysel çalışmalarda, katılımcıların %60 öğrenciler, %40 profesyoneller olarak dağılım gösterdiği tespit edilmiştir. Şekil 2.2’de yazılım mühendisliğinde kişilik tipleri ile ilgili çalışmaların yıllara göre dağılımı bulunmaktadır [29].
Capretz ve arkadaşları yazılım projelerinde görev tercih etme durumunun MBTI kişilik tipleri ile ilişkisini incelemişlerdir. Analist, tasarımcı ve programcı rolleri tüm kişilik tiplerinde en çok tercih edilen roller iken, testçi ve bakımcı rollerinin daha az tercih edildiği tespit edilmiştir [30].
Yılmaz ve arkadaşları kişisel özelliklerin yazılım geliştirme takımları üzerindeki etkilerini incelemişlerdir. Beş faktör model kişilik tiplerinden duygusal denge, yumuşak başlılık, dışadönüklük, sorumluluk sahibi tiplerine sahip kişilerden oluşan takımların daha etkili olduğunu tespit etmişlerdir. Dışadönüklük kişilik tipinin literatürdeki araştırmalara kıyasla çok daha etkili bir faktör olduğunu belirtmişlerdir [31].
Capretz ve arkadaşları yazılımda insan etkisinin, yumuşak becerilerin önemini ve kültürel etkileri açıklamışlardır. İnsan psikolojisinin yazılımda önemli olmasına rağmen bu konudaki çalışmaların yetersiz kaldığını belirtmişlerdir [32].
Şekil 2.1. Yıllara göre yazılım mühendisliğinde kişilik tipleri ile ilgili çalışmaların dağılımı
Literatür taraması sonucu yapılan çalışmaların yazılım alanında yapılan çalışmalarda kişilik tipleri ve kişisel becerilerin etkileri, takım performansı ve uygun proje rolü atama
ile ilgili oldukları görülmektedir. Literatürde yazılım rolleri için gereken teknik görevler, kişisel beceriler, kişilik tipleri belirlenmiştir [23,25,27,30]. Literatürde tespit edilen eksikler şu şekildedir:
Yazılım rolleri için gerekli teknik görevler belirlenirken ulusal veya uluslararası meslek tanımlamaları incelenmemiş, iş ilanlarında kullanılan teknik gereklilikler esas alınmıştır.
Yazılım mühendislerinin kişilik tiplerini belirlemek için en çok kullanılan kişilik envanterinin MBTI olduğu tespit edilmiştir [29]. Ancak, yazılım proje rolleri için gereken becerilerin beş faktör kişilik özellikleri ile daha çok eşleştiği görülmüştür.
Yapılan çalışmalarda yazılım rolleri için gerekli kişilik tipleri tespit edilirken uzman kişilerin görüşleri esas alınmamıştır.
Bu tezde beş faktör kişilik tiplerine yazılım rolleri için önem derecesine göre bir skor verilerek, takım üyelerinin kişiliklerine göre hangi role hangi oranda uygun olduğunu tespit etmek amacıyla yeni bir yöntem geliştirilmiştir. Literatürde, MBTI ve beş faktör model kişilik tipleri proje rolleri ile eşleştiren çalışmalarda kişilik tiplerinin roller için önem derecesi belirlenmemiştir [23,25]. Rol atama için literatürde bulanık yaklaşımların kullanımı mevcuttur [20,24]. Ancak, bu çalışmalar bulanık mantık çerçevesinde yapılmış olup bulanık kümelemenin rol belirleme için kullanıldığı bir çalışma mevcut değildir. Bu tez, makine öğrenmesine dayalı kümeleme yönteminin uygun rol belirleme için kullanıldığı ilk çalışmadır.
3. YAZILIM GELİŞTİRME SÜREÇLERİ VE MESLEKİ TANIMLAMALAR
Yazılım birçok süreçten geçerek ortaya çıkan bir üründür. Bu süreçler temel olarak gereksinim analizi, yazılım tasarımı, kodlama, test ve bakım olarak belirlenmiştir [35].
Yazılım geliştirme süreçlerinden her birinin gereksinimleri ve işleyişi farklıdır. Bu nedenle her süreç, farklı sorumluluklar ve yeterlilikler gerektirmektedir. Yazılım süreçlerindeki rollere ait görev tanımlarını ve teknik sorumlulukları belirlemek için, yazılım mühendisliği mesleğinin Uluslararası Çalışma Örgütü tarafından hazırlanan uluslararası meslek sınıflamaları ve Mesleki Yeterlilik Kurumu tarafından hazırlanan ulusal meslek tanımları incelenmiştir. Ayrıca, birçok bilgisayar mühendisliği programında “yazılım mühendisliği”
veya “yazılım mühendisliği proje yönetimi” gibi dersler ile bu süreçleri öğrenilebilmektedir. Bu nedenle dolaylı olarak bilgisayar mühendisliği de bu kapsamda değerlendirilebilmektedir. Ancak bilgisayar mühendisliği mesleğine ait meslek tanımlamaları tez kapsamına alınmamıştır.
3.1. Mesleki Yeterlilik Kurumu Tanımlarına Göre Yazılım Rolleri için Gerekli Teknik Görevler
MYK (Mesleki Yeterlilik Kurumu), meslek standartlarını temel alarak, teknik ve meslekî alanlarda ulusal yeterliliklerin esaslarını belirlemek; denetim, ölçme ve değerlendirme, belgelendirme ve sertifikalandırmaya ilişkin faaliyetleri yürütmek üzere 21 Eylül 2006 tarihli ve 5544 sayılı "Mesleki Yeterlilik Kurumu Kanunu" ile kurulmuştur [36]. MYK tarafından belirlenen görev tanımlarında, 5 ayrı yazılım süreci için tanımlı 2 rol bulunmaktadır. Bu roller, BT İş Analisti (Sistem Analisti) ve Yazılım Geliştiricidir [37,38].
Sistem analisti BT İş Analisti olarak isimlendirilmiştir. BT İş Analisti rolü için gereken görevler incelendiğinde yazılım test uzmanına ait görevlerin de bulunduğu tespit edilmiştir [37]. Yazılım Geliştirici olarak belirlenen rolün görevleri arasında da yazılım tasarımcısı ve yazılım bakımcısı rollerine ait görevler bulunmaktadır [38].
Çizelge 3.1. MYK tanımlarına göre BT iş analisti görevleri
Görevler Alt Görevler Olası Rol
Tanımı İş organizasyonu yapmak İş emirlerini almak
İş planlaması yapmak
Çalışılan alanın işe uygun düzenlenmesini sağlamak Üst yönetime bilgilendirme ve raporlama yapmak Dijital arşivleme yaptırmak
Sistem Analisti
Yazılım geliştirme projesinin ön hazırlığını yapmak
İş süreçleri bazında araştırma yapmak
Önceden geliştirilmiş mevcut ya da örnek yazılımlar üzerinde çalışarak bilgi edinmek
Sistem Analisti
Projeyi tasarlamak İş gereksinimlerini belirlemek için kullanıcı isterlerini belgelemek İş analizi dokümanını hazırlamak
Süreç tasarımını gerçekleştirerek belgelemek Yazılım kabul test senaryoları hazırlayıp belgelemek Değişiklik yönetimi politika ve prosedürlerini hazırlayıp belgelemek
İş analizi ve süreç tasarım dokümanları üzerinde nihai mutabakata varmak
Sistem Analisti
Geliştirme çalışmalarını koordine etmek İhtiyaçları yazılım geliştiricilere aktarmak
Proje geliştirme ve uygulamaya alma planının kesinleştirilmesini sağlamak
Değişiklik ihtiyaçlarını koordine etmek
Sistem Analisti
Yazılımın uygulama ortamına uygunluğunu ve çalışırlığını test etmek
Test ortamında gerekli testleri gerçekleştirmek Kullanıcılara test ve kullanım eğitimi vermek
Yazılım Test Uzmanı Yazılım dokümantasyonunu tamamlamak Kullanıcı dokümantasyonu oluşturmak
Teknik dokümantasyon oluşturmak
Sistem Analisti Yazılımın uygulamaya alma hazırlıklarını
yapmak
Uygulamaya alma projesinin maliyet ve zaman dokümanını hazırlamak
Uygulamaya alma projesinin nihai halini ilgili taraflarla paylaşmak
Sistem Analisti
Yazılım uygulamaya alma çalışmalarını koordine etmek
Yazılımın test ve canlı ortamlara kurulmasında danışmanlık yapmak
Veri aktarımı ve düzenleme çalışmalarında danışmanlık yapmak Kullanıcı eğitimi ve test çalışmalarında koordinasyon ve danışmanlık sağlamak
Sistem Analisti
Yazılım iyileştirme çalışmaları yapmak Yazılım iyileştirme ve güncelleme çalışmalarını belirleyerek başlatmak
Yazılım değişiklik yönetimine uygun test, doküman güncelleme, duyurma ve uygulamaya alma çalışmaları yapmak
Sistem Analisti
Mesleki gelişim faaliyetlerini yürütmek Mesleki eğitimlere katılmak
Mesleki ve teknolojik yenilikleri takip etmek Personelin eğitim almasını sağlamak Personelin işbaşı eğitimine iştirak etmek
Sistem Analisti
Çizelge 3.2. MYK tanımlarına göre yazılım geliştirici görevleri
Görevler Alt Görevler Olası Rol Adları
İş organizasyonu yapmak İş emirlerini almak İş planlaması yapmak
Çalışılan alanın işe uygun düzenlenmesini sağlamak
Üst yönetime bilgilendirme ve raporlama yapmak
Dijital arşivleme yaptırmak Personel yönlendirmesi yapmak
Yazılım Geliştirici
Yazılım projesi öncesi hazırlık yapmak Analiz dokümanlarını incelemek Projenin yazılım iş yükünü belirlemek Proje planının kesinleştirilmesini sağlamak Yazılım tasarımı yapmak
Veritabanı tasarımı yapmak
Veritabanı tasarım dokümanı oluşturmak Yazılım tasarım dokümanı oluşturmak Yazılım kabul test senaryoları hazırlayarak belgelemek
Tasarım üzerinde mutabakat sağlamak Harici yazılım bileşenlerini ve içeriği araştırmak
Yazılım Tasarımcısı
Veritabanı oluşturmak Veritabanı unsurlarını oluşturmak Veritabanı unsurlarının testini yapmak
Yazılım Geliştirici Yazılım geliştirmek Kullanıcı arayüzü standartlarını ve gerekli
kontrolleri oluşturmak
Geliştirme ortamlarının kurgusunu gerçekleştirmek
Güvenlik bileşenlerini ve kullanım standartlarını oluşturmak
Kullanıcı ara yüzü oluşturmak ve belgelemek Yazılım katmanlarını belirleyerek aralarındaki etkileşimi gerçekleştirmek
Veri kontrollerini ve iş kurallarını yazılım koduna dönüştürmek
Yazılım Geliştirici
Yazılımın uygulama ortamına uygunluğunu ve çalışırlığını test etmek
Test senaryolarını detaylandırarak belgelemek Test çalışma ortamlarının kurulmasını sağlamak Yazılımı test ortamlarına test edilmek üzere kurmak
Test ortamında gerekli testleri gerçekleştirmek Canlı ortam hız ve performans testlerine eşlik etmek
Yazılım Geliştirici
Yazılım dokümantasyonunun hazırlanmasını sağlamak
Kullanıcı dokümantasyonu oluşturmak Teknik dokümantasyon oluşturmak
Yazılım Geliştirici Yazılım uygulamaya alma çalışmalarını
koordine etmek
Yazılımın test ve canlı ortamlara kurulmasında danışmanlık yapmak
Veri aktarımı ve düzenleme çalışmalarında danışmanlık yapmak
Kullanıcı eğitimi ve test çalışmalarında koordinasyon ve danışmanlık sağlamak
Yazılım Geliştirici
Yazılım iyileştirme çalışmaları yapmak Yazılım iyileştirme ve güncelleme çalışmalarını belirleyerek başlatmak
Veritabanında belirlenen düzenlemeleri yapmak Test, doküman güncelleme, duyurma ve uygulamaya alma çalışmaları yapmak
Yazılım Bakımcısı
Mesleki gelişim faaliyetlerini yürütmek Mesleki eğitimlere katılmak
Mesleki ve teknolojik yenilikleri takip etmek Personelin eğitim almasını sağlamak Personelin işbaşı eğitimine iştirak etmek
Yazılım Geliştirici
Mesleki Yeterlilik Kurumu tanımlarına göre süreç rollerinin birbirinden tam olarak ayrılmadığı görülmektedir. BT İş Analisti, test uzmanının rolünü, yazılım geliştirici ise yazılım tasarımcısı ve yazılım bakımcısı rollerini üstlenmiş durumdadır.
3.2. Uluslararası Meslek Sınıflaması (ISCO-08) Tanımlarına Göre Yazılım Rolleri için Gerekli Görevler
ISCO-08 (International Standard Classification of Occupations) tanımlarına göre, literatürde 5 ayrı rol olarak tanımlanan yazılım ile ilgili roller, sistem analisti, yazılım geliştiricileri, başka yerde sınıflandırılmamış yazılım ve uygulama geliştiricileri ve analistleri ve uygulama programcıları olarak belirtilmiştir [39]. Sistem analisti görevleri arasında sayılan, sistem test planlarını oluşturma, adapte etme, uygulama gibi fonksiyonel çözümlemelerin uygulanması için gerekli sorumlulukları almak görevi yazılım test uzmanına ait bir görev olarak, yazılım geliştiricileri rolünün görevleri arasındaki, bilgisayar yazılım sistemlerini tasarlamak yazılım tasarımcısı rolüne ait bir görev olarak, işletim sistemleri, iletişim ortamları ve uygulama yazılımları için bakım prosedürlerini değerlendirmek, geliştirmek, güncellemek ve belgelemek ile hataları gidermek, yeni bir donanıma uygun hale getirmek veya ara yüzlerin güncellenmesi ve performansın arttırılması için mevcut yazılımı düzeltmek görevleri yazılım bakımcısına ait görevler arasında değerlendirilebilir. ISCO-08 sınıflandırmalarına göre başka yerde sınıflandırılmamış yazılım ve uygulama geliştiricileri ve analistleri sınıfına ait görevlerin, literatürde yazılım test uzmanı olarak adlandırılan rolün üstlendiği görevler ile benzer olduğu görülmektedir [39]. Bununla birlikte, uygulama programcıları meslek sınıfına ait görevler de yazılım bakımcısının görev tanımına uymaktadır [39].
Çizelge 3.3. ISCO-08 meslek sınıflamasına göre yazılım alanındaki meslekler ve görevler
ISCO-08 Rol Adı Görevler Olası Rol Adları
Sistem Analisti Kullanıcılara danışarak talepleri belirlemek ve doküman haline getirmek, sistem ilkelerine ilişkin anlaşma sağlamak amacıyla yönetime danışmak
İş süreçlerini, prosedürlerini ve çalışma pratiklerini tanımlamak ve analiz etmek
Verimsiz uygulamaları tanımlamak ve değerlendirmek, en uygun iş uygulamaları ile sistem işlerliği ve davranışını tavsiye etmek Sistem test planlarını oluşturma, adapte etme, uygulama gibi fonksiyonel çözümlemelerin uygulanması için gerekli sorumlulukları almak
Sistem geliştiricilerinin kullanımı için fonksiyonel özellikleri geliştirmek
İş akışını geliştirmek veya yeni amaçlara hizmet etmek için sistemi genişletmek veya yenilemek
Sistem Analisti Yazılım Test Uzmanı
Çizelge 3.3. (devam) ISCO-08 meslek sınıflamasına göre yazılım alanındaki meslekler ve görevler
Yazılım Geliştiricileri Yazılım uygulamaları ve işletim sistemlerine yönelik talepleri araştırmak, analiz etmek ve değerlendirmek
Bilgisayar yazılım sistemlerini araştırmak, tasarlamak ve geliştirmek
Donanım ve yazılım arasındaki ara yüzleri değerlendirmek için mühendislik personeline danışmak
Yazılım testi ve geçerlik prosedürlerini geliştirmek ve yönetmek;
Hataları gidermek, yeni bir donanıma uygun hale getirmek veya ara yüzlerin güncellenmesi ve performansın arttırılması için mevcut yazılımı düzeltmek
Yazılım programlaması ve dokümantasyon geliştirilmesi konularını yönetmek
İşletim sistemleri, iletişim ortamları ve uygulama yazılımları için bakım prosedürlerini değerlendirmek, geliştirmek, güncellemek ve belgelemek
Yazılım sisteminin bakımı ile ilgili müşterilere danışmak.
Yazılım Geliştirici
Yazılım Tasarımcısı Yazılım Bakımcısı
Başka yerde sınıflandırılmamış yazılım ve uygulama geliştiricileri
ve analistleri
Yazılım test planlarını geliştirmek ve belgelemek
Yazılım ve donanımı kurmak, test işlemleri hazırlığında işletim sistemi yazılımını yapılandırmak
Programların kullanıcı taleplerine ve yürürlükteki kılavuzlara göre çalıştığını onaylamak
Yazılım uygulamaları ile bilgi ve telekomünikasyon sistemleri testlerinin sonuçlarını oluşturmak, analiz etmek ve belgelemek Yazılım ve bilgi sistemleri test politikalarını, prosedürlerini ve kodlarını geliştirmek ve uygulamak.
Yazılım Test Uzmanı
Uygulama programcıları Onaylanmış kalite standartları ile uyumlu talimatlar ve özelliklere göre ana hatları oluşturulmuş programlama kodlarını yazmak ve bakımını yapmak
İşletim etkinliğini artırmak veya yeni taleplere adapte etmek için mevcut programları düzeltmek, onarmak veya genişletmek Programların ve yazılım uygulamalarının istenilen bilgiyi üreteceğini onaylamak için deneme çalışmaları yapmak;
Program geliştirme dokümantasyonunu derlemek ve yazmak Teknik problemleri, süreçleri ve çözümleri tanımlamak ve bunlarla ilgili bilgilendirme yapmak.
Yazılım Bakımcısı
Yukarıdaki tablolarda belirtildiği gibi, ISCO-08 meslek sınıflaması ve MYK standartlarında, rol tanımlarının literatürde belirtildiği gibi kesin olarak birbirinden ayrılmadığı görülmektedir. Yazılımın her süreci farklı görev ve sorumluluklar gerektirdiği için rol tanımlarının farklı olması gerekmektedir.
Tabloda yazılım geliştirme süreçlerinin tanımları ile ISCO ve MYK tarafından ilgili süreç için belirlenen meslek grubunun adı yer almaktadır. ISCO tasarım, kodlama ve bakım süreçleri için tek tip rol tanımlarken, MYK tanımlarına göre, gereksinim analizi ve test süreci BT İş analisti, tasarım, kodlama ve bakım faaliyetleri Yazılım Geliştirici tarafından gerçekleştirilmektedir. Ancak, yazılım geliştirme süreçlerinin her biri farklı sorumluluk ve yetenekleri gerektirmektedir. Bu nedenle yapılan çalışmada, yazılım süreçleri için SWEBOK tarafından belirlenen çizelge 3.4’teki süreç tanımları referans alınmıştır.
Süreçlere ait rol isimleri ise literatür tanımlarına uygun olarak çizelge 3.5’te olduğu gibi belirlenmiştir.
Çizelge 3.4. SWEBOK tanımlarına göre yazılım geliştirme süreçlerinin ISCI-08 ve MYK’daki rol karşılıkları
Yazılım Geliştirme Süreçleri Süreç Tanımı ISCO Rol Adı MYK Rol Adı
Gereksinim Analizi
Yazılım ürününün tüm yaşam döngüsü boyunca gereksinimlerin
yönetiminin yanı sıra, yazılım gereksinimlerinin belirlenmesi, analizi, belirtimi ve onaylanması
ile ilgilidir.
Sistem analisti BT İş Analisti
Yazılım Tasarımı
Yazılımın bileşenlere nasıl ayrıştırıldığı ve düzenlendiği ve
bu bileşenler arasındaki arabirimler belirlenir. Yazılımın
mimarisi tanımlanır.
Yazılım geliştirici Yazılım Geliştirici
Yazılımın Kodlanması
Kodlama, doğrulama, birim ve entegrasyon testi yapılarak yazılımının ayrıntılı olarak oluşturulmasını ifade eder.
Yazılım geliştirici Yazılım Geliştirici
Yazılım Testi
Yazılım testi, bir programın, genellikle sınırsız yürütme etki alanından uygun şekilde seçilmiş
sonlu bir dizi test üzerinde beklenen davranışlar sağladığı dinamik doğrulamaya dayanır.
Başka yerde sınıflandırılmamış yazılım ve uygulama
geliştiricileri ve analistleri
Yazılım Geliştirici
Yazılım Bakımı
Yeni kullanıcı gereksinimleri, çalışma ortamlarının değişmesi
ve hataların giderilmesi için yazılımda değişiklik yapılan
süreçtir.
Yazılım geliştirici Yazılım Geliştirici
Çizelge 3.5. Yazılım geliştirme süreçlerine ait literatürde kullanılan rol isimleri
Yazılım Geliştirme Süreçleri Rol
Gereksinim Analizi Sistem Analisti
Yazılım Tasarımı Yazılım Tasarımcısı
Yazılımın Kodlanması Programcı
Yazılım Testi Yazılım Testçisi
Yazılım Bakımı Yazılım Bakımcısı
Yazılım projelerinde çalışan kişilerin, çalıştıkları rolün gerektirdiği sorumlulukları gerçekleştirmek için, teknik becerilerinin yanında kişisel özelliklerinin de ilgili role uygun olması gerekmektedir. Pek çok çalışmada kişiliğin akademik performans, ders seçimi, üniversite eğitimini ve kariyer seçimi ile ilişkili olduğu tespit edilmiştir [40]. Yazılım projelerinde takım performansının ve görev seçiminin kişisel özellikler ve beceriler ile ilişkili olduğunu gösteren çalışmalar mevcuttur [21,28]. Yazılım süreçleri için gerekli kişisel beceriler ve bu beceriler ile ilişkili kişilik tiplerine 4. Bölümde yer verilmiştir.
4. YAZILIM PROJELERİNDE KİŞİSEL ÖZELLİKLERİN ROLÜ
Bu bölümde çizelge 3.4’te yer alan yazılım rol tanımları üzerinde kişisel özelliklerin rolü incelenmiştir. Kişisel özellikler kişisel beceriler ve kişilik tipleri olmak üzere 2 ayrı başlık altında ele alınmıştır.
4.1. Yazılım Rol Tanımları ve Kişisel Beceriler
Bu bölümde yazılım süreçlerinin her bir yazılım proje rolü için teknik gereklilikleri yerine getirebilmek için gereken kişisel beceriler belirlenmiştir. Sistem analisti, yazılım tasarımcısı, programcı, yazılım test uzmanı ve yazılım bakımcısı rolleri için gerekli kişisel beceriler alt bölümlerde yer almaktadır.
4.1.1. Sistem analisti için gerekli kişisel beceriler
Sistem analizi aşamasında, sistem analisti kullanıcıların ihtiyaçlarını ve yazılım gereksinimlerini belirler, sistemin özgün özelliklerini tespit eder ve gereksinimlerin karşılanacağı şekilde uygulamanın soyut bir modelini oluşturur. Sistem analizi aşaması kullanıcılar ve müşteriler ile etkileşim gerektirir. Ayrıca, sistem analistleri kullanıcıların ihtiyaçlarını tam olarak anlayabilmek için empati kurabilmelidir. Bu nedenle kişiler arası beceriler ve iletişim becerileri sistem analistleri için gerekli becerilerdir [23].
Ahmed ve arkadaşlarının çalışmasında, %31 Kuzey Amerika, %26 Avrupa, %23 Asya ve
%20’si Avustralya bölgesinden olan 500 iş ilanının analizi sonucu sistem analisti, yazılım tasarımcısı, programcı ve yazılım testçisi için aranan 9 temel beceri tespit edilmiştir. Bu beceriler, iletişim becerisi, kişiler arası ilişki becerisi, analitik düşünme ve problem çözme becerisi, takım içi çalışma becerisi, organizasyon becerisi, hızlı öğrenebilme, yalnız çalışabilme, yenilikçi olma, değişime açıklık olarak belirlenmiştir. Bu becerilerden, iletişim becerisi, analitik düşünme ve problem çözme becerisi ve takım içi çalışma becerisinin sistem analistleri için en çok aranan beceriler olduğu tespit edilmiştir. Fakat yenilikçi olma ve kişiler arası ilişkiler becerisi de sistem analistleri için önemli olmasına rağmen yazılım sektöründe yeteri kadar talep edilmediği görülmektedir [27].