تبليغاتX
Softwaring

Softwaring

Software Engineering, Process and Management

Separation of Concerns و اثر آن در تست نرم افزار

Separation of Concerns به طور خلاصه به معنی فرآیند جداسازی وجوه و موضوعات مختلف یک سیستم از یکدیگر است. به عبارت ساده تر، تمرکز بر روی فرآیند یا عملکردی از یک سیستم و عدم توجه به کارکرد و جزییات دیگر آن.

به عنوان مثال، شما و همسرتان در خیابان قدم می زنید که یک اتومبیل (برای جذابیت بیشتر موضوع تصور کنید یک BMW آخرین مدل!) از کنار شما به سرعت رد می شود. ممکن است شما به خلاقیت سازندگان در طراحی بدنه اتومبیل مزبور توجه کرده باشید در صورتی که در همان زمان همسر شما در مورد اینکه قیمت چنین اتومبیلی چند می تواند باشد می اندیشد. در واقع شما دو نفر یک اتومبیل را از دو منظر متفاوت نگاه کرده اید (Separation of Concerns).

نمونه ای نرم افزاری از این مفهوم، الگوی طراحی MVC است.

 Separation of Concerns  - به نظر من - یکی از مفاهیم زیر بنایی برای انجام موفق تست های مختلف نرم افزار است. معمولا یک سیستم نرم افزاری در حین تولید و پس از آن تحت تست های مختلفی قرار می گیرد که از آن جمله می توان به تست ماژول های برنامه (Unit Test)، تست فشار (Stress Test) و تست پذیرش (Acceptance Test) و بسیاری دیگر اشاره کرد.

در واقع انواع مختلف تستهای یک سیستم، خود گویای مفهوم (Separation of Concerns) است. اما هدف من از نگارش این مطلب طرفداری از ایده انجام تستهای مختلف به صورت مجزاست. هر چند با توجه به ماهیت برخی از گونه های تست اصولا نمی توان آنها را با هم اجرا کرد (مثل Unit Test و User Acceptance Test) اما برخی دیگر را می توان به صورت همزمان انجام داد (مثل تست عملکرد برنامه و واسط کاربری).

ایده اصلی این است:

تا حد امکان از انجام تست های مختلف یک برنامه به صورت همزمان پرهیز کنید.

هر چند که گاهی انجام همزمان تست ها در کاهش زمان تست یک سیستم تاثیر دارد اما تاثیر منفی آن در کیفیت تست های انجام شده قابل چشم پوشی نیست.

+ نوشته شده در  پنجشنبه 30 مهر1388ساعت 16:22  توسط علی نوبر  | 

تفاوت ها و شباهت های محیط کاری - تهران تا سیدنی (پاسخ به دوستان)

طی چند هفته گذشته چند نفر از خوانندگان سوالاتی به صورت عمومی و شخصی در وبلاگ پرسیده اند که به بیشتر آنها در نظرات وبلاگ یا به صورت خصوصی پاسخ داده ام.

فکر کردم شاید پاسخ های داده شده برای دیگر خوانندگان نیز جالب باشد، در نتیجه چکیده ای از آنها را در این نوشته منعکس می کنم.

لطفا توجه داشته باشید که کلیه مطالب نوشته شده حاصل تجربه نسبتا کوتاه کاری در اینجا و گاهی صحبت با دوستان و همکاران ایرانی و غیر ایرانی است. موارد بیان شده صرفا نظرات شخصی من بوده و توصیه می کنم برای کسب اطلاعات دقیق تر نظرات دیگران را هم شنیده و مقایسه کنید.

مقایسه بازار کار Net. و Java در استرالیا و ایران:
حتم دارم در ایران آمار دقیقی در این رابطه وجود ندارد و در اینجا هم پس از جستجو در وب آمار رسمی پیدا نکردم. اما به صورت شهودی و با مقایسه تعداد آگهی های استخدام در یک بازه مشخص زمانی، به نظر می رسد که بازار Net. در ایران گرم تر است اما در استرالیا تفاوت چندانی نداشته و هر دو از بازار مناسبی برخوردار است (اگر دوستان منبع قابل اعتمادی سراغ دارند لطفا راهنمایی کنند).
 
تقسیم وظایف و سطح انتظار کارفرما از اعضای تیم:
 در مورد سطح انتظار کارفرما، من تفاوت فاحشی با ایران احساس نمی کنم. در اینجا هم کمتر دیده ام که یک شخص صرفا به یک امر خاص بپردازد. کار من ترکیبی است از تحلیل، طراحی، برنامه نویسی، تست (البته فقط Unit Test)، مستند سازی و شرکت در جلسات. البته برای نقش های تحلیلگر، معمار، مدیر تست و ... اشخاصی در تیم وجود دارند اما درصدی از وقت هر یک از این افراد نیز به امور مرتبط دیگر اختصاص پیدا می کند (به نظر می رسد این امر در تیم های نرم افزاری اجتناب ناپذیر است).
نظر دو دوست دیگرم را اینجا و اینجا بخوانید.
 
روال کاری و متدولوژی مورد استفاده:
در این مورد نیز تفاوت زیادی احساس نمی کنم. در اینجا نیز بسیاری از امور شفاهی است و تنها موارد لازم مستند سازی می شود. مستندات زیر را بیشتر دیده ام: تعریف کار (Statement of Work) مشخصات نرم افزار (SRS)، مستند معماری، نصب و راه اندازی (Deployment) و راهنمای کاربر (User's Manual). البته هر شرکت و تیم نرم افزاری دیسیپلین های مخصوص خود را دارد و نمی توان قضاوت کلی داشت.
در تیم ما تا حد امکان سعی می شود پروژه به زیر پروژه های کوچک و قابل برنامه ریزی و کنترل شکسته شود که گاهی این زیر پروژه ها در حد ۳ تا ۴ روز و قابل اجرا توسط یک نفر کوچک می شود.
البته همانگونه که گفته شد اینجا هم انسانها جایز الخطا (!) هستند و اشتباهاتی هم انجام می شود که نمونه ای واقعی که منجر به ضرری نه چندان کم شده است در نوشته های پیشین آمده است.

 
اخذ مدارک تخصصی نرم افزار (سوال در مورد مدارک Microsoft بود):
در دست داشتن مدرک تخصصی به طور حتم در میان دیگر متقاضیان استخدام یک مزیت رقابتی محسوب می شود. البته دوستانی را می شناسم که بدون این مدارک نیز کار مناسبی پیدا کرده اند اما دوستی دیگر پس از چند ماه اقدام برای پیدا کردن کار برنامه نویسی و عدم موفقیت، با دریافت یکی از مدارک مایکروسافت (اگر اشتباه نکنم MCPD) در مدت کوتاهی موفق به استخدام شد.

 
نسخه های جدید نرم افزارها:
در این مورد هم اطلاعات دقیقی پیدا نکردم اما با اطمینان می گویم در ایران بچه های نرم افزارچی (!) خیلی سریعتر آخرین نسخه های نرم افزارها را نصب و ته و توی آنرا در می آورند!
 
 
برای اطلاع از نظر دیگر دوستان مطالعه وبلاگ های زیر را توصیه می کنم:
 
+ نوشته شده در  چهارشنبه 29 مهر1388ساعت 16:7  توسط علی نوبر  | 

تفاوت ها و شباهت های محیط کاری - تهران تا سیدنی (3)

۱. در سیدنی یکی از مهمترین مسایلی که در صنعت نرم افزار به آن پرداخته می شود ارایه سرویس های نرم افزاری و یکپارچه سازی (Integration) است. به نظر می رسد در استرالیا به دلیل بالغ تر بودن فناوری اطلاعات نسبت به کشورهای در حال توسعه، نیاز به ایجاد ارتباط میان نرم افزارهای (بعضا ناهمگون) مختلف در یک سازمان محسوس تر است. طول عمر نرم افزارها به مراتب بیش از طول عمر نرم افزارهای مشابه در ایران است و هزینه جایگزینی آن نیز (به دلایل مختلف و بیشتر از همه نیروی انسانی) بسیار بالاست. در نتیجه راه حل یکپارچه سازی نرم افزارها به عنوان یکی از اصلی ترین گزینه های موجود مورد توجه قرار می گیرد.

به عنوان یک نمونه واقعی: شرکت ما به عنوان پیمانکار، مسئول ایجاد لایه ای تحت عنوان گذرگاه سرویس های سازمانی (Enterprise Service Bus) برای یک شرکت حمل و نقل دریایی به عنوان مشتری است. وظیفه این گذرگاه ایجاد بستری است سرویس گرا که تقریبا کلیه نرم افزارهای سازمان (که چه از بعد تکنولوژی و چه از بعد فرآیندهای تجاری ناهمگون هستند) را به نوعی به هم متصل و قابلیت تعامل و حتی ایجاد چرخه کاری (Work Flow) را میان آنها فراهم سازد. جالب است بدانید که بودجه اجرای چنین پروژه ای بالغ بر چند میلیون دلار است و بیش از یک سال زمان لازم است که گذار به این معماری در چند فاز پیاپی به طول کامل انجام شود.

۲. بسیاری از نرم افزارها - بر خلاف تصور پیشین خودم - گاهی بسیار ساده و پیش پا افتاده اجرا می شوند. واسط کاربری (GUI) بسیار ساده، معتبر سازی (Validation) نه چندان پیچیده و قابلیت های محدود.

به عنوان مثال، نرم افزار تحت وب یکی از بانکهای معتبر استرالیا (ANZ) ظاهری بسیار ساده داشته و یا بسیاری از فرم های اینترنتی که تاکنون پر کرده ام در بسیاری از موارد از یک Text Box ساده و فاقد Validation های پیچیده بهره می برد.

به عنوان مثالی دیگر، یکی از نرم افزارهایی که در حال حاضر مشغول توسعه آن هستیم یک Desktop Application داخل سازمانی برای ثبت اطلاعات کشتی های باری و تخلیه و بارگیری آنهاست. گاهی تعجب می کنم که انتظار مشتری از خصوصیات ظاهری تا چه اندازه پایین است و حتی در مورد عملکرد نرم افزار (Functionality) تنها به نیازمندیهای اساسی و لازم نرم افزار اکتفا شده و از درخواست موارد جانبی پرهیز می شود. همان مفهوم "به قدر کفایت (Good Enough)"!

+ نوشته شده در  سه شنبه 28 مهر1388ساعت 13:24  توسط علی نوبر  | 

دمی درنگ

تعبیر دیگری از مطلب پیشین:

اگر مدیر شما برای چند روز به مرخصی رفت و آب از آب تکان نخورد، تصور نکنید که بود و نبود مدیرتان تفاوتی ندارد! بر عکس اگر احساس می کنید که برای هر کار و اتخاذ هر تصمیمی نیاز به مدیرتان دارید، آن وقت به احتمال زیاد مدیر خوبی ندارید!

(این جملات از خودم بود!)

+ نوشته شده در  چهارشنبه 22 مهر1388ساعت 23:38  توسط علی نوبر  | 

دمی درنگ

هنگامی که در افرانت مشغول به کار بودم، در جلسه ای دکتر قاسم زاده می گفت: اگر وارد سازمانی شدید و دیدید که همه کارکنان آن به وظایف خود آگاه بوده و آنرا به درستی انجام می دهند، همه چیز مرتب و سرجای خود است اما خبری از مدیر نیست، مدیریت آن سازمان در بالاترین سطح خود است!

و چه درست است این سخن.

+ نوشته شده در  دوشنبه 20 مهر1388ساعت 23:31  توسط علی نوبر  | 

تفاوت ها و شباهت های محیط کاری - تهران تا سیدنی (2)

با توجه به اینکه پروژه های نرم افزاری به شدت مبتنی بر نیروی انسانی درگیر در مراحل مختلف انجام پروژه است (مغز افزار)، دستمزد نیروی انسانی تبدیل به مهمترین عامل محاسبه هزینه انجام پروژه می گردد.

البته در کشورهایی که حق Copy Right را رعایت می کنند هزینه به کارگیری نرم افزارهای تولید نیز نقش دارد اما مگر در موارد خاص، اینگونه هزینه ها هنوز بسیار کمتر از هزینه دستمزد نیروی انسانی است. به ویژه هنگامی که تیم تولید نرم افزار از نرم افزارهای کد باز (Open Source) استفاده نماید.

با توجه به تفاوت بسیار زیاد دستمزد نیروهای درگیر در پروژه های نرم افزاری در ایران و استرالیا، این عامل در استرالیا نقش بسیار پررنگ تری بازی می کند. به اعداد زیر توجه کنید:

دستمزد یک برنامه نویس ماهر با ۵ سال سابقه در تهران: بین ۱ تا ۵/۱ میلیون تومان در ماه

دستمزد یک برنامه نویس ماهر با ۵ سال سابقه در سیدنی: بین ۶ تا ۸ هزار دلار استرالیا در ماه

(توجه: اعداد بیان شده صرفا تخمینی شخصی بوده و تنها برای مقایسه بیان شده است)

با مقایسه دستمزد یکی از عوامل مهم و غیر قابل اجتناب تولید پروژه (برنامه نویس) بین ایران و استرالیا می توان استنباط کرد که به همان میزان ریسک ضرر یا حتی شکست یک پروژه در جایی که دستمزدها بالاتر است افزایش می یابد.

به عنوان مثالی واقعی، در پروژه ای که در ماههای اولیه اشتغال به کار در سیدنی در آن درگیر بودم، کوچکترین تغییرات درخواستی مشتری (شاید کمی عجیب و اغراق آمیز به نظر بیاد اما در حد تبدیل یک Combo Box به List Box) باید در قالب یک درخواست تغییر (Change Request) به کمیته تعیین شده از طرف پیمانکار ارایه شده و در مورد آن تصمیم لازم اتخاذ می شد.

یا به عنوان مثالی دیگر در یکی از پروژه های نه چندان بزرگ (به مدت تعیین شده حدود دو ماه و مبلغ تقریبی ۷۰ هزار دلار) تنها به دلیل اینکه Scope پروژه به درستی مرزبندی نشده بود شرکت پیمانکار (شرکت ما!) تا کنون بیش از ۵۰ هزار دلار ضرر کرده است و کماکان این عدد به سرعت رشد می کند.

+ نوشته شده در  یکشنبه 19 مهر1388ساعت 7:5  توسط علی نوبر  |