Software Engineering Definitions Spring 2007 Software Process and Software Engineering (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. (Computer Science) A discipline concerned with the scientific study and description of algorithms, programs, the devices that interpret them, and the phenomena surrounding their creation and usage. (Software Process Model) Algorithms for developing software: A set of activities, methods, practices, and transformations that people employ to develop and maintain software and the associated products. (Process) A sequence of steps performed for a given purpose; the execution of a process model. The process integrates people, tools, and procedures. (Software Process) A set of activities, methods, practices, and transformations that people employ to develop and maintain software and the associated products (documents, etc.); ; the execution of a software process model. Page 1 of 11 Software Engineering Definitions Spring 2007 (Water Fall Model) (System Requirements) The system concept is defined, customer and client requirements are captured, hardware and software components defined and mapped. (Software Requirements) a formal (complete, precise, consistent, and unambiguous) description of “what” each software component must do is prepared by the developer and reviewed by the customer (software specification document); a software project plan is produced at the end of this phase. (Design phase) The specification is elaborated in two steps that define “how” the product will work: Architectural Design breaks down the whole system into component parts (modules) and the interactions between them (interfaces); Detailed Design involves elaborating the design of individual components by specifying data structures and algorithms. (Code & Unit) Software module designs are translated to code and then unit tested. Integration & Test: Software modules are integrated into larger functional aggregates (subsystems) and tested in the operational environment. The final step tests the complete system (acceptance testing or validation – customer agrees that the system meets the specification). (Installation & Maintenance) The completed system is installed in the operational environment and maintained (error correction and enhancement) for the remainder of the system lifetime. (Spiral Model) A cyclic approach to software development marked by four basic stages that are repeated on each cycle until the target system is delivered. A risk-driven meta model developed by Barry Boehm. Stage 1: Identify objectives, alternative solutions, and constraints for the part of the system currently under consideration. Stage 2: Evaluate alternatives and identify associated risks using prototyping and simulation. Stage 3: Develop and verify the next system increment. Stage 4: Review outcome of earlier stages and plan the next cycle. Page 2 of 11 Software Engineering Definitions Spring 2007 (Unified Process Model) (Elicitation) A phase of the Unified Software Process that develops an initial description of the proposed system from the client’s and end-user perspective. (Elaboration) A phase of the Unified Software Process that produces a Software Requirements Specification giving a high-level internal view of the system architecture. (Use Case) A sequence of actions a proposed system performs to offer some results of value to a User. (Actor) A system has many types of users. Each type of user is defined by an actor. Actors may be people or external systems. Actors interact with the product via one or more Use Cases. An actor role is defined by a particular set of use cases performed by that actor to accomplish a particular goal or objective. (Use Case Diagram) A type of UML diagram that illustrates the flow of interactions between the given system and the actors that participate in a given use case. (Use Case Model) A model produced by the Unified Process that defines the system boundary, external actors and interfaces, and system functionality from the users’ perspective. (Analysis Model) A model produced by the Unified Process that defines the internal system architecture, allocates functionality to system classes and objects, and establishes a solution baseline. (Design Model) A model produced by the Unified Process that defines a blueprint for implementation for system implementation; an abstraction of the solution that maps 1-1 with some implementation language. Design Qualities/Styles Concepts (Abstraction) A frame of mind and set of concepts that permit the designer to reason about the problem and its solution at some level of generalization that disregards irrelevant details – it organizes the problem and its solution into various strata of concepts, entities and their logical relationships. (Procedural Abstraction) A kind of abstraction that assigns a name, perhaps with defined parameters, to a well-defined and reusable computational process or algorithm. This allows the designer to reason in terms of inputs and results of the named computation without having to think about the details of how the computation will be accomplished or implemented. (Data Abstraction) A kind of abstraction that assigns a name (a new type) to a collection of related data elements and a set of operations for manipulating those data. This allows the designer to treat as one conceptual unit a data structure and the procedural abstractions that manipulate that structure without having to worry about the details of how the data structure and its operations will eventually be implemented. Page 3 of 11 Software Engineering Definitions Spring 2007 (Module) A separately named and addressable software unit that encapsulates and abstracts a set of related software capabilities and features. It generally consists of two parts: an interface – for access by similar software units, and an implementation – that specifies how the capabilities and features of the interface are realized. (Information Hiding) A kind of design property that exploits language mechanisms and encapsulation techniques to hide details about the representation of data structures and types for the purpose of making it increasingly difficult, if not impossible, for clients of a data type or structure to directly access and manipulate the internal content or composition of that type or structure. (Architectural Design) A type of design activity that focuses on the enumeration of all the relevant modules (logical organizational units) and components (processing units), their functionality and data processing responsibilities, their inter-dependencies, connectivity and/or communication relationships with other architectural units. (Data Design) A type of design activity that focuses on enumerating all relevant information elements that must be handled by the system together with specifying the relationships that must be defined, created and maintained among these elements. Examples: composition, aggregation, association, specialization, generalization, and multiplicity are relationships used in object-oriented design methods. (Interface Design) A type of design activity that focuses on the mechanism enabling two or more architectural units to exchange data with each other or interact in some way. This activity must specify the data content exchanged, the direction of flow, timing constraints, interaction protocols, and mechanism for communication (e.g., hardware signal, hardware registers, shared variables, data file, database record or relation, gui). (Component and Module Design) A type of design activity that focuses on the internal data structures and algorithms required for a given architectural unit to satisfy all its interface, functional, and non-functional requirements within a given operation context. Page 4 of 11 Software Engineering Definitions Spring 2007 Object Oriented Development Concepts (Object) A kind of software module or model that abstracts something in the domain of a problem or its implementation, reflecting the capabilities of a system to keep information about it, interact with it, or both; an encapsulation of attribute values and their exclusive services. (Class) A collection of objects offering a common set of services and possessing a common set of data attributes. It defines or characterizes a new “data type” in the problem or solution domain. (Messages) A mechanism and information structure for transmitting both control and data between objects. (Boundary Classes/Objects) Used during requirements analysis and specification to model interaction between the system and its actors! This interaction often involves receiving and presenting information and/or requests. These modules collect and encapsulate requirements defining external system interfaces - if these change, only modules of this kind will need to be changed. (Entity Classes/Objects) Used during requirements analysis and specification to model information that is long-lived and often persistent. They model information and behavior of some phenomenon or concept such as an individual, a real-life object or event. (Control Classes/Objects) Used during requirements analysis and specification to model modules that monitor and otherwise manage or coordinate, sequencing, transactions, and control of other objects and are often used to encapsulate a control (thread) related to a specific use cases. They are used to encapsulate complex computations or business logic that cannot be logically associated with any other kind of analysis module. UML Concepts (Class Diagram) A type of UML diagram used to express the static structure of an OO software design in terms of its modular components and their relationships. (Collaboration Diagram) A type of UML diagram used to express the dynamic interactions among objects and actors participating in a use case. (Sequence Diagram) A type of UML diagram used to express the execution time flow of messages and method calls among objects at the detailed design level. (Activity Diagram) A type of UML diagram used to express the control flow among processes and use cases at the system level, or the flow of control of algorithmic steps in a method or procedure at the detailed design level. (Generalize-Specialize (Is-A) Relation) A relationship between two classes in an objectoriented design (Class Diagram) that states, if B Specializes A (A Generalizes B), every instance of B is also an instance of A. Page 5 of 11 Software Engineering Definitions Spring 2007 (Composition) A Whole-Part relation between objects or class instances. It indicates Parts that are essential or required constituents of the Whole necessary to make the Whole function properly. The Parts have no meaning or independent existence outside the context of the Whole. (Aggregation) A Whole-Part relation between objects or class instances, where the Whole represents a container or organizational unit holding the Parts. The Parts can have meaning and can exit outside their relationship to the Whole. (Association) A relationship between an Actor and a Use Case in a Use Case Diagram representing a bi-directional interaction and flow of data. In the context of a Class Diagram, this relationship describes some type of interaction or dependency between two objects or class instances. (Specialize(Generalize) Relation) A relationship between two use cases in a use case diagram that states if B Specializes A (A Generalizes B) B is a specific method for realizing A. (Includes Relation) A relationship between two use cases that indicates one is a required substep of the other. Software Metrics Concepts (Software Defects) Software flaws uncovered after delivery of a given system to its end-users. (Software Measure) A quantitative indication of the extent, amount, dimensions, capacity, or size of some attribute of a product or process. (Metric) A quantitative measure of the degree to which a system, component, or process possesses a given attribute. (McCabe’s Metric) A measure of software size and complexity based on the number of distinct independent control flow paths through a given method or procedure. (Halstead’s Metric) A measure of software size and complexity based on counts of the number of distinct operators and operands required to express an algorithm or procedure. (Predictive metric (Indicator)) A metric applied during development and used to predict the values of a software quality factor. (Metric Validation) The act or process of ensuring that a metric reliably predicts or assesses a quality factor. (Quality Metrics Framework) A decision aid used for organizing, selecting, communicating, and evaluating the required quality attributes for a software system. A hierarchical breakdown of quality factors, quality subfactors, and metrics for a software system. Page 6 of 11 Software Engineering Definitions Spring 2007 Software Testing Concepts (Software Errors) Software flaws uncovered before delivery to customer and end-users. (Software Defects) Software flaws uncovered after delivery to customer and end-users. (Software Verification) A software test activity designed to evaluate whether or not products of a given development activity conform to the specifications used to build those products. (Software Validation) A test activity designed to evaluate whether or not a given software product satisfies user requirements – that is, solves the problem it was designed to solve. (Fishbone Diagram) A tree-like structure used to document the various causes contributing to errors or defects of a given type. (Black Box Testing) Demonstrating correct component or subsystem behavior by observing outputs generated at its interface as a function of inputs supplied at its interface. (White Box Testing) Demonstrating that valid computational paths and interactions are observed internal to a component or subsystem as a function of given inputs. (Negative Tests) Tests that attempt to cause the system to fail by presenting inputs or loads for which it was not designed. (Stress Tests) Tests that attempt to expose system performance problems when certain computational resources approach their design limits. (Regression Testing) After a change is made to a component, the process of re-running tests that the component had successfully passed before the change was made to ensure that previous capability remains verified. (Test Components) Test Components automate one or several test procedures or parts of them. Examples include: Test drivers, Test scripts and Test harnesses. (Test Plan) Describes testing requirements, strategies, resources, and schedule for each build and system release. Describes what test cases should be performed and passed for each build and/or system release. (Test Evaluations) Capture results of test cases; declares whether or not test case was successful; generates defect or anomaly reports for tracking. (Test Anomaly Reports) Document abnormal or unexpected test outcomes or events. Used to capture and track test anomalies during development. Developer must ensure all anomalies have been satisfactorily addressed or removed before delivery (customer signoff). Page 7 of 11 Software Engineering Definitions Spring 2007 (Fault Models) Answer the question: Why do the features called out by the testing technique warrant our effort? A fault model therefore identifies the relationships and components of the system under test that are most likely to have faults. (Conformance-Directed Testing) Seeks to establish conformance to requirements and specifications. Employs a non-specific fault model – any fault that violates conformance is equal to any other in importance or significance. (Fault-directed testing) Seeks to reveal implementation faults of a particular kind or type. It is motivated by the observation that conformance can be demonstrated for an implementation that contains faults. Employs a specific fault model – directs testing toward particular kinds of faults. (Test Organization & Stages)/Pfleeger 1. Module (Component)(Unit) Testing – testing the smallest software building blocks in a controlled environment to meet functional requirements. 2. Integration Testing – testing component aggregates to ensure interface requirements are met and that inter-module communication works according to design. 3. Function Testing – testing system functionality (use cases) to insure it meets system requirements specifications. 4. Performance Testing – testing speed and capacity of the system to verify the system meets non-functional execution requirements and constraints. (Validation) 5. Acceptance Testing – customer testing to insure that end-users are satisfied that the system meets quality requirements. (Validation) 6. Installation Testing – making sure the system runs in the target environment Software Process Improvement Framework Concepts (Software Process Capability) Decribes the range of expected results that can be achieved by following a software process. (Software Process Maturity Level) The extent to which a specific process is explicitly defined, managed, measured, controlled, and effective. (Five CMM Maturity Levels) 1. Initial: The software process is characterized by ad hoc, and occasionally even chaotic. Few processes are defined, and success depends on individual effort and heroics. 2. Repeatable: Basic project management processes are established to track cost, schedule, and functionality. The necessary process discipline is in place to repeat earlier successes on projects with similar applications. 3. Defined: The software process for both management and engineering activities is documented, standardized, and integrated into a standard software process for the organization. All projects use an approved, tailored version of the organization’s standard software process for developing and maintaining software. 4. Managed: Detailed measures of the software process and product quality are collected. Both the software process and products are quantitatively understood and controlled. Page 8 of 11 Software Engineering Definitions Spring 2007 5. Optimizing: Continuous process improvement is enabled by quantitative feedback from the process and from piloting innovative ideas and technologies. (Key Process Areas) Except for level 1, each maturity level is decomposed into several key process areas that indicate where an organization should focus to improve its software process. KPAs identify the issues that must be addressed to achieve a desired maturity level. If an organization is at level K+1 then it has addressed all of the KPAs at levels K. Each KPA identifies a cluster of activities that, when performed collectively, achieve a set of goals considered important for enhancing process capability. The KPAs may be considered to be the requirements for achieving a particular maturity level. Page 9 of 11 Software Engineering Definitions Spring 2007 Project Management Concepts (5 Functions of Management) (Planning) Predetermining a course of action for accomplishing organizational objectives. (Organizing) Arranging the relationships among work units for the accomplishment of objectives and the granting of responsibility and authority to obtain these objectives. (Staffing) Selecting and training people for positions or roles in the organization. (Directing) Creating an atmosphere and environment that will assist and motivate people to achieve desired end results. (Controlling) Establishing, measuring, and evaluating performance of activities toward planned objectives. (A Mgmt Strategy) The overall approach to a project that provides guidance for placin emphasis and using resources to achieve the project objectives. (A Mgmt Policy) Directives that guide decision making and project activities. Policies limit the freedom in making decisions but also allow some discretion. (A Mgmt Procedure) Directives that specify customary methods of handling activities; guides to actions rather than guides to decision making. Procedures detail the exact manner in which a project activity must be accomplished and allow very little discretion. (A Mgmt Rule) Requirements for specific and definite actions to be taken or not taken with respect to particular project situations. No discretion is allowed! (Functional Organization) Personnel in each organizational unit perform the same function (Systems Engineering)(Software Engineering)(Verification&Validation)(Software Quality Assurrance)– basically they have the same job descriptions although they may vary in experience and leadership roles. When a work product is produced or reviewed by members of one organizational unit, it is passed to some other organizational unit for further development or review. There is no single project supervisor over the whole project, although there is a general manager and there is typically a project coordinator and/or customer/user liason. (Project Oriented Organization) The organization is organized around projects – each project headed by a Project Manager that has the responsibility to hire, discharge, train, and promote people within the project. Each project has its own staff organized around similar personnel functional roles. (Matrix Organization) There is a vertical (Column) or functional structure similar to the Functional Organization, but there is a horizontal (Row) structure similar to the Project Organization overlayed on top of the functional structure. Personnel in each functional unit are assigned to work on a given project – some may not be assigned to any project (pool resources). Each project (Row) is managed by a Project Manager who has authority over work assignments, but does not have authority to hire, discharge, train, or promote personnel – this authority resides in the manager of each functional unit. This structure is more efficient in its use of human resources but frequently results in management control conflicts. Page 10 of 11 Software Engineering Definitions Spring 2007 ( Mazlow’s Hierarchy of Human Needs) This is a pyramid structure that characterizes the needs that motivate human behavior. In general, needs at lower levels of the pyramid must be met before needs at higher levels can be met. The levels are (from most basic or fundamental to most noble or liberating ) are: Biological Survival, Safety and Security, Social Needs, Esteem and Recognition, Self Actualization. (Auditing) An independent examination of a software project for the purpose of determining compliance with plans, specifications, and standards. (Software Quality Assurance) A planned and systematic pattern of all actions necessary to provide adequate confidence that the development process and the work products conform to established standards. (Configuration Management) A method for controlling and reporting on the status of work products generated by the project. (Verification & Validation) The process of assuring that each phase of the development life cycle correctly implements the specifications from the previous phase and that each work product satisfies its requirements. (Walkthroughs & Inspections) Systematic examination of software work products by the producer's peers, conducted for the purpose of finding errors. The following material is based on a CrossTalk article entitled, “Configuration Management Fundaments.” CrossTalk Article Refer to this article and answer the following questions. 1. List the top five sources or causes of change on a software project. 2. What four questions does a Configuration Management System attempt to answer? 3. What are the three major purposes of CM? 4. Identify and give a short paragraph description for each of the four major functions of Configuration Management. 5. What is the purpose and function of the “Baseline Library”? Page 11 of 11