Summary of Financial Markets: Structure and Functions
Financial Markets: Structure and Functions
Introduction
Software development is the process of conceiving, designing, implementing, testing, and maintaining software applications that solve real-world problems. This material offers a practical and structured guide for self-taught students who want to understand the key concepts, practices, and most relevant tools for creating quality software.
Definition: Software development is the set of technical and organizational activities aimed at producing and maintaining software programs and systems that satisfy functional and non-functional requirements.
1. Software Development Life Cycle (SDLC)
Breaking down the process helps to understand the responsibilities and deliverables at each stage.
Main Phases
- Requirements: gather and document what the system needs to do.
- Design: architecture and detailed component design.
- Implementation: write code and perform integrations.
- Testing: verify functionality, performance, and security.
- Deployment: put the system into production.
- Maintenance: fix bugs and evolve the product.
Definition: A requirement is a documented expectation about a system's behavior or constraints.
Comparison Table: Waterfall vs. Iterative Model
| Aspect | Waterfall | Iterative/Agile |
|---|---|---|
| Flow | Linear and sequential | Incremental and adaptive |
| Changes | Difficult to incorporate | Adaptable between iterations |
| Deliveries | At project end | Frequent deliveries |
| Risk | High if requirements change | Reduced risk due to feedback |
2. Key Roles in a Development Team
- Product Owner: defines priorities and scope.
- Scrum Master/Coach: facilitates processes and removes impediments.
- Developer: implements features.
- QA/Tester: ensures quality through testing.
- DevOps/Platform Engineer: automates deployments and operations.
Definition: DevOps is a practice that integrates development and operations to accelerate delivery through automation and collaboration.
3. Best Practices in Design and Architecture
SOLID Principles (summarized)
- S: Single Responsibility — a class should have only one reason to change.
- O: Open/Closed — open for extension, closed for modification.
- L: Liskov Substitution — derived objects must be substitutable for their base objects.
- I: Interface Segregation — small, specific interfaces.
- D: Dependency Inversion — depend on abstractions, not concretions.
Practical Example: If you have a class that manages users and sends emails, separate responsibilities into two classes: user management and email service.
Table: Comparison of Architectural Styles
| Style | Advantages | Disadvantages |
|---|---|---|
| Monolith | Initial simplicity, easy deployment | Limited scalability in large projects |
| Microservices | Scalability, independent deployment | Operational complexity, latency between services |
4. Version Control
- Use Git to manage changes in your code.
- Common workflows: trunk-based, Git Flow, GitHub Flow.
Best practices:
- Small, meaningful commits.
- Clear, consistent messages.
- Code reviews (code review) before merging changes.
Definition: A pull request is a request to review and merge changes from one branch to another, facilitating code review and discussion.
5. Software Testing
Main types:
- Unit tests: test isolated units of code.
- Integration tests: test interaction between components.
- End-to-end tests: test the system from the user's perspective.
- Regression tests: ensure that changes do not break existing functionality.
Exam
Already have an account? Sign in
Essential Software Development
Klíčové pojmy: Understand the phases of the SDLC and their deliverables, Prioritize requirements with the Product Owner, Apply SOLID principles to maintain flexible code, Use version control with small commits and reviews, Implement unit, integration, and end-to-end tests, Automate CI/CD and use IaC for reproducibility, Monitor production with logs, metrics, and traces, Integrate security from the start of the project, Choose architecture (monolith vs microservices) based on scalability and complexity, Manage secrets and vulnerable dependencies, Use agile methodologies for incremental delivery, Perform deployments to staging environments before production