The following outline is provided as an overview of and topical guide to software engineering: Software engineering – application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software. The ACM Computing Classification system is a poly-hierarchical ontology that organizes the topics of the field and can be used in semantic web applications and as a de facto standard classification system for the field. The major section "Software and its Engineering" provides an outline and ontology for software engineering.
Software applications Software engineers build software (applications, operating systems, system software) that people use. Applications influence software engineering by pressuring developers to solve problems in new ways. For example, consumer software emphasizes low cost, medical software emphasizes high quality, and Internet commerce software emphasizes rapid development.
Business software Accounting software Analytics Data mining closely related to database Decision support systems Airline reservations Banking Automated teller machines Cheque processing Credit cards Commerce Trade Auctions (e.g. eBay) Reverse auctions (procurement) Bar code scanners Compilers Parsers Compiler optimization Interpreters Linkers Loaders Communication E-mail Instant messengers VOIP Calendars — scheduling and coordinating Contact managers Computer graphics Animation Special effects for video and film Editing Post-processing Cryptography Databases, support almost every field Embedded systems Both software engineers and traditional engineers write software control systems for embedded products. Automotive software Avionics software Heating ventilating and air conditioning (HVAC) software Medical device software Telephony Telemetry Engineering All traditional engineering branches use software extensively. Engineers use spreadsheets, more than they ever used calculators. Engineers use custom software tools to design, analyze, and simulate their own projects, like bridges and power lines. These projects resemble software in many respects, because the work exists as electronic documents and goes through analysis, design, implementation, and testing phases. Software tools for engineers use the tenets of computer science; as well as the tenets of calculus, physics, and chemistry. Computer Aided Design (CAD) Electronic Design Automation (EDA) Numerical Analysis Simulation File FTP File sharing File synchronization Finance Bond market Futures market Stock market Games Poker Multiuser Dungeons Video games Information systems, support almost every field LIS Management of laboratory data MIS Management of financial and personnel data Logistics Supply chain management Manufacturing Computer Aided Manufacturing (CAM) Distributed Control Systems (DCS) Music Music sequencers Sound effects Music synthesis Network Management Network management system Element Management System Operations Support System Business Support Systems Networks and Internet Domain Name System Protocols Routers Office suites Word processors Spreadsheets Presentations Operating systems Embedded Graphical Multitasking Real-time Robotics Signal processing, encoding and interpreting signals Image processing, encoding and interpreting visual information Speech processing Text recognition Handwriting recognition Simulation, supports almost every field. Engineering, A software simulation can be cheaper to build and more flexible to change than a physical engineering model. Sciences Sciences Genomics Traffic Control Air traffic control Ship traffic control Road traffic control Training Drill Simulation Testing Visualization, supports almost every field Architecture Engineering Sciences Voting World Wide Web Browsers Servers
Software engineering topics
Programming paradigm, based on a programming language technology Object-oriented programming Aspect-oriented programming Functional decomposition Structured programming Rule-based programming
Databases Hierarchical Object Relational SQL/XML SQL NoSQL
Graphical user interfaces GTK+ GIMP Toolkit wxWidgets Ultimate++ Qt toolkit FLTK
Programming tools Configuration management and source code management CVS Subversion Git Mercurial RCS GNU Arch LibreSource Synchronizer Team Foundation Server Visual Studio Team Services Build tools Make Rake Cabal Ant CADES Nant Maven Final Builder Gradle Team Foundation Server Visual Studio Team Services Visual Build Pro Editors Integrated development environments (IDEs) Text editors Word processors Parser creation tools Yacc/Bison Static code analysis tools
Libraries Component-based software engineering
Design languages Unified Modeling Language (UML)
Patterns, document many common programming and project management techniques Anti-patterns Patterns
Processes and methodologies Agile Agile software development Extreme programming Lean software development Rapid application development (RAD) Rational Unified Process Scrum Heavyweight Cleanroom ISO/IEC 12207 — software life cycle processes ISO 9000 and ISO 9001 Process Models CMM and CMMI/SCAMPI ISO 15504 (SPICE) Metamodels ISO/IEC 24744 SPEM
Platforms A platform combines computer hardware and an operating system. As platforms grow more powerful and less costly, applications and tools grow more widely available.
BREW Cray supercomputers DEC minicomputers IBM mainframes Linux PCs Classic Mac OS and macOS PCs Microsoft .NET Palm PDAs Sun Microsystems Solaris Windows PCs (Wintel) Symbian OS
Other Practices Communication Method engineering Pair programming Performance Engineering Programming productivity Refactoring Software inspections/Code reviews Software reuse Systems integration Teamwork
Other tools Decision tables Feature User stories Use cases
Computer science topics Algorithms, well-defined methods for solving specific problems. Searching Sorting Parsing Numerical analysis Compiler theory Yacc/Bison Data structures, well-defined methods for storing and retrieving data. Lists Trees Hash tables Computability, some problems cannot be solved at all List of unsolved problems in computer science Halting problem Complexity, some problems are solvable in principle, yet unsolvable in practice NP completeness Computational complexity theory Formal methods Proof of correctness Program synthesis Adaptive Systems Neural Networks Evolutionary Algorithms
Mathematics topics Discrete mathematics is a key foundation of software engineering.
… excerpt ends here. Continue reading the full article.
