Final Exam Part I Flashcards
What is Software Engineering and how does it differ from other engineering disciplines?
Creating cost-effective software solutions to practical computing problems by applying scientific/codified knowledge; building software systems in the service of mankind. \+ Scope is unbound \+ Few tech limitations \+ Restricted use of math \+ Continuous invention/creation
What is the Hype Cycle?
A graphical representation that shows the life cycle stages as technology goes through conception to maturity and widespread adoption.
*Bonus:
What are the 5 stages of the Hype Cycle?
5 Stages:
Technology Trigger - A potential technology breakthrough
Peak of Inflated Expectations - Early publicity produces success story
Trough of Disillusionment - Interests wane as experiments and implementations fail
Slope of enlightenment - More instances of how the technology can benefit come about
Plateau of Productivity - Mainstream adoption starts to take off
Explain why most software projects are delivered after the deadline, over the budget, with failures, or without satisfying the clients. How one can improve this situation?
This is commonly due to a lack of communication between the developers and customers. By not constantly questioning the target audience, the developer might not develop the the proper product. Deadlines are usually short sighted, assigning too much work in too little time.
Fix this by communicating better about how long things will take to the customer and allow flexible deadlines, pushing it back whenever needed.
Explain why software deteriorates over time.
Software deteriorates over time because technology continues to push forward and update. As technology changes, changes in its software must reflect this behavior. This, as well as bug fixes, and software improvements are required to keep a standard user base.
Explain why people use the expression “There is no silver bullet” for software engineering.
There is not “one” software that solves all of the problems. (i.e. It may be good at storing arrays and adding to the data, but could be slow at accessing the data).
Explain the concept of “the mythical man-month.”
Throwing more man power at a late software project will only make it later.
(Think about a bunch of people learning the entirety of a project at the late stages of its development life in order to help with some crucial bug… very hard to do!)
Explain design thinking (and its process).
Design thinking is an ideology supported by an accompanying process.
The process:
+ Understand the problem by first researching the situation of the users
+ Define a problem based on your research
+ Generate multiple ideas on how to solve the issue
+ Test the validity of the ideas
+ Build real tactile prototypes to represent the idea
+ Test prototypes
+ Implement the idea (if it passes previous tests).
What is a business model canvas?
An organization tool to flesh out important business aspects about a company. Start with 9 guesses, end with 9 facts.
*Bonus:
List the 9 organizational categories of a business model canvas.
Be able to explain each category.
Key Partners
Who are your key partners?
What are your key suppliers?
What are you getting from them… and giving to them?
Key Activities What key activities does your business require? \+ Manufacturing? \+ Software development? \+ Personal concierge service? What will you do as a business?
Value Propositions
What customer problems are you helping to solve?
What customer needs are you satisfying?
Why will they repeatedly pay for your solution?
Customer Relationships
How will you get, keep, and grow customers?
Customer Segments
Who are your most important customers?
What are their archetypes?
What job do they want you to get done for them?
Key Resources What key resources do you require? \+ Financial? \+ Physical? \+ Intellectual property? \+ Human resources? How will you support these?
Channels Through which channels do your customers want to be reached? Types of channels: \+ Sales \+ Distribution \+ Support
Cost Structure
What are most important costs inherent in your business model?
What is the mix of fixed and variable costs?
Revenue Streams
How will you make money?
What is revenue model?
What are pricing tactics?
What is a value proposition?
Be able to give an example.
Value proposition is the value obtained from the use of the system.
A value proposition statement addresses; the product, the target customer, the value you provide, and why your product is unique to others.
Example: Google -
“Google allows internet users to find relevant information quickly and easily.”
In the example, “finding information quick” is the value delivered by Google.
The statement that it is relevant information and easy to use seems important but these are software features or non-functional requirements to help deliver the value that is finding information quickly.
What is the Problem-Solution Fit and why is it important?
“Can you identify and validate a problem or need in the market that enough people care about?”
“Do you have a feasible solution for meeting this problem or need?”
(watch out for Mike Tyson)
Without this there is little to no point in continuing a project because little to no one will use it or it does not fix any problems.
How does the Consumer Development methodology work?
Consumer development improves product success by developing a better understanding of their stakeholders. It is a balanced relationship between developing a product and understanding the consumer.
What are functional requirements? Give examples.
Statements of functions or services to be provided by the system.
What is the system supposed to do?
What is the system supposed to look like?
What inputs does the system need?
How should the system respond to errors?
What are non-functional requirements? Give examples.
Specify criteria that can be used to judge the operation of a system, rather than specific behaviors. (Not what, but how)
Flexibility, portability, re-usability, reliability, maintainability, security, safety, performance, effectiveness, efficiency, reliability, maintainability, satisfaction, etc.
What is the ‘Waterfall Cycle’?
The engineer does all the planning of requirements and thoroughly analyzes the system. Then they complete the design and implement the design. The system is then sent out for development. These steps are all done relatively in order.
What is the ‘Iterative Cycle’?
Allows us to build a product, measure the systems non-functional requirements, and learn from the resulting feedback from consumers. Then we can deploy after each time we build the revised product to receive more feedback.
Why choose ‘Iterative Cycle’ over ‘Waterfall Cycle’?
The iterative cycle is very forgiving as a requirements engineering approach in comparison to waterfall, which is very restricted.
What is MVP and what is it used for?
The Minimum Viable Product is a product with just enough features to gather validated learning about the product and its continued development.
What is ISO 25010:2011?
A product quality model. Specifies the non-functional requirements that most software seeks to achieve.
List four characteristics of a product quality model described in ISO 25010:2011.
Here are all eight and their descriptions:
Functional Suitability
+ degree to which a product or system provides functions that meet stated and implied needs when used under specified conditions
Usability
+ degree to which a product or system can be used by specified users to achieve specified goals with effectiveness, efficiency and satisfaction in a specified context of use
Performance Efficiency
+ performance relative to the amount of resources used under stated conditions
Maintainability
+ degree of effectiveness and efficiency with which a product or system can be modified by the intended maintainers
Compatibility
+ degree to which a product, system or component can exchange information with other products, systems or components, and/or perform its required functions, while sharing the same hardware or software environment
Reliability
+ degree to which a system, product or component performs specific functions under specified conditions for a specified period of time
Security
+ degree to which a product or system protects information and data so that persons or other products or systems have the degree of data access appropriate to their types and levels of authorization
Portability
+ degree of effectiveness and efficiency with which a system, product or component can be transferred from one hardware, software or other operational or usage environment to another
What are the most important non-functional requirements for critical systems, real-time systems and embedded systems?
Critical Systems - Reliability
Real-time systems - Performance Efficiency
Embedded systems - Functional Suitability
What are ‘Use-Case Descriptions’?
+ Often describe in more detail than a user story how a user will interact with the system or components.
+ Detail the general flow of the interaction and how different things can happen at different stages of interaction.
+ May detail one user story, but often splits into multiple stories depending on the complexity of the user case.
What are ‘User Stories’?
+ Used as a form of dialogue between developer and stakeholder, allowing for communication and discussion about a feature to be implemented.
+ Easily represents the Who, What, and Why for the feature.
+ Usually is a chunk of functionality to implement for a set of requirements that can be easily accomplished or estimated.
Explain what ‘includes’ and ‘extends’ relationships are in use cases.
Includes: the relationship is mandatory
Extends: the relationship is optional
What is a Kanban and how is it used?
A Kanban is a board for user stories that easily allows for developers to update the stories as they move through the development process. These boards usually consist of backlog, todo, doing, done, and accepted. Where each story will move through the board until it is either discarded or completed. While they were originally made of whiteboards and post it notes, we now have modern Kanban like Trello, and Waffle.
What are the problems of ‘Hard-Coded Values’?
Pros:
+ Avoid user typos – good for reports!
Cons:
- Less flexible -> the user cannot create new categories
- Susceptible to programmer typos if the value appears in several places
(Should only be used if the value will never change)
When is it better to model something as an enumeration instead of an associated class? Be able to give an example.
When you:
+ Desire less typos and option-specific operations.
+ Have automated deployment.
+ Have easy access to your development team.
Example:
Users have the option of choosing one type of card: Club, Diamond, Heart, or Spade. Enumeration would make the choice much easier than defining four different types of card through associated classes.
When is it better to model something as an inheritance instead of an associated class? Be able to give an example.
An associated class is used when you want to give the user the control to add options or change certain things.
It is better to use inheritance when everything that you want is predefined; the developer simply decides where to place a category in the inheritance tree.
Example: A Convertible, a Lamborghini, and a Sedan are all Cars. If the class Car were defined with a variable for speed, a variable for color, and a variable for number of doors, it would make sense that the Convertible, Lamborghini and Sedan inherited from the class Car so that each (sub)class would also have all of the variables specific to the class Car without those variables having to be unnecessarily redefined - as would be the case with the creation of associated classes.
When is it better to model something as an associated inheritance instead of an inheritance?
Be able to give an example.
Associated inheritance would give the user the ability to add a child class that did not already exist, which is good if the developers wanted to give users more control.
In the event that the developers did not want the user to have much control, one would use “basic” inheritance.
Ex: If there was a class--Snack--that the user could access, but all subclasses of the class Snack (Chip, Cookie, Fruit) were not the class that the user desired, an associated inheritance would allow the user to create the subclass of Snack that they wanted to include (Brownie). However, if there were only so many Snacks that were available to the user and only those snacks, a “basic” inheritance would ensure that the user could not make a subclass of Snack that would have no place in the program; only three different subclasses of Snack are allowed and no more.
A model has a class Account associated with a class AccountType, which has 3 subclasses (Checking, Savings, and Investment), each one implementing specific complex methods for calculating the monthly interest, defined respectively by the federal laws A, B, and C. Your client now wants to allow the financial director to create new account types (10 new account types are foreseen). When an account type is created, the director wants to choose which federal law applies to that account type. What is one way to change the model to accommodate this request, maintaining the good principles of OOP?
Perhaps we could change the association between Account and AccountType. Instead we could use an inherited association so each subclass can inherit from the AccountType. This will allow the financial director to create new AccountType subclasses as he sees fit. The federal laws could be an extension of AccountType so that all inherited subclasses can see the desired methods.
Explain why an analysis can represent concepts either as data or source code elements.
Be able to give an example.
As Data:
+ Possible values can be managed by the user (more flexible)
As Source Code Elements:
+ Need to change the implementation every time the possible values change (recompile & redeployment)
Example:
Say a system has different types of accounts.
Making the account type an attribute of the account class is a data representation, as the type can easily be changed by a simple setter method. Creating a new account type is just as easy.
If the account types are represented as their own sub-classes of a general Account class, this is a source code element representation. In order to add a new account type, a new subclass needs to be created. This requires the system to be recompiled with this new class now included. In order to change the account type in this representation, the account must be recreated, transferring the attributes of the old class to the new one.
Be able to give an example of a model that contains an unnecessary redundancy.
Redundant connections can be taken out and the model will still makes sense.
Example:
Students are associated with many sections that contain a course. Students are are also in many courses.
This is redundant, we could take out the Student class’ many-to-many association with the Course class and this would still make sense.
The same goes for the professor class, if the professor has many sections he teaches, this implies that each section has a course.
So we can erase both connections to the course. and route both classes through the Section class for the same effect.
When are user actions represented in a class diagram?
+ Whenever the user has some sort of interaction with the elements of the system.
+ Usually denoted by a name of the action over the link between the user and the system element.
How can you change a 1 to many association to register the history of this association?
Be able to give an example.
You can make the associated connection many to many (—–) for a simple solution.
Example:
[Passenger]——-1[Bus] =>
[Passenger]——-*[Bus]
Other ways to register history of associations: \+ Add a data attribute to “Client” containing an array of client's previous addresses \+ Associate the client class with an address class (make associated connection one to many (1--------*))
When is it worth it to store the value of a ‘Derived Property’ in a database?
+ Storing derived data is faster reading
+ There is no calculation and values are simply accessed
+ Stored derived data simplifies database queries; this is important for complex analytical queries
Terms:
What is a ‘Derived Property’?
A property which values are produced or computed from other information, for example, by using values of other properties.