Chapter 1 Flashcards

1
Q

What is software engineering?

A

Software Engineering refers to applying engineering principles to software development. (not the same thing as software development). It is a problem-solving activity.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is software?

A

Software is both a solution and a problem. Generally it Is a solution to a problem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What are examples of softwares?

A
  1. Word processors: The first word processors were built because composition, editing, and formatting of docu- ments was difficult using typewriters.
  2. 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.
  3. Games: Games are typically built to provide entertainment, and thus relieve us of the problem of boredom.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Can software stand in isolation?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

What is a system?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What is a software system?

A

a set of programs that are inter-connected or related.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What are some requirements that limit software developement?

A

constraints imposed by hardware, communications networks, and other software.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

How do you have the software match the hardware?

A

Via APIs. The design of a software system typically abstracts away from the details of the networks, operating systems and hardware.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What are APIs?

A

application programmer interfaces (APIs)

- allow developers to interact with hardware platforms without worrying about details of that interaction.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Do APIs protect us entirely from hardware?

A

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 well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

How to sensors affect software design?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What is a systems approach to design?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What are factors you have to consider with a systems approach to design?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What is a platform?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

What latencies do you have to consider when designing a system?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Define Software Engineering

A
  1. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
  2. 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
17
Q

What are the 10 areas of knowledge that make up software engineering?

A
  1. software requirements; 2. software design;
  2. software construction; 4. software testing;
  3. software maintenance;
  4. software configuration management;
  5. software engineering management;
  6. software engineering process;
  7. software engineering tools and methods; and
  8. software quality.
18
Q

What are 5 extra knowledge areas added to SWEBOK?

A
  1. software engineering professional practice; 2. software engineering economics;
  2. computing foundations;
  3. mathematical foundations; and
  4. engineering foundations.
19
Q

What are some areas of application in a software engineering project?

A
  1. computer science theory;
  2. processes;
  3. project management;
  4. methods and techniques for planning and measurement;
  5. experience.
    Each of these play an important role in most projects, and without them, many projects would fail.
20
Q

computer science vs software engineering. How do they differ?

A

Computer science

  1. a science
  2. the theoretical foundation on which software engineering is built.

Software Engineering

  1. an engineering method
  2. 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.

21
Q

What is the inherit difference between comp sci and software engineering?

A

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.

22
Q

Example of of a large scale software engineering project?

A

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.

23
Q

How do software engineers approach solving large scale problems?

A

a top-down approach to building software. They:

  1. gather a good understanding of the problem at a high-level of abstraction
  2. analyse this problem, and then
  3. break this problem into smaller problems that are easier to understand and solve.
  4. use computer science as the tool to solve these smaller problems
  5. synthesis the entire solution from these smaller building blocks; a bottom-up approach.
24
Q

What are some similarities between software engineering and other forms of engineering?

A
  • 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.
25
Q

What are some differences between software engineering and other forms of engineering?

A
  1. Age
  2. Cost
  3. Flexibility
  4. Innovation
  5. Complexity
  6. Reliability
26
Q

How is ‘age’ a differentiating factor between software engineering and other forms of engineering?

A

Software engineering is an immature discipline, spanning roughly the last 50 years. Civil engineering, on the other hand, is thousands of years old. Software engineers have taken advantage of the wisdom and experience gained in other engineering disciplines to apply them to the software.

27
Q

How is ‘cost’ a differentiating factor between software engineering and other forms of engineering?

A

The cost of construction materials and labour (other than engineering labour) is significantly higher in other engineering disciplines, relative to the costs of a a compiler and a PC. As such, the percentage of engineering in a software system is notably higher than in other engineering disciplines, so delays and mistakes have a larger impact.

28
Q

How is ‘flexibility’ a differentiating factor between software engineering and other forms of engineering?

A

Software is generally quite flexible. This is related to the previous point on cost. It is more straightfor- ward to change something about a software system after it is built than for many other types of engineered products. For example, you would never ask a civil engineer to move a bridge 50 metres downstream one month before opening. However, software engineers are routinely asked to change major parts of a project just prior to release. Only with proper control can this be achieved.

29
Q

How is ‘innovation’ a differentiating factor between software engineering and other forms of engineering?

A

Typically, software is more innovative than other engineered products. Due to the relative ease and low cost of replicating a piece of software, software engineers are often solving a problem that has never been solved before. As a result, software engineers often have to use more innovative solutions.
Domain specificity: While all engineering projects have constraints on the product, such as their environment, software engineering projects are almost always domain specific, and often this requires the software engineers to understand to most important parts of the domain. For example, when constructing an office building, it is often largely irrelevant what the business of occupants of the building will be. However, for software, the domain of application is highly relevan

30
Q

How is ‘complexity’ a differentiating factor between software engineering and other forms of engineering?

A

The level of complexity of a software application is generally much higher than in other forms of engineering. Large software systems contain a number of variables with many interactions between them that are difficult to understand.

31
Q

How is ‘reliability’ a differentiating factor between software engineering and other forms of engineering?

A

Software systems are typically more unreliable than other engineered products. This is largely due to the factors already discussed: products are more complex; the field is less mature, so the tools and techniques cannot cope with this complexity; more innovative solutions are required, so there is less scope to use tried and tested techniques; software engineers cannot often obtain a good enough understand of the domain of the software; and the cost of replicating and re-deploying software is low enough that unreliable systems can be replaced more easily. Furthermore, people tolerate unreliable software systems more than other engineered products. An unreliable bridge, electrical product, chemical, etc., are likely to cause harm, whereas the average desktop application will not. We do find, however, that safety-critical software systems are engineered more carefully and rigorously than standard desktop application for this very reason, and are more reliable.

32
Q

Why do we need software engineering?

A

It is certainly possible for a group of genius programmers to get together and hack out a quality product, but this would be largely due to luck and individual brilliance. Unfortunately, there are not enough charmed geniuses in the world to support even a fraction of the requests of those wanting quality software, so we use software engineering to provide systematically and repeatedly build quality software.

33
Q

How did the field of software engineering come about?

A

The development of software engineering as a field came about from necessity. People building software found that they encountered many problems during construction, and so produced techniques to mitigate these. They found that applying many of these systematically results in repeatedly being able to build quality software, so they share these with the rest of the community. There are many different tools and techniques for many different types of systems, but software engineers will only create and adopt these tools and techniques if they believe that they help to solve some problem.

34
Q

Why is software engineering becoming more important?

A

The reason the discipline of software engineering is becoming more important is because software is become more and more complex. As the power of computing increases, and the size of problems that can be solved in a reasonable time becomes larger, the ability to conceive and develop these solutions becomes more difficult.

35
Q

How does software engineering help to manage the complexity?

A

Software engineering helps to manage this complexity using four broad disciplines: monitoring, controlling, analysis, and synthesis.

36
Q

What are some of the main reasons why software projects fail?

A
  1. Misunderstanding of requirements
  2. Design failures
  3. Project management failures
  4. Other
    he “other” entry here includes failure in team work, incorrect choices of technology, insufficient testing, insufficient configuration management.

Therefore, what many people may consider as the typical software “bug” account for a small amount of software failures of released systems. Despite much of the careful planning and hard work that goes into many requirements documents, requirements account for more than half of all failures.

37
Q

What is a bug?

A

a programmer writing code that behaves differently to what they intended