Hello dear readers,
This post will describe the requisite processes to be followed by us all to go about our development activities. It is important at this very nascent stage of the project itself to properly and clearly define the processes to be followed by us all to bring some uniformity in our functioning and better co-operation and understanding during development.
You will need some patience to go through this post, as it is very long..so please hold on
—————————————
Every service that we intend to develop will go through 5 phases of design and development. Let us fix this as standard processes for systematically designing all our future services.
These phases shall be :—>
1) Service Description and illustration.
2) High level and Detailed Level software design
3) Implementation over JSLEE
4) Testing and bug fixing.
5) Product release.
These 5 phases will be discussed in detail in the remainder of this post.
———————————–
A) Service Description and illustration explained:
A1) Stage-1 service description:
Every service should have a description, as perceived by the human user. Such a description is called a stage 1 service description. The stage 1 description of any service should clearly define and present the business use case for that service and how that service will be experienced by the customers in production. This description should clearly present the motivation behind developing such a service. The description should be concise, non technical and understandable to the common man…who may or may not be a developer. Once the stage 1 description is over, the developer is in the correct mindset to pursue his design objectives.
A2) Stage-2 service description:
Upon reaching this stage, we would have completely understood the production environment functioning of the product due to the stage 1 description above. Now we shall examine and document the environment of our product node. The product environment implies the various external and internal interfaces of the product package. External interfaces can be those with other SIP servers over a standardized reference point (such as the IMS ISC reference point with the S-CSCF). Another example of an external interface can be that with a charging platform (over DIAMETER protocol). An external interface can be that with a human user managing the product through a service management point (SMP). Internal interfaces will be something that will need to be decided carefully. Internal interfaces will consist of the internal signaling between the different software components. These components will usally be service building blocks (SBBs), or in certain cases, a management point used for provisioning. Other examples of internal interfaces can be those with databases, remote API calls, with a statistics collection utility packages, XML document managers and so on. The roles of each and every interface will be captured as a stage-2 description. This will help us immensely while designing the product. The stage-2 description will document all the procedures over each internal and external interface. Special requirements (if any) shall be documented seperately and will be highlighted.
A3) Stage-3 service description:
Upon reaching this stage, we would have completely understood how the service functions, which are the major actors of the service, what are its major internal packages and external dependencies. Now we will move to the next stage…which can be considered as a pre-design stage. In every telecom service or product, the developer is provided with a set of call flows. These call flows capture the signalling ( in our case it will be SIP and HTTP) between the various network nodes. The call flows go into the minutest of details..at the parameter level. What message enters which node…what changes take place to the message at that node and what message leaves a particular node…everything is captured here. This stage is very important in SIP and IMS, as the call flows will determine the exact FSM (Finite state machine) to be followed at our node, the call context to be maintained at our node and the exact structure of each message request reaching us. The call flows are present in the 3GPP documents most of the times, so we will just need to identify the relevant ones and understand them deeply. If any new call scenarios, outside the standards pop up, we will capture them at this stage.
————————————
B) High level and Detailed Level software design explained:
Most of us are very well versed with HLD and DLD stages. At this stage we will be identifying and defining the UML use cases, classes and interfaces to be used on the basis of the stage 1,2 and 3 service descriptions done earlier. This will be the correct time to consider any design patterns that may satisy certain scenarios of the product functionality. All the UML diagrams will be drawn by using a standard open source tool called Star UML. Star UML is freely downloadable from here: http://staruml.sourceforge.net/en/download.php
At this stage we will get a clear picture of our implementation. However, in JSLEE, there will also be a need for correctly identifying the SBBs and defining their relationships correctly. As a matter of fact, a good design will heavily depend upon how efficient our SBB design is. Each class (it may or may not be a SBB) will be represented as a UML diagram complete with its instance variables, methods, their arguments, return types etc. The relationships between various classes and interfaces will also be shown.
The SBB design practice links are given under the “imp-links” tab and also as points 7 of this post:
http://whitelassiblog.wordpress.com/2008/09/24/proposed-programming-model-and-user-orientation/
Please check it out.
The SBBs will need to be designed in such a way that they can be reused in any future services if possible. Such design decisions will be taken only after a proper discussion and consensus amongst all. The entire discussion process will be summarized and documented for later reference.
————————————
C) Implementation over JSLEE:
This will be the actual implementation stage of the product. During this stage, we will refer back to our design documents and also the procedures given in the 3GPP specifications. The specifications have been written in such a way, that there is no need for making use-case specifications ourselves. We will just follow what is given in the spec…line by line. It will be required to cross refer other 3GPP specs or IETF RFCs during this phase. I will enlist all the resources required as and when the time comes. We will follow a common policy of commenting our code extensively. Whenever we are implementing a certain procedure from the specification/RFC, we will copy and paste that procedure in the code as a means of reference for others. This will make our code readable and understandable for others. Let this commenting policy be followed uniformly by us all. We will also schedule frequent code reviews and discuss each and every line of our implementation, and release a MoM (Minutes of the Meeting).
————————————
D) Testing and Bug Fixing:
Once the product implementation has reached a certain stage, we will test it thoroughly. We will utilize sipp as a tool for testing SIP based implementations. On the HTTP front, we will use SEAGULL as the testing tool. Unit testing will also take place in the form of JUnit and/or Sip Unit. We will also make a test case document, where we will capture the test name, its nature, expected result and whether or not the test succeeded. If there are any bugs, they will be listed in the document and assigned to the developer. All bug fixes will also be documented alongwith the date on which the bug was fixed.
————————————
E) Product Release:
Finally, when the product has reached a certain level of maturity, it will be released and uploaded to the repository with a user guide giving step by step instructions on how to play around with it. Upon getting feedback from the community, the product will be enhanced further.
—————————————–
I hope this has set the ball rolling as far as the processes are concerned.
If there are any doubts, please contact me personally at : abhatnagar192006@gmail.com
Else drop a message at the mailing list: users@whitelassi.dev.java.net
Best Regards
Aayush