ICS 121: What is Software Engineering?
Overview
- Definitions
- Challenges
- Tools, Notations, and Methods
Definitions
- Software engineering:
- The profession of software development. Includes professional
accountablity for the outcomes of your projects. Demands:
- Knowledge of best practices, available tools and
technologies
- Proficiency/skill
- Life-long learning
- Professional conduct: commitment, ethics
- The application of engineering principles to software
development. Engineering is the use of science, technology, and
trade knowledge to achieve an economic result. Includes project
management, estimation, modeling, quality controls, technical
support, etc.
- Software engineering is particularly about larger scale
software projects. These efforts must coordinate many individual
engineers or an extended period of time. The products have multiple
versions, running on multiple platforms, in multiple languages,
for multiple users that use the product in multiple ways.
Definitions > Subfields
- Subfields:
- Technical managment
- Requirements engineering / product management
- Software architecture and system design
- Design specialties: Usability, Databases, Security,
Performance tuning, etc.
- Implementation
- Service organizations: Quality assurance and testing, Software
process improvement, Release engineering, etc.
- Related fields:
- Management, Marketing, Business development
- Technical writing
- Technical support
- System administration / operations engineering
- Electrical, electronic, or other engineering fields
Challenges
- Software engineering is about making good software:
- Desired by customers: Useful, usable, efficent, reliable
- Cost-effective: feasible, timely, maintainable, evolvable
- Ethical: does not put the public at risk, respects
intellectual property, fulfills promises
- Brooks's difficulties of software development:
- Accidental problems of hard-to-use tools or legacy
systems
- Complexity
- Conformity
- Changability
- Invisibility
- Curtis, Krasner, and Iscoe:
- The thin spread of application domain knowledge
- Fluctuating and conflicting requirements
- Communication and coordination breakdowns
Tools, Notations, and Methods
- Tools: Software programs used by software engineers. Provided by
other software vendors or open source projects.
- Notations: Languages used to express software engineering
designs and concerns. Often defined by industry standards.
- Methods: Activities, processes, and guidelines that software
engineers use. Described in books, or derived from experience at
your company or over your career.
- All three are interrelated and affect each other.
Tools
- Examples: IDE, compilers, debuggers, test harnesses, UML tool,
code generator, build tool, static or dynamic analysis tool.
- Properties:
- Applicability to your project: appropriate, scalability
- Cost: purchase price, training, support
- Interface: GUI, command-line, easy or hard
- Integration: dependent on other specific tools or not
- Single user or multiple user
- Tools affect Notations:
- It is usually only practical to use notations that your tools support
- Particular tools may bias your use of notations
- Tools affect Methods:
- It is usually only practical to perform activities that your
tools support
- Particular tools may or may not help provide information you
need for decisions
Notations
- Examples: Java programming language, UML, build files, change
logs, use cases / user stories, flowcharts, data flow diagrams,
decision tables
- Properties:
- Applicability to your project: appropriate, scalability
- Presentation: Textual or graphical
- Semantics: formal or informal
- Usability: easy or hard to learn and use
- Expressiveness: does it capture the details you are concerned about.
- Notations affect Tools:
- You only need a subset of each tool's features that match your use
of notation
- More precise notations can have better tool support
- Notations affect Methods:
- It is hard to manage things that are not explicitly written or visualized
- Particular notations may or may not help provide information you
need for decisions
Methods
- Examples - Processes: Sprial model, XP, RUP
- Examples - Practices: Test-first, rapid prototyping, code reviews
- Properties:
- Applicablity: appropriate for your application domain and organization
- Scale: quick-and-easy to kitchen-sink
- Formality: informal/Agile to highly formalized/MILSPEC
- Methods affect Tools:
- Methods select which activities to perform, and thus the need for tools
- Some methods may not produce enough information to use certain tools
- Methods affect Notations:
- Methods select the types of concerns to model
- Methods determine selection criteria for notations: e.g.,
formality
- Methods determine how much effort to put into detailed
models
example use case templatesample test plan templateProject plan template