مهندسی نرم افزار و طراحی سرویس های تحت وب

نویسنده : حسین شرفی

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

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

طراحی و برنامه نویسی تحت وب:

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

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

تکنولوژی های لازم برای شروع برنامه نویسی تحت وب:

--- زبان HTML : این زبان برای چیدن اشیائی که روی صفحه وب مشاهده میکنید استفاده میشود. محل قرارگیری عکس هاف متون ، جداول ، لینک ها و هر چیزی که در یک صفحه وب مشاهده میکند با این کدها در کنار هم قرار می گیرند. و مرورگر با دریافت کدهای اچ تی ام ال آنها را تفسیر میکند و شکل کلی یک صفحه وب را به شما نشان می دهد. یک طراح و حتی برنامه نویس وب باید به زبان html آشنا باشد تا بتواند سرویس بهینه ای را طراحی کند. پس از اینکه این زبان را آموختید میتوانید از نرم افزارهایی مانند ExpressionWeb و DreamWeaver که کار ساختن کدهای HTML را انجام میدهند استفاده کنید و کار خود را به دوش آنها بیندازید. اما شما باید طرز استفاده از آنها را بدانید. اینکار مانند این است که ابتدا ضرب را بیاموزید و بعد از ماشین حساب استفاده کنید.
---  یک زبان برنامه نویسی تحت وب: پیشنهاد ما بخصوص در ایران ASP.net و با استفاده از زبان پایهء C# است. گرچه دانستن زبانی مانند PHP هم میتواند موقعیت های شغلی خوبی را برای شما ایجاد کند.
--- طراحی بانک اطلاعاتی رابطه ای: اولین چیزی که یک سایت بزرگ نیاز دارد یک بانک اطلاعاتی قدرتمند و بهینه شده است. شما باید اصول طراحی بانک های اطلاعاتی ، نرمال سازی در طراحی بانک های اطلاعاتی ، و سپس پیاده سازی را توسط یک بانک قدرتمند مانند SQL Server و یا MySQL بدانید تا بتوانید اولین قدم را در برنامه نویسی تحت وب بردارید.
--- آشنایی با وب : شما نمی توانید ساختمانی مناسب بسازید، مگر اینکه قبلا ساختمان های متفاوتی را دیده باشید. ضعف بزرگی که بسیاری از مهندسین نرم افزار دارند، آشنا نبودن آنان با محیط اینترنت و دنیای مجازی است. برای حل این مشکلتان پیشنهاد میکنم یک وبلاگ درست کنید و مدتی وبلاگ نویس شوید و وبلاگ خوان . خواندن وبلاگ های متفاوت و آشنایی با سرویس های اینترنتی شما را با محیطی که قرار است در آن مشغول به ساخت و ساز شوید آشنا میکند.
شما بعنوان یک مهندس نرم افزار باید با سایت های اینترنتی زیادی آشنا باشید. هر سایت یک دیدگاه جدید در طراحی وب به شما میدهد. پیشنهاد میکنم برای شروع با سایتهایی مانند جیمیل، فلیکر، پرشین بلاگ، فرندفید ، یاهو360 ، پیکاسا ، یوتیوب، لست.اف.ام آشنا شوید. هرکدام از این سایتها یکی از برجهای افراشته شده در دنیای مجازی وب است. کم کم در وبلاگهایی که میخوانید با سایت های جدید آشنا خواهید شد. هنگام گشت و گذار در این سایت ها به معماری بکار رفته در طراحی آنها دقت کنید.
--- آشنایی با شبکه : مفاهیمی در برنامه نویسی تحت وب هست که ممکن است در برنامه نویسی تحت ویندوز هرگز با آن مواجه نشوید. مفاهیمی مانند IP ، Server Configuration ، Browser Compatibility و صدها واژه و مفهوم دیگر که جزئی جدانشدنی از وب هستند. سعی کنید با مفاهیم شبکه ها ، پروتکل های وب مانند FTP و HTTP و تاریخچه ای از وب آشنا باشید. این اطلاعات نه تنها مفید بلکه برای برنامه نویسی تحت وب ضروری است.

نکاتی که در بالا ذکر شد برای شروع برنامه نویسی تحت وب است و برای اینکه بتوانید سایتهای بهینه و مفیدی طراحی کنید نیازمند تکنولوژی های روز دنیای وب هستید که در ادامه به تعدادی از آنها اشاره میکنم.

 

• CSS: سی اس اس امکان تغییر گرافیکی صفحات وب را بسیار ساده میکند و دانستن آن کمک بسیاری به شما در طراحی سایت هایی میکند که امکان تغییر صفحات سایت را مانند تغییر قالب وبلاگ فراهم میکنند.
• جاوا اسکریپت : این زبان اسکریپتی کاربرد بسیار زیادی در طراحی وب دارد و بسیاری از رویدادهای صفحات وب با استفاده از جاوا اسکریپت کنترل میشوند. نیازی نیست کل دستورات و نکات موجود در این زبان دا یاد بگیرید. اما باید دستورات ابتدایی و نوع بکاربردن آنها را بیاموزید تا بعدها بتوانید از سورسهای آمادهء جاوا اسکریپتی در پروژه هایتان استفاده کنید.
• آجاکس : احتمالا یک اکانت جیمیل دارید. آیا سرعت حذف نامه ها را در این سرویس با سایت های دیگه مقایسه کرده اید؟ گاهی کمتر از نیم ثانیه. جیمیل یکی از سایت هایی است که خیلی زود و درست از تکنولوژی آجاکس استفاده کرد ، امروزه بسیاری از سایت ها از این روش برای بالابردن سرعت لود صفحات سایت خود استفاده میکنند و حتی سایت های ایرانی نیز از اجاکس برای طراحی بهره می برند.
• XML: فایل های XML برای ذخیره و بازیابی اطلاعات حجیم در سرویس های تحت وب استفاده بسیاری دارند. همچنین گاهی شما مجبورید بخشی از اطلاعات موجود در بانک اطلاعاتی را در فایل XML ذخیره کنید تا باری که روی دوش بانک اطلاعاتی است کاهش یابد. XML در این زمینه بهترین انتخاب است.
• Regular Expressions: یا عبارات منظم برای خواندن و بازیابی اطلاعات از میان فایل های متنی مانند XML و یا صفحات وب سایتها قدرت بسیاری را در دستان شما قرار می دهند. ممکن است در طراحی سایت مورد نظر خود نیازمند استخراج اطلاعات از روی یک سایت دیگر باشید. اگر سایت مورد نظر فید نداشته باشد، میتوانید با استفاده از R.E ها اینکار را انجام دهید.
• Security : وقتی شما یک سایت را طراحی میکند و روی اینترنت قرار میدهید مانن این است که یک ساختمان را که با چوب کبریت ساخته اید در مقابل باد قرار دهید. همیشه هکر ها و رقبایی هستند که با نیت های گوناگون دنبال ضربه زدن به سایت شما هستند . بنابراین بخش مهمی از آموزش های خود را به آموزش امن کردن سایت های اینترنتی و برنامه ای که نوشته اید اختصاص دهید.
• Stored Prcedure Programming : برای اتصال به بانک اطلاعاتی از طریق برنامه ای که نوشته اید چندین راه وجود دارد. شما میتوانید فرمان های SQL را در داخل صفحات وبی که ایجاد کرده اید بنویسید. اما این راه نه تنها امن نیست، بلکه سرعت و قابلیت های برنامه شما را کاهش میدهد. برای نوشتن دستورات SQL باید از بخش پروسیجر های SQL استفاده کنید. با اینکار، برنامه شما بسیار استاندارد تر نوشته شده و از امنیت بالاتری نسبت به حالت قبلی برخوردار میشود.

روش های مهندسی توسعه نرم افزار

نویسنده : حسین شرفی
با بزرگ شدن پروژه هاي نرم افزاري  و پيشرفت علم مهندسي نرم افزار ، روش هاي سازمان يافته اي براي توسعه نرم افزارها ابداع شد که هر کدام بسته به نوع پروژه و محدوديت هاي آن در جاي خاصي کاربرد دارد. برخي روش ها مانند R.A.D به دليل کمبود زمان توليد، برخي مانند spiral به دليل مشخص نبودن نيازمندي هاي اوليه نرم افزار و برخي مانند X.P براي کساني که کار طراحي نرم افزار را با کدنويسي شروع ميکنند ابداع شدند. ايجاد پروژه هاي بزرگ بدون بکارگيري يکي از روش هاي مهندسي نرم افزار ممکن نيست.

1 - روش آبشاري (waterfall) : اين روش اولين روش مهندسي نرم افزار محسوب ميشود و گاهي آنرا روش سنتي نيز مي‌نامند. هر روش مهندسي معمولا شامل 5 پروسه اصلي است که عبارتند از آناليز سيستم، طراحي سيستم، کدنويسي و اجرا، تست و تحويل و پشتيباني . اين 5 پروسه در روش آبشاري به ساده ترين شکل بيان ميشوند. بدين ترتيب که هر فاز از پروسه ي کلي، انجام ميشود و بعد فاز بعدي آغاز ميشود. اين روش در پروژه هايي کاربرد دارد که فاز اول که آناليز است توسط مهندس نرم افزاري که کار تحليل را بر عهده دارد کاملا شناخته شود و طراح کاملا نيازمندي هاي سيستم مربوطه را بداند تا در فاز بعدي بتواند طراحي معماري سيستم را آغاز کند. در عکس زير نمودار عملياتي روش آبشاري را مراجعه ميکنيد. گرچه در هر مرحله امکان برگشت به مرحله قبل گنجانده شده، اما اين برگشت هزينه ي بسياري را بر دوش تيم نرم افزاري ميگذارد. زيرا هر تغيير در مرحله قبل، ميتواند باعث شود تا پروژه در فاز بعدي نيازمند شروع از ابتدا باشد.
مدل آبشاری
2 - روش افزايشي (Incremental): اين روش براي زماني است که نيازمندي هاي نرم افزاري که بايد نوشته شود تشخيص داده شده است ، اما امکان استفاده از روش رو به جلوي آبشاري وجود ندارد.به همين دليل با ترکيب چند پروسه ي آبشاري، روش افزايشي ايجاد ميشود. بطور مثال شما ميخواهيد يک نرم افزار مانند word بنويسيد. در هر مرحله بخشي از نرم افزار را از آناليز تا پياده سازي و تست پيش مي بريد و بار بعدي امکانات جديدي را در نظر ميگيريد تا به نرم افزار اضافه کنيد. امکانات ضروري تر در اولويت بالاتر اجرا قرار مي گيرند.
مدل افزایشی
 
3روش R.A.D اين روش زير مجموعه روش افزايشي است و بر روي چرخه ي کوتاه مدت توليد نرم افزار تاکيد دارد. در اين روش از برنامه نويسي با استفاده از کامپوننت هاي آماده بيشترين بهره را مي بريم تا سرعت تحويل پروژه را افزايش دهيم . معمولا پروژه هايي با اين روش اجرا ميشوند که کمتر از 90 روز وقت مي گيرند و براي افزايش سرعت از تيم هاي موازي نيز براي اجرا کمک ميگيريم تا هر تيم بخشي از نرم افزار را اجرا کند و نهايتا آن بخش ها را با هم يکپارچه ميکنيم. با توجه به اهميت سرعت در اين مدل ، افراد تيم بايد همگي زبده باشند تا بتوانند بدون هدر رفتن وقت پروژه را در موعد مقرر تحويل دهند. همانطور که در تصوير زير ميبينيد پروژه توسط چند تيم در حال پيشبرد است: 
 
4 - روش الگويي (prototyping) : اين روش معمولا زماني بکار گرفته ميشود که مشتري مجموعه اي از نيازها را بيان ميکند ، اما از ورودي و خروجي ها و الگوريتم هاي داخلي اش اطلاع کافي ندارد. با توجه به اينکه معمولا اولين نسخه ي هيچ نرم افزاري کامل نيست و نيازمند بازنگري است، اين روش با چرخه ي توليد و تست خود باعت ميشوند ايرادات نرم افزار استخراج و رفع شود. اما گاهي خارج شدن از اين سيکل (با توجه به بالارفتن سطح توقع مشتري) سخت ميشود.
5 - روش حلزوني (spiral) : اين روش ترکيبي از روش سيستماتيک آبشاري و روش prototyping است. در اين روش نرم افزار طي چندين نسخه ي ارائه شده به تکامل مي رسد. در هر مرحله ريسک هاي پروژه با جزئيات بررسي ميشوند. همانطور که درنمودار زير ميبينيد، کليه ي مراحل انجام پروژه در هر گردش در سايز بزرگتري اجرا ميشوند.
 
6 - روش مهندسي همزمان (concurrent development) : اين روش شامل يکسري فاز اجرايي است. هر فاز خود شامل يکسري وضعيت (state) است. هر يک از اينstate ها بر اساس event هايي که برايشان تعريف ميکنيدم تغيير ميکنند و به وضعيت ديگري مي روند. در عکس زير بخش آناليز را در اين مدل مهندسي مشاهده ميکنيد. اگر در موقعيت development   باشيم و تغييري در نيازمندي هاي تعريف شده توسط مشتري ايجاد شود، به وضعيت awaiting changes مي رويم. زيرا تغييراتي در ساختار پروژه ايجاد شده که ميتواند منجر به تغيير در فاز development شود. اين روش معمولا براي نرم افزارهايي که بصورت کلاينت سروري کار ميکنند بکار مي رود. 
 
علاوه بر مدل هاي مهندسي نرم افزار فوق، روش هاي ديگري مانند XP ، Clean Room ، component-based ، Agile و غيره وجود دارند. که هر يک در جاي خود قابل استفاده هستند. اما روش هاي فوق متداول ترين مدل هايي هستند که بکار گرفته ميشوند.

کرک (Crack) چیست؟

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

نحوه کرک کردن:

بعضي از كرك ها به شكل آيكون خود نرم افزار ميباشد روش كار اين نوع كرك اينگونه است كه ما بعد از اينكه نرم افزار مورد نظرمان را نصب كرديم بايد كركي را كه آيكون آن هم اسم و هم شكل آيكون اجرائي نرم افزار ميباشد را copy و در شاخه اي كه نرم افزار نصب شده است paste نماييم در اينگونه مواقع شما پيغامي را دريافت مينماييد كه بايد گزينه yes را كليك نماييد تا آيكون كرك شما جايگزين (Overwrite) آيكون اصلي شود . < اغلب بازيها از اين روش كرك استفاده مينمايند>
اين نكته را هم ياد آور شوم كه اگر به همراه فايل كرك (exe.) فايلهاي با پسوند dll. يا ini. يا dat. وجود داشت شما آنها را نيز بايد كپي كرده و در شاخه نصب نرم افزار paste نماييد .
در مورد اين نوع كرك بايد ذكر كنم كه حتما" در هنگام كرك كردن بايد نرم افزار مورد نظر بسته باشد يعني در حال اجرا نباشد و الا پيغام خطا دريافت مينماييد .


يك نوع ديگر كرك وجود دارد كه به KeyGen يا KeyMaker معروف هستند كه روش آن با روش قبلي متفاوت است . اين نوع كرك براي ساختن سريال به كار ميرود , روش كار آن هم به اين صورت است كه شما با وارد كردن يك اسم يا شماره و در برخي موارد ايميل در فيلد مشخص كرك و فشار دادن دكمه مربوط به آن يك كد جديد دريافت ميكنيد كه معمولا" با وارد كردن آن در قسمت منو و در بخشي با عنوان Register يا Enter Code يا Registeration يا چيزي توي همين مايه ها برنامه فعال و كامل ميشود .
در بعضي از موارد در همين بخش Registeration كه در بالا گفتم يك كد وجود دارد كه شما بايد آن را در كرك (KeyMaker) وارد نماييد تا KeyMaker كد يا سريال راه انداز را براي شما بسازد .


نوع ديگر كرك ها به Patch يا Patcher معروف هستند , در اين نوع كرك ها معمولا" دكمه اي با نام Choose يا Browse يا Patch و يا چيزي ديگري با همين معني وجود دارد كه با فشار دادن آن بايد آدرس آيكون يا فايلي از نرم افزار كه خود كرك مشخص كرده را در پوشه ای که نرم افزار مورد نظرتان نصب شده است را بهش بدهيد تا نرم افزار را بصورت کامل تبديل کند

بعضي مواقع وقتي ما يك كرك را دانلود مينماييم بعد از باز كردن آن متوجه يك فايل Notepade به همراه چند فايل ديگر ميشويم .در اين صورت شما بايد فايل Notepad درون كرك را باز كرده و سريال مورد نظر را در بخش Register نرم افزار وارد نماييم .

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

مراحل رشد یک تیم

منبع :http://ooa.blogfa.com

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

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

یک انتقاد

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

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

Formin :این مرحله، مرحله شکل گیری تیم می باشد. شاید به سادگی بتوانیم این مرحله را با یک تصویر سازی در ذهن خودمان به سادگی درک کنیم. تصور کنید که شما برای انجام یک پروژه انتخاب شده اید. شما و افراد دیگر تیم شناخت زیادی از یکدیگر ندارید. بی شک شما می خواهید با افراد تیم آشنا شود، می خواهید بدانید قرار است چیکاری انجام شود و چگونه، برای انجام کار نیاز است چه اطلاعاتی داشته باشید یا به دست آورید. بدون شک چون شما شناختی از افراد ندارد، رفتارتان بسیار مودبانه و شاید بتوان گفت محتاط تر خواهد بود. اختلاف نظرتان را درباره مسائل مختلف به ندرت بیان می کنید و می خواهید کسی را از دست خود آزارده نکنید و به کل تابع مدیر پروژه هستید. کارهای را اغلب به صورت انفرادی انجام می دهید. و شاید خیلی نکته های مثل نکات بالا را می توان شمرد که ویژگیهای این مرحله می باشند. این مرحله مسئله و دشواری خاصی ندارد و تیم ها به سرعت به مرحله بعدی که کاملا برعکس این مرحله می باشد منتقل می شوند.

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

·         جر و بحث و اختلاف نظر بین اعضای تیم وجود دارد. حتی در مواردیکه افراد قبلا روی آن موضوع توافق کرده اند.

·         حسادت اعضاء نسبت به یکدیگر افزایش می یابد.

·         اعضاء با آرمانها و اهداف تیم و مجموعه مخالفت می کنند، و حتی اعلام می کنند که آنها اشتباه است.

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

·         روابط بین اعضای تیم کاهش می یابد، شاید بتوان گفت تیم به صورت انزوا حرکت می کند.

·         ...

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

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

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

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