I thought I would give a short introduction to Software Processes. A process organizes the product development into distinct phases and there is some work expected to be done in each phase.
I've always hoped there would be some recipe that one could follow in order to produce a good software, but the best we can get are models. Within those models there are methodologies (SCRUM in Agile Software Development Model). The biggest process of the lot is commonly known as "Software Development Life Cycle" (SDLC) which takes your software from beginning to the end. There are smaller templates within SDLC commonly referred to as subprocesses.
Each process is made of phases and each phase of activities and each activity of tasks. In SDLC, there are 3 "distinct" phases:
- Specification - where the idea is conceived and documented
- Design and Implementation - where the development
- Verification and Validation - assessed that it does what is supposed to do.
It should be clear enough to see that without specification (a.k.a. requirements) you can't write code and without written code you can't really verify & validate the solution.
Now let's get down to the smallest 'unit of work' there is: tasks. They are small manageable steps of the project to be completed. The need to be completed in order to complete activity. Once a set of activities is completed a phase gets completed.
Examples of tasks include:
- Writing a piece of source code
- designing a feature
- writing documentation
- installing a library
- testing a feature
Tasks may also have dependencies which makes them difficult to schedule and estimate.
Finally, someone has to do all of these tasks, this is why we have roles i.e. what a person is doing. Those roles in a software engineering cycle involve: programmer, tester, CEO, client, product manager. They perform the tasks. Work Product include other elements which are produced as part of the development of the product:
- source code
- test cases
A task produces a work product and the work product can use other work products as inputs. Methodology is a set of practices or templates or guides to help you through the process. Helps you provide a structure for your process. SCRUM is an example of a Agile software development methodology.