System Design and Analysis (1)

content


Definition of Software Engineering

The IEEE Computer Society defines software engineering as:

  • (1) Apply systematic, disciplinary, and quantitative methods to develop, operate, and maintain software, that is, bring software to engineering applications.
  • (2) Research on various methods in (1)

Explain the essential causes and manifestations of the software crisis, and describe the methods to overcome the software crisis

Software crisis is a term used in early computer science to describe the difficulty of writing practical and efficient computer programs in a specified time.


The essence of software crisis

The software crisis was caused by the rapid growth of computer power and the complexity of unsolvable problems. As software complexity increases, many software problems arise due to the inadequacy of existing methods.

The manifestation of the software crisis

The cause of the software crisis has to do with the overall complexity of the hardware and software development process. The crisis manifests itself in several ways:

  • overrun project
  • Project timed out
  • Software is inefficient
  • low quality software
  • Software often does not meet requirements
  • The project is unmanageable and the code is difficult to maintain
  • Software is never delivered

How to Overcome the Software Crisis

Over the past few decades, a variety of processes and methods have been developed to improve software quality management, such as procedural programming and object-oriented programming. The development of software requires not only programming problems, but also systematic software engineering methods.


software life cycle

The software life cycle, also known as the software life cycle or the system development life cycle, is the life cycle from the generation of the software until it is scrapped. The cycle includes problem definition, feasibility analysis, overall description, system design, coding, debugging and testing, acceptance and operation. , maintenance and upgrading to abandonment and other stages, this time-based thinking method is a ideological principle in software engineering, that is, step by step, step by step, and each stage must have definition, work, review, and form documents for communication. Or for reference, to improve the quality of the software. But with the maturity of new object-oriented design methods and technologies, the guiding significance of software life cycle design methods is gradually diminishing. Each cycle of the life cycle has certain tasks, and generates certain specifications of documents (data), which are submitted to the next cycle as the basis for continued work. According to the life cycle of software, the development of software no longer only emphasizes "coding", but summarizes the whole process of software development. Software engineering requires that the beginning of each cycle of work must only be a continuation of the premise that the results of the previous cycle are "correct"; therefore, each cycle is based on "activity-result-review-reactivity-until The result is correct" cycle goes on and on.


15 Knowledge Domains of SWEBoK

Software Requirements

The software requirements knowledge area involves the elicitation, negotiation, analysis, specification, and verification of software requirements. There is a general perception in the software industry that software engineering projects are very fragile when these activities are poorly executed. Software requirements express the requirements and constraints on a software product that help to solve some practical problems.

software design

Design is defined as the process of defining the architecture, components, interfaces, and other characteristics of a system or component, and the results of [the] process (IEEE 1991). The software design knowledge area includes the design process and the final product. The software design process is an activity of the software engineering life cycle in which software requirements are analyzed to produce a description of the software's internal structure and its behavior, and serve as the basis for its construction. A software design (result) must describe the software architecture—that is, how the software is decomposed and organized into components and the interfaces between those components. It must also describe the component at the level of detail that supports its construction.

software construction

Software construction is the detailed creation of working software through a combination of detailed design, coding, unit testing, integration testing, debugging, and verification. The Software Construction knowledge area includes topics related to the development of software programs that will satisfy their needs and design constraints. This knowledge area covers software construction fundamentals; managing software construction; construction techniques; practical problems; and software construction tools.

software test

Testing is an activity to evaluate and improve product quality by identifying defects. Software testing consists of dynamically verifying the behavior of a program against expected behavior in a limited set of test cases. These test cases are selected from a (usually very large) execution domain. Software testing knowledge includes the basics of software testing; testing techniques; human-machine interface testing and evaluation; any test-related measures; and practical considerations.

Software maintenance

Software maintenance includes enhancing existing functionality, adapting the software to new and modified operating environments, and correcting defects. These categories are called perfect, adaptive, and corrective software maintenance. Software maintenance knowledge areas include software maintenance basics (nature and need of maintenance, types of maintenance, cost of maintenance); key issues in software maintenance (technical issues, management issues, maintenance cost estimation, software maintenance metrics); maintenance procedures; Software maintenance techniques (program understanding, reengineering, reverse engineering, refactoring, software decommissioning); disaster recovery techniques and software maintenance tools.

Software Configuration Management

The configuration of a system is a functional and/or physical feature of hardware, firmware, software, or a combination thereof. It can also be seen as a collection of specific versions of hardware, firmware or software items combined according to a specific build process to serve a specific purpose. Therefore, software configuration management (SCM) is the procedure for identifying system configurations at different points in time, with the purpose of systematically controlling configuration changes, as well as maintaining configuration integrity and traceability throughout the software life cycle. The software configuration management knowledge area includes management of the SCM process; software configuration identification, control, status accounting, auditing; software release management and delivery; and software configuration management tools.

Software Engineering Management

Software engineering management involves planning, coordinating, measuring, reporting, and controlling a project or program to ensure that the development and maintenance of software is systematic, disciplined, and quantitative. Software Engineering Management KA includes initialization and scope definition (identification and negotiation of requirements, feasibility analysis, requirements review and revision); software project planning (process planning, effort estimation, cost and schedule, resource allocation, risk analysis, quality planning); Software project formulation (measurement, reporting, control; procurement and supplier contract management); product acceptance; review and analysis of project performance; project closure; and software management tools.

software engineering process

The software engineering knowledge area deals with the definition, implementation, evaluation, measurement, management, and improvement of software life cycle processes. Topics covered include process implementation and change (process infrastructure, models for process implementation and change, and software process management); process definition (software life cycle models and processes, process definition notation, process adaptation, and process automation); process evaluation models and methods; measurement (process measurement, product measurement, measurement technology, quality of measurement results); and software processing tools.

Software Engineering Models and Methods

The Software Engineering Models and Methods knowledge area deals with methods that encompass multiple life cycle phases; methods specific to a particular life cycle phase are covered by other knowledge areas. Topics covered include modeling (principles and properties of software engineering models; syntax, semantics, and invariants; (preconditions, postconditions, and invariants); types of models (informational, structural, and behavioral models); analysis (correct integrity, integrity, consistency, quality, and interactivity analysis; traceability; and trade-off analysis); and software development methodologies (heuristics, formal methods, prototype methods, and agile methods).

software quality

Software quality is a ubiquitous software life cycle issue that is addressed by many SWEBOK V3 kas. In addition, the software quality knowledge area also includes the basics of software quality (software engineering culture, software quality characteristics, value and cost of software quality, software quality improvement); software quality management processes (software quality assurance, verification and validation, review and auditing) ); and practical considerations (defect description, software quality metrics, and software quality tools).

Software Engineering Professional Practice

Software engineering professional practice refers to the knowledge, skills, and attitudes that software engineers must possess in order to practice software engineering in a professional, responsible, and ethical manner. Software engineering professional practice areas of knowledge covering specialties (professional conduct, professional societies, software engineering standards, employment contracts, legal issues); ethical principles; group dynamics (teamwork, cognitive problem complexity, interacting with stakeholders, dealing with inconsistencies) certainty and ambiguity, dealing with multicultural environments); and communication skills.

Software Engineering Economics

The Software Engineering Economics knowledge area focuses on making decisions in a business context, aligning technical decisions with an organization's business goals. Topics covered include fundamentals of software engineering economics (advice, cash flow, time value of money, planning horizons, inflation, depreciation, replacement and retirement decisions); nonprofit decision making (cost benefit analysis, optimization analysis); evaluation , Economic Risk and Uncertainty (assessment techniques, decision-making under risk and uncertainty); multi-attribute decision-making (value and measurement scales, compensatory and non-compensatory techniques).

Computational Fundamentals

The Computing Fundamentals area covers fundamental topics that provide the necessary computing background for software engineering practice. Topics include problem solving techniques, abstraction, algorithms and complexity, programming fundamentals, parallel and distributed computing fundamentals, computer organization, operating systems, and network communications.

Mathematical basis

The Mathematical Foundations KA covers fundamental topics that provide the mathematical background necessary for the practice of software engineering. Topics covered include sets, relations, and functions; basic propositional and predicate logic; proof techniques; graphs and trees; discrete probability; grammars and finite state machines; and number theory.

Engineering Fundamentals

The Engineering Fundamentals area covers essential topics that provide the necessary engineering background for software engineering practice. Topics include empirical methods and experimental techniques; statistical analysis; measurement and measurement; engineering design; simulation and modeling; and root cause analysis.


Briefly explain the five levels of CMMI. Example: Level 1 - Initial: Unordered, spontaneous production mode

  • Level 1 Initial disorder, spontaneous production mode
  • Level 2 Managed programs are used to characterize projects and are usually reactive
  • Level 3 Defined procedures are used to describe organizational characteristics and are often proactive
  • Level 4 Quantitatively Managed Program Measurement and Control Process
  • Level 5 Optimizing focuses on program improvement

1568213-20190311123145394-1491734609.png
Taken from ( https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration ) [Wikipedia]


Briefly describe SWEBoK or CMMI in your own language

SWEBoK, the Software Engineering Body of Knowledge, is an international standard on software engineering that is used to promote a consistent view of software engineering worldwide, clarify the distinction between software engineering and computer science and other disciplines, and describe the disciplinary content of software engineering and body of knowledge to provide the basis for developing curriculum and personal certification. At the same time, SWEBoK organizes software engineering into 10 knowledge domains, including software requirements, software design, etc., to guide the training of software engineering talents and discipline construction.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324032102&siteId=291194637