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

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

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

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

نکات مهم در خرید یک نرم افزار برای سازمانها

چگونه نرم افزار  بخریم

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


-تشخیص نیازمندیها: اگر شما سازمانی با واحدهای متنوع باشد ، قبل از جستجو در مورد نرم افزار باید نیازهای خود را تشخیص دهید این نیازها مختصرا بصورت زیر است

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

*آیا شما در سازمان برای کارهای خودتان گردش کار یا فرایند کاری تعریف کرده اید خوب حتما این فرایندها را حتما یادداشت کنید و مستند کنید

*-محدوده کاری سازمان شما چگونه است ؟ از نظر جغرافیایی چگونه است ؟ آیا سازمان شما متمرکز است یا پراکنده ؟ آیا سازمان شما نیاز به تعامل با مشتری دارد ؟ آیا سازمان شما نیاز به ارایه خدمات تحت وب دارد؟ آیا نیاز به خدمات تجارت الکترونیک دارد ؟ و ....

*سطح دانش همکاران سازمانی در چه حدی است آیا سواد کامپیوتری دارند ؟ آیا به نرم افزارهای  اکسل و  word   و غیره آشنا هستند ؟

*بودجه ؟؟؟ شما باید میزان بودجه خودتان را مشخص کنید . چرا که نرم افزار ها با قیمتهای بسیار متنوعی وجود دارد.

*سوال بسیار مهم این است ؟ که سازمان شما به چه دلیل نرم افزار می خواهد ؟ آیا برای کاهش پرسنل سازمان یا کاهش هزینه ها ؟ یا برای حذف برروکراسی و کاغذ بازی حاکم در سازمان ؟ یا برای بهبود کارها ی سازمان و سرعت بخشیدن به کارها ؟
اهداف شما از خرید نرم افزار چیست ؟

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

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

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

2-پشتیبانی
برای بحث پشتیبانی چند بخش وجود دارد که ذکر می کنم

·   شما وقتی با شرکت توافق کردید و نرم افزار آنها را خریدید باید یک قرار داد گارانتی نرم افزار و پشتیبانی داشته باشید
در اینجا مختصرا مهمترین بندها را ذکر می کنم

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

محدوده تغییرات
در این بند، حدود تغییراتی که در دوره ضمانت، کارگزار متعهد به انجام آنها در نرم افزار است و مرجع تشخیص این محدوده در موارد اختلاف باید روشن گردد.

زمان
در این بند مدت دوره ضمانت و تاریخ شروع این دوره باید ذکر گردد . در صورتی که تغییر تاریخ آغاز یا مدت این دوره منوط به تحقق شرط یا شرایط خاصی است، این شرایط باید بروشنی ذکر گردند.

مکان
در این بند محل(های) ارائه خدمات دوره ضمانت باید مشخص گردد.

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

برای هر یک از عناصر موجود در نمودار، عنوان کامل و گویایی o
باید ذکر شود

واحدهای سازمانی (کمیته، گروه، واحد، ...) باید به نحو مناسبی از o
افراد (مدیر، مسئول، ...) متمایز گردند.

خطوط فرماندهی و گزارش دهی باید به طور مشخص و بدون ابهام o
ترسیم شده باشند.

ذکر اسامی افرادی که در این ساختار نقش دارند، ضروری است.

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

منابع لازم

این بخش باید حداقل شامل بندهای زیر باشد:

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

نرم افزار
فهرست و مشخصات کلیه نرم افزارهای لازم برای ارائه خدمات دوره گارانتی باید ارایه گردد. در مورد هر یک از نرم افزارهای مورد نیاز باید مشخص گردد که مسولیت تامین ، نصب و راه اندازی و نگهداری به عهده کدامیک ( کارگزار یا کارفرما ) می باشد .

نیروی انسانی
نیروی انسانی مورد نیاز برای ارائه خدمات دوره ضمانت، به تفکیک نوع تخصص و کار لازم هر یک (بر حسب نفر ساعت ) باید مشخص گردد . در مورد هر یک از افراد مورد نیاز باید مشخص شود که مسئولیت تامین ، آموزش و نگهداری به عهده کدامیک ( کارگزار یا کارفرما ) می باشد .

فضای کاری و تجهیزات اداری
میزان و مشخصات فضای کاری و تجهیزات اداری لازم برای ارائه خدمات دوره گارانتی باید ارایه گردد . در مورد هر یک از امکانات و تجهیزات مورد نیاز باید مشخص گردد که مسئولیت تامین و نگهداری به عهده کدامیک ( کارگزار یا کارفرما ) می باشد .

سایر منابع
در صورتی که برای ارائه خدمات دوره ضمانت به منابع و امکانات دیگری
نیز نیاز باشد، مشخصات این منابع و امکانات باید ارائه گردد . در هرمورد باید مشخص گردد که مسئولیت تامین، راه اندازی و نگهداری به عهده کدامیک ( کارگزار یا کارفرما ) می باشد

روش اجرا
این بخش باید حداقل شامل بندهای زیر باشد:
درخواست خدمات
در این بند نحوه درخواست هریک از خدمات دوره ضمانت باید مشخص گردد. در صورتی که ارائه خدمات خاصی به صورت برنامه ریزی شده وادواری صورت می گیرد، برنامه پیش بینی شده باید ذکر گردد درغیراین صورت، رویداد درخواست کننده خدمت، عناصری که اجازه درخواست دارند و نحوه ثبت و انتقال درخواست باید تشریح گردد.

ارائه خدمات
در مورد خدمات ازپیش برنامه ریزی شده، نحوه و ضوابط ارائه این خدمات باید مشخص گردد.در مورد سایر خدمات، رویه تصمیم گیری در مورد پاسخگویی یا عدم پاسخگویی به درخواست، نحوه و ضوابط اولویت بندی درخواست ها، روش و ضوابط ارائه خدمات باید ذکر گردد. درهرصورت مسئولیت ارائه هر خدمت، مهلت زمانی انجام هر فعالیت و
گردش کار انجام فعالیت ها باید بیان شود.

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

ابزارها، روش ها و استانداردها
در این بخش کلیه ابزارها، روش ها و استانداردهای مورد استفاده دردوره ضمانت باید ذکر گردد .در صورتی که این ابزارها، روش ها و استانداردها در سایر اسناد پروژه معرفی شده اند، تنها ذکر عنوان و ارجاع  به سند مربوطه کافی است.

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

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

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


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

بخش سوم

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

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

آنچه مشتری می خواهد زمان 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-یاد آوری
نرم افزار شما باید بگونه باشد که سلسله مراتب کاری را به کاربر نشان دهد ، مثلا یک کاربر می خواهد فاکتور فروش صادر کند ، مشخصا باید کالاها و نام فروشنده را وارد کند ، شما در این حالت باید به کاربر بگویید که کجا و چگونه کالاها و نام مشتری را تعریف کند ، این بحث جدا از بحث آموزش است ، پیغامهای نرم افزار باید کاملا روان و قابل فهم و آموزنده باشد.