A type of maintenance performed to change software so that it will work in an altered environment, such as when an operating system, hardware platform, compiler, software library or database structure changes
A framework that provides many of the functions needed by a particular class of applications, and which is designed to be reused in the development of such applications
An approach to design in which you start by designing the low-level details such as the utilities, and then decide how these will be put together to create successively higher-level components, and ultimately the entire system
A incremental testing strategy in which you start by testing the very lowest levels of the software using drivers, and then work upwards, as you integrate successive layers
The process of obtaining ideas, opinions, and answers to a question in a group environment in which all members of the group are given the opportunity to contribute
A team structure midway between a hierarchical team and an egoless team, in which a chief programmer leads and guides the project, in consultation with experts in various specialties
In the context of testing, the observation that the number of required tests for exhaustive testing will increase exponentially as the number of inputs increases
Any piece of software or hardware that has a clear role and can be isolated, allowing you to replace it with a different component with equivalent functionality
A term often applied to the latter stages of design and to programming, even though the analogy with construction in other areas of engineering is weak
The process of deciding whether to do something by evaluating the costs of doing it and the benefits of doing it, and then choosing to do it if the benefits sufficiently exceed the costs
A path through a PERT chart indicating the minimum time in which it is possible to complete a project, and the tasks that, if delayed, will delay the whole project
A defect in which one thread or process can sometimes experience a failure because another thread or process interferes with the 'normal' sequence of events
A person who make decisions about ordering and paying for software (in contrast to user); customers are those who have the problem that is being solved by the development of software
A flaw in any aspect of the system including the requirements, the design or the code, that contributes, or may potentially contribute, to the occurrence of one or more failures
An approach to cost estimation in which several individuals initially make cost estimates in private, and then share their estimates to discover the discrepancies
The process of distributing and installing software as well as any other components of a system; deployment also includes managing the transition from any previous system
The process of distributing and installing the software and any other components of the system such as databases, special hardware etc. It also involves managing the transition from any previous system
The problem-solving process whose objective is to find and describe a way to implement the system's functional requirements, while respecting the constraints imposed by the non-functional requirements, and while adhering to general principles of good quality
A decision made in the process of design which involves listing design options, evaluating them according to pre-determined criteria, and choosing the alternative that has the best cost-benefit trade-off
The process by which a software engineer learns enough background information so that he or she can understand the problem and make good decisions during requirements analysis and other stages of the software engineering process
A diagram used in project tracking, that allows you to compute the amount by which you are behind schedule and over budget; it shows elapsed time on one axis, and effort expended on the other axis
A person who performs engineering (in contrast to scientist). The term engineer is legally reserved, in many jurisdictions, for those who have obtained engineering education and experience, and perform engineering within a company or else have been granted a license, or some other form of certification, to offer engineering services to the public
The process of solving problems by applying, in a disciplined, systematic and ethical way, scientific and economic knowledge and principles to the design and maintenance of products or processes
In a state diagram, something that causes a system or object to change state. May be a message, the passage of elapsed time, a condition becoming true, or completion of an activity
The process by which software is modified over the course of its lifetime to meet changing requirements and as problems are fixed or reengineering is performed
A skeletal software component that performs functions needed by a class of systems, and which is intended to be incorporated into the design of such systems
Reusable software that implements a generic solution to a generalized problem. It provides common facilities applicable to different application programs
A form of cohesion in which modules which together perform a function (a computation that returns a result and has no side effects) are kept together, and everything else is kept out
A pattern in which two classes are related both by a generalization and by a one to many association, such that the generated graph of instances forms a hierarchy
Software designed to be sold on the open market and to perform functions on general-purpose computers that many people need (in contrast to custom software)
A form of testing in which the tester can examine the design documents and the code, as well as analyze and possibly manipulate the internal state of the entity being tested
An aspect of the design deliberately added to allow other designers to add additional functionality. It does nothing in the basic version of the system, but is designed to be implemented or overridden when the system is extended or reused
A form of coupling in which one component includes the source code of another component. All the includers of a component are coupled to each other and to the included file
The possession by one class of elements defined in another class, by virtue of the fact that the former class is defined to be a subclass of (to extend) the latter
A method that executes in the context of a particular object; it has access to the instance variables of the given object, and can refer to the object itself using the 'this' keyword (in Java and C++)
Abbreviation for 'Internet Protocol', the low-level protocol used by all computers on the Internet, in which messages are divided into packets for delivery to a remote host
An approach to development by which software is developed in stages, with the first stage being very simple, and subsequent stages adding more features
A symbol in an activity diagram indicating a point where several threads wait for each other. When all threads reach the join, control continues in a single thread
A kind of compilation that converts a method into machine code the first time it is executed and stores the machine code to save work on subsequent calls
A form of cohesion in which the facilities for providing or accessing a set of services through an API or hardware interface are kept together. There must also be a strict hierarchy in which higher level layers can access only lower-level layers. In other words, the system is effectively divided into layers
A kind of coupling in which the interconnections among parts of a system are reduced, making makes the resulting application easier to understand, modify and test
A architectural pattern used to separate the functional layer of the system (the model) from two aspects of the user interface, the view and the controller
The extent to which software is divided into components, called modules, which have high internal cohesion, low coupling between each other, and simple interfaces
A common defect in which a program proceeds to do its work even when specifies preconditions, that state what must be true before the algorithm should be executed, are not satisfied
A situation where there normally exists one or more data items to process, but sometimes there are none
object (instance, instance: instance is used when you are talking about the role with respect to the class and object is used when talking in a more general way)
A data element in an object-oriented system, which has its own identity, belongs to a particular class, and has behaviour and properties
An approach to software design and programming in which software is primarily thought of as a collection of classes that each have responsibilities for various operations, and which are instantiated at run time to create objects
The tendency for a technology to reach a state where it is no longer useful, is superseded by better technology or must be upgraded in order to continue to function correctly
An approach to cost estimation in which you make three estimates for each task and for the project as a whole: An optimistic estimate, (in which everything goes well) the likely estimate and a pessimistic estimate (where you account for everything that could go wrong)
Independent development of a system or subsystem by several developers, with the objective of exploring design space and generating a variety of different design ideas; the best ideas are generally chosen for further development
A loose but large collection of people who believe in the usefulness of patterns in software engineering, as well as in certain philosophies regarding their development
A pattern in found in class diagrams in which one class (the player) has several associated role classes. Instances of the role classes can change over the lifetime of a player
The process of looking back at a completed project's design and its development process, in order to identify those aspects where improvements can be made in future projects
An approach to software design and programming in which software is primarily thought of as a hierarchy of procedures - the root of the hierarchy is typically a main procedure, which calls other procedures, etc. (in contrast to the object-oriented paradigm)
A document used in project management describing all aspects of the project's process, including the process model, tasks, risks, cost estimates, team structure and schedule
A mechanism whereby an operation in an aggregate is implemented by having the aggregate perform that operation on its parts - in other words, the operation is propagated to the parts
A pattern found in which a lightweight object stands in place of a heavyweight object that has the same interface. It transparently loads the heavyweight object when needed
A type of maintenance performed to improve the design of some part of a software system, in general so that it has higher maintainability. In general, no new features are added for users
A statement about what the proposed system will do that all stakeholders agree must be made true in order for the customer's problem to be adequately solved
The tendency for the set of requirements to relentlessly increase in size during the course of development, resulting in a system that is more expensive and complex than originally intended
An instance of a use case that expresses a specific occurrence of the use case with a specific actor operating at a specific time and using specific data
A UML interaction diagram showing the sequence of messages exchanged by the set of objects and optionally an actor. Actors and objects are on one axis, and time is on the other
A process in Java by which every object is converted by an ObjectOutputStream into a binary form for transmission, and then reconstructed when it is received by an ObjectInputStream
Data in a client or server that represents an end of a TCP/IP connection. A complete connection has two sockets, one in the client and one in the server
The process of designing the global organization of a software system, including dividing software into subsystems, deciding how these will interact, and determining their interfaces
The situation that is said to have existed since a least the late 1970's, characterized by an inability of software developers to deliver good quality software on time and on budget
(1) The application of a systematic, disciplined, quantifiable approach to the development, operation, maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1)
The process of solving customers problems by the systematic development and evolution of large, high-quality software systems within cost, time and other constraints. The application of engineering to software systems of any kind
A process used by software engineers Normally refers to specific approaches to performing software engineering or specific software engineering activities such as requirements analysis or testing
A document that gives complete detail about something. Normally implicitly means requirements specification, but the term design specification is sometimes also used to mean a detailed and precise design document
A document describing a body of well-respected information that engineers should conform to in order to ensure they are following best-practice, and will consistently produce good-quality products
A piece of code that has the same interface (i.e. API) as the lower level layers, but which does not perform any real computations or manipulate any real data
A form of cohesion in which aspects of a system are grouped together which are used during the same phase of execution of a program, i.e. execute close together in time
The cycle in which software developers repeatedly run tests, discover and fix defects, and then retest. This continues until quality objectives are met
A model in which a server communicates with both a client (usually through the Internet) and with a database (usually within an intranet, for security reasons)
An approach to design in which one starts with the high-level architecture of the system, then elaborates the design of subsystems until finally designing the low-level details such as the structure of individual classes
An incremental testing strategy in which you start by testing only the user interface, with the underlying functionality simulated by stubs, then you work downwards, integrating lower and lower layers
A question in a brainstorming session for which the participants can provide simple one-line answers that are more than just numbers or yes/no responses
An important quality of software that measures the extent to which a product or process is learnable, enables users to be productive and avoid errors, and also subjectively satisfies them (in contrast to utility^2)