Understanding the Problem
It is very obvious that before finding the solution we should understand the problem well. Moreover, if we fail to understand the problem we may end up with a useless solution for it. Hence, a wrong solution will not solve our purpose of problem-solving. Therefore, we need to read the problem carefully and decide the different functions which the solution will contain.
Moreover, we need to understand that what is the required output and how we can generate it. Besides, for proper output, we surely need an input. The input can be single or multiple as per the problem. Hence, it is quite important to maintain the necessary relationship between the input and the output.
Important points in Understanding the Problem
Some of the important points that we should keep in mind while understanding the problem are as follows:
- Read the problem very carefully.
- Identify the functions that the solution (algorithm) should have.
- Identify the required output.
- Find a way to produce the required output.
- Draw a proper relationship between the input and output.
- Take all the necessary number of inputs.
- Avoid unnecessary inputs.
- Identify the correct number of the required input.
Further steps in problem-solving
After understanding the problem, the further steps are as follows:
Designing an algorithm
After understanding the relationship between input and output and the functionalities required we have to design an algorithm. Furthermore, the algorithm should contain all the necessary functions to solve the problem. Moreover, it should produce a proper output for every input.
Implementing the algorithm
After designing the algorithm we should implement and design a program to solve the problem. We can develop the program using any programming language.
Evaluation
After developing the program we should run and test if it produces the correct output.
A typical software development process follows these steps −
- Requirement gathering
- Problem definition
- System design
- Implementation
- Testing
- Documentation
- Training and support
- Maintenance
The first two steps assist the team in understanding the problem, the most crucial first step towards getting a solution. Person responsible for gathering requirement, defining the problem and designing the system is called system analyst.
Requirement Gathering
Usually, clients or users are not able to clearly define their problems or requirements. They have a vague idea of what they want. So system developers need to gather client requirements to understand the problem that needs to be resolved, or what needs to be delivered. Detailed understanding of the problem is possible only by first understanding the business area for which the solution is being developed. Some key questions that help in understanding a business include −
- What is being done?
- How is it being done?
- What is the frequency of a task?
- What is the volume of decisions or transactions?
- What are the problems being encountered?
Some techniques that help in gathering this information are −
- Interviews
- Questionnaires
- Studying existing system documents
- Analyzing business data
System analysts needs to create clear and concise but thorough requirements document in order to identify SMART – specific, measurable, agreed upon, realistic and time-based – requirements. A failure to do so results in −
- Incomplete problem definition
- Incorrect program goals
- Re-work to deliver required outcome to client
- Increased costs
- Delayed delivery
Due to the depth of information required, requirement gathering is also known as detailed investigation.
Problem Definition
After gathering requirements and analyzing them, problem statement must be stated clearly. Problem definition should unambiguously state what problem or problems need to be solved. Having a clear problem statement is necessary to −
- Define project scope
- Keep the team focused
- Keep the project on track
- Validate that desired outcome was achieved at the end of project
System Design
The design stage is a necessary precursor to the main developer stage. Developers will first outline the details for the overall application, alongside specific aspects, such as its:
- User interfaces
- System interfaces
- Network and network requirements
- Databases
Implementation
The overall design for the software will come together. Different modules or designs will be integrated into the primary source code through developer efforts, usually by leveraging training environments to detect further errors or defects. The information system will be integrated into its environment and eventually installed. After passing this stage, the software is theoretically ready for market and may be provided to any end-users.
Testing
Building software is not the end. Now it must be tested to make sure that there aren’t any bugs and that the end-user experience will not negatively be affected at any point. During the testing stage, developers will go over their software with a fine-tooth comb, noting any bugs or defects that need to be tracked, fixed, and later retested. It’s important that the software overall ends up meeting the quality standards that were previously defined in the SRS document.
Documentation
Software documentation is written text or an illustration that comes with or is integrated in the source code of a computer program. The documentation explains how the software works or how to use it, and it might mean different things to different people depending on their jobs. Software engineering necessitates the use of documentation. The following are examples of several types of documentation:
Statements that specify a system’s properties, capabilities, characteristics, or qualities are referred to as requirements. This is the foundation for what will be implemented, or what has already been implemented.
Software Architecture/Design: A high-level overview of the software. Includes relationships to the environment as well as design principles for software components.
Technical: Code, algorithms, interfaces, and APIs documentation.
End-user: End-user, system administrator, and support staff manuals.
Marketing: How to sell the product and a review of the competition
Training and support
Every software project’s ultimate goal is to deliver a solution that meets the original specifications. The SDLC (Software Development Life Cycle) is a critical method for achieving that goal. Software development and software engineering training will equip your team with skills that span the whole Software Development Life Cycle, including requirements documentation, testing, and UX design. Your team may learn to manage and deliver software projects on time and within budget with a comprehensive curriculum of courses for those in design, technical, project management, and architectural roles.
Maintenance
The process of upgrading, modifying, and updating software to stay up with client needs is known as software maintenance. After a product has been released, software maintenance is performed for a variety of purposes, including improving the software overall, addressing faults or bugs, increasing performance, and more.
Software developers don’t have the luxury of releasing a product and then leaving it alone; they must constantly correct and enhance their code in order to be competitive and relevant.
The appropriate software maintenance procedures and tactics are essential for keeping any software running for a long time and keeping customers and users satisfied.
The four types of software maintenance are carried out for a variety of causes and purposes. Throughout its lifetime, a piece of software may require one, two, or all sorts of maintenance.
The four types are as follows:
- Corrective Software Maintenance (CSM) is the most common and traditional type of software maintenance.
Due to bug reports sent in by users, software suppliers are frequently able to address issues that require corrective maintenance. If a company can detect and correct flaws before users notice them, this is an added benefit that will make your organization appear more credible and trustworthy.
2. Preventative Software Maintenance: Preventative program maintenance is planning ahead of time to ensure that your software continues to function as intended for as long as possible.
3. Adaptive Software Maintenance
Adaptive software maintenance has to do with the changing technologies as well as policies and rules regarding your software. These include operating system changes, cloud storage, hardware, etc.
4. Perfective Software Maintenance
This is when perfective software maintenance comes into play. Perfective software maintenance aims to adjust software by adding new features as necessary and removing features that are irrelevant or not effective in the given software.