-
Risks Assesment
- Project risks
- Product risks
- Business risks
-
Technology risks:
- Version control failures
- Technology failure—software doesn’t work; network failure; etc
- Incompatible components at integration time
-
People risks:
- Non-appearance of team members;
- Lack of skills within a group;
- Overestimating people’s abilities.
- People Dropping out from the course.
- team changes because of course changes.
- Conflict of interests during design.
-
Organisational risks:
- Influence of deadlines and work for other second year courses;
- Non-communication; confusion; not recording decisions; etc.
- Non-appropriate distribution of work
- Not assigning appropriate tasks to each member of the group
- failures in individual Time management
- Bad project time scheduling
- conflict between different second year course deadlines and workloads.
-
Tools risks:
- Tools that do not support the project: Software incorrectly configured.
-
Requirements risks:
- Changing requirements—perhaps the most dangerous
- Bad design decisions meaning a re-design and thus delay
- Non-compliance with your own glossary.
-
Estimation risks:
- Over ambitious designs not fulfilled
- Running out of storage.
- Avoidance strategies:
- Minimisation strategies:
- Contingency plans:
-
Requirements Gathering
-
Why?
- Finding out what the new system should do
- learn how people do their work
- making sure your app supports there activities
- Discovering the functions needed
- Evaluating systems – acceptance and usability (feedback)
-
When?
- All the time, be "Agile" by keeping users close
- Especially at the beginning, but avoid "waterfalling"
-
Where?
- Questioning
- Workplace
-
Why so hard?
- Initial requirements are mostly wrong
- Requirements increase the more code you write
- Sargeant's rule
-
Refining requirements
-
Informal Notes become either:
- Glossary
-
Requirements Document which becomes
- Use Cases
- Business Rules
-
Kinds of requirements
- Funtional
- Non-Functional Requirements
- Domain Requirements
- User Requirements
- System Requirements
-
Presenting requirements
- prioritisable MoSCOW
- functional, non-functional and domain with glossary terms highlighted
-
Causes of requirements change
- Experience with using the software
- Change in business processes/management direction
- Marketing requirements
- Technology change
- Misunderstanding and general user inconsistency.
-
Interview guidelines
- Try and ask questions in an ordered fashion.
- Your questions should move from the general to the specific.
- Use feedback from one question to ask another; be prepared to ask follow up questions
- Be aware of who you are asking and what they know.
- Make sure the question is relevant to the person youre asking.
- Ask questions that the person is qualified to answer.
- Don’t assume an excessive level of technical understanding.
- Phrase your questions clearly and concisely.
- Don’t nag users.
- Think of asking the same question in different ways at different times in an interview.
- Make the intentions of the question clear.
- Only ask one question at a time; multiple questions offers an opportunity not to answer.
- Avoid simple yes/no answers; you’re trying to get the user to talk. The yes/no can come from post-interview analysis.
- Try and avoid vague ”what if” questions Don’t be too open-ended.
- Try and make questions unambiguous.
- Be clear and precise; use examples to clarify questions.
- You need to understand what the user is doing in their current practices.
- Ask questions about how the existing practices work/dont work.
- Use questions to clarify terminology
- Dont let the user make unreasonable demands of the system
- Don’t offer the impossible
- Don’t ask what the user wants when he or she couldn’t possibly know
- Don’t be rude to the client: Don’t accuse them of lying or getting it wrong; phrase your question carefully
- Don’t over-use your client’s time
-
UML
-
Use Cases
-
Description
- Primary and alternative flows ; entry and exit conditions
- Entry conditions (Preconditions)
- Exit Conditions (Post-conditions)
- Actors involved
-
Actors
- An actor is/are entities that are external to the system that directly perform "use cases". An internal DB, is not an actor.
- make actor’s names actually reflect their role; ”user” is too generic; ”Fred” is too specific.
- Actor names should be specific and unambiguous: ”family tree database” is more informative than ”database”.
- Actors can use the system and can be used by the system
-
Cases
- Use cases capture goals or actions of actors.
- Make sure UC names contain verbs ( Create; add; modify; delete; search; report; inspect)
- Looking for symmetry can help: ”create” must be matched by ”delete”.
- remember fundamental things: ”a user will read a document; will look at a picture; etc.”
- This means avoiding mindless detail—”genealogist presses mouse button”.
- Each UC should be self-contained.
- try and be precise and avoid vagueness. ‘who is doing x’; ’what y is being done'; 'how is z being done?';
- Avoid the passive voice in descriptions; it leaves open the questions as to who is doing what
- Don’t repeat the use case name in the entry condition. eg ”Print document” has "doc exists" not "ready to print"
- Don’t make up UC not in the requirements. ”add person” subsumes ”add father”
- Avoid UC that look like algorithm steps: for example, save tree, enter tree
- A use case diagram should look like a star, not an activity diagram.
-
Whole thing
- Name the System box and, again, make it informative.
- system should be a black box.
- UC diagrams show what use cases exist, including choice points and parrallelism. but not necessarily how they are related.
- Activity diagrams show a flow-chart process of the system.
-
Common errors
- bad names
- fine grained task
- chaining
- missing uc
- wrong uc
- mis-identified actor
- missing actor
- mis-named actor
- what do the arrows mean: control; data flow; initiating actor
- wrong level of abstraction: Fine at start; big at end
- main flow is normal; alternative catches deviations in AF should still meet
- goal(pay by cheque rather than credit card)
- exceptional flow is not meeting goal (card doesn’t work)
- including too much UI
- building data structure
- Used to model the DOMAIN
-
From DOMAIN to DESIGN
- Domain classes often inspire design classes
- Some domain classes represent entities outside the software (e.g. actors).
- Extra design classes – Pure Fabrications - are often added, e.g. to represent collections.
- The key skill required is assigning responsibilities to (software) classes.
-
Used to model the SPECIFICATION & DESIGN
-
Design Modelling
- more detailed than domain class diagrams
- include operations as well as attributes
- include software-oriented things such as types and visibilities.
- deal with a small number of classes at once, since each is described in more detail.
-
Extra UML features
- Types. Shown after the name, e.g. name:String
- Visibilities + (public) – (private)
- Parameters on operations e.g. addOption(option: MCQOption)
- Static attributes and operations e.g. inputFromFile(filename:String):Question
- Constructors: Student(name, ID)
- Types and visibilities are still optional
- Used to document ACTUAL CODE
-
Software processes
-
Waterfall Development
-
Development
- Requirements gathering
- Systems analysis
- Design
- Coding
- Testing
- Maintenance
-
Motivation
- Later a problem is found, the more expensive it costs to fix
- Well defined milestones/deliverables make budgeting/planning easier
- Well documented, problems clearly identified
- Promotes specilisation because of layers
-
Common problems
- Deliverables offen late or fudged (blank tape trick)
- Analysis Paralysis offen occurs
- Specialisation can cause poor communication.
- The system delivered does not meet the users’ needs
- “maintenance” phase is often prolonged and traumatic.
- project is usually grossly late and over-budget.
-
FAIL because:
- you won’t get the requirements right the first time
-
Agile methods
- Ceremony is absolute minimum and
- respond in an “agile” way to changing requirements
- Iterative – consist of short cycles where part of the software is produced.
- Frequent interactions with the customer.
- Strong emphasis on testing
- Done in small “self-organising” teams with little specialisation or explicit leadership
- Best known are Extreme Programming (XP) and SCRUM.
-
pros
- cope much better with requirements change than waterfall
- code quality should be good
-
cons
- requires competence and confidence from all developers
- long-term planning may be difficult
- lack of documentation may cause problems later
- probably not suitable for large projects
-
Extreme programming (XP)
- Requirements are determined from “user stories” (similar to informal use cases)
- Customer representative always available
- Unit tests are written before the code to be tested
- Programming in pairs – one codes the other reviews, swapping frequently.
- Strong emphasis on simplicity of design.
- “Refactor whenever and wherever possible”
-
The Unified Process (UP)
-
Iterative
- Timeboxed, typically 4-6 weeks.
- Each iteration produces a production version of a subset of the system
-
Phases
- Inception.
- Elaboration.
- Construction.
- Transition.
-
Disiplins
- Requirements gathering (WS 1 and 2)
- domain modelling (WS3)
- class design (WS4)
- coding, testing etc
-
Artefacts
- UML diagrams
- reports
- code
- other deliverables
- Incomplete requirements.
- Lack of user involvement.
- Lack of resources.
- Unrealistic expectations.
- Lack of executive support.
- Changing requirements & specifications.
- Lack of planning.
- Elimination of need for project.
- Lack of IT management.
- Technology illiteracy.
-
Design
- Is simple
- Is easy to test
- Is easy for other developers to understand
- Adapts well to changing requirements
- (Usually) one which is object-oriented.
- Provide guidance on assignment of responsibilities to classes – the core skill in OO design.
- Follows “Gang of Four” design patterns
-
Patterns
- be reused.
- contain an explanation of when and how it is applicable
- Have names, (e.g. Composite) used to communicate rapidly between designers
- Also good for passing on wisdom to inexperienced designers.
-
Follows GRASP
-
High cohesion/low coupling
- High cohesion: a class represents a single well-defined entity
- Low coupling: class interacts with as few other classes as reasonably possible.
- Polymorphism
- Subtype polymorphism (inheritance)
- Many beginners misuse/overuse inheritance
- “is-a-kind-of” relationship between superclass and subclasses.
- DON’T use inheritance to avoid code duplication if the is-a-kind-of test fails
- Often, other classes only need to be coupled to the superclass
- Operations, e.g. addReview() can be implemented once in the superclass…
- More subclasses (e.g. CD) can be added without changing (or even recompiling) existing code.
- Some coupling is essential but avoid spaghetti-type links between classes.
-
M-V separation
- Always separate internal data structures (model) from the UI code (view)
- Allow each to change without affecting the other
- Could also be a MVC where the controller is between M and V
-
Testing
-
Safety critical systems
- Provides graceful degradation: don’t have to revert to manual control immediately with one computer out.
- Gives continuous testing for free – each discrepancy reveals a bug! system will become be extremely reliable
- two computers with different software written by different teams. In theory both will fail at the same time
- But if there is a discrepancy you don’t know which one’s wrong – so you need a third computer and take a majority vote: triple redudancy.
- Process
-
Basic testing techniques
- Traditional solution: have a separate testing team who are as nasty to the software as possible
- Agile solution – write the tests before the code – also helps to clarify requirements.
- Equivalence partitioning: Focus on space BOUNDARIES instead of all values, since exhaustive testing is impossible
-
Black box
- Means tests will be written without preconceptions about how the code works.
- If the code is changed, the same tests are still valid.
-
White box
- Allows more tests to be done
- Allows tester to apply pressure to those places which look most likely to break.
-
Kinds of testing
-
Unit testing
- Relatively simple, but the class you’re testing will usually rely on other classes.
- The search space is generally well defined so techniques like EP ad BVA are most useful here.
- Often possible to be systematic and reasonably confident that a single class is bug-free.
- In Java, often done with the JUnit testing framework.
-
Integration testing
- Harder to define than unit testing; shape of testing space is less obvious.
- Check that the use cases can be performed without problems.
- Regression
- Smoke testing
-
System testing
- This will generally be a lot more varied than the context in which it was developed.
- May involve different hardware, operating systems, performance issues etc.
- Need to check the documentation and procedures as well as the code.
- Alpha testing
- Beta testing
-
Acceptance tesing
- In general, users don’t really know in advance what they want (the “waterfall fallacy”).
- Who within the customer organisation defines the spec? e.g. Managers and end users will have different views.
- Fixating on passing the acceptance test could result in serious problems being missed.
-
Bugs
-
Emburys's Law
- Applies to all non-trivial(>10k lines) projects
- Some components of SW will be bug-free
-
Kinds of bugs
- Causes crashes/freezes
- Fail to provide functionally the user needs
- Failure to conform non-function requirements
- Inappropriate UI design
- Documentation/training bugs
- Requirement bugs
-
Help against bugs
- Testing
- Code review
-
Refactoring
- If it isn't working properly, refactor.
- Split classes, move methods, replace algo's etc
- Topic
- Frequent contact with users and stakeholders
- Risk-driven development
- Experience
-
Bug density factors
- On average, 3-5 bugs per 100 lines
- concurrent, reactive systems are more diffcult than sequential transformations systems
- Programming language: Java < C < Perl
- Programmer competence and experience
-
User Interface
- Usability Dimensions
-
Basics
- Allowing users to achieve a goal with efficiency, effectiveness and satisfaction
- Utility is the functionality of a system
- Utility without usability, but not vice versa
- Have paradigms of good usability, e.g. GUI
-
When
- Often the last thing and not enough time
- Can design a UI as soon as the functionality is known
- Early prototyping; keeping it Agile
- Also helps force requirements questions
-
WIMPS
- The user interface widgets that you commonly use
- There are many styles for deploying these widgets in a UI
- Some are not based on WIMPS
- The user interface designer’s skill is choosing a design that affords the functionality
- A different skill from programming
- Some people would claim disjointness in the two skill sets
-
Principles
- Visibility of system status System should always keep users informed
- Match between system and the real world System should speak the user's language
- System functions chosen by mistake need a clear 'emergency exit'
- Consistency and standards Avoid ambiguity
- Error prevention
- Recognition rather than recall
- Flexibility and efficiency of use
- Aesthetic and minimalist design
- recognize, diagnose and recover from errors
- Help and documentation
-
The Human
- Has mental models of goals and intentions
- The human recieves information; forms intentions and executes actions with tools in the world
- The human “information processor” has limitations
- Brilliant at association and inference
- Limited memory: The famous 7 plus or minus two
- Physical limitations – finger span, tiredness
- Cycle of Execution and Evaluation
-
The Computer
- Very fast
- Good memory
- Good at long, repetitive task (at which humans are poor)
- Rubbish at inference and association
-
HCI
- Presentation
- Observation
- Articulation
- Performance
-
Framework
- Ergonomics
- Dialogue Design
- Rendering State
-
Styles
-
Wizard Interface
- Defined start point
- Restricted set of known steps
- Set of known options
- Ability to move back and forth and change options
- One choice affects what is offered for another
- Typical of an installation process
-
Form Fill-in
- Again, set of known step and known options
- No defined start point
- I might want to start anywhere
- Choosing Specifying a package holiday: Start point; end point; dates; hotels; tours; etc.
- I might wish to start at any point
- One choice affects another
-
Direct Manipulation Interface
- Humans work by manipulating things both mentally and physically
- A user reaches for what he/she wants, uses and puts it down again
- Humans also wish to see the results of their actions
- Dragging a file to the printer; putting files in the bin; making words bold; drawing lines etc.
- “hey you do that”
- Lots of functionality available all the time
-
Command line interface
- Typicall not for everyday users
- Very good for mass action
- “mv *.txt ../other-folder”
- Very good for constructing arbitrary, complex actions
- Often very fast for the power user
-
Batch Processing
- A set of repeated steps
- Need to be run repeatedly in the same way
- “A batch” of commands
- Don’t necessarily need to interact as the process runs
- Bbut do need feedback like logs
- Still an interaction style
-
Ergonomics of a typical GUI
-
Mini Modes
- Long-term modes modes
- Short term “spring-loaded” modes
- Alert modes modes
- Modes that emulate a real-life situation that is itself modal
- Modes that change the attributes of something
- Modes that stop functionality, as in error conditions
- There should be a clear indicator of the current mod
- It should be easy to change modes
-
Learnability
- Ease to learn; easy to remember
- return after long break and know how to use the tool
- return after a short break (cup of tea) and apprehend state
- Consistent application design
- Closeness to user’s model of the task helps mapping
- Most users don’t read manuals
- Users prefer to learn by playing or exploring
- Therefore good presentation of model to user is vital
- “Walk up and use”
- Transferable skills
- Recall vs Recognition
- Predictability
-
Consistency
- External consistency: Consistency with task
- Ergonomic issues
- Internal consistency: Arbitrary consistency
-
Reachability
- Does the UI map from all parts of task model to system model?
- Can the system do things that I cannot ask it to do?
-
Translating Input
- Can the input reach the(and only the) necessary states of the system ?
- Match task analysis or activity diagrams to use cases and class/collaboration diagrams
- Small cost to user, larger cost in implementation
-
Ease of Evaluation
- Translate state from core to output language
- Must preserve state attributes in terms of domain concepts
- Output language often limited in expressivity
- Video simply limited in size – difficult to see context in documents etc.
-
Heuristic Evaluation
- Simple and natural dialogue
- Speak the user's language
- Minimize user memory load
- Be consistent
- Provide feedback
- Provide clearly marked exits
- Provide short cuts
- Good error messages
- Prevent errors