Software development is the process of generating and maintaining applications, frameworks, and other software components through conceiving, specifying, designing, programming, documenting, testing, and bug resolving. Software development entails writing and maintaining source code, but it also encompasses all activities that lead from the conception of a desired piece of software to its final manifestation, usually in a planned and structured manner.
Research, new development, prototyping, modification, reuse, re-engineering, maintenance, and any other activities that result in software products are all included in software development.
Software can be made for a wide range of purposes. The three most prevalent purposes are to fulfill the special needs of a specific client or organization (known as custom software), to meet a perceived need of a group of potential users (known as commercial software), or for personal use (known as open source software) (e.g. a scientist may write software to automate a mundane task).
Embedded software development, or the creation of embedded software for controlling consumer products, necessitates integrating the development process with the creation of the controlled physical object. System software, which is often developed separately, underpins both applications and the programming process.
A software development process (sometimes called a software development methodology, model, or life cycle) is a framework for organizing, planning, and controlling the development of information systems. Over time, a wide range of frameworks have emerged, each with its own set of strengths and disadvantages.
There are numerous techniques to software development: some use a structured, engineering-based approach, while others use an incremental approach, in which software evolves piece by piece. A single system development methodology may not be appropriate for all projects. Based on different technical, organizational, project, and team concerns, each of the current techniques is best suited to specific types of projects.
The following stages of software development are common to most methodologies:
- Analyzing the problem
- Market research
- Gathering requirements for the proposed software
- Devising a plan or design for the software
- Implementation (coding) of the software
- Testing and debugging the software
- Maintenance and bug fixing
The software development life-cycle, or SDLC, is a term that refers to all of the stages. Different methods to software development may perform these stages in a different order or commit more or less time to each stage. At each stage of software development, the level of depth in the documentation provided varies.
These stages might be completed in order (a “organized” approach) or repeated over multiple cycles or iterations (an “extreme” approach). The extreme method typically involves spending less time planning and documenting and more time coding and developing automated tests. Continuous testing throughout the entire life cycle, as well as having a working product at all times, are also encouraged by extreme techniques.
Structured approaches aim to analyze the majority of risks and build a detailed plan for the program before it is implemented, avoiding large design modifications and re-coding later in the software development life-cycle planning.
Software development activities
Identification of need
There are several places to get software product ideas.
Market research, such as demographics of possible new clients, existing customers, sales prospects who rejected the product, other internal software development workers, or a creative third party, can all contribute to these ideas. Marketing employees typically assess software product ideas for economic feasibility, fit with existing distribution channels, potential implications on existing product lines, required features, and alignment with the company’s marketing objectives.
The cost and time assumptions are assessed during the marketing evaluation phase. Early in the first phase, a judgment is made about whether the project should be pursued further based on the more precise information generated by the marketing and development employees.
In the book “Great Software Debates”, Alan M. Davis states in the chapter “Requirements”, sub-chapter “The Missing Piece of Software Development”
Engineering students are primarily interested in engineering and are rarely introduced to finance or marketing. Marketing students are usually just exposed to marketing and are rarely exposed to finance or engineering. Most of us become experts in only one field. To make matters more complicated, few of us encounter interdisciplinary people in the workplace, thus there are few jobs to imitate. Nonetheless, software product planning is important to development success and necessitates a thorough understanding of several disciplines.
A software development project may stray into less technical considerations such as human resources, risk management, intellectual property, budgeting, crisis management, and so on, because software development may entail compromising or going beyond what the client requires. These procedures may cause the roles of business development and software development to get entwined.
Every action has a goal of discovering things that pertain to the project, and planning is one of them. Extracting requirements, also known as requirements analysis, is an important part of the software development process. Customers usually have a vague sense of what they want as a final product, but they have no idea what software should accomplish. At this point, skilled and experienced software developers can spot incomplete, confusing, or even contradicting requirements. Demonstrating real code on a regular basis can help lessen the chance of inaccurate requirements.
Although great effort is placed into ensuring that requirements are comprehensive and consistent throughout the requirements phase, this is rarely the case, leaving the software design phase to be the most influential when it comes to limiting the consequences of new or changing needs.
Volatility in requirements is difficult to manage since it has an influence on future or ongoing development efforts. After gathering the client’s general requirements, an analysis of the development scope should be made and properly expressed. This is commonly referred to as a scope document.
After the requirements have been identified, the software design can be documented in a software design document. This entails a high-level or preliminary design of the core modules, as well as an overall image (such as a block diagram) of how the elements interact. At this point, you should have a good understanding of the language, operating system, and hardware components. Then, potentially with prototyping as a proof-of-concept or to tighten up requirements, a comprehensive or low-level design is generated.
Implementation, testing and documenting
The stage of the process where software developers actually program the project’s code is known as implementation. Software testing is an essential part of the software development lifecycle. This step guarantees that faults are identified as quickly as feasible. Tests may be written immediately before implementation in some methods, known as test-driven development, and serve as a guidance for the correctness of the implementation.
Throughout the development process, the internal design of software is documented for future maintenance and enhancement. This could also entail creating an API, whether external or internal. The development team’s choice of software engineering approach will influence how much (if any) internal documentation is required. Plan-driven models (such as Waterfall) produce far more paperwork than Agile models.
Deployment and maintenance
Deployment begins immediately after the code has been thoroughly tested, approved for release, and sold or distributed to a production environment. Installation, customization (e.g., setting parameters to the customer’s values), testing, and possibly an extended period of review may all be involved. Software training and assistance are essential since software is only as good as how it is utilized.
Maintaining and improving software to deal with newly discovered flaws or requirements can take a lot of time and effort, especially if requirements are ignored and the product needs to be redesigned. To address reported errors and keep the software working, most maintenance is performed on a regular basis.