Fundamentals to Modern Day: Software architecture
Post date: Dec 4, 2018 2:46:14 AM
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