Professional Documents
Culture Documents
Yao-Yuan Chuang
1
Outline
High Performance Computing
Scientific Computing
Parallel Computing
UNIX, GNU, and Linux
Cluster Environment
Bash
Linux Commands
Software development process
2
High-Performance
Computing
The term high performance computing (HPC) refers to
the use of (parallel) supercomputers and computer clusters
, that is, computing systems comprised of multiple (usually
mass-produced) processors linked together in a single
system with commercially available interconnects.
3
Scientific Computing
Scientific computing (or computational science) is the
field of study concerned with constructing
mathematical models and numerical solution techniques
and using computers to analyze and solve scientific and
engineering problems.
4
Problem Domains for Computational
Science/Scientific Computing
Numerical simulations
Numerical simulations have different objectives depending on the
nature of the task being simulated:
Reconstruct and understand known events (e.g., earthquake, tsunamis
and other natural disasters).
Predict future or unobserved situations (e.g., weather, sub-atomic
particle behavior).
Optimization
Optimize known scenarios (e.g., technical and manufacturing
processes, front end engineering).
5
Supercomputer
A supercomputer is a computer
that leads the world in terms of
processing capacity, particularly
speed of calculation, at the time
of its introduction. The term
"Super Computing" was first used
by New York World newspaper in
1920 to refer to large custom-
built tabulators IBM made for
Columbia University.
6
IBM Roadrunner, LLNL, USA, 1.026
PFLOPS
7
Moores Law
Moore's Law is the
empirical observation
made in 1965 that the
number of transistors
on an integrated circuit
for minimum
component cost doubles
every 24 months.
8
FLOPS
In computing, FLOPS (or flops) is an acronym
meaning FLoating point Operations Per Second.
This is used as a measure of a computer's
performance, especially in fields of scientific
calculations that make heavy use of floating point
calculations; similar to million instructions per second
(MIPS).
9
www.top500.org
10
www.linuxhpc.org
11
www.winhpc.org
12
Intels 80 Core Chip
Performance numbers*
at 4.27 Ghz:
peak performance:
* 1.37 SP TFLOPS
Explicit PDE solver:
* 1 SP TFLOPS
matrix multiplication:
0.51 SP TFLOPS
2 independent FMAC units 2 Single 13
Precision FLOPS per cycle
Compiler
A programming language is an
artificial language that can be used
to control the behavior of a
machine, particularly a computer.
14
Debug and Performance
Analysis
Debugging is a methodical process of finding and reducing
the number of bugs, or defects, in a computer program or a
piece of electronic hardware thus making it behave as
expected.
15
Optimization
In computing, optimization is the process of
modifying a system to make some aspect of it
work more efficiently or use less resources. For
instance, a computer program may be optimized
so that it executes more rapidly, or is capable of
operating within a reduced amount of
memory storage, or draws less battery power in a
portable computer. The system may be a single
computer program, a collection of computers or
even an entire network such as the Internet.
16
(http://en.wikipedia/org/wiki/Optimization_%28computer_science
Parallel Computing
Parallel computing is the simultaneous execution of the
same task (split up and specially adapted) on multiple
processors in order to obtain results faster.
Flynn's taxonomy
whether all processors execute the same instructions at the
same time (single instruction/multiple data -- SIMD)
each processor executes different instructions (multiple
instruction/multiple data -- MIMD).
17
(http://en.wikipedia/org/wiki/Parallel_comput
Terminology in parallel
computing
Efficiency
is the execution time using a single processor divided by the quantity of
the execution time using a multiprocessor and the number of procesors.
Parallel Overhead
the extra work associated with parallel version compared to its
sequential code, mostly the extra CPU time and memory space
requirements from synchronization, data communications, parallel
environment creation and cancellation, etc.
Synchronization
the coordination of simultaneous tasks to ensure correctness and avoid
unexpected race conditions.
Speedup
also called parallel speedup, which is defined as wall-clock time of best
serial execution divided by wall-clock time of parallel execution.
Amdahl's law can be used to give a maximum speedup factor.
Scalability
a parallel system's ability to gain proportionate increase in parallel
speedup with the addition of more processors. Also, see this
Parallel Computing Glossary
Task
a logically high level, discrete, independent section of computational
work. A task is typically executed by a processor as a program 18
Amdahl's law
Amdahl's law, named after computer architect Gene Amdahl
, is used to find the maximum expected improvement to an
overall system when only part of the system is improved. It is
often used in parallel computing to predict the theoretical
maximum speedup using multiple processors.
1
n Pk
k 0
is a percentage of the instructions that can be S
Pk k
improved
(or slowed),
Sk is the speed-up multiplier (where 1 is no speed-up and no
slowing),
k represents a label for each different percentage and speed-
up, and
n is the number of different speed-up/slow-downs resulting
from the system change.
19
Parallelism
One of the simplest methods used to accomplish increased
parallelism is to begin the first steps of instruction fetching
and decoding before the prior instruction finishes
executing. This is the simplest form of a technique known
as instruction pipelining, and is utilized in almost all
modern general-purpose CPUs. Pipelining allows more than
one instruction to be executed at any given time by
breaking down the execution pathway into discrete stages.
Another strategy of achieving performance is to execute
multiple programs or threads in parallel. This area of
research is known as parallel computing. In
Flynn's taxonomy, this strategy is known as Multiple
Instructions-Multiple Data or MIMD.
A less common but increasingly important paradigm of
CPUs (and indeed, computing in general) deals with data
parallelism. A vector processor, or array processor, is a
CPU design that is able to run mathematical operations on
multiple data elements simultaneously.
20
Parallelism
In computing, multitasking is a method by which
multiple tasks, also known as processes, share
common processing resources such as a CPU.
24
High-performance Clusters
High-performance clusters are implemented primarily to
provide increased performance by splitting a computational
task across many different nodes in the cluster, and are
most commonly used in scientific computing.
25
Beowulf (computing)
Beowulf is a design for high-performance parallel computing
clusters on inexpensive personal computer hardware.
Originally developed by Thomas L. Sterling and
Donald Becker at NASA, Beowulf systems are now deployed
worldwide, chiefly in support of scientific computing.
27
Pthread
POSIX Threads is a POSIX standard for threads. The
standard defines an API for creating and manipulating
threads.
28
Message Passing Interface
The Message Passing Interface (MPI) is a language-
independent computer communications descriptive application
programmer interface (API) with defined semantics and flexible
interpretations; it does not define the protocol by which these
operations are to be performed in the sense of sockets for TCP/IP
or other layer-4 and below models in the ISO/OSI Reference Model.
29
TCP/IP
Application
Transport layer (
TCP)
Network layer(IP)
Data link
Physical layer
30
OpenMP
The OpenMP (Open Multi-Processing)
application programming interface (API) supports multi-
platform shared memory multiprocessing programming in C
/C++ and Fortran on many architectures, including Unix
and Microsoft Windows platforms. It consists of a set of
compiler directives, library routines, and
environment variables that influence run-time behavior.
(http://en.wikipedia.org/wiki/Openmp)
31
Distributed Shared Memory
Distributed Shared Memory (DSM), in computer science,
refers to a wide class of software and hardware
implementations, in which each node of a cluster has
access to a large shared memory in addition to each node's
limited non-shared private memory.
32
Distributed Computing
Distributed computing is a method of computer processing
in which different parts of a program run simultaneously on
two or more computers that are communicating with each
other over a network.
33
(http://en.wikipedia/org/wiki/Distributed_comput
BOINC
The Berkeley Open Infrastructure for Network
Computing (BOINC) is a middleware system for
volunteer computing, originally developed to support
SETI@home, but intended to be useful for other
applications as well.
boinc.berkeley.edu 34
Grid Computing
Grid computing or grid clusters are a technology closely
related to cluster computing. The key differences between
grids and traditional clusters are that grids connect collections
of computers which do not fully trust each other, and hence
operate more like a computing utility than like a single
computer. In addition, grids typically support more
heterogeneous collections than are commonly supported in
clusters.
35
Topics in Parallel Compu
ting
36
UNIX
Unix (officially trademarked as UNIX) is a computer
operating system originally developed in the 1960s and 1970s by a
group of AT&T employees at Bell Labs including Ken Thompson,
Dennis Ritchie and Douglas McIlroy. Today's Unix systems are split
into various branches, developed over time by AT&T as well as
various commercial vendors and non-profit organizations.
37
UNIX
38
(http://en.wikipedia/org/wiki/Unix)
GNU
The GNU project was publicly announced by
Richard Stallman.
39
(http://en.wikipedia/org/wiki/GNU
Linux
Linus Torvalds, creator of the Linux kernel.
40
(http://en.wikipedia/org/wiki/Linux)
Kernel
In computing, the kernel is the central component of
most computer operating systems (OSs). Its
responsibilities include managing the system's resources
and the communication between hardware and software
components.
41
Linux Distribution
A Linux distribution, often simply distribution
or distro, is a member of the Linux family of
Unix-like operating systems comprised of the
Linux kernel, the non-kernel parts of the
GNU operating system, and assorted other
software. Linux distributions take a variety of
forms, from fully-featured desktop and server
operating systems to minimal environments
(typically for use in embedded systems, or for
booting from a floppy).
44
(http://en.wikipedia/org/wiki/Bas
Math Cluster
45
Math Cluster
IP 140.127.223.11 (eth1)
IP 192.168.0.254 (eth0)
192.168.0.1 ~7 (node1 ~ node7)
hpc001
46
Remote Login:SSH Client
48
(http://en.wikipedia/org/wiki/Linux
General User Commands
dd Convert and copy a file (Disk Dump)
dirname Strip non-directory suffixes from a
path
echo Print to standard output
env Show environment variables; run a
program with altered environment variables
file (or stat) Determine the type of a file
nohup Run a command with immunity to
hangups outputting to non-tty
sh The Bourne shell, the standard Unix shell
uptime Print how long the system has been
running
49
(http://en.wikipedia/org/wiki/Linux
Processes and tasks
management
anacron Periodic command scheduler
at Single-time command scheduler
chroot Change the system root directory for all
child processes
cron Periodic command scheduler
crontab Crontab file editor
daemonic Interface to daemon init scripts
htop Interactive ncurses-based process viewer that allows
scrolling to see all processes and their full command lines
kill Send a signal to process, or terminate a process (by
PID)
killall Terminate all processes (in GNU/Linux, it's kill by
name)
50
(http://en.wikipedia/org/wiki/Linux
Processes and tasks
management
nice Alter priorities for processes
pgrep Find PIDs of processes by name
pidof GNU/Linux equivalent of pgrep
pkill Send a signal to process, or terminate a process (by
name). Equivalent to Linux killall
ps Report process status
renice Alter the priorities of an already running process
sleep Delay for specified time
time Time a command
timex Time process shell execution, measure process
data and system activity
top Produce a dynamic list of all resident processes
wait Wait for the specified process
51
(http://en.wikipedia/org/wiki/Linux
User management and
support
chsh Change user shell
finger Get details about user
id Print real/effective UIDs/GIDs
last show listing of last logged in users
lastlog show last log in information for users
locale Get locale specific information
localedef Compile locale definitions
logname Print user's login name
man Manual browser
mesg Control write access to your terminal
passwd Change user password
52
(http://en.wikipedia/org/wiki/Linux
User management and
support
su Start a new process (defaults to shell) as a
different user (defaults to root)
sudo execute a command as a different user.
users Show who is logged on (only users names)
w Show logged-in users and their current tasks
whatis command description from whatis
database
whereis locates the command's binary and
manual pages associated with it
which (Unix) locates where a command is
executed from
who Show who is logged on (with some details)
write Send a message to another user
53
(http://en.wikipedia/org/wiki/Linux
Filesystem Utilities
info The GNU alternative to man
man The standard unix documentation system
54
Filesystem Utilities
df Report disk space
dircmp Compare contents of files between two directories
du Calculate used disk space
fdupes Find or remove duplicate files within a directory
find Search for files through a directory hierarchy
fsck Filesystem check
ln Link one file/directory to another
ls List directory contents
lsattr List file attributes on a Linux second extended file
system
lsof list open files
55
Filesystem Utilities
mkdir Make a directory
mkfifo Make a named pipe
mount Mount a filesystem
mv Move or rename a file or directory
pwd Print the current working directory
rm Delete a file or directory tree
readlink Display value of a symbolic link, or display
canonical path for a file
rmdir Delete an empty directory
touch Create a new file or update its modification time
tree Print a depth-indented tree of a given directory
unlink System call to remove a file or directory
56
Archivers and compression
afio Compatible superset of cpio with added functionality
ar Maintain, modify, and extract from archives. Now
largely obsoleted by tar
bzip2 Block-sorting file compressor
compress Traditional compressor using the LZW algorithm
cpio A traditional archiving tool/format
gzip The gzip file compressor
p7zip 7zip for unix/linux
pack, pcat, unpack included in old versions of ATT Unix.
Uses Huffman coding, obsoleted by compress.
pax POSIX archive tool that handles multiple formats.
tar Tape ARchiver, concatenates files
uncompress Uncompresses files compressed with
compress.
zcat Prints files to stdout from gzip archives without
unpacking them to separate file(s)
57
Text Processing
awk A pattern scanning and processing language
banner Creates ascii art version of an input string for printing large
banners
cat Concatenate files to standard output
cksum Print the CRC checksum and bytecount of a file (see also
MD5)
cmp Compare two files byte for byte
cut Remove sections from each line of a file or standard input
diff Compare two text files line by line
egrep Extended pattern matching (synonym for "grep -E")
fgrep Simplified pattern matching (synonym for "grep -F")
fold Wrap each input line to fit within the given width
grep Print lines matching a pattern
head Output the first parts of a file
iconv Convert the encoding of the specified files
join Join lines of two files on a common field
less Improved more-like text pager
58
Text Processing
more Pager
nroff Fixed-width (non-typesetter) version of the standard Unix
typesetting system
patch Change files based on a patch file
sed Stream EDitor
sort Sort lines of text files
split Split a file into pieces
tail Output the tail end of files
tee Read from standard input, write to standard output and files
uudecode Decodes a binary file that was used for transmission
using electronic mail
uuencode Encodes a binary file for transmission using electronic
mail
wc Word/line/byte count
59
Text Editors
GNU Emacs Freely programmable full-screen text editor
and general computing environment (using builtin Elisp, a
simple dialect of the Lisp programming language)
Joe a screen-oriented text editor using a Wordstar-style
command set
Jove a screen-oriented text editor using an Emacs-style
command set
pico PIne's message COmposition editor (simple, easy to
use screen editor)
vi "Visual" (screen-oriented) text editor (originally ex in
screen-oriented "visual" mode)
vim Vi IMproved, portable vi-compatible editor with
multiple buffers, screen splitting, syntax highlighting and a
lot of other features not found in standard ex/vi
XEmacs Popular version of emacs that is derived from
GNU Emacs
60
Communication
ftp, sftp File transfer protocol, secure FTP
NFS Network filesystem
OpenVPN virtual private (encrypting) networking software
Postfix mail transfer agent
rsh, SSH, telnet Remote login
Samba SMB and CIFS client and server for UNIX
Sendmail popular E-Mail transport software
talk Talk to another logged-in user
uustat a Basic Networking Utilities (BNU) command that
displays status information about several types of BNU
operations
uux Remote command execution over UUCP
61
Network monitoring and
security
Ethereal and tethereal a feature rich protocol analyzer (now called
Wireshark, see below)
John the Ripper password cracking software
Nessus a comprehensive open-source network vulnerability scanning
program
Netstat displays a list of the active network connections the computer
Nmap free port scanning software
SAINT System Administrators Integrated Network Tool Network
Vulnerability Scanner.
SATAN the Security Administrator Tool for Analyzing Networks a
testing and reporting tool that collects information about networked
hosts
Snoop Solaris packet sniffer
Snort an open source network intrusion detection system
tcpdump a computer network debugging tool that intercepts and
displays TCP/IP packets being transmitted or received
Wireshark a protocol analyzer, or "packet sniffer", similar to tcpdump,
that adds a GUI frontend, and more sorting and filtering options
(formerly named Ethereal)
62
Programming Tools
bash Bourne Again SHell, (mostly) sh-compatible and csh-
compatible, standard shell on Linux systems and Mac OS X.
csh C shell. Written by Bill Joy for BSD systems.
ksh Korn shell, standard shell on many proprietary Unix
systems, powerful successor to the Unix Bourne shell (sh), written
by David Korn,
rc originally written for Plan 9.
sh Bourne shell, only shell present on all UNIX and Unix-like
systems, written by Stephen Bourne for Version 7 Unix.
tcsh TENEX C shell, standard shell on BSD systems.
zsh Z shell.
awk Standard Unix pattern scanning and text processing tool.
perl Perl scripting language.
PHP PHP scripting language.
Python Python scripting language.
63
Compilers
as GNU assembler tool.
c99 C programming language.
cc C compiler.
dbx (System V and BSD) Symbolic debugger.
f77 Fortran 77 compiler.
gcc GNU Compiler Collection C frontend (also known as GNU C Compiler)
gdb GNU symbolic debugger.
ld Program linker.
lex Lexical scanner generator.
ltrace (Linux) Trace dynamic library calls in the address space of the
watched process.
m4 Macro language.
make Automate builds.
nm List symbols from object files.
size return the size of the sections of an ELF file.
strace (Linux) or truss (Solaris) Trace system calls with their arguments
and signals. Useful debugging tool, but does not trace calls outside the
kernel, in the address space of the process(es) being watched.
64
Desktops/Graphical User
Interfaces
CDE Common Desktop Environment, most commonly
found on proprietary UNIX systems
Enlightenment an open source window manager for the X
Window System
FVWM and its variant FVWM95, which has been modified to
behave like Windows 95 Also FVWM-Crystal that aims to be
eye candy
GNOME GNU Network Object Model Environment
IceWM ICE Window Manager
JWM Joe's Window Manager
KDE K Desktop Environment
XFce a desktop environment for Unix and other Unix-like
platforms
65
Package Management
apt Front-end for dpkg or rpm
debconf Debian package configuration management
system
dpkg The Debian package manager
drakconf Front-end configuration utility for Mandriva Linux
emerge A frontend to portage
pacman A package manager used primarily by Arch Linux
portage The Gentoo Linux package manager
rpm Originally the package manager for Red Hat Linux,
now used by several distributions including Mandriva Linux
Synaptic GTK+ frontend for the apt package manager.
Primarily used by Ubuntu Linux, Debian Sarge, and other
Debian-based systems; but usable on any system using apt.
urpmi Front-end to rpm, used by Mandriva Linux
YaST - System management utility mainly used by SuSE
yum - Front-end for rpm, used by Fedora
66
Web Browsers
Dillo Extremely light-weight web browser
ELinks Enhanced links
Epiphany Light-weight GNOME web browser
Galeon Light-weight old GNOME web browser
Konqueror KDE web browser
Links Console based web browser
lynx Console based web browser
Mozilla Application Suite Graphical cross platform web
browser & email client
Mozilla Firefox Extensible Web browser
Opera Web browser and e-mail client (
Proprietary Software)
w3m Console based web browser
67
Desktop Publishing
groff Traditional typesetting system
LaTeX Popular TeX macro package for higher-
level typesetting
lp Print a file (on a line printer)
Passepartout Desktop publishing program
pr Convert text files for printing
Scribus Desktop publishing program
TeX Macro-based typesetting system
troff The original and standard Unix typesetting
system
68
Databases
DB2
Firebird
MySQL
Oracle
PostgreSQL
Progress Software
SQLite
Sybase
69
Math Tools
maxima Symbol manipulation program.
octave Numerical computing language (mostly
compatible with Matlab) and environment.
R Statistical programming language.
units Unit conversion program.
bc An arbitrary precision calculator language
with syntax similar to the C programming
language.
cal Displays a calendar
dc Reverse-Polish desk calculator which
supports unlimited precision arithmetic
fortune Fortune cookie program that prints a
random quote
70
Unix command line
File and file system management: cat | cd | chmod | chown |
chgrp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv |
pwd | rm | rmdir | split | touch
Process management: at | chroot | crontab | kill | killall | nice |
pgrep | pidof | pkill | ps | sleep | time | top | wait | watch
User Management/Environment:env | finger | id | mesg |
passwd | su | sudo | uname | uptime | w | wall | who | whoami |
write
Text processing:awk | cut | diff | ex | head | iconv | join | less |
more | paste | sed | sort | tail | tr | uniq | wc | xargs
Shell programming:echo | expr | printf | unset
Printing:lp
Communications:
inetd | netstat | ping | rlogin | traceroute
Searching:
find | grep | strings
Miscellaneous:
banner | bc | cal | man | size | yes
71
Software development
process
A software development process is a structure imposed
on the development of a software product. Synonyms
include software lifecycle and software process. There
are several models for such processes, each describing
approaches to a variety of tasks or activities that take place
during the process.
Software Elements Analysis
Specification
Software architecture
Implementation (or coding)
Testing
Documentation
Software Training and Support
Maintenance
72
Software Elements Analysis
The most important task in creating a software
product is extracting the requirements.
73
Specification
Specification is the task of precisely describing the software
to be written, possibly in a rigorous way.
74
Software Architecture
The architecture of a software system refers to an abstract
representation of that system. Architecture is concerned
with making sure the software system will meet the
requirements of the product, as well as ensuring that future
requirements can be addressed. The architecture step also
addresses interfaces between the software system and
other software products, as well as the underlying
hardware or the host operating system.
75
Implementation and Testing
Implementation (or coding): Reducing a design to code
may be the most obvious part of the software engineering
job, but it is not necessarily the largest portion.
76
Documentation and
Training
An important (and often overlooked) task is documenting
the internal design of software for the purpose of future
maintenance and enhancement. Documentation is most
important for external interfaces.
Common types of computer hardware/software
documentation include online help, FAQs, HowTos, and
user guides. The term RTFM is often used in regard to such
documentation, especially to computer hardware and
software user guides.
RTFM is an initialism for the statement "Read The Fucking
Manual." This instruction is sometimes given in response to
a question when the person being asked believes that the
question could be easily answered by reading the relevant
"manual" or instructions.
Some people prefer the backronym "Read The Fine
Manual." Alternatively, the "F" can be dropped entirely and
the initialism rendered as "RTM" (Read The Manual), or the
more polite "RTMP" (Read The Manual Please).
77
Software Training and
Support
A large percentage of software projects fail because the
developers fail to realize that it doesn't matter how much
time and planning a development team puts into creating
software if nobody in an organization ends up using it.
People are occasionally resistant to change and avoid
venturing into an unfamiliar area, so as a part of the
deployment phase, its very important to have training
classes for the most enthusiastic software users (build
excitement and confidence), shifting the training towards
the neutral users intermixed with the avid supporters, and
finally incorporate the rest of the organization into adopting
the new software. Users will have lots of questions and
software problems which leads to the next phase of
software.
78
Maintenance
Maintaining and enhancing software to cope with newly
discovered problems or new requirements can take far
more time than the initial development of the software. Not
only may it be necessary to add code that does not fit the
original design but just determining how software works at
some point after it is completed may require significant
effort by a software engineer. About of all software
engineering work is maintenance, but this statistic can be
misleading. A small part of that is fixing bugs. Most
maintenance is extending systems to do new things, which
in many ways can be considered new work. In comparison,
about of all civil engineering, architecture, and
construction work is maintenance in a similar way.
79
Software Developing
Models
Waterfall model
Spiral model
Model driven development
User experience
Top-down and bottom-up design
Chaos model
Evolutionary prototyping
Prototyping
V model
Extreme Programming
Hysterical raisins
80
Waterfall Model
The waterfall model is a
sequential
software development model
(a process for the creation of
software) in which
development is seen as flowing
steadily downwards (like a
waterfall) through the phases
of requirements analysis,
design, implementation,
testing (validation), integration
, and maintenance. The origin
of the term "waterfall" is often
cited to be an article published
in 1970 by W. W. Royce
81
Spiral Model
The new system requirements are defined in as much detail as
possible. This usually involves interviewing a number of users
representing all the external or internal users and other
aspects of the existing system.
82
Spiral Model
At the customer's option, the entire project can be aborted
if the risk is deemed too great. Risk factors might involve
development cost overruns, operating-cost miscalculation,
or any other factor that could, in the customer's judgment,
result in a less-than-satisfactory final product.
The existing prototype is evaluated in the same manner as
was the previous prototype, and, if necessary, another
prototype is developed from it according to the fourfold
procedure outlined above.
The preceding steps are iterated until the customer is
satisfied that the refined prototype represents the final
product desired.
The final system is constructed, based on the refined
prototype.
The final system is thoroughly evaluated and tested.
Routine maintenance is carried out on a continuing basis to
prevent large-scale failures and to minimize downtime.
83
Top-Down and Bottom-up
Top-down and bottom-up are strategies of
information processing and knowledge ordering, mostly involving
software, and by extension other humanistic and scientific
system theories (see systemics).
In the top-down model an overview of the system is formulated,
without going into detail for any part of it. Each part of the system
is then refined by designing it in more detail. Each new part may
then be refined again, defining it in yet more detail until the entire
specification is detailed enough to validate the model. The top-
down model is often designed with the assistance of "dark boxes"
that make it easier to bring to fulfillment but insufficient and
irrelevant in understanding the elementary mechanisms.
In bottom-up design, first the individual parts of the system are
specified in great detail. The parts are then linked together to
form larger components, which are in turn linked until a complete
system is formed. This strategy often resembles a "seed" model,
whereby the beginnings are small, but eventually grow in
complexity and completeness.
84
Software prototyping
Identify basic requirements
Determine basic requirements including the input and output
information desired. Details, such as security, can typically be
ignored.
Develop Initial Prototype
The initial prototype is developed that includes only user
interfaces.
Review
The customers, including end-users, examine the prototype
and provide feedback on additions or changes.
Revise and Enhancing the Prototype
Using the feedback both the specifications and the prototype
can be improved. Negotiation about what is within the scope
of the contract/product may be necessary. If changes are
introduced then a repeat of steps #3 ands #4 may be
needed.
85
Extreme Programming
Extreme Programming (XP) is a
software engineering methodology, the most prominent of
several agile software development methodologies. Like
other agile methodologies, Extreme Programming differs
from traditional methodologies primarily in placing a higher
value on adaptability than on predictability. Proponents of
XP regard ongoing changes to requirements as a natural,
inescapable and desirable aspect of software development
projects; they believe that being able to adapt to changing
requirements at any point during the project life is a more
realistic and better approach than attempting to define all
requirements at the beginning of a project and then
expending effort to control changes to the requirements.
86
Software Architecture
Software architecture is commonly organized in views,
which are analogous to the different types of blueprints
made in building architecture. Some possible views
(actually, viewpoints in the 1471 ontology) are:
Functional/logic view
Code view
Development/structural view
Concurrency/process/thread view
Physical/deployment view
User action/feedback view
Several languages for describing software architectures
have been devised, but no consensus has yet been reached
on which symbol-set and view-system should be adopted.
The UML was established as a standard "to model systems
(and not just software)," and thus applies to views about
software architecture.
87