Software Engineering Interview Questions Flashcards
How can we determine size of the software product?
lines of code or function points.
Function points are features (not actually functions) within a project.
What is change control?
A system that ensures changes to a project are consistent, and made in line with the projects requirements and rules.
What are some project management tools?
Gannt charts,
Kanban boards,
Milestone checklists
How can you gather requirements?
Staff interviews brain storming Domain analysis Observation Examining existing software
What is an SRS?
Software Requirements Specification
What are functional requirements?
Functional requirements are function features and specificaitons that are expected by the end users
What are non-functional requirements?
They are requirements that are implicit. They include things like security, look and feel of the ui, interoperability, cost etc.
Another way of putting it - is it’s a requirement specifies criteria that can be used to judge the operation of the system, but doesn’t describe specific behaviour.
Function requirements on the other hand describe the specific behaviour or functions of the system.
What is modularisation?
A technique in which a larger system is broken down into smaller modules that can complete tasks independently.
What is concurrency?
When two or more tasks can be initiated simultaneously and independently of each other.
Usually achieved by splitting the software into modules or components that can be executed on separate threads or processes.
JavaScripts model of concurrency is based on the event loop.
What is cohesion?
It’s a measure of how much the modules in a system actually belong together. High cohession is GOOD.
Benefits:
Simpler modules
Increased maintainability
Increased reusability
What is coupling?
How tightly bound software modules are to each other. loose coupling is desirable. The lowest form of coupling is messaging. Data coupling isn’t too bad (i.e. sharing data through parameters) either.
Why is tight coupling bad?
A single change in one module can cause ripple effects throughout a system.
Harder to implement in many ways.
Less code reuse possible.
Potential for More bugs.
What are the principles of agile?
Customer satisfaction through early and continuous delivery of a product.
Welcome changing requirements, even late in development
Working software is delivered frequently
Close, daily collaboration between stakeholders
Projects built around motivated individuals
Face to face is best form of communication (collocation)
Working software is the principle measure of success
Sustainable pace
Continuous attention to technical excellence and good design
Simplicity - avoiding unnecessary work
Best architectures arrive from self organising teams
Regular reflections and adjust accordingly
Why did agile work for you?
Firstly we used the scrum framework. Mainly because it seemed to be the industry norm, it’s simple, and flexible.
Many games I have worked on have suffered from not being playable for long periods of time - this causes issues with management.
EA often wanted what’s called a vertical slice - but the issue with this is that when you are designing an engine at the same time you are designing a game - you are talking about delivering an essentially finished game engine at the beginning of the project.
By making sure we had an always working / always functional build we could satisfy our bosses requirements to be able to comment on the game.
By having standups and daily meetings we could react quickly to changes or issues as a group.
By adhering to a planning system that meant we only used the available resources we tended to work within our means.
What do you know about extreme programming?
It’s a type of agile development, and was designed to improve software quality and responsiveness to changing client needs.
Involve pair programming, code review, unit testing, and only programming features when they are needed.
It kind of pushed things to the extreme - i.e. if code reviews are useful, let’s do it all the time and do paired programming.