صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

آموزش تحلیل نرم افزار بخش سوم

بخش سوم

برنامه زمانی عملی

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

آنچه مشتری می خواهد زمان 90 روزه
آنچه ما با یک نفر نیرو تخمین زدیم زمان 489 روزه است

خوب راه حل چیست ؟ چه کار باید کرد ؟
برای جواب به این سوال ابتدا شما باید فاصله زمانی تکرارها را مشخص کنید
همانطور که گفتیم ما در تحلیلمون به 2 مورد مهم نیاز داشتیم
1-user story   یا همان کارتهای داستانهای کاربر است که هر کدام یک نیاز توضیح می داد . ما باید از نیازهای کاربران مطلع باشیم . نیازی نیست همه چیز را از اول بدانیم و از جزییات آگاه باشیم بلکه نیازهای کلی در مرحله اول کافیست
2- iteration  تکرارها در واقع چرخه زمانی بود که در پایان هر چرخه یا تکرار جزیی از پروژه تحویل مشتری می شود .
پروژه باید به دوره های زمانی کوتاه مدت تقسیم بندی شود . مثلا 2 هفته ای یا ماهانه و در پایان هر دوره بخشی از نیارهای مشتری را تحویل می دهیم. و از مشتری نظر خواهی می کنیم و اگر نیازی بود نظر مشتری ،سریعا اعمال می شود و وارد دوره بعدی(iteration) می شویم 
وقتی یک تکرار iteration   جدید آغاز می شود . مشتری دیگر حق عوض کردن نیازهای قبلی خود را ندارد زیرا بر سر آن توافق شده است .

خوب با این مقدمه حالا شما در مقابلتان مجموعه ای از کارتهای نیازمندیها را می بینید که حاصل جلسات مشترک با مشتر ی است . از طرفی دیگر شما محدودیت زمانی دارید.
شما باید از بین کارتها ، کارتهایی (نیازهایی ) را اولویت بندی کنید که در همان محدوده مشخص شده توسط مشتری انجام شوند. شما بعد از بررسیهای طولانی و سخت ، بالاخره باید کارتهای نیازمندیها را اولویت بندی کنید.
برای اینکار با مشتری جلسه  بگزارید و مهمترین نیازها را تشخیص دهید و به آنها امتیاز دهید . شما در این جلسه باید به عنوان یک کارشناس به
مشتری کمک کنید تا بتواند اولویتها و نیازهای اولیه خود را تشخیص و انتخاب کند . فراموش نکنید که انتخاب اولویتها به عهده مشتری باشد.
خوب اکنون که نیازها اولیت بندی شد . شما باید ببینید که قرار است چند دوره تکرار در پروژه داشته باشید ، مثلا اگر قرار است زمان 90 روز باشد شما می توانید برای هر دوره تکرار زمان 30 روزه تعیین کنید
پس حالا در تکرار اول ، نیازهایی که دارای بالاترین اولویتها است را انتخاب کنید و آنها را در دوره اول تکرار انجام دهید و به همان ترتیبب در دوره بعدی تا آخر پروژه.
اما شما حالا اولویتها را مشخص کرده اید ، و تصمیم گرفتید که برخی اولویتها را در فاصله زمانی 30 روزه انجام دهید ، اما وقتی نگاه می کنید متوجه می شوید که زمان مورد نیاز این اولویتها بیش از 30 روز است .
خوب حالا شما باید دوباره اولویتها را مرور کنید و فقط نیازهایی را انتخاب می کنید که در محدوه قابل انجام باشد و همچنین نیازهای مهمتری هستند

خوب تا حالا فرض کردیم که کار بصورت تک نفره است در حالی که طبق محاسبات ما کار بصورت تک نفره بیش از 400 روز زمان می برد ، پس تصمیم می گیریم گروهی 3 نفره تشکیل دهیم آیا زمان پروژه تقسیم بر 3 یعنی همان تعداد نیرو خواهد شد ؟ جواب خیر . چرا؟

برای جواب دادن به این سوال باید به نکات زیر در تشکیل گروه دقت کنید
1-شما وقتی گروهی را تشکیل می دهید باید به پارامتر ، روشهای سرعت دادن و بالا بردن بازدهی افراد گروه دقت کنید ، افراد گروه باید با هم هماهنگ باشند ، اگر گروه شما تاز ه تشکیل شده مسلما بازدهی شما کم است چرا که افراد با هم آشنا نیستند و سابقه همکاری با یکدیگر ندارند .
علاوه بر همه اینها نرخ بازدهی افراد را باید در نظر بگیرید ، یعنی یک فرد در یک روز ، چند در صد از زمان کارش مفید است . طبق محاسبات در خوشبینانه ترین حالت شما فقط تا 70 در صد بازدهی مناسب می توانید داشته باشید . و بقیه وقت زمان تلف شده است .

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

3-تصمیمات فنی و تکنیکی : شما باید یک روال و فرایندی برای تصمیمات فنی داشته باشید . مثلا با هماهنگی گروه تصمیم می گیرید که برای کار از چه ایزارهایی استفاده کنید که همگی به آن آشنا باشند و سرعت عمل شما را بالا می برد . از چه زبان برنامه نویسی استفاده می کنید.
چگونه کارهای برنامه را تقسیم بندی کنید و چگونه دوباره آنها را با هم تلفیق دهید

حالا می گوییم با توجه به نکات بالا اضافه کردن افراد به گروه برنامه نویسی نیاز دارد به هماهنگی برخی نکات بالا دارد که بالطبع بخشی از انرژی و زمان شما را خواهد گرفت ، نکته مهم کار اینجاست که مدیریت منابع انسانی از مدیریت نرم افزار به مراتب سخت تر و پیچیده تر است
همچنین اصطلاحات زمان را به خوبی باید درک کنید
وقتی می گوییم این پروژه 90 روزه است باید مشخص شود که آیا منظور 90 روز تقویمی است یا 90 روز کاری است ؟
یک مثال :
فرض کنید برای یک پروژه 30 روز تقویمی فرصت دارید از طرف یگر ضریب بازدهی افراد گروه شما 70 در صد است  . زمان واقعی


20  ضربدر 70 درصد = 14

عدد 20 نشان دهنده روزهای کاری است چرا که شما در یک فاصله 30 روزه تقویمی نمی توانید 30 روز کار کنید و بصورت تقریبی فقط 20 روز کاری دارید علاوه بر این در این 20 روز افراد شما 24 ساعته کار نمی کنند همچنین با در نظر گرفتن اوقات تلف شده فقط تا 70 در صد در هر روز شاید مفید باشند یعنی هر نفر از پرسنل شما در ماه کاری فقط تا 14 روز مفید می تواند کار کند .

ادامه دارد

چگونه نرم افزاری قابل استفاده و با کیفیت بنویسیم؟

در این مقاله می خواهم 6 نکته مهم برای برنامه نویسان مطرح کنم
برای اینکه برنامه ای بنویسیم که قابل استفاده باشد باید ابتدا اهداف استفاده کاربران را بدانیم ، 6 هدف باید در هر برنامه دنبال کنیم که در این مقاله به آنها می پردازم

1-  ( نرم افزار فعال)

چگونه نرم افزار می تواند فعال باشید
تعریف فعالیت بودن نرم افزار یعنی اینکه نرم افزار بتواند انتظارات کاربر را برآورده کند
به عبارتی دیگر نرم افزار باید آنچیزی که از آن بخواهند و انتظار دارند را بدون کم و زیادی انجام دهد
بایک مثال قضیه را روشن تر می کنم
یک برنامه حسابداری را در نظر بگیرید ، خوب این نرم افزار برای اینکه فعال و کارا باشد ، باید در همان حوزه نیاز کاربر را برآورده کند ، حالا فرض کنید این نرم افزار امکانات جانبی مانند نقاشی داشته باشد که کاربر بتواند با آن مثلا یک نقاشی ساده هم طراحی کند ، مشخص است که این نیاز اصلا نباید با برنامه حسابداری باشد ، چرا که نیازی به آن نیست ، شاید این مثال کمی برای شما باور کردنی نباشد و شاید هم خنده دار ، اما طبیعت هر انسان این است که دوست دارد توانمندیهای خود را بروز دهد ، برنامه نویسان هم اینطوری هستند ، یک برنامه نویس به فرض اینکه به مورد خاصی علاقه و استعداد دارد سعی می کند بیش از اندازه آن را در نرم افزار خود نشان دهد ، در حالی که نیازی به آن نیست ، شما همیشه در نرم افزار فقط نیازهای اصلی و مهم را باید برآورده کنید

2-کیفیت
چگونه یک برنامه با کیفیت بنویسیم
تعریف کیفیت خیلی ساده است ، کیفیت نرم افزار یعنی اینکه نرم افزاری بنویسیم که کاربر بتواند براحتی کارهای خود را با آن انجام دهد بدون ترس و نگرانی
دقت کنید که در بحث کیفیت نرم افزار بحث راحتی و آسان بودن استفاده، هم مطرح می شود
مثال
فرض کنید یک سایت اینترنت طراحی و برنامه نویسی می کنید ، کاربر برای رسیدن به مطلب و یا فهرست سایت باید مثلا 4 مرحله یا همان 4 صفحه را پیمایش کند تا به فهرست برسد ، خوب این راه زیاد است ، شما باید تلاش کنید که این مسیر را کوتاهتر کنید
یا مثلا در برنامه حسابداری اگر کاربر فرضا فاکتوری را اشتباه وارد کند ، شما باید سعی کنید این اجازه را به کاربر بدهید که در همان جا اشتباه را اصلاح کند نه اینکه صفحه جدیدی را باز کند و در جای دیگر این عمل را انجام دهد

3- امنیت

امنیت فقط به معنای محدود کردن سطح دسترسی کاربران نیست
امنیت 2 مقوله دارد ، یکی همان سطح دسترسی کاربران به داده های نرم افزاری است اما مقوله مهمتر ، جلوگیری کردن از اشتباه کاربران است ، شما باید در نرم افزار تان فرض کنید که کاربران کاملا بی سواد هستند و کاری کنید که تا حد امکان جلوی اشتباه کاربر را بگیرید
مثلا اگر در جایی باید داده عددی وارد شود ، حال ، کاربر یک متن وارد می کند ، شما باید از ثبت این اطلاعات جلوگیری کنید و به کاربر هشدار مناسب بدهید
مثال دیگر ، حذف اطلاعات از نرم افزار ، همیشه باید قبل از آن پیغام هشدار به کاربران بدهید ، چرا که ممکن است کاربر از روی بی دقتی دکمه حذف را بزند
و از همه مهمتر ، پشیبانی اطلاعات کاربر ، حیاتی است ، حتی اگر کاربر از اطلاعات خود پشتیبان نگرفت شما بصورت اتوماتیک باید پشتیبانی امن داشته باشید تا در صورت از بین رفتن اطلاعات کاربر ، باز گشت پذیر باشد

4-مفید بودن و سود مندی
برنامه باید مفید و سودمند باشد به این معنا که نرم افزار برای استفاده باید تمام ابزارهای لازم کاربر را فراهم کند شما در نرم افزار باید این اختیار را به کاربر بدهید که خود ابزار مناسب خود را انتخاب کند
شما باید تمام ابزارهای مورد نیاز کاربر را برایش فراهم کنید ،
مثلا در یک برنامه حسابداری شما نباید کاربر را فقط محدود به استفاده از ماوس بکنید بلکه باید به کاربر این اختیار را بدهید که از کیبورد هم استفاده کند
انعطاف پذیر باشد ، کاربر بتواند برخی تنظیمات آن را برحسب نیاز خود تغییر دهد

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

6-یاد آوری
نرم افزار شما باید بگونه باشد که سلسله مراتب کاری را به کاربر نشان دهد ، مثلا یک کاربر می خواهد فاکتور فروش صادر کند ، مشخصا باید کالاها و نام فروشنده را وارد کند ، شما در این حالت باید به کاربر بگویید که کجا و چگونه کالاها و نام مشتری را تعریف کند ، این بحث جدا از بحث آموزش است ، پیغامهای نرم افزار باید کاملا روان و قابل فهم و آموزنده باشد.

توقعات من به عنوان یک نیروی انسانی – بازی وبلاگی

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

نیازهای من به عنوان یک نیروی انسانی برنامه‌نویس:

1-زبان برنامه نویسی مشخص باشد ، اگر من برای دات نت استخدام شده ام از من نخواهند که با جاوا هم برنامه نویسی کنم

2-ابزار لازم برای کار فراهم کنند ، کامپیوتر خوب ، میز کار مناسب ، کتابها و رفرنسهای مورد نیاز برای برنامه نویسی ، یک شرکت باید منابع علمی در اختیار برنامه نویسان خود قرار دهد

3-دادن فرصت به برنامه نویس برای ارتقای علمی خود ، شرکتی که تمام وقت برنامه نویس را بکار می گیرد و اگر قرار باشد اکثر وقت برنامه نویسان در کار باشد ، پس چه وقت می تواند از نظر علمی خود را ارتقا دهد هر برنامه نویس نیاز دارد که کلاسهای آموزشی و از همه مهمتر آخرین مقاله های آموزشی را مطالعه کند

4-لطفا آینده برنامه نویس را مهم تلقی کنید ، اکثر شرکتها برای لیست بیمه برنامه نویسان حقوق حداقلی رد می کنند ، یعنی اگر به برنامه نویس فرضا هفصد هزار تومان حقوق می دهند اما برای بیمه او حق بیمه حداقلی رد می کنند و این امر در آینده برای بازنشستگی مهم است

5-ساعت آغاز و پایان کار نباید اینقدر خشک و مزخرف باشد ، بخاطر چند دقیقه دیر امدن ارزش دعوا نداره در عوض شما میتوانید تا 2 ساعت تاخیر داشته باشید بشرط آنکه آن 2 ساعت را همان روز جبران کنید مثلا اگر قرار است ساعت 8 تا 5 کار کنید و ساعت 10 به محل کار رسیدیم این دوساعت در پایان همان روز جبران می کنیم

6-مدیران شرکت برای ایجاد مسولیت در پرسنل  در صد هر چند کم را از مبلغ پروژه را به عنوان حسن انجام کار به برنامه نویسان پرداخت کنند تا برنامه نویسان تشویق شوند برای در یافت این درصد از خود وقت بزارند

7-در همان اول عقد قرار داد همه چیز واضح  و شفاف باشد ، از بکار بردن عبارات دو پهلو پرهیز کنید ،

8-اضافه کاری اجباری نباشد ، ما هم آدمیم

9-مرخصی قانونی حق قانونی ماست ، ما هم مریض می شویم  ، ما هم زندگی داریم .

10-محیط کار حالت زندان نداشته باشد ، آرامش داشته باشد ، بی سرو صدا باشد .

مطالب دیگری هست که بعدا مفصلا در موردش صحبت خواهم کرد