System Design Basics
Computing systems[edit | edit source]
A computer is a device. A computing system, by contrast, is a dynamic entity, used to solve problems and interact with its environment. A computing system is composed of hardware, software, and the data that it manages. Computer hardware is the collection of physical elements that make up the machine: boxes, circuits boards, chips, wires, disk drives, keyboards, monitors, printers, etc. Computer software is the collection of programs that provide the instructions that a computing system carries out. And at the very heart of a computer is the information that it manages. Without data, the hardware and software have no use.
Layers of a Computing System[edit | edit source]
A computing system is like an ogre, made up of many layers. Each layer plays a specific role in the overall design of the system. These layers are illustrated in the figure to the right.
Each layer, in itself, is not that complicated. In fact, a computer actually does only very simple tasks − it just does them so blindingly fast that many simple tasks can be combined to accomplish larger, more complicated tasks. When the various computer layers are all brought together, each playing its own role, amazing things can result from the combination of these basic ideas.
The innermost layer, information, reflects the way we represent information on a computer. In many ways, this is purely conceptual. Information on a computer is managed using binary digits, 1s and 0s. To understand computer processing, one must first understand the binary number system and its relationship to other number systems.
The next layer, hardware, consists of the physical hardware of a computer system. Computer hardware includes devices such as gates and circuits, which control the flow of electricity in fundamental ways. The core electronic circuit gives rise to specialized hardware components such as the computer's central processing unit (CPU) and memory. In domestic environments where computer play a practical part in day-to-day affairs, hardware also consists of external peripherals such as the mouse, keyboard, and screen.
The programming layer deals with software, the instructions used to accomplish computations and manage data. Programs can take many forms, be performed at many levels, and be implemented in many different languages. Yet, despite the enormous variety of programming issues, the goal remains the same: to solve problems.
Every computer has an operating system (OS) to help manage the computer's resources. Operating systems, such as Linux, help us interact with the computer system and manage the way hardware devices, programs, and data interact. Knowing what an operating system does is key to understanding the computer in general.
The previous (inner) layer focus on making a computer system work. The applications layer, by contrast, focuses on using the computer to solve specific real-world problems. We run application programs to take advantage of the computer's abilities in other areas, such as helping us design a building or play a game. The spectrum of area-specific computer software tools is far-reaching and involves specific sub disciplines of computing, such as information systems, artificial intelligence, and simulation.
Computers no longer exist in isolation on someone's desktop. We use computer technology to communicate, and that communication is a fundamental layer at which computing systems operate. Computers are connected into networks so that they can share information and resources. The Internet, for example, evolved into a global network, so that there is now almost no place on Earth that you cannot communicate with via computing technology. The World Wide Web makes that communication relatively easy; it has revolutionized computer use and made it accessible to the general public.
Roles that a computer may take in today's internet are as simple client, or end user; web server; an email server, a computer that handles email messaging; a DNS server, a computer that translates domain names (such as wikibooks.org) into computer-friendly addresses (such as 18.104.22.168); a router, or a computer handling data over a network; or a firewall, a computer tasked with the control of allowed and disallowed connections, typically for security purposes.
The use of computing technology can result in increased security hazards. Some issues of security are dealt with at low levels throughout a computer system. Many of them, though, involve keeping our personal information secure.
Information security[edit | edit source]
Many of the high-level issues discussed are that of information security, the set of techniques and policies enforced by an organisation or individual to ensure proper access to protected data. Information security makes certain that data cannot be read or modified by anyone without the proper authorization, and that the data will be available when needed to those who do.
Information security can be described as the synthesis of confidentiality, integrity, and availability. Although these aspects of information security overlap and interact, they define three specific ways to look at the problem. Any good solution to the information security problem must adequately address each of these issues.
- Confidentiality is ensuring that key data remains protected from unauthorized access. For example, you don't want just anyone to be able to learn how much money you have in your savings account.
- Integrity is ensuring that data can be modified only by appropriate mechanisms. It defines the level of trust you can have in the information. You don't want a hacker to be able to modify your bank balance, of course, but you also don't want a teller (who has authorized access) to modify your balance in appropriate ways and without your approval. Furthermore, you wouldn't want your balance changed by a power surge or compromised during an electronic transmission of the data.
- Availability is the degree to which authorized users can access appropriate information for legitimate purposes when needed. Even if data is protected, it isn't useful if you can't get to it. A hardware problem such as a disk crash can cause an availability problem if precautions aren't taken to back up data and maintain redundant access mechanisms. Also, a hacker could launch an attack that "floods" a network with useless transmissions, and thereby keep legitimate users from connecting to remote systems.
From a business point of view, planning for information security requires risk analysis, which is the process of demining which data needs protecting, identifying the risk to that data, and calculating the likelihood that a risk may become reality. Once a risk analysis is complete, plans can be implemented to manage the risk accordingly. A risk is the pairing of a threat to a vulnerability. We want to minimize our vulnerability to threats that can put us at the most risk. These threats can be either malicious, such as those posed by a hacker, or accidental, such as a system crash.
Another principle embraced by information security experts is the concept of separating the available data management privileges so that no single individual has the authority to have a significant impact on the system. This principle is often implemented by having redundant checks and/or approvals needed for key activities. For instance, large financial transactions often require a separate authorization process. Administrators should assign to an individual only those privileges needed to carry out their job functions.
Central to the confidentiality and integrity of your data is making sure unauthorized users cannot gain access to your account.
Developing a new system[edit | edit source]
A stakeholder in an organization is any group or individual who affects/is affected by the organization's objectives. Stakeholders may be responsible for designs, have an financial interest, or be responsible for maintenance with a client's organization.
Examples of stakeholders include: users, developers, legislators and decision-makers.
Current approaches to software quality[edit | edit source]
There are many methods for obtaining needs from stakeholders.
One method is observation: this involves monitoring a system while it is at work. For example, a developer may watch as a union worker registers new members over the course of the day and record down notes the process (along with questions asked, information needed, etc). While this method doesn't produce quantifiable data, observation allows the developers an human insight into the process that other methods may not obtain. Additionally, it is impossible to change a system without observing it.
Surveys are an easier method of collecting data. As they can be taken remotely, they are cheaper and less time consuming. Surveys produce clear numbers that are easy to perform statistics on. For example, an email may be sent to all the costumers of a library asking them about how they use the current (non-computerized) book loaning system. However, response rates may be low, or responses may exhibit bias.
Interviews allow the researchers to interact with the stakeholders. They are more direct method of collecting data. However, small sample sizes remain a risk, as well as social pressure on stakeholders.
It is important to keep in mind the privacy of stakeholders. For example, if designing a system for reporting corruption in government agencies, one may not want to publish the identities of the whistleblowers interviewed during the design process to protect the sources.
If there is a legacy system that's being replaced one must examine the current system first. Also one can analyse similar competing products. Additionally it is necessary to take the organisational capabilities (how much resources e.g.: money, the organisation has available) into account and sometimes performing literature searches (e.g.: google it) for appropriate techniques.
Software engineering[edit | edit source]
Flow Charts[edit | edit source]
A flowchart is a type of diagram that represents an algorithm, workflow or process, showing the steps as boxes of various kinds, and their order by connecting them with arrows.
Data Flow Diagrams[edit | edit source]
Data flow charts are very similar to system flow charts, except they do not show decisions being made. They only show the different paths the data takes, where it is held, and where it is processed.
Structure Charts[edit | edit source]
A structure chart breaks down a computer system into its submodules. They represent the modularization aspect of computer science. (balance between fragmentation/specialization)
Social and Ethical Aspects[edit | edit source]
- Reliability: Systems must provide accurate data that corresponds to reality. Outdated or incorrect data may cause serious social issues. For example, a bank system that indicates a customer did not pay back a loan - although they did in reality - may cause significant duress for the end-user.
- Security: Ensuring the confidentiality and integrity of data is a critical ethical aspect, particularly with organizations that deal with sensitive information (Médecins Sans Frontières for example)
- Privacy & Anonymity: Consider the Tor Project, who develop the Tor browser. During the Arab Spring, protesters used Tor to access social media and report on crimes against protesters when governments blocked social media. Ensuring protection of the identities of those protesters was a very important consideration in the design of Tor by the developers.
- Intellectual Property: File sharing websites such as the Pirate Bay challenge traditional copyright ideas. These are a hot topic of contention on the internet today.
- Surveillance: As computer systems become increasingly prevalent in daily life, it is important that the ability for the tracking and collection of data from users remain controlled and protect the user.
- Globalization: With computer systems becoming increasingly used around the world, it is important to consider the potential issues associated with the exchange of data around the world. For example, distributing data to people in different timezones poses a challenge. Character encoding of different languages was also a significant problem faced in the 1980s.
Formal verification[edit | edit source]
Software prototyping is the activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed. Prototyping has several benefits: The software designer and implementer can get valuable feedback from the users early in the project. The client and the contractor can compare if the software made matches the software specification.
Prototypes are often used alongside iterative design processes to quickly build a product for market which is suitable to the clients needs. Iterative design allows products to be improved and refined quickly based off testing results. For example, Windows 8.1 was shortly released after the failure of an OS that was Windows 8.
Dissatisfaction from end-users as their needs may not be met.
Human interaction[edit | edit source]
Usability is the ease of use and learn-ability of a human-made object. The object of use can be a software application or anything a human interacts with. The more efficient, more satisfying and more memorable a program is, the more usable it is.
Consider digital cameras. They often have small buttons that users with physical disabilities have trouble using. Additionally, blind users cannot use the view finder.
Accessibility defines how the system can be accesses for information exchange and operation. This usually involves a keyboard, mouse and a screen. However, for some people using these methods to access the system is difficult or impossible.
Ways to improve accessibility of a system:
Touch screens Voice recognition Text-to-speech Braille keyboards Braille printers
For an excellent example, see Stephen Hawking. Other methods are: improve range of languages, make the user interface more intuitive/user friendly, reduce the use of jargon and complicated terminology, make system available over internet and reduce cost of the system (get more people to use it).
Voice recognition systems often misinterpret accents/dialects and do not deal with ambient noise well.
- Environmental: Data centers use large amounts of electrical power. However, countries like Iceland have already invested in 100% renewable energy data centers. Computers have also reduced pollution costs of travel through introduction of telecommuting.
- Moral: Dragnet surveillance programs, such as NSA's PRISM and XKeyScore programs, arguably breach the right to privacy of internet users around the world.
- Social: Globalization of culture. Allows people from distance parts of the world to meet instantly. Easy, cheap entertainment for all.
- Economic: People may lose jobs. Typists are the canonical example.