Chapter 1 Flashcards
(37 cards)
What is software engineering?
Software Engineering refers to applying engineering principles to software development. (not the same thing as software development). It is a problem-solving activity.
What is software?
Software is both a solution and a problem. Generally it Is a solution to a problem.
What are examples of softwares?
- Word processors: The first word processors were built because composition, editing, and formatting of docu- ments was difficult using typewriters.
- Supply-chain logistics systems: A business may require some custom-built software to keep track of supply- chain logistics, because the current manual system they employ is inefficient and error prone.
- Games: Games are typically built to provide entertainment, and thus relieve us of the problem of boredom.
Can software stand in isolation?
NO. Software must interact with hardware devices that provide it with input and output (e.g. keyboards and PC monitors, or sensors and actuators in a rail system). Software is developed as part of a larger system.
What is a system?
A system is a collection of entities that are inter-connected. It is a set of programs, hardware components, networks and other devices that are inter-connected and work together to achieve a common goal.
What is a software system?
a set of programs that are inter-connected or related.
What are some requirements that limit software developement?
constraints imposed by hardware, communications networks, and other software.
How do you have the software match the hardware?
Via APIs. The design of a software system typically abstracts away from the details of the networks, operating systems and hardware.
What are APIs?
application programmer interfaces (APIs)
- allow developers to interact with hardware platforms without worrying about details of that interaction.
Do APIs protect us entirely from hardware?
An API, however, does not completely isolate us from networks and hardware. For example, it takes time for messages to be sent along a network and it takes time to acquire resources such as printers and data bases.
How to sensors affect software design?
Sensors, such as temperature sensors, motion detectors, RFID sensors, and cameras are other examples of devices that will not only influence your software design, but are often key parts of your solution to a specific engineering problem. In practice systems involving sensors require a complete systems approach to design.
What is a systems approach to design?
A systems approach is required for the design of many programs, especially if they combine hardware, software and networks into a single entity. This means much more than having to just think about delivering functions.
What are factors you have to consider with a systems approach to design?
- the physical layout of computers, network cables and the positioning of sensors, and other hardware;
- the reliability of components and how this affects the reliability of the system as a whole;
- the performance of components and how it affects the system as a whole; and
- other factors that will influence the behaviour of the system as a whole and how the system meets its goals.
What is a platform?
a computer executing a specific operating system possibly (probably) connected to a network and devices such as printers, scanners, PDAs or sensors. Every piece of software we write will eventually run on a platform.
What latencies do you have to consider when designing a system?
In designing and testing a system, you will need to take into account the latencies due to networks, communication with external devices such as sensors and interaction with other systems.
Define Software Engineering
- The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
- The study of approaches as in (1).
Thus, software engineering is both the application of engineering principles to the development and maintenance of software, as well as the study of how this can be done
What are the 10 areas of knowledge that make up software engineering?
- software requirements; 2. software design;
- software construction; 4. software testing;
- software maintenance;
- software configuration management;
- software engineering management;
- software engineering process;
- software engineering tools and methods; and
- software quality.
What are 5 extra knowledge areas added to SWEBOK?
- software engineering professional practice; 2. software engineering economics;
- computing foundations;
- mathematical foundations; and
- engineering foundations.
What are some areas of application in a software engineering project?
- computer science theory;
- processes;
- project management;
- methods and techniques for planning and measurement;
- experience.
Each of these play an important role in most projects, and without them, many projects would fail.
computer science vs software engineering. How do they differ?
Computer science
- a science
- the theoretical foundation on which software engineering is built.
Software Engineering
- an engineering method
- the theoretical foundation on which software engineering is built.
A software engineer applies the results from computer science as problem-solving tools in their projects. What chemistry is to chemical engineering, or physics is to electrical engineering.
What is the inherit difference between comp sci and software engineering?
Complexity usually caused by the size of the system.
Other factors are also an influence.
Put simply, computer science is concerned with solving small-scale problems regarding certain computational problems, while software engineering is concerned with how to build and manage large-scale systems.
The complexity of large-scale systems is generally so great that it is not possible for one person to understand the system, so it is necessary for teams of people to coordinate with each other for a software project to succeed.
Example of of a large scale software engineering project?
The first Linux operating system kernel, which was designed and implemented by Linus Torvalds entirely on his own, consisted of just over 10 thousand lines of code. Linux 4.2, released in June 2015, consists of almost 19.5 million lines of code, and has been developed by thousands of people over almost two decades. The Linux kernel could simply not have been produced without following sound software engineering principles, due to its inherent complexity. Software engineering is about dealing with this complexity using art, science, and engineering. There are several planning, problem solving, monitoring, and controlling disciplines involved in the development now. For example, the Linux kernel itself has several different branches, with each branch having several levels of stability. Such a task requires a configuration management process that must be strictly adhered to. Such a process is part of the larger software engineering method that is followed by Torvalds and his army of developers.
How do software engineers approach solving large scale problems?
a top-down approach to building software. They:
- gather a good understanding of the problem at a high-level of abstraction
- analyse this problem, and then
- break this problem into smaller problems that are easier to understand and solve.
- use computer science as the tool to solve these smaller problems
- synthesis the entire solution from these smaller building blocks; a bottom-up approach.
What are some similarities between software engineering and other forms of engineering?
- All forms of engineering are concerned with building reliable products that solve some problem.
- The use of science, maths, and empirical knowledge to assure quality of the products, and to reduce the cost of building and maintaining products.
- The use of large teams to build large-scale products.
- Most engineering disciplines suffer from the problem of changing requirements. For example, civil engineers will have customers change their preferences during the design of a building, electrical engineers will change their mind during the design of a portable device, etc. Similarly, software engineers must account for the changing requirements of their customers.