Software Engineering: A Definition
- a modelling activity -- software engineers deal with complexity through modelling, by focusing at any one time on only the relevant details and ignoring everything else.
- a problem-solving activity -- models are used to search for an acceptable solution
- driven by experimentation
- reuses pattern solutions
- incremental evolution of the system toward one acceptable to the client
- revised in response to change
- a knowledge acquisition activity -- in modelling the application and solution domain, software engineers collect data, organize it into information, and formalize it into knowledge.
- nonlinear -- new information may invalidate previous knowledge
- risk-based development -- identify high-risk components to avoid late surprises
- issue-based development -- execute development activities in parallel, organizing according to issues which still need resolution
- iterative development -- design and implement the high-risk (difficult) parts first
- nonlinear -- new information may invalidate previous knowledge
- a rationale-driven activity -- software engineers need to capture the context in which decisions were made and the rationale behind these decisions in order to understand the implications of a proposed change when revisiting a decision.
- assists in dealing with changing systems
- useful in the maintenance phase
Wasserman identifies eight fundamental notions that form the basis for an effective discipline of software engineering:
- Abstraction -- a description of the problem at some level of generalization that allows us to concentrate on the key aspects of the problem without getting mired in the details
- Analysis and Design Methods and Notations -- when you work as a team, you must communicate with many other participants in the development process, and therefore need a common notation for communication and documentation
- Prototyping -- building a small version of a system, usually with limited functionality, helps the user to identify the key requirements of a system and demonstrates the feasibility of a design or approach; commonly used to design a good user interface
- Software Architecture -- the description of a system in terms of a set of architectural units, and a map of how the units relate to one another
- Software Process -- the organization and discipline in the activities of the process of developing software (as well as to the products that result) contribute to the quality of the software and the speed with which it is developed
- Reuse -- taking advantage of the commonalities across applications by reusing items from previous development
- Measurement -- quantitative descriptions of improvements to processes, resources, and methods permit us to compare progress across disparate projects and support analysis and decision-making
- Tools and Integrated Environment -- computer-aided software engineering (CASE) tools are designed to enhance software development, but rarely address the entire software development life cycle
No comments:
Post a Comment