1/67
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No analytics yet
Send a link to your students to track their progress
Why is software change inevitable?
New Requirements emerge when the forward is Used
The Business Environment changes
Errors must be Repaired
New Equipment is added to the System
Organizations have Huge Investments in their software Systems
Assets Have Value that needs to be Maintained through changes and updates
A key problem for organizations is Implementing and Managing change to their existing Software
What is software Maintenance and Evolution?
Modifying a Program after it has been Put Into Use
Maintenance is used for changing Custom software
Generic software products are said to Evolve to create new Versions
Maintenance Does Not Involve Major Changes to System’s Architecture
What are the 3 types of maintenance?
Fault Repairs
Environmental Adaptation
Functionality Addition and Modification
What are Fault Repairs?
Changing a system to Fix Bugs/ Vulnerability and correct Deficiencies in meeting Requirements (24%)
What is Environmental Adaption?
Adapting software to Operate in Different Environment from its Initial implementation (19%)
What is Functionality Addition and Modification?
Modifying the system to Satisfy New Requirements (58%)
What are maintenance costs?
it is usually More Expensive to add new features to a system During Maintenance than it is to add the same feature during Development
A New Team has to Understand the Programs being Maintained
Separating maintenance and development teams means there is No Incentive for the Development Team to write Maintainable Software
Handover Problems emerge when the Development Team uses an Agile approach but the Evolution Team is Unfamiliar with agile and expect Detailed Documentation to support evolution
Program maintenance work is unpopular
What is Change Prediction?
Predicting the Number of Changes requires an Understanding of the Relationships between a System and its Environment
Tightly Coupled Systems requires Changes whenever the Environment Changes
What are the 3 factors that affect the relationship between tightly coupled systems and environment changes?
Number and Complexity of system Interface
Number of Volatile system Requirements
The Business Processes where the system Is Used
What is Refactoring?
Improving your code Style Without Altering Its Behavior
Making Improvements to a Program to slow down Degradation through Change
“Preventive Maintenance”that reduce the Problems of Future Changes
When you refactor a program, You Should Not Add Functionality but rather Concentrate on program Improvement
What are Code Smells?
Certain Structures in code that Indicate Violation of fundamental design Principles and negatively impact Design Quality
What are the 8 things in the Catalog of Bad Smells?
Duplicate Code (App-Level)
Long Methods (Method-Level)
Data Clump (Class-Level)
Speculative Generality (App-Level)
Large Class (Class-Level)
Complex Switch or if Statements (Class-Level)
Feature Envy (Method-Level)
Inappropriate Intimacy (Class-Level)
What is Duplicate Code and what is the Solution for it?
The Same or very similar Code may be Included at Different Places in a program
Remove and Implement as a Single method or function that is called As Required
What are Long Methods and what is the Solution for it?
Hotel California System
Developer Adds to method but does not Remove Code
Redesign as number of Shorter Methods
What is Data Clump and what is the Solution for it?
Same group of Data Items Re-Occur in several places in App Code
Replace with class that Encapsulates all of the Data
What is Speculative Generality and what is the Solution for it?
Developers include Unused generality in a program in case it is Required in the Future
Simply Remove
What is Large Class and what is Solution for it?
App Grows and with it Class Grows in functionality
Refer to single responsibility principle and extract a new class, interface, or subclass
What is Complex Switch or if Statements and what is the Solution for it?
Replace with Subclasses or Strategy Patterns, or us Polymorphism
What is Feature Envy and what is its Solution?
A method Accesses Data from an object Different from the object to which the Method Belongs more than Its Own Object
Move Methods or Parts of Methods that Frequently Accesses that data
What is Inappropriate Intimacy and what is the Solution for it?
Class Refers to much to Private Fields/Methods of Other Classes
Move Method / Field, or maybe revert from Delegation back to Inheritance
What is Software Evolution?
Continuation of the Development Process based on Frequent System Releases
Automated Regression Testing is valuable when changes are made
What are the 3 phases of evolution?
Evolution
Servicing
Phase - Out
What is Evolution Phase?
Software is in Operational Use and is Evolving as new requirements are Proposed and Implemented in the System
What is the Servicing phase?
Software is Mature and Useful, and the only Change made one to Fix Bugs and Respond to changes in the softwares environment but No New Features
What is the Phase - Out phase?
Software may still be Used but no Further Change are made to it
What is Configuration Management?
Concerned with How to Manage Change in software systems that is the Result of Evolution
The policies, procedures and tools used to keep track of the many Different Version of each software component
What are the 6 things that might happen if you don’t use Configuration Management?
You are not keeping track of Changes
You won’t know When Features are Added
You won’t know When Bugs were Introduced or Fixed
You won’t be able to go back to Old Versions
There is only One Version of the System : this one
You would have No Safety Net
What does Configuration Management do?
Support the system integration process so that all developers can
Access the project code and documents in a Controlled Way
Find out What Changes Have Been Made, and compile and link components to create a system
What are the 4 configuration management activities?
Version Management
System Building
Change Management / Issue Tracking
Release Management
What is Version Management ??
Keep track of the different Versions of Software Components
Coordinate development by Several Programmers
What is System Building?
Assemble Program Components, Data and Libraries then compile them to create an Executable System
What is Change Management / Issue Tracking?
Keep track of Requests for changes to the software from Customers and Developers
Work out the Costs and Input of changes. And decide which changes should be Implemented
What is Release Management?
Prepare software for External Release
Keep track of Versions that have been Released for Customer Use
What are Version Control Centers?
Tools / Apps that manage Changes applied to a Set of Files
A change to a set of files that gets Checked In is called a “Commit”
Revisions or changes are Identifiable by a Code and a Timestamp
Distributed Version Control provides Backup mechanism for code repo and allows Offline Work capabilities
Git is the most well known distributed Version Control System
CM systems handle Checking out (Clone) the latest version of the system, Making Changes and Checking changes back in
Duplicates of code under version control from parallel lines or “Branches”
What is a Trunk and what is a Tag?
A Trunk is the project Baseline / mainline / master
A Tag is a Label for a Baseline
What are branches?
Branches can later “Merge” back onto parent Branch
Integrate changes and resolve Conflicts
Support Bug Fixes and Exploration
Git branches are quick to create, so “Branch Early and Branch Often”
What is System Building?
When your software project is Complex, you need to write a Build Script to Automate the Build Tasks
Write once, run whenever needed
Stabilizes build process throughout the project, detect when someone “Breaks the Build”
How to achieve Development, Build and Target Platforms?
Building tools and version control Tools must communication
Building checks out versions from Repo manage by Version Control System
Build Server is used to build Executable Versions of the system
Target Environment
What is a Target Environment?
The platform on which the system Executed
Smaller and Simpler than the Development environment
What are the 2 phases in Agile Building?
Preparation
Update
What are the 4 aspects in Agile Building Preparation?
Check out the Mainline from version control system into Developers Private Workspace
Build and Tun automated tests to ensure that the built system Passes all the Tests
Make the changes to the system Components
Build the System in the private workspace and Rerun System Tests
What are the 3 aspects in Agile Building Update?
Once the system Passes its tests, check into the Build System but do not Commit it as a New System Baseline
Build the System on the Build Server and Run the Tests
If the system Passes its tests on the Build System, then Commit the changes you have made as a New Baseline in the system Mainline
What are Daily (Nightly) Builds?
The development organizations sets a Delivery Rime for system Components
If a system is very large, it may take a Long Time to Build and Test especially if the Integration with other application system is Involved
What is Continuous Integration?
In the beginning states of Development, it is easy to think of Deployment as an event that will happen in the Distant Future
Continuous integration fosters the principle of always being Production Ready
There’s always a running system
With that base, you can “Grow the System” adding features Incrementally, always ensuring that the system can be Run
What do you need to make continuous integration possible?
A Source Code Repository
A Check In Process
An Outdated Build Process
A willingness to Work Incrementally
What are the crucial elements for an app to be Production Ready?
Commitment to Building Tests
Never Break the Build
Version Control
What are the benefits of continuous integration?
Reduced Risk
Better Communication
Faster Iterations
Fast Feedback on Business Decisions
What is the 6 elements in the software development pipeline?
Commit code changes
Build artifacts
Code review and run all tests
Staging and production
Avoid Waste
Prioritization
What is Continuous Delivery (CD)?
Automate configuration of code base to push to staging environment
What is Continuous Deployment (also CD)?
Automate the whole release to production process
What is Continuous Integration (CI)?
Automate integration of code changes into mainline
Automate build for every version
Automate running of all tests
What are the 8 aspects in the Continuous Integration (CI) workflow?
How to Execute
Fetch latest code
Build
Execute tests (centralized)
Results
Software is packaged
Release
Feedback
What are the 3 CI platform options?
Circle CI
Travis CI
Jenkins CI
What are the 3 CD platform options?
GitLab
Jenkins
What is relationship between CI and code review?
CI server can be configured to perform Code Reviews and inform developer of review document
CI server is configured to Block a Commit to the Mainline if a minimum number of Reviewers didn’t Review code
Gerrit can be used (rating system +2, +1, 0, -1, -2)
What are the minimum reviewers?
Two reviewers
What is Release Management?
A System Release is a version of a software system that is distributed to customers
What are the 2 types of release management?
Mass Market Software
Custom software
What are the 2 types of releases for Mass Market Software?
Major Release
Minor Release
What does a Major Release contain?
New functionalities
What does a Minor Release contain?
Bugs and Fixes
What is the Release Management for Custom Software?
Different release for different customers
What are the 2 types of Release Timings?
Too frequent
Too infrequent
What is the problem with too frequent releases?
Customers may not Adopt to new releases
What is the problem of too Infrequent releases?
Market share may be Lost as customers Move To Alternative Systems
What are the 9 CI/ CD Practices?
Maintain single source repository
Automate the build
Make your build self testing
Every commit should build on an integration machine
Keep the build fast
Test in a clone of the production en environment
Make it easy for anyone to get the latest executable version
Everyone can see what’s happening
Automate deployment
What are the 10 things to do CI and CD?
Developers check out code into their private workspaces
When done commit the changes to the repository
The CI server monitors the repository and checks out changes when they occur
The CI server build the system and runs uni and integrations tests
The CI server releases deployable artifacts for testing
The Ci server assigns a build label to the version of the code it just built
The Ci server informs the team of a successful build
If the build or tests fail the Ci server alerts the team
The team fixes the issue at the earliest opportunity
Continue to continually integrate and test throughout the project
What are the 5 Team Responsibilities when doing CI and CD?
Check in frequently
Don’t check in broken code
Don’t check in untested code
Don’t check when the build is broken
Don’t go home after checking until the system builds