Software Development & Testing Flashcards
The Six Lean Principles
- Value
- Value Stream
- Flow
- Pull
- Continuous Improvement
- Respect for People
Lean Principle of Value in Software Engineering
- Identify and prioritize features and functionalities that provide the most value to users and stakeholders.
- Focus on delivering valuable software increments in each development iteration.
Lean Principle of Value Stream in Software Engineering
- Understand the end-to-end software development process, from requirements gathering to deployment and maintenance.
- Identify and eliminate non-value-adding activities and bottlenecks that hinder the delivery of value.
Lean Principle of Flow in Software Engineering
- Optimize the flow of work by maintaining a continuous delivery pipeline.
- Reduce batch sizes and cycle times to achieve a steady flow of high-quality features.
Lean Principle of Pull in Software Design
- Adopt a pull-based approach to work, where new work is pulled into the development process based on the team’s capacity and customer demand.
- Avoid overloading team members with excessive work items.
Lean Principle of Continuous Improvement in Software Design
- Foster a culture of continuous improvement by encouraging feedback and retrospectives.
- Regularly review processes, tools, and practices to identify areas for optimization.
Lean Concept of Respect for People in Software Design
- Recognize the importance of collaboration and communication within the development team and with stakeholders.
- Empower team members to make decisions and contribute to the success of the project.
The Six Kanban Principles
The core principles of Kanban include:
1. Visualize the Workflow
2. Limit Work in Progress (WIP)
3. Manage Flow
4. Make Process Policies Explicit
5. Feedback and Improvement
6. Collaborative Approach
Kanban
Kanban is a specific implementation of Lean principles, initially developed by Toyota for inventory management. In the context of software development and project management, Kanban is a visual management method that helps teams manage their work and optimize workflow.
Kanban boards often use visual cues like cards to represent work items, with each card progressing through the different stages of the workflow. This visual representation makes it easy for teams to understand the status of work and identify potential areas for improvement.
Lean Philosophy
Lean is a philosophy and a set of principles aimed at maximizing value while minimizing waste in a process. It was first developed by Toyota in the 1950s and revolutionized the manufacturing industry. Lean principles have since been applied to various domains, including software development.
What is the Software Development Life Cycle?
Series of General Steps in software development (will not always be exactly the same from one methodology to the next)
12 Steps of the Software Development Life cycle
- Requirements Gathering and Analysis
- System Design
- Detailed Design
- Implementation (Coding)
- Testing
- Deployment
- Maintenance and Support
- Documentation
- Project Management
- Quality Assurance
- Version Control and configuration Management
- Deployment and Release Management
Requirements Gathering and Analysis in Software Engineering
The very first step in SDFC
1. Understand the needs and requirements of stakeholders and users.
2. Analyze and document the functional and non-functional requirements of the software.
Example: Conduct interviews and surveys with stakeholders to understand their needs and preferences for a new e-commerce website. Document the required features, such as user registration, product catalog, shopping cart, and payment options.
System Design for Software Development
- Create a high-level system design that outlines the architecture and components of the software.
- Break down the system into smaller modules and define their interactions.
Example: Design the architecture of a mobile application. Plan to use a three-tier architecture with a front-end for the user interface, a middle-tier for business logic, and a back-end for data storage and retrieval.
Creating detailed designs from system designs in Software Engineering
- Design each module in detail, specifying algorithms, data structures, and interfaces.
- Create detailed design documents or diagrams to guide the development.
Example: For the mobile application, design the login module in detail. Specify the algorithms for password hashing and user authentication, as well as the data structures for storing user credentials.
“Implementation” in Software Design
- Write the actual code for the software based on the detailed design.
- Use programming languages and tools to develop the functionality.
Example: Write the code for the login module using a programming language like Java or Python. Develop the necessary functions and classes for handling user authentication and data storage.
Testing in Software Design
- Conduct various types of testing, such as unit testing, integration testing, system testing, and user acceptance testing (UAT)
- Identify and fix defects to ensure the software meets the requirements.
Example: Perform unit testing on the login module to verify that individual functions work correctly. Conduct integration testing to ensure that the module interacts seamlessly with other components.
Software Deployment
- Package the software and prepare it for installation on the target environment.
- Deploy the software to production or a testing environment for final validation.
Example: Package the mobile application and make it available for download on app stores like Google Play or the Apple App Store.
Maintenance and Support for Software
- Provide ongoing support and maintenance for the software.
- Address bug fixes, enhancements, and updates as needed.
Example: After deployment, provide ongoing support for the mobile application, address bug reports, and release updates with new features and improvements.
Software Documentation
Create comprehensive documentation throughout the development process, including design documents, user manuals, and technical guides.
Example: Create user manuals that explain how to use the e-commerce website or the mobile application. Prepare technical documentation detailing the system architecture and API specifications.
Project Management for Software
- Plan and monitor the project, including resource allocation, timeframes, and risk management.
- Collaborate with stakeholders to manage expectations and communicate progress.
Example: Use project management tools like Jira or Trello to track progress, allocate tasks to team members, and monitor deadlines.
Quality Assurance in Software
Implement quality assurance practices to ensure that the software meets the required standards and quality criteria.
Version Control and Configuration Management in Software
- Use version control systems to track changes and manage different versions of the software.
- Apply configuration management practices to control changes and maintain consistency.
Example: Use Git as the version control system to manage code changes for the software. Ensure that every code change is committed and tracked with appropriate comments.
Deployment and Release Management for Software
- Plan and manage the release of software updates and new features to users.
- Ensure smooth deployment and minimize downtime during releases.
Example: Plan a controlled deployment of a new version of a web application during off-peak hours to minimize the impact on users. Have a rollback plan in case of any unexpected issues during the release.