Technology & Engineering

Software Engineering

Software engineering is the systematic application of engineering approaches to the development, operation, and maintenance of software. It involves the use of disciplined, systematic, and quantifiable approaches to software development, encompassing techniques such as requirements analysis, design, coding, testing, and maintenance. The goal of software engineering is to produce high-quality, reliable, and efficient software systems.

Written by Perlego with AI-assistance

11 Key excerpts on "Software Engineering"

  • AI Factory
    eBook - ePub

    AI Factory

    Theories, Applications and Case Studies

    • Ramin Karim, Diego Galar, Uday Kumar(Authors)
    • 2023(Publication Date)
    • CRC Press
      (Publisher)
    8 Software Engineering
    DOI: 10.1201/9781003208686-8

    8.1 Software Engineering Overview

    Software Engineering refers to the development of software products using scientific principles, methods, and procedures. The outcome of Software Engineering is a reliable software product (TutorialsPoint, 2022 ).
    The term “Software Engineering” was created in the 1960s when researchers began to address what many saw as a “software crisis”, defined by Krueger (1992 ) as “the problem of building large, reliable software systems in a reliable, cost-effective way”. To this point, industry and academia had concentrated on developing capable and competent hardware. As a result, powerful and inexpensive machines were readily available.
    The next step was to create software to fully utilise the capability of the available hardware. In other words, researchers needed to create software that could solve real-world problems. The resulting field of endeavour was called Software Engineering (Tiwari & Kumar, 2020 ), and the outcomes were software products created with specific requirements in mind (TutorialsPoint, 2022 ). The process of product creation is shown in Figure 8.1 .
    FIGURE 8.1 Software product (TutorialsPoint, 2022).
    The term “Software Engineering” can be broken down as follows:
    1. Software: The first half of the term, “software”, refers to more than a programme code. A programme is an executable code serving a certain computational purpose. Software is a collection of executable programmes, associated libraries, operational manuals, data structures, and documentation (Tiwari & Kumar, 2020 ).
    2. Engineering: The second half of the term, “engineering”, refers to the use of scientific principles and methods to create the software product (TutorialsPoint, 2022 ). Engineering is the step-by-step evolution of constructs in an organised, well-defined, and disciplined manner (Tiwari & Kumar, 2020
  • Artificial Intelligence and Software Engineering
    • Derek Partridge(Author)
    • 2013(Publication Date)
    • Routledge
      (Publisher)
    can lead to the production of high-quality software systems, but there are no guarantees. Software system design and construction is thus a skilled art (i.e. a blend of artistic flair and technical skill), but then so is much of science in all domains, despite the widespread, naive views to the contrary. So what exactly is Software Engineering?
    An introduction to Software Engineering What is Software Engineering? Well according to one source:
    Software Engineering is the introduction of formal engineering principles to the creation and production of software. A scientific or logical approach replaces the perhaps more traditional unstructured (or artistic) methods.
    DTI, Software Engineering Newsletter, Issue No. 7, 1988
    This definition is on the right track, but is perhaps more a definition of some future desired situation than the current reality. And clearly I have some reservations about the ‘scientific’ aspirations explicitly mentioned in the definition. I don’t really know what this word means, but I suspect that it is being (mis)used as a synonym for ‘logical’. A further point of contention that will emerge later when we come to a consideration of the promise and problems of artificial intelligence (AI) in practical software systems is that the desire for ‘a scientific or logical approach’ may be born of a fundamental misconception, and one that AI illuminates.
  • Software Engineering
    Software Engineering is a term that was coined during the October 1968 NATO Software Engineering conference held in Garmisch, Germany. The term was introduced by Friedrich Bauer, the conference chairman. There are many definitions for Software Engineering. One definition refers to Software Engineering as the application of a disciplined approach for the development and maintenance of computer software. The Institute of Electrical and Electronics Engineers (IEEE) states that it is Software Engineering that deals with the establishment and use of sound engineering principles to economically obtain software that is reliable and works efficiently on real machines. This definition touches on both the technical and management aspects involved in Software Engineering. The technical aspect of this definition refers to the reliability and performance of the target software product, whereas the management aspect refers to the economic feasibility related to both time and money. Software Engineering encompasses the use of tools, techniques, and methods that are useful during the execution of the steps needed for the development of the software and its future maintenance.
    The NATO conference discussed the software crisis and was characterized by the inability of existing techniques, tools, and processes to deal with the increasing complexity of the needed software. It was identified that the main reasons for the crisis were due to the complexity of the software, changing and misunderstanding of requirements, and the lack of tools and skilled professionals. Consequently, the produced software is of low quality, is not maintainable, and does not meet the stakeholder’s requirements. In addition, software projects were frequently running over budget and over time, and many did not deliver a functioning product.
    Unfortunately, many of the symptoms of the software crisis are still present. According to the Standish Group, a software market research firm, 17 percent of software projects were complete failures in 2002. Moreover, 50 percent of projects were not completed within the planned schedule, ran over budget, or were missing some of the required features. There are many concerns about the quality and reliability of the software we use. Existing software is plagued with millions of defects. Some of the defects are known and have already been detected; others are yet to be uncovered. The defects have caused many disasters, leading to financial losses, physical harm to humans, and life threatening situations. The Software Engineering profession is still in its infancy, therefore tools, techniques, standards, and appropriate Software Engineering education programs at all levels are needed. In the United States alone, it was reported in 2004 that approximately 750 thousand software engineers are employed compared to an estimated 1.5 million practitioners in all other engineering disciplines. It was also reported that most software practitioners do not hold degrees in Software Engineering. Currently, most people working as software engineers hold either a degree in computer science or computer engineering. It is worth mentioning that the first bachelor program in Software Engineering was established in the United States as recently as 1996.
  • Software Engineering
    eBook - ePub

    Software Engineering

    Architecture-driven Software Development

    The Government’s present system for procuring software does not meet the Government’s needs and wastes resources. The application of “systems engineering” disciplines is needed to remedy the procurement system’s defects. … Software Development is a complex process that requires modern “systems engineering” techniques.
    While the systems engineering discipline has promoted a cohesive set of practices for dealing with complex product development endeavors, they have been improperly adapted to the unique nature of software products. Section 2 presents the six practices associated with systems engineering. However, they have been acclimated to the challenges of software development.

    Systems engineering principles and practices

    Systems engineering is a discipline that melds interdisciplinary technical disciplines and project management practices to develop architectural design challenges associated with complex product development. It bounds the problem domain by focusing on the product operational environment while considering the full product life cycle. A typical system life cycle involves development, testing, manufacturing, distribution, training, operations, support, and disposal. The principles of systems engineering include:
    1. A system represents a complex, human-made product that involves hardware, software, and human operators to work effectively. The system or product must be understood in terms of its complete set of life-cycle processes, which impact the feasibility of potential design solutions.
    2. A product is a combination of interrelated parts organized into a complex whole.
    3. A product is human-made (designed, manufactured, tested, operated, and sustained) for a specific, sometimes generalized, purpose. This eliminates “natural” or “biological” systems from consideration as a system of interest.
    4. The effectiveness of the product in operation is a result of the application of system thinking, which attempts at understanding how parts influence, cooperate, and collaborate with one another within a collective whole. This necessitates understanding the effects of the operational environment on the performance of the product and its constituent parts.
  • Software Solutions for Engineers and Scientists
    • Julio Sanchez, Maria P. Canton(Authors)
    • 2018(Publication Date)
    • CRC Press
      (Publisher)
    Most engineering fields have developed standard metrics for measuring product quality. For example, we can compare the quality of two car batteries by means of the cold cranking amps which they are capable of delivering. On the other hand, nonengineered products are typically lacking quality measurements. In this sense we cannot determine from the label on a videocassette what is the entertainment value of the movie that it contains, nor are units of information specified in the jacket of a technical book. Software is also a field in which there are no universally accepted quality metrics, although substantial work is this direction is in progress. The verification of program correctness, discussed later in the book, directly relates to software quality metrics.
    26.2  Principles of Software Engineering
    We started this chapter on the assumption that software development is a creative activity and that programming is not an exact science. From this point of view even the term Software Engineering may be considered unsuitable since we could preferably speak of software development technique, which term does not imply the rigor of a formal engineering approach. In our opinion it is a mistake to assume that programs can be mechanically generated by some mechanical methodology, no matter how sophisticated. When Software Engineering falls short of producing the expected results it is because we over-stressed the scientific and technical aspects of program development over those that are artistic or aesthetic in nature or that depend on talent, personal endowments, or know-how. Nevertheless, as there is technique in art, there is technique in program development. Software Engineering is the conventional name that groups the technical and scientific aspects of program development.
    Smaller software projects usually take place within the constraints of a limited budget. Often financial resources do not extend to hiring trained software project managers or specialists in the field of Software Engineering. The person in charge of the project usually wears many hats, including that of project manager and software engineer. In fact, it is not unusual that the project manager/engineer is also part-time designer, programmer, tester, and documentation specialist. What this all means is that the formality and rigor used in engineering a major project may not apply to one of lesser proportions. In other words, the strictness and rigidity of Software Engineering principles may have to be scaled down to accommodate the smaller projects.
  • Embedded Software System Testing
    eBook - ePub

    Embedded Software System Testing

    Automatic Testing Solution Based on Formal Method

    • Yongfeng Yin, Bo Jiang(Authors)
    • 2023(Publication Date)
    • CRC Press
      (Publisher)
    2 Embedded Software Engineering and Quality Characteristics
    DOI: 10.1201/9781003390923-3
    S oftware engineering is an engineering methodology that guides the development and maintenance of computer software. It is a discipline that studies the construction and maintenance of effective, practical, and high-quality software with engineering methods. This chapter will use limited space to introduce the embedded Software Engineering process and management technology, and finally give the quality characteristics of embedded software.

    2.1 Embedded Software Engineering

    IEEE has the following definitions in the glossary of Software Engineering terms:
    Software Engineering is: (ADS2 ) Applying engineering methods to software processes, that is, applying systematic, strictly constrained, and quantifiable methods to software development, operation, and maintenance; RT-LAB/ATB:RT-LAB research on the method described in (ADS2 ). The Software Engineering aims to develop software products with applicability, effectiveness, modifiability, reliability, understandability, maintainability, reusability, portability, traceability, interoperability, and meeting user needs under the premise of given cost and schedule. Pursuing these goals will help improve the quality and development efficiency of software products and reduce the difficulty of maintenance. Software Engineering involves programming languages, databases, software development tools, system platforms, standards, design patterns, etc.
    With the continuous development of computer technology, software development has experienced the evolution process of program design stage, software design stage, and Software Engineering stage.
    1. Program design stage
      The program design stage appeared from 1946 to 1955. The characteristics of this stage are: there is no concept of software; the program design is mainly developed around hardware, with small scale and simple tools, and there is no clear division of labor (developers and users); program design pursues space saving and programming skills; there is almost no documentation (except the program list); and the program mainly served for scientific computing at that time.
  • Developing Information Systems
    eBook - ePub

    Developing Information Systems

    Practical guidance for IT professionals

    Figure 6.1 summarises some of the key elements that make up a particular information system solution. We shall explore each of these as we progress through this chapter.
    To provide a reasonably thorough coverage of development approaches in the twenty-first century, it is necessary to consider aspects of methodology, technology, Software Engineering, procurement and management.
    Figure 6.1 Development approaches: schematic overview Methodology
    Methodologies define repeatable processes. A systems development methodology also defines a set of deliverables to be produced at various stages of the process, the roles and responsibilities of people who participate in the process and, often, the techniques that can be used at various stages of the process.
    Technology
    The approach taken to developing a computer system cannot be completely divorced from the technology used within the solution. Some approaches are only possible as a result of specific enabling technologies; for instance cloud-based solutions.
    Software Engineering A useful definition of Software Engineering is:
    ‘the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software.’
    (IEEE Standard Glossary of Software Engineering Terminology , IEEE std 610.12 – 1990).
    Since the inception of the concept of Software Engineering, a number of Software Engineering paradigms1 have emerged, most notably the object-oriented paradigm, covered in more detail in Chapter 8 .
    Procurement
    In the context of systems development, procurement refers to the process of evaluation, selection, negotiation and purchase of a software solution or set of services that make up the solution, or a part of it.
    Management Management incorporates the planning, monitoring and controlling of an activity or process. A key element of management is also governance, which, in the context of IT has been defined as:
  • Software Engineering Design
    eBook - ePub

    Software Engineering Design

    Theory and Practice

    In the previous sections, design was introduced as a systematic and intelligent process for generating, evaluating, and specifying designs for devices, systems, or processes. To support this process, the problem-solving skill was identified as an essential ingredient for designing complex products. These discussions provided a general perspective on the importance of these concepts in the engineering profession. As in other engineering disciplines, design and problem-solving are crucial to the development of professional, large-scale, software systems. Software systems are highly complex, difficult to create, costly to change, and—depending on the software product—critical to human safety. Similarly to other engineering disciplines, designs in Software Engineering are used to identify, evaluate, and specify the structural and behavioral characteristics of software systems that adhere to some specification. Software designs provide blueprints that capture how software systems meet their required functions and how they are shaped to meet their intended quality. Formally, Software Engineering design is defined as
    (1) The process of identifying, evaluating, validating, and specifying the architectural, detailed, and construction models required to build software that meets its intended functional and nonfunctional requirements; and (2) the result of such process.
    The term software design is used interchangeably in practice as a means to describe both the process and product of software design. From a process perspective, software design is used to identify the phase, activities, tasks, and interrelationship between them required to model software’s structure and behavior before construction begins. From a product development perspective, software design is used to identify the design artifacts that result from the identified phase, activities, and tasks; therefore, these products by themselves, or collectively, are referred to as software design. Design products vary according to several factors, including design perspective, language, purpose, and their capabilities for evaluation and analysis. For example, designs can be in architectural form, using architectural notations targeted for specific stakeholders. These types of design can be presented using block diagrams, Unified Modeling Language (UML) diagrams, or other descriptive form of black-box design documentation. In other cases, design can be in detailed form, where a more white-box representation of the system is used to model structural and behavioral aspects. These can include software models that contain class diagrams, object diagrams, sequence diagrams, or activity diagrams. Other design products include models that represent interfaces, data, or user interface designs. Due to the many ways software design is used in practice, a common pitfall in Software Engineering projects is to associate design with a particular type of design artifact, therefore neglecting other forms of design or the activities required to create complete and correct software designs. Collectively, both process and products, including all variety of design products, are considered software design and are essential in most professional software projects.
  • Systems Engineering of Software-Enabled Systems
    To better understand Software Engineering, PhSEs do not need to know how to write computer programs (i.e. the details of software construction) any more than they need to know how to fabricate a special purpose computer chip or design a power supply. But in order to effectively communicate and work with SwSEs, they do need to understand the nature of software, the resulting processes and procedures used by software engineers, and the constraints under which software engineers design and construct software.
    The following 10 items are significant aspects of software and Software Engineering that PhSEs need to understand to improve the synergy between PhSEs and SwSEs.
    These 10 items are based on a paper by Fairley and Willshire; additional information about the things systems engineers need to know about software and Software Engineering is provided by the topic “Key Points a Systems Engineer Needs to Know About Software Engineering” in the Part 6 knowledge area of the Guide to the Systems Engineering Body of Knowledge: “Systems Engineering and Software Engineering” (Fairley and Willshire 2011a ; Adcock 2017 ).
    More information about Software Engineering can be found in IEEE Standard 12207, the Guide to the Software Engineering Body of Knowledge, and the Software Engineering Competency Model (ISO 2017 ; Bourque and Fairley 2014 ; Fairley et al. 2014 ).

    2.4.1 Systems Engineering and Software Engineering are Distinct Disciplines

    Engineering disciplines are concerned with applying mathematics, scientific principles, economics, and management skills to development of systems that make life easier, more pleasurable, safer, and more secure. It might appear that Software Engineering is an application of systems engineering because both disciplines apply similar processes of analysis, design, realization, verification, transition, and validation to develop systems of interest. And systems engineers and software engineers, like all engineers, seek to provide effective solutions to technical problems within the constraints of time, effort, cost, available technology, necessary quality attributes, and cultural norms.
  • INCOSE Systems Engineering Handbook
    No longer available |Learn more

    INCOSE Systems Engineering Handbook

    A Guide for System Life Cycle Processes and Activities

    • (Author)
    • 2015(Publication Date)
    • Wiley
      (Publisher)
    It focuses on defining customer needs and required functionality early in the development cycle, documenting requirements, and then proceeding with design synthesis and system validation while considering the complete problem: operations, cost and schedule, performance, training and support, test, manufacturing, and disposal. Systems engineering integrates all the disciplines and specialty groups into a team effort forming a structured development process that proceeds from concept to production to operation. Systems engineering considers both the business and the technical needs of all customers with the goal of providing a quality product that meets the user needs. (INCOSE, 2004) Systems engineering is an iterative process of top-down synthesis, development, and operation of a real-world system that satisfies, in a near optimal manner, the full range of requirements for the system. (Eisner, 2008) Systems engineering is a discipline that concentrates on the design and application of the whole (system) as distinct from the parts. It involves looking at a problem in its entirety, taking into account all the facets and all the variables and relating the social to the technical aspect. (FAA, 2006) Certain keywords emerge from this sampling—interdisciplinary, iterative, sociotechnical, and wholeness. The SE perspective is based on systems thinking. Systems thinking (see Section 2.9.2) is a unique perspective on reality—a perspective that sharpens our awareness of wholes and how the parts within those wholes interrelate. When a system is considered as a combination of system elements, systems thinking acknowledges the primacy of the whole (system) and the primacy of the relation of the interrelationships of the system elements to the whole. Systems thinking occurs through discovery, learning, diagnosis, and dialogue that lead to sensing, modeling, and talking about the real world to better understand, define, and work with systems
  • Theory and Practice of Computation
    eBook - ePub

    Theory and Practice of Computation

    Proceedings of the Workshop on Computation: Theory and Practice (WCTP 2019), September 26-27, 2019, Manila, The Philippines

    • Shin-ya Nishizaki, Masayuki Numao, Merlin Suarez, Jaime Caro(Authors)
    • 2020(Publication Date)
    • CRC Press
      (Publisher)
    Sison & Yang, 2007 ). Reductions in overtime was not yet achieved despite using daily scrum meetings because of underestimated amount of time for the sprint. In fact, some developers claim that daily scrum meetings are taking too much valuable time when they could be working on their task already.

    3.2     Software Engineering in the academe

    3.2.1     Software Engineering course offering
    In the Philippines university students are exposed to Software Engineering as part of the Computer Science course offering. In the undergraduate degree these are divided into two subjects (SE 1 and SE 2) taken for two semesters (e.g. University of the Philippines-Diliman, UP Manila, University of Santo Tomas to name a few). This is also true in both of the university samples looked at. Some universities provide the course in two parts: theory and laboratory (e.g. MAPUA). Advanced Software Engineering topics are also offered in the graduate degree.
    For UP Diliman (University A), Software Engineering 1 course covers the principles of Software Engineering, software project management, requirements engineering, software architecture and design patterns, software quality assurance, and software testing. The subject requirements include project documentation deliverables, requirements engineering deliverables, design engineering deliverables, and testing deliverables. Software Engineering 2 focuses on software implementation and maintenance. The course requirement includes implementation and testing deliverables, alpha/beta analysis and testing deliverables, at least two (2) software project releases, final project and oral defense.
    For University B, the Software Engineering course examines how systems are developed and the process it takes to propose one to an actual client. A project proposal is required, intended for later development and implementation in SE 2. SE 1 requirements included: (a) System Project Management Plan, (b) System Requirement Specifications, (c) System Design Document and (d) System Test Plan. SE 2 carry on requirements of SE 1. It emphasizes the technical foundations of software development, such as requirements analysis, cost estimation, design, team organization, quality control, configuration management, verification, testing, software implementation, and maintenance. SE 2 course requirements focused on the project deliverables (i.e. project documents and project defense).
Index pages curate the most relevant extracts from our library of academic textbooks. They’ve been created using an in-house natural language model (NLM), each adding context and meaning to key research topics.