Basic concepts of software engineering
Software crisis
Software is growing in functionality, scale, and complexity, and the complexity of the software reaches the point where its developers have difficulty controlling it.
This situation leads to serious consequences: software reliability down development inefficient maintenance is extremely difficult
This puts software developers in a bind, what people call a "software crisis"
Solving software crises
Research in the software development industry
1. Research of programming methodology
The method of structured programming
Object-Oriented Programming method
2. The research of software engineering science
The development and maintenance of software by means of engineering, and the engineering management of the software production process
3. Other aspects
Concurrent programming
Data structure and algorithms
Programming languages ...
Definition of software engineering
In a nutshell, software engineering is an engineering discipline that directs the development and maintenance of computer software. It is software engineering to develop and maintain software in an engineered way, combining time-tested and proven engineering management techniques with the best technical methods currently available to economically develop high-quality software and maintain it effectively.
The content of software engineering
For the whole process of software life cycle and each specific stage of engineering methods, technical details, document specifications, technical support, management system, personnel organization and quality assurance system. Each software developer must act in accordance with the uniform requirements of the project and not be free to play it freely. Every development phase produces sound, engineering-compliant documentation. Software products are the summation of these documents, not just the program.
Three elements of software engineering
1. Method: To complete the software development of the various tasks of the technical method, for software development to provide "How to do" technology
2. Tools: An automated or semi-automatic software engineering support environment for the use of methods
3. Process: In order to obtain high-quality software needs to complete a series of task framework, it stipulates the completion of the tasks of the work steps, how to integrate software engineering methods and tools, reasonable and timely software development
The methods, tools, and processes we use in our projects
Method: Object-oriented approach
Tools: EA
Process: A prototype-based incremental iterative software development process
Software life cycle (i)
1. Feasibility Analysis Phase
The main tasks of this stage: the system analyst in the user's cooperation with the user's requirements and the existing environment in-depth investigation and write out research reports, from the economic feasibility, technical feasibility, operational feasibility, legal feasibility and other aspects of the feasibility of the project, namely whether the project is worth doing, whether there are feasible solutions.
Main results of this phase: Feasibility Analysis report.
2. Requirements Analysis Phase
The main tasks of this stage: the system analyst and the user repeatedly discuss and discuss, fully exchange information, determine the software system to be developed "what", determine the functional requirements and non-functional requirements of the software system, use a method and tool component software system model, and write software Requirements specification.
Key results of this phase: Software Requirements Specification (software Requirements specification, SRS).
Software life cycle (ii)
3. System Design Phase
The main tasks of this stage: the overall framework design, detailed function design and database design of the whole system according to the functional requirements and non-functional requirements identified in the requirement analysis stage. In short, the demand analysis phase answers the question of "What to do", while the system design phase answers the question "How to". The design stage is divided into the outline design and the detailed design. Summary design is based on the results of demand analysis to define the main components of the system and the relationship between them. Detailed design is the construction details that define the internals of each system component.
The main results of this stage: summary design description, detailed design specification, database design Manual.
4. System implementation phase: often also known as the coding phase.
The main task of this stage: according to the detailed design instruction, the detailed design result can be converted into the machine running source code in a selected programming language, which is a process of writing and debugging the program.
The main outcome of this phase: the source code of the Unit test.
Software life cycle (iii)
5. Test phase
The main task of this stage is to minimize the bugs of software through various software testing methods and testing tools.
The main results of this phase: Software Test report.
6. Maintenance phase
The main task at this stage is to make the system durable enough to meet the needs of the user through a variety of necessary maintenance activities.
There are generally four types of maintenance activities:
Corrective Maintenance: Diagnose and correct software errors found during the use of the system.
Adaptive maintenance: Modify the software to adapt to changes in the environment.
Perfect maintenance: According to the requirements of users to improve or expand the software to make it more perfect.
Preventative Maintenance: Modify the software to prepare for future maintenance activities.
The main results of this stage are: Software problem report, software change record, software maintenance record.
Software development process
The software development process is a collection of activities and software generation results in the software system development process of software life cycle. The software process model describes the activities, roles, products and their relationship models of the software development process.
At present, there are several software process models, various models have their different characteristics, and applicable to different development methods. For example, waterfall models, loop models, spiral models, incremental models, and fountain models.
Different software development methods and software development models require different engineering systems. Historically, the most used are structured methods and waterfall models. Representing the current technology is the object-oriented approach and fountain model.
Unified Modeling Language UML
Just like building a skyscraper to build a model, in the system analysis and design phase of software system development, we typically use modeling techniques to model the system. In the process of software engineering development, there are many modeling techniques. Finally, IBM's Unified Modeling Language UML becomes the Unified Modeling technology recognized by the industry.
Unified Modeling Language UML (Unified Modeling Language) is a visual modeling language designed for software system design and architecture modeling, which shows all aspects of a software system through various diagrams.
There are many kinds of UML diagrams, for programmers, the most frequent use of the class diagram. Class diagrams are primarily used to display a static model of classes, interfaces, and static structures and relationships between them in a system. The most basic element in a class diagram is a class, an interface. When a software designer designs a class diagram, the programmer can implement the content contained in the class diagram in code.
Using class diagrams to represent relationships
There are a number of relationships between classes and classes, classes, and interfaces, interfaces, and interfaces, and there are six types: the implementation relationship, the generalization relationship, the association relation, the dependency, the aggregation relation, the composition relationship,
1. Implementing a relationship refers to the relationship between an interface and its implementation classes.
2. A generalization relationship (generalization) refers to an inheritance relationship between an object and an object.
3. Association Relationship (Association) refers to the connection between an object and an object, which enables an object to know the properties and methods of another object. In Java, the code representation of an association relationship is a reference to an object that contains another object. Association relationships have one-way and two-way associations.
4. A dependency (Dependency) relationship is a weakly associative relationship. The specific code in Java for a dependency is represented as a constructor or a local variable in a method, a method or constructor's parameter, a method's return value, or a static method that calls B.
5. Aggregation (Aggregation) is a special case of association, which embodies the relationship between the whole and the part, that is, "has a". At this point, the whole and the part are separable, they can have their own life cycle, some can belong to more than one whole object, can also be shared for multiple whole objects, so the aggregation relationship is often referred to as a sharing relationship. (e.g., departments and employees)
6. Combination (composition) is also a special case of association, it also embodies the relationship between the whole and the part, that is, "contains a". But at this time the whole and part are not divided, part of the whole can not be shared, as the whole object is responsible for part of the life cycle of the object. This relationship is stronger than aggregation, also known as strong aggregation. (e.g., companies and departments)
Analysis and design of object-oriented system
In object-oriented technology, the process of building an entire software system is often referred to as object-oriented analysis and design (object-oriented analyze and Design,ooad). For the software system we are developing, Ooad solves what the system is (object-oriented system analysis, i.e., OOA) and how to do it (object-oriented system design, or Ood), and OOP simply implements the system in a programming language.
In general, ooad work is typically done by demand analysts, system analysts, and system architects, while OOP is done by programmers. However, mastering Ood technology is especially important for programmers to write high-quality code and personal technical growth and career planning.
Object-oriented software engineering and UML