Introduction To Software Engineering
What is a software engineering code of ethics?
A set of guidelines that set out expected ethical and professional behavior for software engineers. This was defined by the major U.S. professional societies (the ACM and the IEEE) and defines ethical behavior under eight headings: public, client and employer, product, judgment, management, colleagues, profession, and self.
What is test-first development?
An automated unit test framework is used to write tests for a new piece of functionality before that functionality itself is implemented.
Design Activities
Architectural Design Interface Design Component Design Database Design
What are the development stages in reuse-based development?
Component analysis; Requirements modification; System design with reuse; Development and integration.
What is software?
Computer programs and associated documentation.
What is the distinction between computer science and software engineering?
Computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software.
Software engineering is not only concerned with issues like system heterogeneity, business and social change, trust, and security, but also with ethical issues affecting the domain. Give some examples of ethical issues that have an impact on the software engineering domain.
Confidentiality - Always respect this even if no confidentiality agreement is signed Competence - don't mis-represent your level of competence Intellectual property rights - be aware of local laws governing intellectual property rights
List the 5 principles of agile methods.
Customer involvement incremental delivery people not process embrace change maintain simplicity
What are the six fundamental best practices in the Rational Unified Process?
Develop software iteratively Manage requirements Use component-based architectures Visually model software Verify software quality Control changes to software
Testing Stages
Development or component testing system testing acceptance testing
Briefly discuss why it is usually cheaper in the long run to use software engineering methods and techniques for software systems.
Failure to use software engineering method leads to higher costs for testing, quality assurance, and long-term maintenance
What are the principal requirements engineering activities?
Feasibility study Requirements elicitation and analysis Requirements specification Requirements validation.
Why is it increasingly irrelevant to distinguish between software development and evolution?
Fewer and fewer systems are completely new
What are the two fundamental types of software product?
Generic products Customized products
What are the two fundamental types of software product?
Generic products (sold on open market) & Customized products (commissioned by client)
What are the 3 general issues that affect many different types of software?
Heterogeneity Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices. Business and social change Business and society are changing incredibly quickly as emerging economies develop and new technologies become available. They need to be able to change their existing software and to rapidly develop new software. Security and trust As software is intertwined with all aspects of our lives, it is essential that we can trust that software.
What are the 4 general issues that affect many different types of software?
Heterogeneity, Business and social change, Security and trust, Scale
Benefits of prototyping
Improved system stability A closer match to users' real needs Improved design quality Improved maintainability Reduced development effort
Briefly describe the advantages of pair programming.
It supports the idea of collective ownership and responsibility for the system. Individuals are not held responsible for problems with the code. Instead, the team has collective responsibility for resolving these problems. It acts as an informal review process because each line of code is looked at by at least two people. It helps support refactoring, which is a process of software improvement. Where pair programming and collective ownership are used, others benefit immediately from the refactoring so they are likely to support the process.
Why are iterations usually limited when the waterfall model is used?
Iterations are limited because in order for the waterfall model to work efficiently it requires well-understood project requirements and one phase cannot begin until another is complete.
What are the barriers to introducing agile methods into large companies?
Large companies are less flexible to change, have trouble with communication, and can have cultural differences.
What are the essential attributes of good software?
Maintainability, Dependability/Security, Efficiency, Acceptability
What are the three important characteristics of extreme programming?
New versions are built every day increments are delivered to customers every 2 weeks All tests must be run for every build and the build is only accepted if tests run successfully.
What are the four sectors in each loop in Boehm's spiral model?
Objective setting RIsk assessment and reduction Development and validation Planning
Throw-away prototypes
Prototypes should be discarded after development as theyre not a good basis for a productive system
Phases in the waterfall model
Requirements analysis and definition System and software design Implementation and unit testing Integration and system testing Operation and maintenance
Explain why professional software that is developed for a customer is not simply the programs that have been developed and delivered.
SE requires the compilation of documentation, support websites, design, evolution, requirements, etc to help make the software system functional and complete. Software is a continuous process of developing and updating, so you will never simply code and be done.
For what types of system are agile approaches to development particularly likely to be successful?
Small or medium sized Have customers that want to be involved in the development process
What is Software Engineering ?
Software engineering is an engineering discipline that is concerned with all aspects of software production
What is software engineering?
Software engineering is an engineering discipline that is concerned with all aspects of software production.
What are the three key characteristics of the engineering of web-based software engineering ?
Software reuse is the dominant approach for constructing web-based systems: Web-based systems should be developed and delivered incrementally User interfaces are constrained by the capabilities of web browsers:
What are three key characteristics of the engineering of web-based software engineering?
Software reuse, Incremental and agile development, Service-oriented systems, Rich interfaces
What are the fundamental activities that are common to all software processes?
Specification Design and implementation Validation Evolution
What are the shared characteristics of different approaches to rapid software development?
Specification, design and implementation are interleaved system is developed as a series of versions with stakeholders involved in version evaluation User interfaces are often developed using an IDE and graphical toolset
What are the four fundamental activities in software process?
Specification, development, validation, evolution
List 5 different types of software Application
Stand-alone applications Interactive transaction-based applications Embedded control systems Batch processing systems Entertainment systems Data collection systems Systems of systems
List 5 different types of software application?
Stand-alone applications, Interactive transaction-based applications, Embedded control systems Batch processing systems, Entertainment systems, Systems for modeling and simulation, Data collection systems, Systems of systems
What software engineering fundamentals apply to all types of software systems?
Systems should be developed using a managed and understood development process. Of course, different processes are used for different types of software. Dependability and performance are important for all types of system. Understanding and managing the software specification and requirements (what the software should do) are important. Where appropriate, you should reuse software that has already been developed rather than write new software.
What are the possible problems of test-first development?
Tests are written before code clarifies the requirements to be implemented.
What are the three benefits of incremental development, compared to the waterfall model?
The cost of accommodating changing customer requirements is reduced It is easier to get customer feedback on the development work that has to be done
What are the advantages of using incremental development and delivery?
The cost of accommodating changing customer requirements is reduced. It is easier to get customer feedback on the development work that has been done. More rapid delivery and deployment of useful software to the customer is possible.
Prototyping can be used in?
The requirements engineering process to help with requirements elicitation and validation in design processes to explore options and develop a UI design In the testing process to run back-to-back tests
List the 3 generic process models that are used in software engineering
The waterfall model Plan-driven model. Separate and distinct phases of specification and development. Incremental development Specification, development and validation are interleaved. May be plan-driven or agile. Reuse-oriented software engineering The system is assembled from existing components. May be plan-driven or agile.
What software engineering fundamentals apply to all types of software systems?
They should be developed using a managed and understood development process; Dependability and performance are important for all types of systems; Understanding and managing the software specification and requirements (what the software should do) are important; You should make as effective use as possible of existing resources
Explain how electronic connectivity between various development teams can support software engineering activities
This can allow teams in different geographic locations and still code the same project in real time and host meetings to discuss next steps
Non certified individuals are still allowed to practice software engineering. Discuss some of the possible drawbacks of this
This means that certified individuals may have to work hand in hand with non certified individuals. This could lead to conflicting ideas about security and development processes
List four questions you should ask when deciding whether or not to adopt an agile method of software development?
What type of system is being developed? What is the expected system lifetime? What technologies are available to support system development? How is the development team organized?
What is the most important difference between generic software product development and custom software development? What might this mean in practice for users of generic software?
With generic software, the developer is in control of all decisions regarding dev and functionality. With custom software, the buyer is in charge of dev specifications and functionality. Users of generic software need to be aware that they will have less control over a generic product than if they get a custom product made for them.
What is the distinction between Computer Science and Software Engineering ?
computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software.
What is Software Validation and Verification
is intended to show that a system conforms to its specification and meets the requirements of the system customer.
What are the essential attributes of good software
maintainability, dependability and security, efficiency, and acceptability
drawbacks of prototyping
may leave out functionality
What are the four fundamental activities in software processes?
software specification, software development, software validation, and software evolution