Friday, 2 August 2019

Software Engineering and SDLC Approaches:


What is the Difference Between Software Engineering and Software?
To the untrained eye, there is no difference between software engineering and software development. However, within the IT world, there are major dissimilarities.

Software Engineering vs. Software Development
The difference between software engineering and software development begins with job function. A software engineer may be involved with software development, but few software developers are engineers.
To explain, software engineering refers to the application of engineering principles to create software. Software engineers participate in the software development life cycle through connecting the client’s needs with applicable technology solutions. Thus, they systematically develop processes to provide specific functions. In the end, software engineering means using engineering concepts to develop software.
On the other hand, software developers are the driving creative force behind programs. Software developers are responsible for the entire development process. They are the ones who collaborate with the client to create a theoretical design. They then have computer programmers create the code needed to run the software properly. Computer programmers will test and fix problems together with software developers. Software developers provide project leadership and technical guidance along every stage of the software development life cycle.

Software Engineer Skills and Job Description
Software engineers are expected to have technical expertise, demonstrable personal accomplishments and experience with using open source tools and projects. They should be proficient with pattern design, automated testing and fault-tolerant systems. Software engineers should know how to create and maintain IT architecture, large scale data stores and cloud-based systems. They should also be familiar with how to build scalable data pipelines and scalable domain specific languages. They must be able to work effectively by themselves and with remote teams.

Senior software engineers must oversee complex systems analysis, design and development programs. They will play an active role as a leader, consultant and individual contributor on various projects. They must provide analytical advice in identifying and implementing new IT uses in order to help clients and the company reach strategic objectives. They must be able to manage resources, coordinate development tasks and supervise technical project plans. They often collaborate with IT, operations and development staff through the software development life cycle. Finally, they must maintain a smooth running operation through identifying and recommending improvement processes.

Software Developer Skills and Job Description
Software developers must have excellent analytical skills because they will be required to continually compare needs with software capabilities. They must be familiar with computer languages in order to effectively work with computer programs. In order to do this, they must have formidable feedback and communication skills. Keep in mind that minor error or miscommunications could result in major financial and operational problems. Being detail orientated will help them manage simultaneous projects at different development stages.

Software developers must continually monitor project updates and reported defects in order to manage necessary modifications. Consequently, they must constantly shift gears between assigned projects, deadlines and schedules. Software developers must conduct experimental software runs to ensure quality and consistency. They must have an eye for perfection in order to properly direct repairs and revisions of programs designed to increase operating efficiency. Some software developers are tasked with being the primary point of contact with clients and vendors.

In the end, the main difference between software engineering and software development is that the latter overs the engineering while the former focuses on creating functional programs.

SDLC Overview:
SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and alter or enhance specific software. The life cycle defines a methodology for improving the quality of software and the overall development process

Stage of SDLC:
1). Requirement Gather & Analysis
2.) Design
3.) Development  OR Coding
4.) Testing
5.) Maintenance/Deployment

1) Requirement Gathering and Analysis
During this phase, all the relevant information is collected from the customer to develop a product as per their expectation. Any ambiguities must be resolved in this phase only.

Business analyst and Project Manager set up a meeting with the customer to gather all the information like what the customer wants to build, who will be the end user, what is the purpose of the product. Before building a product a core understanding or knowledge of the product is very important.

2) Design
In this phase, the requirement gathered in the SRS document is used as an input and software architecture that is used for implementing system development is derived.

3) Implementation or Coding
Implementation/Coding starts once the developer gets the Design document. The Software design is translated into source code. All the components of the software are implemented in this phase.

4) Testing
Testing starts once the coding is complete and the modules are released for testing. In this phase, the developed software is tested thoroughly and any defects found are assigned to developers to get them fixed.

Retesting, regression testing is done till the point at which the software is as per the customer’s expectation. Testers refer SRS document to make sure that the software is as per the customer’s standard.

5) Maintenance
After the deployment of a product on the production environment, maintenance of the product i.e. if any issue comes up and needs to be fixed or any enhancement is to be done is taken care by the developers.

Deployment
Once the product is tested, it is deployed in the production environment or first UAT (User Acceptance testing) is done depending on the customer expectation.

In the case of UAT, a replica of the production environment is created and the customer along with the developers does the testing. If the customer finds the application as expected, then sign off is provided by the customer to go live


Type Of SDLC:
1)     Waterfall
2)     V-shaped
3)     Prototype
4)     Spiral
5)     Interactive Incremental
6)     Big Bang
7)     Agile


Agile Model:
Agile Model is a combination of the Iterative and incremental model. This model focuses more on flexibility while developing a product rather than on the requirement.

In Agile, a product is broken into small incremental builds. It is not developed as a complete product in one go. Each build increments in terms of features. The next build is built on the previous functionality.

In agile iterations are termed as sprints. Each sprint lasts for2-4 weeks. At the end of each sprint, the product owner verifies the product and after his approval, it is delivered to the customer.

Customer feedback is taken for improvement and his suggestions and enhancement are worked on in the next sprint. Testing is done in each sprint to minimize the risk of any failures.

Advantages of Agile Model:

It allows more flexibility to adapt to the changes.
The new feature can be added easily.
Customer satisfaction as the feedback and suggestions are taken at every stage.

Disadvantages:
Lack of documentation.
Agile needs experienced and highly skilled resources.
If a customer is not clear about how exactly they want the product to be, then the project would fail.
Conclusion
Adherence to a suitable life cycle is very important, for the successful completion of the Project. This, in turn, makes the management as well easier.

Different SDLC models have their own Pros and Cons. The best model for any Project can be determined by the factors like Requirement (whether it is clear or unclear), System Complexity, Size of the Project, Cost, Skill limitation etc.





TO Be Continued..... 

The Difference Between a Program Manager and a Project Manager

The Difference Between a Program Manager and a Project Manager A program manager manages multiple projects, and sometimes multiple program...