LSU CSC 4330 Software Engineering Final
Codeline
A set of versions of a software component and other configuration items on which that component depends
Repository
A shared database of versions of software components and meta-information about changes to these components
What is the difference between evolutionary and throw-away prototypes?
A throw-away prototype is a prototype that is discarded after development & an evolutionary prototype is one which you build upon to create the final product
What are the main tasks involved in project scheduling?
Identify activities, identify activity dependencies, estimate resources for activities, allocate people to activities, & create project charts
What is the main cause of software engineering issues?
Increasing system complexity & failure to use software engineering methods
What makes a good design?
Information hiding, high cohesion, low coupling, consistency, availability
Prototype
Initial version of a system used to demonstrate concepts and try out design options
What are the 2 types of information in a system release?
Major releases, which deliver significant new functionality, and minor releases, which repair bugs and fix customer problems that have been reported
Client-Server Architecture
Many clients communicate over a network to one or more servers
Incremental Development model
Specification, development & validation are interleaved (may be plan-driven or agile)
Test-driven development
Writing tests before code
Repository Architecture
You have a central data store that different applications use
4 Key Points of Agile Manifesto
(1) Individuals and interactions over processes and tools, (2) working software over comprehensive documentation, (3) customer collaboration over contract negotiation, & (4) responding to change over following a plan
MVC Architecture
3 main components: (1) Model (holds the state), (2) View, (3) Controller
Baseline
A collection of component versions that make up a system
Minimizing recompilation
Check if a compiled version of a component is available. If so, there is no need to recompile that component
Integration Testing
A level of software testing where individual units are combined and tested as a group. The purpose of this level of testing is to expose faults in the interaction between integrated units.
Deltas
A list of differences between one version of the system and another (instead of keeping a copy of each version)
Mainline
A sequence of baselines representing different versions of a system
Scrum
An agile method that provides a project management framework: it is centered around a set of sprints, which are fixed time periods when a system increment is developed
COCOMO (cost modeling)
An empirical model based on project experience
What is project planning?
Breaking down the work into parts, assigning parts to project team members, and anticipating problems that might arise and prepare tentative solutions to those problems
Refactoring
Constant code improvement
Nonfunctional Requirements
Constraints on the services or functions offered by the system such as performance, speed, & ease of use
Coupling Types (from high to low)
Content, Common, Control, Stamp, Data
Acceptance Testing
Customer leads testing and defines cases to be tested
Layered Architecture
Decompose 'layers'; good for info hiding
Software Engineering
Engineering discipline concerned with all aspects of software production
Regression Testing
Ensure that changes have not introduced unexpected behavior
What are the attributes of good software?
Essential software product attributes are maintainability, dependability and security, efficiency, & acceptability.
Software Pricing Considerations
Estimates are made to discover the cost, to the developer, of producing a software system. These estimates take into account hardware, software, travel, training & effort costs.
What are the different types of estimation techniques?
Estimation techniques for software may be experience-based, where managers judge the effort required, or algorithmic, where the effort required is computed from other estimated project parameters.
Capability Maturity Model (CMM)
Framework for continuous process improvement
Cohesion Types (from good to not good)
Functional, Communicational, Sequential, Procedural, Temporal, Logical, Coincidental
Storage management in Git
Git does not use deltas but applies a standard compression algorithm to stored files and their associated meta-information. Git also uses the notion of packfiles where several smaller files are combined into an indexed single file
Installation Testing
If acceptance testing done on site: acceptance = installation else: additional on site testing to ensure completeness of system & to verify any functional or nonfunctional characteristics affected by site conditions
What is Risk Management?
If there are serious problems with the development work that are likely to lead to significant delays, initiate risk mitigation actions to reduce the risks of project failure. In conjunction with these actions, you also have to re-plan the project
Change Management
Keeping track of requests for changes to the software from customers and developers, working out the costs and impact of changes, and deciding the changes that should be implemented
Test Oracle
Mechanism to determine the expected behavior
What are the different types of file identification used to determine if recompilation of a component is needed?
Modification timestamps, where the signature on the source code file is time and date when the file was modified, and source code checksums, where the signature on the source code file is a checksum calculated from data in the file
Distributed Version Control
Multiple versions of the component repository exist at the same time (e.g., Git)
What is the difference between plan-driven & agile processes?
Plan-driven processes are processes where all of the process activities are planned in advance and progress is measured against this plan. In agile processes, planning is incremental and it is easier to change the plan and the software to reflect changing requirements.
Milestones
Points in the schedule against which you can assess progress, for example, the handover of the system for testing
Release Management
Preparing software for external release and keeping track of the system versions that have been released for customer use
Project Scheduling
Process of deciding how the work in a project will be organized as separate tasks, and when and how these tasks will be executed
Testing
Process of executing a program with the intent of finding an error
Test Stub
Program that simulates the activity of a missing module by answering to the identical calling sequence of the module and passing back output data that allows the testing process to continue
Pair Programming
Programmers working in pairs, developing code together
Spiral model
Risk-driven
Waterfall model
Separate and distinct phases of specification and development (plan-driven)
Test Case
Set of inputs and expected results that exercises a component with the purpose of causing failures and detecting faults
Centralized Version Control
Single master repository that maintains all versions of the software components (e.g., subversion)
Dependability and security
Software dependability includes a range of characteristics including reliability, security and safety. Dependable software should not cause physical or economic damage in the event of system failure. Malicious users should not be able to access or damage the system.
Acceptability
Software must be acceptable to the type of users for which it is designed. This means that it must be understandable, usable and compatible with other systems that they use.
Maintainability
Software should be written in such a way so that it can evolve to meet the changing needs of customers
Efficiency
Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, memory utilization, etc.
Functional Requirements
Statements of services the system should provide, how the system should react to particular inputs and how the system should behave in particular situations (may state what the system should not do)
Integration & Configuration model
System assembled from existing configurable components (may be plan-driven or agile)
Performance Testing
System performance measured against objectives set by customer
Extreme Programming (XP)
Takes an 'extreme' approach to iterative development: user stories for specification, refactoring, test-first development, & pair programming
Unit Testing
Testing of individual modules
Function Testing
Testing of the individual functions as defined in the specifications
Branching
The creation of a new codeline from a version in an existing codeline. The new codeline and the existing codeline may then develop independently
Merging
The creation of a new version of a software component by merging separate versions in different codelines
Software Architecture
The fundamental organization of a software system embodied in its components, their relationships to one another & to the environment, and the principles guiding its design & evolution
What is Configuration Management?
The management of an evolving software system
Test Driver
The modules that act as temporary replacements for a calling module and give the same output as that of the actual product.
System Building
The process of assembling program components, data and libraries, then compiling these to create an executable system
Version Control (VC) Systems
Version control systems identify, store, and control access to the different versions of components. There are two types: centralized systems and distributed systems.
What are the 4 primary activities of configuration management?
Version control, system building, change management, and release management