Software architecture is not too old discipline compared to programming. Few years back it was considered as emerging discipline and since it was emerging, lots of things are added: new definitions, new scope and subjects. The way software were developed in 90's is different than the way they are developed now in year 2019. Tools, platforms and frameworks have changed and it has an impact on the way people used to perceive software design and architecture. Now you will have to consider modern days platforms, tools and opportunities while defining your architecture, still basic fundamentals of architecture and design remains same. One need to build his knowledge from basics to advanced new concepts. I have tried listing topics which needs to be learnt by some one who is interested to learn Architecture in IT/Software. This is to help those who wants to be an architect and the scope here is not enterprise architecture:
Architecture
Basic concepts and definitions
- What is covered in SAD (Software Architecture Document)?
- What is software architecture
- Why it is important to focus in architecture?
- IEEE 1471-2000 Recommended practice for description of architecture intensive system
- Views & view point
- 4+1 view
- Describe the use of each view
- Audience:
- Area:
- Related Artifacts:
- C4 Model
- Different aspects (Business/Functional/Information/Solution/UX architecture)
- Architectural styles & architectural patterns
- Quality Attributes
- Availability
- Interoperability
- Modifiability
- Testability
- Usability
- Performance (performance and scalability)
- Security
- Robustness
- Adaptability
- Architecture trade off analysis method (ATM)
Defining architecture
- Identify and prioritize use cases
- Describe the functional requirements with a significant impact on the architecture (architecturally significant requirements
- Describe the architectural constraints of the system
- Define context level architecture as is and to be (Identify key abstractions)
- Describe the layers and subsystems of the application
- Tool & technology selection
- Build versus buy analysis
- Describe the most important use-case realization. Will contain the Analysis Model and the Design Model
- Describe design’s concurrency aspects
- Describe how the system will be deployed. Will contain the Deployment Model
- Describe any significant persistent element. Will contain the Data Model
- Describe any performance issues and constraints
- Describe any aspects related to the quality of service (QoS) attributes
- Rationale and Justification for Architectural Approach
Architecture review
- Troubleshooting issues in code, design and architecture
- Architecture review
Architecture in modern days context
- Architecture for Microservices
- Architecture for Big data and NoSQL
- Architecture in Cloud
- Architecture for mobile applications
- User Experience
- Integration techniques and architecture
UML Modeling
- Use case
- Sequence
- Collaboration
- Class diagram
- Data flow
- Activity diagram
- Data model
- Business process modeling
Object Oriented Analysis
- Analysis Model
- Use case model
- Domain object model,
- Structures: generalization specialization, aggregation, hierarchies,
- Attributes and behaviors (services)
- Principles
- Best Practices
Object Oriented Design
- Object responsibility assignment principles
- Use case realization (sequence and collaboration)
- Identifying software classes to achieve loose coupling, cohesiveness and other quality requirements
- Design patterns
- Best Practices
Implementation
- Translating design to code
- Coding best practices
- Continuous integration and testing
- Static analysis
- Code smell
Deployment
- How to be ready for deployment from day 1: Avoid pitfalls of being in development mode
- Different deployment options
- Switching from development to deployment mode
- Cloud, Virtualization and Container based deployment
- Dev-Ops
Interesting resources
SAD (Software Architecture Document) Template:
https://wiki.sei.cmu.edu/sad/index.php/Software_Architecture_Documentation_Template
http://sce.uhcl.edu/helm/rationalunifiedprocess/webtmpl/templates/a_and_d/rup_sad.htm
http://sce.uhcl.edu/helm/rationalunifiedprocess/examples/csports/ex_sad.htm
http://www.ecs.csun.edu/~rlingard/COMP684/Example2SoftArch.htm
What is software architecture?:
https://www.ibm.com/developerworks/rational/library/feb06/eeles/index.html
Why is it important to focus in software architecture?:
http://csse.usc.edu/GSAW/gsaw2003/s13/northrop.pdf
https://sites.google.com/site/softwarearchitectureinpractice/2-what-is-software-architecture/2-4-why-is-software-architecture-important
IEEE Recommended Practice for Architectural Description of Software-Intensive Systems
http://cabibbo.dia.uniroma3.it/ids/altrui/ieee1471.pdf
http://iea.wikidot.com/ieee1471
https://en.wikipedia.org/wiki/IEEE_1471
Views and view points
https://iasaglobal.org/itabok/capability-descriptions/views-and-viewpoints/
http://www.mit.edu/~richh/writings/hilliard99-ifip.pdf
4+1 views
https://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf
https://en.wikipedia.org/wiki/4%2B1_architectural_view_model
https://www.coursera.org/lecture/software-architecture/3-1-2-kruchtens-4-1-model-view-z65ZO
https://softwareengineering.stackexchange.com/questions/233257/mapping-between-41-architectural-view-model-uml
C4 Model
https://c4model.com/
Architectural styles and architecture patterns
https://techbeacon.com/app-dev-testing/top-5-software-architecture-patterns-how-make-right-choice
Software architecture review:
https://www.slideshare.net/NASAPMC/danieldvorak
http://lore.ua.ac.be/Teaching/CapitaMaster/ATAMmethod.pdf
https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=513908