عناوین
در کسب و کارهای امروزی وابستگی آنها به فناوری اطلاعات اجتناب ناپذیر است و میزان تخصص و مهارت تیم های فناوری اطلاعات و توسعه آن یک مزیت رقابتی در بازار به نظر می رسد. همچنین محصولات و خدمات آنها ابزاریست در دستان صاحبان کسب و کار تا در زمان های مناسب تصمیم های موثرتری بگیرند یا ابزار رقابتی جدیدتری تولید کنند. برای اینکه در یک سازمان تصمیم ها با کمترین خطا گرفته شوند لازم است که اطلاعات مورد نیاز در زمان مناسب در اختیار مدیران آن قرار گیرد. در اغلب سازمان ها و شرکت ها اطلاعات وجود دارند ولی سوال این است که، آیا این اطلاعات موجود، در دسترس، کافی و در زمان مناسب ارایه می شوند تا مدیران با استفاده از آن تصمیم گیری کنند؟ بدیهی است که گرفتن تصمیم های صحیح و پیاده سازی آنهاست که آینده کسب و کار را رقم خواهد زد. با توجه به این موضوع، اهمیت ویژه به فناوری اطلاعات، گونه ای سرمایه گذاری می باشد.
در ادامه، مسایلی که در اغلب شرکت ها و تیم های نرم افزاری به چشم می خورد آمده است:
۱٫ رویکرد توسعه
۱٫۱٫ توسعه نرم افزار در حوزه هایی که حداقل ابزار جهت انجام کارها وجود دارد!
منطقی به نظر می رسد تا پول مشتری صرف توسعه در فرآیندهایی شود که شرکت در آن قسمت ها به دلیل هزینه های زیاد پول از دست می دهد. در سازمان ها و شرکت ها فرآیندهایی وجود دارند که بصورت سنتی انجام می شوند و ضرورت توسعه نرم افزار برای آنها بسیار زیاد است، مانند فرآیندهایی که ابزار آماده برای آن وجود ندارد و نیاز به توسعه نرم افزار دارد. به عنوان مثال توسعه نرم افزار در حوزه های مالی و امور اداری با توجه به وجود سیستم های حداقلی و نرم افزارهای آماده، فرآیندها بصورت قابل قبولی صورت می پذیرد. مشتری پس پرداخت هزینه های انسانی و مالی فراوان دارای سیستمی خواهد بود که جایگزین سیستم قبلی می شود. با توجه به ابزارهای موجود در حوزه یکپارچه سازی سیستم ها، می تواند توسعه در قسمت هایی انجام شود که برای شرکت ارزش افزوده دارد و آنها را با سایر سیستم ها یکپارچه کرد تا در زمان مناسب سیستم های موجود با نرم افزارهای جدید جایگزین شوند.
۱٫۲٫ اطلاعات در زمان تولید آن، دریافت نمی شوند!
عدم دریافت اطلاعات در زمان تولید آن باعث بروز مشکلاتی در فرآیندها خواهد شد. بعنوان مثال بسیاری از نرم افزارها به گونه ای طراحی می شوند که اطلاعات پس از پایان فرآیند و توسط اپراتور در نرم افزار ثبت می شوند. این امر باعث طولانی شدن زمان فرآیند و موازی کاری خواهد شد.همچنین دریافت اطلاعات در زمان تولید آن قابلیت بیشتری به کسب و کار خواهد داد تا آن را مانیتور کند.
۱٫۳٫ طراحی User Experience) UX) برای کاربران انجام نمی شود!
فرم های دریافت اطلاعات برای کاربران نیاز به طراحی دارند. این طراحی ها بر اساس نوع کاربران، شغل، میزان تخصص و سایر مواردی که در این حوزه به آن باید توجه شود، انجام می شوند. طراحی UX باعث ایجاد سرعت در فرآیند ها می شود.
۱٫۴٫ یک مدیر برای دو پروژه به همراه سایر مسولیت ها!
توسعه نرم افزار نیاز به یک تیم نرم افزاری دارد. معمولا در تیم های نرم افزاری برخی افراد مسولیت های فراوان دارند و برخی بسیار کم و در بسیاری موارد تیم های نرم افزاری سعی دارند توسعه را با کمترین افراد انجام دهند و گاهی فقط با یک نفر. برخی از مسولیت هایی که این افراد دارند: مدیر عامل، مدیر تولید، مدیر پروژه، تحلیلگر، برنامه نویس و سایر موارد. منطقی به نظر می رسد داشتن مسولیت های فراوان که خارج از توان فرد است بر روی کیفیت تاثیر منفی زیادی داشته باشد. از طرفی وابستگی های فراوان به یک فرد محدودیت هایی دارد و عدم حضور آن فرد مسایل جدی برای تیم نرم افزار و مشتری ایجاد می کند. عدم وجود کیفیت در تولیدات نرم افزاری در بلند مدت باعث داشتن محصولاتی خواهد شد که نسبت به تغییرات در اصطلاح سفت خواهند شد و در نتیجه عمر نرم افزار به پایان خواهد رسید.
۲٫ تعامل تیم نرم افزار با مشتری
موارد قابل توجهی که در تیم های نرم افزاری در خصوص تعامل با مشتری مشاهده می شود در زیر آمده است:
• عدم وجود نظم و دستورالعمل در ارتباط با مشتری
• نحوه برگزاری جلسات: مطرح شدن چندین موضوع ، نبود دستور جلسه مشخص، بی نتیجه ماندن موضوعات جلسه، عدم وجود صورتجلسه
• ارایه زمان های غیر منطقی تحویل به مشتری در جلسات
• عدم توانایی “نه” گفتن به مشتری
• قبول کردن هر نیازی از مشتری خارج از توان تیم و ارایه زمان تحویل غیر واقعی
• دور بودن تیم توسعه از مشتری و عدم تعامل آنها با یکدیگر
• عدم ارایه مستندات مانند BPMN(Business Process Model and Notation) به مشتری جهت شناخت بیشتر فرآیند ها و به حداقل رساندن دوره های تحویل
در توسعه پروژه های نرم افزاری مدرن تعامل با مشتری اهمیت بیشتری نسبت به سایر موضوعات مطرح شده دارد. نباید تولیدی انجام شود مگر اینکه ارزشی برای مشتری خلق کند و فرآیندی پیاده سازی نمی شود مگر اینکه برای تستی از یک فرآیند مشتری باشد که با موفقیت پاس نشده است و کدی نوشته نمی شود مگر برای پاس شدن یک تست واحد از یک فرآیند باشد. هیچ تیم نرم افزاری نمی تواند سالها تجربه مشتری را در چند جلسه دریافت کند و آن را توسعه دهد. مدیریت ارتباط با مشتری و برقراری ارتباط موثر خطر شکست پروژه ها را بسیار کاهش خواهد داد.
۳٫ مدیریت چرخه عمر نرم افزار (ALM – Application Lifecycle Management)
“Application lifecycle management (ALM) is the product lifecycle management (governance, development, and maintenance) of computer programs. It encompasses requirements management, software architecture, computer programming, software testing, software maintenance, change management, continuous integration, project management, and release management.”
WIKIPEDIA
هر نرم افزار تولید شده ای یک چرخه عمر دارد و مدیریت صحیح آن چرخه، ارزش تولید و نگهداری نرم افزار نسبت به هزینه های آن را توجیه می کند. یکی از مهم ترین مواردی که پروژه های نرم افزاری را به سمت شکست می کشاند یا هزینه های توسعه آن را توجیه نمی کند “عدم کیفیت” است. تولید نرم افزار در یک چرخه عمر ناصحیح آن را نسبت به تغییرات انعطاف ناپذیر خواهد کرد و چرخه عمر آن به پایان خواهد رسید. بطور خلاصه برای داشتن نرم افزارهایی که کار می کنند باید آن را با کیفیت تولید کرد و تولید با کیفیت نیاز به مدیریت چرخه عمر دارد.
مسایلی که در ALM معمولا مورد توجه قرار نمی گیرد:
• بازنگری ALM با توجه به استانداردهای مدرن توسعه نرم افزار
• عدم وجود تست های واحد (Unit Test)
• عدم وجود تست های ادغامی (Integration Test)
• عدم وجود محیط تست کاربر (UAT – User Acceptance Test)
• عدم ثبت تمام تسک های کاری
• عدم وجود ارتباط بین تسک های کاری و کدها تولید شده یا تغییرات آن
• عدم وجود Release Management
• عدم استفاده عملیاتی از Version Control
• عدم وجود Availability, Recoverability Reliability, و Security در Database Server
• عدم وجود Authentication & Authorization قابل قبول
• عدم وجود مقیاس پذیری (Scalability)
• انجام برخی تغییرات در محیط عملیاتی
• تغییرات اطلاعات در بانک های اطلاعاتی عملیاتی
• کدهای کثیف (Clean Code)*
• …
“Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way.”
Robert Cecil Martin
۴٫ Load and Performance Test
نیاز است تا تست عملکردی و بار برای نرم افزارها طراحی و انجام شود تا میزان کارایی و عملکرد آنها سنجیده شود. از کار افتادن سرویس هایی که سازمان ها و شرکت ها از طریق نرم افزار به مشتریان خود ارایه می دهد، هزینه های مالی و اعتباری فراوانی را متوجه سازمان خواهد کرد. تست بار سیستم ها این قابلیت را می دهد تا منابع مورد نیاز آنها بررسی و برنامه ریزی شود و قابلیت مقیاس پذیری (Scalable) داشته باشد و به این صورت منابع مورد نیاز آن نیز مدیریت شوند. به عنوان نمونه اضافه شده سرورهای مورد نیاز در زمان هایی که بار برروی سیستم ها بالاست.
۵٫ Security Test
بررسی های اولیه توسط کارشناسان امنیت نشان می دهد که در محصولات تولید شده در کشور مسایل امنیتی جدی وجود دارد.مسایل امنیتی می تواند در هر لحظه سازمان یا شرکت را در برابر نفوذ خرابکاران آسیب پذیرکند و منافع آن را به خطر اندازد. مانند تست عملکردی و بار، از کار افتادن سرویس هایی که از طریق نرم افزار به مشتریان ارایه می شود، هزینه های مالی و اعتباری فراوانی دارد. هیچگاه نمی توان امینت صددرصدی را در این حوزه انجام داد ولی می توان نفوذپذیری آن را به حداقل رساند و آسیب پذیری را به کمترین میزان کاهش داد.
تمام مسایلی که مطرح شد می تواند یک پروژه نرم افزاری را با شکست روبرو کند و عدم توجه به آن نیز هزینه های جبران ناپذیر برای سازمان ها و شرکت ها در بر خواهد داشت.