Outsourcing and Software Engineering

Home » Services » Outsourcing and Software Engineering

Software Engineering

Software Development is a complex and often difficult process requiring the synthesis of many disciplines. From modeling and design to code generation, project management, testing, deployment, change management and beyond. A software development process or life cycle is a structure imposed on the development of a software product. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process.

Software Engineering

Software development process

Processes steps

Software Engineering processes are composed of many different activities, notably the following:

    • Customer Requirements Analysis
      Extracting the requirements of a desired software product is the first task in creating it. Requirements analysis in systems engineering and software engineering, encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product, taking account of the possibly conflicting requirements of the various stakeholders, analyzing, documenting, validating and managing software or system requirements. While customers probably believe they know what the software is to do, it may require skill and experience in software engineering to recognize incomplete, ambiguous or contradictory requirements. Requirements analysis is critical to the success of a systems or software project. The requirements should be documented, actionable, measurable, testable, traceable, related to identified business needs or opportunities, and defined to a level of detail sufficient for system design. While customers probably believe they know what the software is to do, it may require skill and experience in software engineering to recognize incomplete, ambiguous or contradictory requirements.
    • Specification
      Specification is the task of precisely describing the software to be written, in a mathematically rigorous way. A Software requirements specification (SRS), a requirements specification for a software system, is a description of the behavior of a system. In addition it also contains non-functional requirements. Non-functional requirements impose constraints on the design or implementation (such as performance engineering requirements, quality standards, corporate guidelines, design constraints) . Software requirements specification establishes the basis for agreement on what the software product is to do as well as what it is not expected to do. Software requirements specification permits a rigorous assessment of project requirements. It should also provide a realistic basis for estimating product costs, risks, and schedules. The software requirements specification document enlists enough and necessary requirements that are required for the project development. To derive the requirements we need to have clear and thorough understanding of the products to be developed or being developed. This is achieved and refined with detailed and continuous communications with the project team and customer till the completion of the software. Specifications are most important for external interfaces that must remain stable.
    • Software architecture
      The architecture of a software system refers to an abstract representation of that system. Software architecture refers to the high level structures of a software system. The term can be defined as the set of structures needed to reason about the software system, which comprises the software elements, the relations between them, and the properties of both elements and relations.
    • Implementation
      Reducing a design to code may be the most obvious part of the software engineering job, but it is not necessarily the largest portion. Implementation is the part of the process where software engineers actually program the code for the project.
    • Testing
      Software testing is an investigation conducted to provide stakeholders with information about the quality of the product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include, but are not limited to the process of executing a program or application with the intent of finding software bugs (errors or other defects). Testing of parts of software, especially where code by two or more different engineers must work together, falls to the software engineer.
    • Documentation
      Documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the writing of an API, be it external or internal. The software engineering process chosen by the developing team will determine how much internal documentation (if any) is necessary.
    • Support
      After an application is developed, it becomes an essential part of a client’s business. It is vital that the software system be efficiently maintained and problems quickly resolved. The applications must remain functional and ready to address new opportunities and business needs.
    • Maintenance
      A common perception of maintenance is that it merely involves fixing defects. However, one study indicated that the majority, over 80%, of the maintenance effort is used for non-corrective actions. The key software maintenance issues are both managerial and technical. Key management issues are: alignment with customer priorities, staffing, which organization does maintenance, estimating costs. Key technical issues are: limited understanding, impact analysis, testing, maintainability measurement.

Process Models

A decades-long goal has been to find repeatable, predictable processes or methodologies that improve productivity and quality. Without project management, software projects can easily be delivered late or over budget. With large numbers of software projects not meeting their expectations in terms of functionality, cost, or delivery schedule, effective project management is proving difficult.

Waterfall processes

The best-known and oldest process is the waterfall model, where developers follow these steps in order. The waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation, and Maintenance. The waterfall development model originates in the manufacturing and construction industries; highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Since no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.