Software is the intangible side of computers. It includes programs and data.
Software development is the process of creating and deploying software.
This post covers some aspects of software development. It is somehow an index to other posts in the blog.
Programming Abstraction Levels
Machine language is a language that can be interpreted by a processor, and they are not human-friendly. The machine language is unique to each processor model.
The first computer programs were programmed in machine language, but nowadays this is very rare.
An assembly language is a low-level language that correlate each machine language instruction into another instruction that is more easily understood by a human.
You can read this post about assembly language.
An assembler is a software that converts the assembly language instructions into its corresponding machine language instructions.
A disassembler is software that converts the machine language instructions into assembly language instructions.
A programming language is a high-level human-friendly code that includes instructions for a program. Unlike assembly language, each instruction does not have one-to-one correspondence, and each programming language instructions may be translated into many assembly or machine language instructions. This is why it is called a high-level language.
You can read this post about programming languages.
A compiler is a software that converts code written in a programming language into machine code.
Machine code is rarely written or read by humans, as they usually use programming language or exceptionally assembly language if they need to work as such a low level of detail.
A cross compiler transforms the code written in a programming language into machine language code for a processor different to the one that the one used to execute the compiler.
An interpreter is a computer program that directly executes instructions written in a programming or scripting language, without requiring them previously to have been compiled into a machine language program.
The source code is the code that is written originally to create and modify a computer program. Source code is usually written in a programming language, but it might be written in assembly code (e.g. original Transport Tycoon).
A source-to-source compiler, transcompiler or transpiler that transform source code of a program into a an equivalent source code. This destination source code could be the same or a different programming language.
Software Engineering
Software engineering is the is the branch of computer science that deals with the design, development, testing, and maintenance of software applications. Software engineers apply engineering principles and knowledge of programming languages to build software solutions for end users.
Joint Requirement Planning (JRP) uses different roles in the team. One of them is the moderator.
Joint Application Design (JAD).
Software Design Concepts
Types of cohesion, ordered from most coherent to less:
- Functional
- Sequential
- Communicational
- Procedimental
- Temporal
- Logical
- Casual
Process Modeling
Process modeling is one aspect of software engineering.
Process modeling is performed through the use of process modeling languages. You can read this post about process modeling languages.
There are tools to aid and provide visuals for process modeling. You can read this post about process modeling software.
Software Design Patterns
There are software design patterns that can be used as templates for solutions to common problems found in software development. You can read more about this on this post.
Software Project Management
You can read more about software project management on this post.
Software estimation can be done using function points, that are assigned depending on the number and complexity of user cases.
Software Development Models
You can read a post about software development models, also known as software development lifecycles (SDLCs), such as waterfall and agile methodologies.
Software Implementation
Software implementation involves actually coding, programming or writing the source code.
Software Implementation with AI
Software implementation with AI make use of AI software engineer.
GitHub Copilot is an AI that helps you to develop.
Devin is self-named “the first AI Software engineer cognition”.
Devika is a FOSS version that aspires to compete with Devin.
OpenDevin is another FOSS version that aspire to compete with Devin.
Software Tracking Tools
You can find a list of software tracking tools or applications on this post.
Programming Environment
A programming environment needs to be set to perform software development. It is a set of tools that enables software development and collaborative work.
You can find more information about programming environments on this post.
You can read about how to set a software development environment on this post.
Software Testing
Software must be tested before it is released.
Software Testing is part of IT quality assurance (QA). You can read more about IT quality assurance and find a list of software testing tools on this post.
Software Deployment
Software deployment involves releasing software in a given environment, for instance test or production environment.
You can read this post about software deployment.
Software Maintenance
Software must be maintained after it is released.
Types of maintenance:
- Adaptative
- Corrective
- Evolutive
- Perfective
- Preventive
Adaptive software maintenance is about changing software in response to changes in its environment.
Corrective software maintenance is unsurprisingly about correcting software defects, errors and faults.
Evolutive are necessary to cover product expansion or user requirements.
Only the three before are recognised on Métrica v3.
Perfective software maintenance focuses on features that improve the user experience through functional enhancements.
Preventive software maintenance is about software changes and adaptations that reduce the risk of deterioration and outdating.
Software Development Documentation
Standard ISO/IEC 26514 is about software development documentation.
DevOps
You can find more information about DevOps on this post.
Web Development
Web Development is a subset of software development that is focused on developing websites.
You can find more information about this on this post.
Software Development Security
You can read about software development security on this post.