مقدمهامين صفايي
فرق زيادي بين مهندسان نرمافزار حرفهاي و برنامهنويسان حرفهاي وجود دارد. اكثر مهندسان نرمافزار حرفهاي كدنويسان و برنامهنويسان ماهري هستند، ولي همه برنامهنويسان مهندسان نرمافزار حرفهاي نيستند. وقتي شركت يا سازماني نياز به توليد نرمافزاري دارد، هميشه به دنبال متخصصان با تجربه نرمافزار و افراد با استعداد مي گردد. آيا تا به حال از خود سؤال كردهايد كه چه چيزي باعث ميشود كه به بعضي از ما لقب مهندس نرمافزار ماهر را ندهند؟ ساختن نرمافزارهاي كم كيفيت، نرمافزارهايي كه نيازهاي كاربرانشان را تأمين نميكنند يا پشتيباني نكردن از نرمافزاري كه ساختهايم. به راستي به چه كسي ميتوانيم بگوييم برنامهنويس ماهر يا به اصطلاح professional؟ باور همه اين است كه برنامهنويسان حرفهاي ميتوانند نرمافزارهايي با استاندارد بالا و با كيفيتي عالي ايجاد كنند. اما ما ميتوانيم كيفيت را نيز به دو بخش كيفيت محصول يا Quality of Product و كيفيت روش توليد نرمافزار يا Quality of Process تقسيم نماييم. به نظر شما كدام از يك اين دو بخش بايد به كار گرفته شود؟ عضويت در مجامع و انجمنهاي تخصصي نرمافزاري ميتواند براي اعضاي خود افزايش اعتبار كاري به همراه داشته باشد. همچنين عضويت در اينگونه انجمنها ميتواند موقعيت شركت در كنفرانسهاي علمي كه در زمينه كاري شما باشد را نيز فراهم سازد. شما ميتوانيد تجربيات مفيد خود را در اختيار اعضاي ديگر قرار دهيد و از تجربيات آنان استفاده نماييد، ميتوانيد از منابع، مجلات و مقالههاي موجود استفاده كنيد و... . آيا فكر نميكنيد كه اگر اين همه تجربه را به دست آوريد، ميتوانيد نرمافزارهايي با كيفيت بهتر توليد كنيد؟ البته كه ميتوانيد با استفاده از تكنيكهاي جديدي كه فرا گرفتهايد، نرمافزارهايي به مراتب بهتر از قبل توليد كنيد؛ مخصوصاً اگر به عضويت انجمنهاي انفورماتيكي بينالمللي درآييد، بر اساس تعهدي كه در زمان درخواست عضويت ميكنيد، ملزم به اجراي تعهدنامه خود خواهيد بود و در نتيجه اين موضوع باعث خواهد شد از استانداردهاي جديد استفاده كنيد و نرمافزارهاي بهتري توليد نماييد.
عنوان مهندسي نرمافزار در سال 1968 براي تعريف هنر طراحي و پيادهسازي نرمافزارهايي با كيفيت مطرح گرديد. اگر شما مهندس نرمافزاري باشيد كه به دنبال شغلي در مؤسسات كاريابي يا اينترنت ميگردد، اغلب متوجه ميشويد كه اين شركتها به دنبال مهندسان نرمافزار حرفهاي ميگردند كه بتوانند سريع مشكليابي كنند، نرمافزارهاي باكيفيتي توليد نمايند و بتوانند در تيمهاي نرمافزاري فعال باشند. امروزه مشكلاتي را كه در صنعت توليد نرمافزار ميبينيم، اغلب ناشي از عدم برنامهريزي هماهنگ با بودجه و زمان، هماهنگ نبودن افراد در پروژه و توليد نرمافزارهايي با كيفيت پايين است كه اين موردپسند هيچ شركت توليدي نرمافزاري نيست؛ زيرا يكي از مهمترين فاكتورهاي اين شركت ها توليد نرمافزار با كيفيت بالا در زمان معين و بودجه خاص است.
به نظر شما مشكل از كجاست؟ شايد بگوييد ممكن است افراد حاضر در تيم از علم كافي براي توليد نرمافزارهاي باكيفيت برخورداد نيستند و از استانداردهاي حاضر بياطلاعند. اما توليد نرمافزار باكيفيت فقط محدود به نوشتن كدهاي بدون خطا نيست، بلكه در حقيقت به كارگيري اصول افزايش كيفيت در تمامي مراحل توليد نرمافزار در پروژه هاي نرمافزاري است و اين كاري است كه تنها از عهده مهندسان نرمافزار حرفهاي برمي آيد و بس.
سؤال ديگري كه در اين قسمت پيش ميآيد اين است كه چه كسي را ميتوان حرفهاي ناميد؟ و چه عواملي باعث مي شود يك مهندس نرمافزار حرفهاي شود؟ اصولاً به كسي حرفهاي يا Professional ميگويند كه در كار خود مهارت فراوان دارد و همگام با پيشرفت صنعتي كه مشغول كار است، اطلاعاتي بروز دارد، در كلاسهاي تخصصيِ آموزشي شركت ميكند و عضو انجمنهاي علمي تخصصي است. اينها همه باعث ميشوند كه ما حرفهاي شويم.
اين مقاله در ابتدا، حرفهاي بودن يا professionalism را مورد بررسي قرار ميدهد و وظايف يك مهندس حرفهاي را مشخص ميكند. سپس عواملي كه باعث ميشود كه يك مهندس نرمافزار حرفهاي شود را بررسي مينمايد و وظايف مهندس نرمافزار حرفهاي را مورد بحث قرار ميدهد. بعد از آن معناي كيفيت در نرمافزار، ريسكهاي طراحي نرمافزار بدون كيفيت و روشهايي براي افزايش كيفيت نرمافزار مورد بررسي قرار خواهد گرفت.
بخش بعدي اين مقاله در مورد انجمنهاي تخصصي بزرگ فناوري اطلاعات توضيح خواهد داد و مزاياي عضويت در اين انجمنها را مورد بررسي قرار ميدهد.
در قسمت بعدي نيز به يكي از سؤالات مهمي كه در اينجا تحت عنوان <آيا عضويت در انجمنهاي تخصصي حرفهاي ميتواند روي كيفيت نرمافزارهاي توليد شده توسط اعضاي آن تأثير بگذارد؟>، مطرح ميشود جواب داده خواهد شد و مهندسان نرمافزار حرفهاي با غيرحرفهاي مقايسه خواهند شد. در انتهاي اين مقاله نيز از مباحث مطرح شده استفاده ميشود و نتيجه گيري خواهد شد.
حرفهاي كيست؟
از آن جايي كه اين مقاله در مورد حرفهاي بودن در مهندسي نرمافزار سخن ميگويد، اين بخش از اين نوشته را به تعريف اصطلاح حرفهاي اختصاص ميدهيم. در حقيقت اصطلاح حرفهاي معاني زيادي را در خود دارد. در برخي موارد اين اصطلاح معناي توصيفي يا تشريحي دارد. مانند <نويسنده حرفهاي> و در برخي موارد معناي تقديرآميز دارد. مانند قطعه كدي حرفهاي.
به صورت كلي به كسي حرفهاي ميگوييم كه بهترين كار را انجام ميدهد، در كار خود مهارت فراوان دارد، مسئوليتپذير است و مسئول است كه بالاترين استاندارد را در كارش ارائه نمايد. براي اينكه يك كارشناس حرفهاي بتواند هميشه اطلاعاتش بروز باشد، بايد همواره در كسب اطلاعات جديد در زمينه كاري خود كوشا باشد و اين كار ميتواند با خواندن مقالات جديد علمي، شركت در كنفرانسها و سمينارهاي مختلف، و شركت در دوره هاي كوتاه مدت تخصصي انجام گيرد. اما تنها استاد كار بودن و تخصص داشتن كافي نيست. يك كارشناس حرفهاي بايد عضو انجمنهاي تخصصي نيز باشد و به اصول اخلاقي در كار خود اهميت بدهد و از اصول حرفهاي تبعيت كند.
مسئوليتهاي اصلي يك كارشناس حرفهاي را ميتوان در حل كردن مسائل كاري با استناد به ديدگاه مشتريان، قبول مسئوليتهاي فردي و گروهي، صداقت در كار، طراحي خوب و قابل فهم بودن طرح توسط ديگران و توليد محصولات قابل تعمير در هر زمان دانست.
مهندس نرمافزار حرفهاي
حال كه تا حدي با مسئوليتهاي كارشناس حرفهاي آشنا شديم، حرفهايگري در مهندسي نرمافزار را مورد بررسي قرار ميدهيم. به نظر شما چه فرقي بين يك كارشناس حرفهاي و غيرحرفهاي وجود دارد؟ آيا اگر يك كارشناس نرمافزار تكه برنامهاي كه فقط خوب كار ميكند را بنويسد، ميتوان به او گفت حرفهاي؟ يا اگر در نوشتن برنامهاي تلاش صادقانهاي به عمل آورد و نرمافزاري با كيفيت بالا توليد كند، ميتوان اين عنوان را به او اطلاق كرد؟ بر اساس گفته بسياري از متخصصان از جمله Bott و Greenspun صحبت در مورد حرفهاي گري در صنعت نرمافزار وقتي شروع گرديد كه سؤالاتي مانند: <چگونه يك مهندس نرمافزار ميتواند تكنيكهاي جديد را به برنامهنويسان ديگر بياموزد>، يا <چگونه مهندسان نرمافزار ميتوانند از كيفيت خوب نرمافزارهاي توليديشان اطمينان حاصل نمايند> براي برنامهنويسان و مهندسان نرمافزار به وجود آمد.
به صورت كلي از مهندسان نرمافزار حرفهاي انتظار ميرود از مسئوليت خودآگاه باشند و به صورت صحيح كار خود را به پايان برسانند. برخي از مهندسان نرمافزار بدون اينكه تحصيلات مرتبط با رشته خود داشته باشند يا عضو انجمن تخصصي نرمافزار خاصي باشند، حرفهاي ناميده ميشوند، ولي آيا به راستي ميتوان آنان را حرفهاي ناميد؟ اكثر كساني كه خود را برنامهنويس حرفهاي مينامند، در ارائه نرمافزارهايي با كيفيت ناتوانند، اخلاق حرفهاي ندارند و محصولاتشان پاسخگوي نيازهاي مشتريان و كاربرانشان نيست.
همانطور كه ميدانيد مهندسي نرمافزار، صنعتي تقريباً جديد است كه عمري حدود چهل سال دارد. برخي مهندسان نرمافزار فقط برنامهنويسان خوبي هستند، ولي تحصيلات عالي در زمينه نرمافزار ندارند و حتي تا به حال در هيچ دوره كوتاه مدت آموزشي شركت نكردهاند. در نتيجه نميتوان اين برنامهنويسان را مهندسان نرمافزار حرفهاي ناميد. متأسفانه امروزه در اكثر ادارات و شركتها ميشنويم كه همه به هم ميگويند مهندس! ولي به راستي معناي كلمه مهندس چيست؟ مهندس را ميتوان فردي دانست كه از علم و تخصص بالايي برخوردار باشد و از اين علمِ بروز نيز در ساختن چيزي براي جامعه و عموم استفاده كند و اين محصول براي جامعه نفعي در پي داشته باشد. برخي از مشخصات مهندسان نرمافزار كه آنها را از غيرحرفهايها متمايز ميكند، عبارتند از:
● ايجاد سيستمهاي بهتر براي كاربران
● سعي در ايجاد محصول نرمافزاري با كيفيت بسيار بالا
● سعي در حل مشكلات كاربران و ايجاد نرمافزارهايي كه در حد امكان تمامي مشكلات كاربران را حل كند.
● سعي در يادگيري هر چه بيشتر و مشاركت در يادگيري بيشتر از ديگر مهندسان نرمافزار
(استفاده و مشاركت در پروژههاي) open source programming
● سعي در ايجاد و تكميل مستندات جامع براي سيستم
● استفاده از تكنيك هاي روز مانند Code review
● باور به اينكه توليد نرمافزار باكيفيت تنها توليد نرمافزار بدون اشكال نيست. (در مورد اين مسئله در ادامه توضيح داده خواهد شد.)
● عضويت در انجمنهاي تخصصي انفورماتيك و شركت در كنفرانسها و workshopهاي آن و سعي در بروزآوري دانش خود با شركت در كلاسهاي كوتاه مدت و دورههاي تخصصي نرمافزار
مهندس نرمافزار حرفهاي چه مسئوليتهايي دارد؟
اگر خوب به شغل مهندس نرمافزار دقت كنيم، ميبينيم كه مهمترين مسئوليت يك مهندس نرمافزار اين است كه از ارائه نرمافزاري با كيفيت بالا و مطابق درخواست كاربر اطمينان حاصل كند. مسئوليتهاي يك مهندس نرمافزار بيشتر از آن كه انفرادي و خاص باشد، عمومي است؛ مانند اهميت قائل شدن براي ديگران و صادق بودن در كار.
مسئوليتهاي اجتماعي براي كليه افراد جامعه يكسان است، ولي مسئوليتهاي حرفهاي مسئوليتهاي افزون بر مسئوليتهايي اجتماعي هر فرد است كه شخص حرفهاي به دوش دارد.
مثلاً مسئوليتهايي كه يك مهندس نرمافزار حرفهاي در موقع عضويت در انجمن تخصصي و حرفهاي انفورماتيك پذيرفته است و متعهد شده است كه به آن عمل نمايد. يكي از مسئوليتهاي يك مهندس نرمافزار حرفهاي اين است كه مستندات سيستم را به نحوي آماده سازد كه همه بتوانند آن را بخوانند و كدهاي برنامه را به نحوي آماده سازي كند كه اگر خودش هم ديگر نتوانست آن كدها را تعمير و اصلاح كند، شخص ديگري بتواند با استفاده از راهنماي كدي كه او در كدهاي برنامه گذاشته است، اين كار را انجام دهد.
اضافه بر اين، يك مهندس نرمافزار حرفهاي بايد كيفيت را در تمامي مراحل ساخت نرمافزار اعمال كند و اطمينان حاصل كند كه نرمافزاري كه به كاربر و صاحبان سيستم ارائه ميشود نرمافزاري است با ويژگيهايي مانند: قابليت استفاده آسان از سيستم، قابيلت مرور آسان سيستم، قابليت تعمير پذيري و به صورت كلي نرمافزاري با كيفيت بالا يا Quality Software. بخش بعدي اين مقاله اين موضوع را به صورت خاص بررسي خواهد كرد.
كيفيت در نرمافزار
در اين بخش معناي كيفيت نرمافزار و ريسكهاي كيفيت پايين در نرمافزارمورد بررسي قرار ميگيرد. در حقيقت هدف تمامي سازندگان نرمافزار و به قولي Software Developerها، ساختن سيستمهاي نرمافزاري با كيفيت بالا است كه نيازهاي كاربران خود را به صورت كامل برآورده سازد. كيفيت نرمافزار يا Software Quality را در واقع ميتوان به نوعي (نه به صورت كلي) با رضايت مشتري از نرمافزار مرتبط دانست.
اما به صورت كلي از كيفيت به عنوان درجهاي از عالي بودن استنباط ميشود و يا چنان كه در فرهنگهاي فارسي (مثلاً فرهنگ عميد) به دنبال معني آن بگرديم به معنايي مانند: چگونگي، چوني و صفت و حالت چيزي مواجه ميگرديم. كيفيت در حقيقت رابطهاي است بين استانداردي كه ما ميخواهيم به آن دست بيابيم و چيزي كه از آن به دست ميآوريم. البته اين تعاريف بيشتر در كارخانجات توليدي كاربرد دارد، ولي براي نرمافزار نيز ميتوان از آنها استفاده كرد.
شايد اين سؤال را از خود بپرسيد كه چرا اصلاً به كيفيت در نرمافزار اهميت دهيم؟ در جواب اين سؤال شما ميتوان گفت كه دو عامل داخلي (Internal) و خارجي (External) باعث ميشوند كه كيفيت در نرمافزار براي ما مهم باشد. از عوامل خارجي ميتوان به اين مورد اشاره كرد كه كيفيت كم در نرمافزار ميتواند به اعتبار و آبروي صاحبان نرمافزار لطمه بزند. مثلاً تجسم كنيد كه به علت كيفيت كم نرمافزار حسابداري بانكي اشكالي در حساب چند مشتري بانك به وجود آيد و در صورتحسابهاي مشتريان اشكالاتي به وجود آيد. اين اشكالات هر چند كوچك كه از كيفيت كم نرمافزار نشأت ميگيرد ميتواند آبروي آن بانك را به كلي خطشهدار كند و از اعتبار آن در ميان مشتريان بكاهد.
از عوامل داخلي كه از كيفيت كم نرمافزار نشأت ميگيرد، ميتوان به دربرداشتن هزينه بالا در ساختن نرمافزار نام برد. مثلاً تجسم كنيد كه نرمافزاري توليد شده است كه كيفيت در قسمتهاي ابتدايي توليد مانند طراحي سيستم رعايت نشده است و پس از اتمام اين پروژه، نرمافزار با اشكالاتي مواجه شده است. طبق تحقيقات انجام شده، هزينه اصلاح اينگونه سيستمها دو برابر نرمافزارهايي است كه از مستنداتي با كيفيت بالا استفاده كردهاند.
به صورت كلي ميتوان گفت كه نرمافزاري از كيفيت خوب برخوردار است كه نيازهاي مشتريان را به صورت كلي برآورده سازد، در ساختن آن از تكنيكهاي استاندارد استفاده شده باشد، مشخصاتي مانند قابليت تعميرپذيري، استفاده مجدد از كدهاي آن و مستنداتي بينقص و قابليت امتحانپذيري داشته باشد.
وقتي به معناي كيفيت نرم افزار دقت ميكنيم از خود ميپرسيم كيفيت در چه قسمتي از نرمافزار. در قسمت محصول (نرمافزار) يا رويه توليد محصول نرمافزاري؟ معمولاً محصول نرمافزاري كه توليد ميشود خروجي اصلي پروژه توليد نرمافزار است و اغلب تصور ميشود كه اگر محصول توليدي كيفيتي مقبول داشته باشد، نرمافزار مورد نظر بدون عيب است و مي توان آن نرمافزار را باكيفيت ناميد. ولي براي اينكه اين نرمافزار كيفيت لازم را داشته باشد، لازم است كه مراحل توليدي آن نرمافزار نيز از كيفيت مقبولي برخوردار باشند.
يكي از مهمترين مراحلي كه بايد به آن توجه خاص داشت، مرحله جمعآوري نيازهاي كاربران است. معمولاً اين نيازها كه به آن User Requirement نيز ميگويند، توسط مهندسان نرمافزار به صورت كامل درك نميشود و باعث ايجاد مشكلات در مراحل توليدي نرمافزار ميگردد. يكي از راههايي كه باعث ميشود اين مشكل حل شود، ايجاد هماهنگي بيشتر بين درخواستكنندگان نرمافزار و توليدكنندگان آن و ايجاد تيم مشترك براي توجيه سيستم و نيازهاي كاربران توسط كاربران به طراحان سيستم است. اين كار باعث خواهد شد كه نرمافزارِ توليدشده، اكثر خواستههاي صاحبان سيستم را برآورده سازد و محصول نهايي بتواند تمامي نيازهاي كاربران را تأمين نمايد و در نهايت رضايت مشتري و در نتيجه افزايش كيفيت نرمافزار را در بر داشته باشد.
از عوامل مهم ديگر در افزايش كيفيت نرمافزار در پروژههاي نرمافزاري، دعوت از كارشناسان و مهندسان نرمافزارياي است كه از تخصص كافي برخوردارند و تخصص مورد نياز را دارند. از طرف ديگر، ميتوان عواملي مانند انتخاب روش توليد نرمافزار را در كيفيت آن مؤثر دانست به علاوه بديهي است انتخاب تيم نامناسب و فناوري راهبردي اشتباه در توليد پروژه، ميتواند باعث شكست پروژه گردد.
به صورت كلي عوامل و فاكتورهايي كه يك نرمافزار بايد داشته باشد تا بتوان به آن نرمافزار با كيفيت ناميد، عبارتند از:
● Testability: آسان بودن تست نرمافزار
● Portability: به آساني بتوان آن را در محيطهاي ديگر اجرا نمود
●Reusability: به آساني بتوان قسمتهايي از آن را در برنامه ديگر نيز به كار برد و از آن بتوان استفاده مجدد كرد.
● Usability: بتوان با آن به راحتي كار كرد و كاربران بتوانند راحت آن را ياد گيرند و از آن استفاده نمايند.
● Security: امنيت داشته باشد
●Maintainability: به آساني بتوان آن را اصلاح نمود.
عوامل و روشهايي كه ميتوان با آن كيفيت نرمافزار را بالا برد، عبارتند از:
●استفاده از ابزارهاي كمكي مهندسان نرمافزار Computer Aided Software Engineering) CASE) براي شناسايي و حذف باگ ها و اشكالات نرم افزاري (براي اطلاعات بيشتر به مقاله <چرا برنامهنويسان از ابزارهاي CASE استفاده نميكنند> در شماره 58 ماهنامه يا سايت شبكه مراجعه نماييد.)
● كنترل و تكميل مستندات در كليه مراحل پروژه يا Software Life Cycle
● رعايت استانداردها در مستندسازي كدهاي برنامه
●رعايت استاندارها در طراحي و پيادهسازي سيستم
● مرور نيازهاي كاربران در تمامي مراحل طراحي و اجرايي پروژه
● تست كردن كامل نرمافزار با استفاده از اطلاعات پايه
براي افزايش كيفيت نرمافزار بايد استانداردهايي را نيز رعايت نمود. يكي از اين استانداردها ISO 0009 series of quality standards است. اين استاندارد به ما كمك ميكند با افزودن كيفيت به مراحل توليد نرمافزار و رعايت اصول حرفهاي از قدمهاي ابتدايي توليد نرمافزار محصولي با كيفيت مطلوب توليد كنيم.
براي توليد نرمافزارهايي با كيفيت بالا مهندسان نرمافزاري كه عضو پروژه هستند، بايد از اصولي تخصصي يا به اصطلاح guidelinesها پيروي نمايند. مثلاً در كشور انگلستان انجمن مهندسان الكترونيك IEE استانداردهايي براي توليد مستندات پروژههاي نرمافزاري تعيين نموده است كه با استفاده از آن ميتوان نيازهاي كاربران را به درستي جمعآوري نمود.
يكي از عوامل بسيار مهم ديگر كه ميتواند كيفيت نرمافزار را بالا ببرد، استفاده و پيروي از اصول تخصصي و حرفهاي انجمنهاي تخصصي نرمافزاري است كه ميتوان با استفاده از راهنماييهاي آن و اجراي اين اصول حرفهاي كيفيت نرمافزار را بالا برد. بخش بعدي اين مقاله در مورد اين انجمنهاي تخصصي بحث خواهد كرد.
انجمنهاي تخصصي كامپيوتر
در رشته فناوري اطلاعات و كامپيوتر انجمنهاي بينالمللي حرفهاي و تخصصي متعددي در كشورهاي جهان وجود دارد. از مهمترين انجمنهايي كه در اين زمينه فعاليت دارد Association of Computing) ACM) و IEEE و
British Computer Society) BCS) ميتوان ياد كرد. البته ساختار اصلي تمامي اين انجمنها تقريباً مانند هم است، ولي هر كدام از اين انجمنها قوانين و راهنماي رفتار حرفهاي و اخلاق حرفهاي يا Codes of Professional Conduct and Ethics خود را دارند.
اين راهنماها و قوانين ضمن مشخص كردن حقوق و محدوديتهاي اعضاي اين انجمنها اخلاق حرفهاي و راهنماهاي تخصصي را در اختيار اعضا قرار ميدهد. اين قوانين اصطلاحاً كدهاي راهنما نام دارند. در واقع اعضاي اين انجمنها با استفاده از اين كدها ميتوانند كارها و اعمال خود را ارزيابي كنند و ببيند كه آيا رفتاري حرفهاي دارند يا نه! در ادامه قسمتهايي از اين راهنماها را از انجمن بينالمللي BCS مورد بررسي قرار ميدهيم.
BCS؛ انجمن عالي كامپيوتر بريتانيا
همانطور كه در سايت اين انجمن (bcs.org) اشاره شده است، پيوستن به اين انجمن به معناي ورود به دنياي حرفهاي ها است و كسي كه عضو اين انجمن شود، ميتواند با استفاده از امكاناتي كه اين انجمن در اختيار او قرار ميدهد به يك حرفهاي تبديل شود. هر عضو جديدي كه به اين انجمن وارد ميگردد، موظف است قوانين و استانداردهاي اين مؤسسه را در جهت بهبود كيفيت كاري و رسيدن به مقام يك حرفهاي بپذيرد. براي مثال، قسمتي از اين كدها به اين نكته اشاره ميكند كه اعضاي BCS بايد اصول سلامتي عمومي، امنيت در محيط كار را رعايت نمايند.
در قسمت ديگري از اين كدهاي راهنما از اعضا خواسته ميشود استانداردهاي فني مربوط به رشته خود را رعايت كنند و بايد تمام سعي خود را بدون هيچگونه تبعيض در ارائه فعاليتهاي تخصصي به مشتريان خود به عمل آورند. بر اساس اين كدها همچنين به اعضا توصيه ميشود كه اطلاعات خود را با شركت در دورههاي كوتاهمدت بروزآوري سازند و از مسائل روز در ارتباط با رشته خود مطلع باشند.
يكي از مهمترين بندهاي اين راهنما به اين مسئله اشاره ميكند كه اعضا نبايد در مورد مسائل فني كه از آن مطلع نيستند، اظهارنظر كنند و نبايد كاري را قبول كنند كه ميدانند در آن كار تخصص كافي ندارند. اعضاي BCS بايد مسئوليت كارها و پروژه هايي را كه قبول ميكنند بپذيرند و بايد آن را با كيفيت بالا به مشتري خود ارائه دهند. از بندهاي مهم اين كدهاي راهنما ميتوان به موارد زير اشاره نمود:
●اعضا بايد با حضور در كلاسهاي كوتاهمدت و دورههاي آموزشي و شركت در كنفرانسهاي تخصصي، سعي كنند مهارتهاي IT خود را بالا ببرند.
●اعضا بايد با مطالعه مقالات جديد تخصصي در رابطه با رشته خود اطلاعات خود را در زمينه فناوري اطلاعات هميشه بروز كنند و از استاندارها و روشهاي جديدي كه ياد ميگيرند استفاده نمايند.
●اعضا بايد اصول حرفهاي را در كار خود به صورت كامل و پيوسته ادامه دهند.
● اعضا بايد از كيفيت بالاي محصولي كه توليد ميكنند اطمينان كامل را حاصل نمايند و هميشه سعي داشته باشند كيفيت كارهاي خود را بالا و بالاتر ببرند و از سيستم مديريت كيفيت Quality Management System) QMS)در كارهاي خود استفاده كنند.
● اعضا بايد مشتريان خود را از هر مشكل و مسئلهاي كه باعث پايين آمدن كيفيت كار ميشود، مطلع سازند.
همانطور كه مشاهده ميكنيد اين كدهاي راهنما به صورت واضح اعضا را وادار به بالابردن كيفيت كار و پيشبرد اعضا تا رسيدن به حرفهاي بودن پيش ميبرد و عضويت در اين انجمنها و رعايت اصول آنها ميتواند ما را به يك حرفهاي تبديل كند. از جمله امتيازاتي كه با عضويت در اين مجامع ميتوانيم به دست آوريم، ميتوانيم از ناخواسته موارد زير نام ببريم:
● به دست آوردن مهارت شغلي بيشتر، تجربه بيشتر و در نتيجه به دست آوردن شغل مناسبتر
● آموزش مداوم، استفاده از كلاسهاي اغلب رايگان تخصصي و استفاده از منابع اينترنتي و كتابخانه مجازي اين مؤسسات.
●استفاده از منابع گسترده اطلاعات در زمينه فناوري اطلاعات
● امكان استفاده از كنفرانسها و يادگيري روشها و استفاده از ابزارهاي جديد.
● امكان ديدن و بحث با اعضاي همكار ديگر و استفاده از تجارب ايشان
● استفاده از كدهاي راهنما و استفاده از استاندارهاي جديد كيفيت
![]()
كدهاي راهنما براي مهندسان نرمافزار
با توجه به مطالبي كه تا اينجا عنوان شد، ميتوانيم نتيجه بگيريم كه عواملي كه باعث ميشوند يك مهندس نرمافزار را حرفهاي بناميم شامل: داشتن اطلاعات بروز و كامل از مسائل فني، عضويت در انجمنهاي تخصصي علمي، گذراندن دورههاي كوتاهمدت تخصصي، آگاه بودن از مطالب علمي جديد در مورد نرمافزارها و مسئول بودن در مقابل كاري است كه قبول ميكند.
مهندس نرمافزار حرفهاي بايد در تمامي مراحل ساخت نرمافزار از جمله تحليل مقدماتي، آناليز، طراحي و ارزيابي فعاليت داشته باشد و از اين مراحل و چگونگي فعاليتهاي اين مراحل آگاه باشد. وقتي يك مهندس نرمافزار عضو انجمني مانند BCS ميشود و متعهد ميگردد شروط و قوانين آن را رعايت كند، مجبور ميشود اصول حرفهاي را نيز رعايت كند و تلاش كند نرمافزاري كارا و با كيفيت بالا ارائه دهد.
يكي از كدهاي راهنماي بسيار عالي براي مهندسان نرمافزار كدهايي است كه IEEE و ACMدر سايت computer.org ارائه كردهاند. با رعايت اين كدهاي راهنما، مهندسان نرمافزار سعي ميكنند كيفيت كارهاي خود را بالا ببرند، اصول حرفهاي را فرا گيرند و در مراحل ساخت پروژههاي نرمافزاري به كار گيرند.
البته نبايد اين نكته را فراموش كنيم كه عضويت در مؤسسات و انجمنهاي تخصصي حرفهاي نيز به مهندسان نرمافزار كمك خواهد كرد كيفيت نرمافزاهاي توليدي خود را بالا ببرند در نتيجه رضايت مشتريان را فراهم سازند و به قول معروف بتوان به آنان مهندس نرمافزار حرفهاي گفت.
تفاوت مهندس نرمافزار حرفهاي و غيرحرفهاي
اين سؤالي است كه شايد از خواندن خط اول اين مقاله در فكر شما بوده است. حتماً با خواندن اين مقاله تا اينجا به جواب اين سؤال رسيدهايد. يك مهندس نرمافزار حرفهاي شخصي است كه مشكلات فني مهندسي نرمافزار را بتواند به صورت مؤثر حل نمايد. فرق زيادي بين مهندسان نرمافزار حرفهاي و برنامهنويسان حرفهاي وجود دارد. اكثر مهندسان نرمافزار حرفهاي كدنويسان و برنامهنويسان ماهري هستند، ولي همه برنامهنويسان مهندسان نرمافزار حرفهاي نيستند.
يك مهندس نرمافزار حرفهاي عضو حداقل يك مؤسسه تخصصي حرفهاي است و عضويت در اين انجمن مستلزم قبول كردن قوانين و پايبندي به اصول آن است و باعث خواهد شد كه رفتار او حرفهاي شود و با توجه به آموزشهايي كه ميبيند روشهايي جديدي در ساخت نرمافزار فرا گيرد و بروز بودن و آگاهي از استانداردها و ملزم بودن او به رعايت اين اصول باعث خواهد شد كه نرمافزارهايي با كيفيت بالاتري توليد كنند. يك مهندس نرمافزار حرفهاي مسئوليت كامل پروژههاي نرمافزاري را قبول ميكند و سعي ميكند كار را با حداكثر تلاش و با كيفيت بالا ارائه دهد و كاربران سيستم را راضي نگه دارد.
از طرف ديگر، يك مهندس نرمافزار غيرحرفهاي از ساختن مستندات به صورتي كه بتوان از آن استفاده بهينه نمود ممانعت ميكند و از ارائه كدهاي تميز و نوشتن راهنماي كد خودداري ميكند.
يكي از مشخصات مهندسان نرمافزار غيرحرفهاي اين است كه اغلب در پروژههايي كه انجام ميدهند از تكنيكهاي جديد استفاده نميكنند و سعي ميكنند كاري را كه در پروژههاي قبلي انجام دادهاند، مرتباً تكرار كنند و هيچ نوآوري در كار آنها نميتوان پيدا كرد. از طرف ديگر مهندسان نرمافزار حرفهاي از تخصص بالاتري برخوردارند و با توجه به آموزشهايي كه ميبينند، كنفرانسها و Workshopهايي كه در آن حضور مييابند، ميتوانند نرمافزارهاي بهتري و با نوآوري و استفاده از تكنيك روز توليد كنند. مثلاً مهندسان نرمافزار حرفهاي اغلب از CASE كه ابزار كمي مهندسان نرمافزار است استفاده ميكنند. استفاده از اين ابزار به آنها كمك مي كند كه كيفيت كار خود را در تمامي مراحل توليد نرمافزار بالا ببرند.
نتيجهگيري
همانطور كه در اين مقاله بحث شد هدف اصلي توليدكنندگان نرمافزار توليد نرمافزارهايي است با كيفيت بالا، بدون اشكال و نرمافزارهايي كه نيازهاي كاربران خود را به صورت كامل برآورده سازند. امروزه صنايع به نرمافزارهايي با كيفيت بالا نياز دارند كه بتواند انتظارات آنها از آن نرمافزار را برآورده سازد و در مدت زمان معين انجام گيرد و پروژه با موفقيت پايان پذيرد.
همانطور كه توضيح داده شد، كيفيت را ميتوان از دو بُعد كيفيت در رويه توليد و كيفيت در محصول نرمافزاري مورد بررسي قرار داد و وقتي ميتوانيم بگوييم نرمافزاري كيفيت بالايي دارد كه هر آنچه مقرر شده است در آن نرمافزار انجام شود به انجام برسد. روشهاي گوناگوني وجود دارد كه مهندسان نرمافزار ميتوانند به كار گيرند تا كيفيت محصول توليدي خود، يعني همان نرمافزار، را بالا ببرند، ولي معمولاً تنها مهندسان نرمافزار حرفهاي ميتوانند از اين تكنيكها به صورت درست استفاده نمايند و اغلب مهندسان نرمافزاري كه فكر ميكنند حرفهاي هستند و در حقيقت نيستند، درك درستي از كيفيت نرمافزار و راههايي رسيدن به استانداردها ندارند و تنها به نوشتن كد اكتفا ميكنند.
عضويت يك مهندس نرمافزار در انجمنهاي انفورماتيكي و تخصصي براي او اعتبار خاصي خواهد داشت. به علاوه، او را ملزم ميكند اصول حرفهاي را رعايت نمايد، نرمافزارهاي با كيفيتتري توليد كند و به قول معروف، مهندس نرمافزار حرفهاي گردد.
شركت در كنفرانسها و محافل علمي و شركت در دورههاي آموزشي مهارتهاي او را بالاتر ميبرد و به او كمك ميكند با استفاده از اصولي كه فرا گرفته است نرمافزارهايي بس كاراتر توليد كند. پس از مدتي تبعيت از اين اصول و پيشرفت مهارتي كه در او به وجود آمده است، رفتار او ناخودآگاه تغيير كند و به يك شخص حرفهاي تبديل شود كه ضمن رعايت مسائل اخلاقيِ حرفه خود، از لحاظ فني در سطح بالايي قرار دارد، اطلاعاتي بروز دارد و ميتواند در حرفه خود ترقي كند.
در شماره 71 ماهنامه شبكه مقاله دوست و همكارم آقاي بهروز نوعيپور با عنوان <دغدغههاي يك برنامهنويس تنها>، اشارهاي كرده بود به برنامهنويسان و مهندسان نرمافزار غيرحرفهاي. حرف اصلي مقاله مذكور اين بود كه چرا برنامهنويسان ما از OOP استفاده نميكنند؟ چرا سورس كدهاي ما برنامهنويسان همه به هم ريخته است؟ چرا تمامي كارهاي يك پروژه بزرگ نرمافزاري و مغز متفكر آن تنها يك نفر است؟
چرا بسياري از شركتهاي نرمافزاري و برنامهنويسان به روشهاي اصولي مهندسي نرمافزار پايبندي كمي دارند؟ و چندين چراي ديگر. همانطور كه ايشان اشاره ميكنند حل اين مشكلات به يك برنامه علمي - فرهنگي درازمدت در سطح ملي نياز دارد. شايد اين مقاله بتواند تا حدي جواب چندين چراي آن مقاله را بدهد. جامعه مهندسي نرمافزار ايران نياز به انجمن فني تخصصي و علمي دارد كه داراي وبسايتي هميشه فعال باشد؛ نه اينكه مانند سايتي از انجمنهاي انفورماتيكي كشورمان هر وقت به آن سر ميزنيم، در دست ساخت باشد!
ما نيازمند انجمني فني مهندسي مانند BCS هستيم كه عضويت مهندسان نرمافزار در آن براي آنان افتخار محسوب شود و كسي كه در اين انجمنها عضويت دارد، بتواند مهارتهاي خاصي به دست آورد كه امتيازي محسوب شود براي او تا بتواند به راحتي شغل مورد نظر خود را انتخاب كند و به دست آورد. اگر شركتهاي نرمافزاري كاركنان خود را به عضويت در اين انجمنهاي فني مجبور كنند و اگر پروژههاي نرمافزاري به اين گروه كارشناسان و مهندسان نرمافزار حرفهاي سپرده شود، ميتوانيم در طي مدتي كوتاه شاهد رشدي بسيار فزاينده در كيفيت نرمافزارهاي توليدي باشيم و مهندسان نرمافزار حرفهاي داشته باشيم كه نه تنها مهارتهاي بالايي دارند، بلكه از اخلاق و منش حرفهاي نيز برخوردارند.
اگر تا امروز فكر ميكرديد، كه مهندس نرمافزار حرفهاي هستيد و اكنون با خواندن اين مقاله متوجه شديد كه اشتباه ميكرديد، سعي كنيد حتي اگر نميتوانيد در انجمني تخصصي مانند BCS عضو شويد، اطلاعات خود را در زمينه كاري خود به سطح بالاتري ببريد و هميشه از مقالات علمي مجلات تخصصي، مقالات سايت هاي علمي و انجمن هاي كامپيوتري بينالمللي استفاده كنيد. سعي كنيد اطلاعاتتان هميشه بروز باشد. اگر در روزنامهاي ميبينيد كه كنفرانسي در زمينه يك فناوري جديد در حال برگزاري است، سعي كنيد در آن كنفرانس شركت نماييد و از مباحث آن استفاده كنيد. حتي ميتوانيد مجموعه مقالات منتشر شده درخصوص آن كنفرانس را خريداري و مطالعه نماييد. در آخر ميتوانيد كدهاي راهنمايي را كه در اين مقاله از آن به دفعات ياد شد را از اينترنت دانلود كنيد و مطالعه نماييد.
اگر ميخواهيد مهندس نرمافزار حرفهاي باشيد سعي كنيد از پروژههاي نرمافزاري گروهي نگريزيد، از ابزارها و زبانهاي جديد برنامهنويسي استفاده كنيد و در آخر سعي كنيد نرمافزارهاي با كيفتي توليد كنيد؛ با به ياد داشتن اين نكته مهم كه بايد كيفيت را از مراحل ابتدايي كار خود در رويه توليدي نرمافزار به كار گيريد. اميد است انجمن تخصصي فني مهندسان نرمافزار به وجود آيد كه بتواند مهندسان نرمافزار حرفهاي را به جامعه تحويل دهد. به اميد آن روز.
منابعBCS official web site 2004 British computer society code of conduct and good practice" British computer society, URL:http://bcs.orgBegier,B (2002) Evaluating software quality to regard public interest
.ETHICOMP 2002,Journal, proceeding 13 - 15 November, Lisbon, Portugal
Bott, F, and Coleman A (2001) Professional issues in software engineering
London: Taylor&Francis
Daughtrey T(2002) Software Quality Professional", American Society for
.pp4-5
.Fagan, M. (2001) Hitting the bull's eye Improving your quality
schedule, cost, and performance. Proceedings, 11 th International
Software Quality Conference. 22-24 October, Pittsburgh, USATse,T (2004) Computing Curriculum - Software Engineering: Its Impact
on Professional Software Engineering Education , 28th International
Computer Software and Applications Conference Proceedings 27-30
September 2004, Hong Kong, China. 176-177
Greenspun, P (2000) Software Engineering Professionalism
/URL: http://www.aduni.org/colloquia/greenspun1Humphey,W (2004) The software quality profile. Software
:Engineering Institute Carnegie Mellon University URL
www.sei.cmu.edu/publications/articles/quality-profileIEEE-CS/ACM (1999) Software engineering code of ethics and professional
.practice Version 5.2 Institute of Electrical and Electronics Engineers
:Inc. and the Association for Computing Machinery, Inc. URL
www.computer.org/tab/seprof/code.htm"Lorge, D (1999)The Professional Responsibilities of Software Engineers
,Software Engineering program Department of computing and software
McMaster University