software engineering

Announce Upload video
subject
open 48 homonymous entries
Collection
zero Useful+1
zero
Software engineering is a discipline that studies the construction and maintenance of effective, practical and high-quality software using engineering methods. It involves Programming language data base Software development tools system platform standard Design Pieces have E-mail Embedded system , man-machine interface to work in an office Kit operating system compiler data base game Etc. At the same time, almost all industries have computer software applications, such as industry, agriculture, banking, aviation, government departments, etc. These applications have promoted economic and social development, and also improved work efficiency and living efficiency.
Chinese name
software engineering
Foreign name
Software Engineering
Abbreviation
SE
Category
Computer class
Related majors
Communication Engineering, Computer Science and Technology
No
080611

Definition connotation

Announce
edit

definition

software engineering
Software engineering has always lacked a unified definition. Many scholars and organizations have given their own approved definitions: [1]
Barry Boehm: Use modern scientific and technological knowledge to design and construct computer Procedures and relevant documents necessary for the development, operation and maintenance of these procedures.
IEEE : In software engineering terms assembly Definition in: Software engineering is: 1. Apply systematic, strictly constrained and quantifiable methods to software development, operation and maintenance, that is, apply engineering to software; 2. Research on the method described in 1
Fritz Bauer: Definition given at the NATO meeting: a series of methods to establish and use perfect engineering principles to obtain reliable software that can run effectively on actual machines by more economical means.
Encyclopedia of Computer Science and Technology 》: Software engineering is application computer science mathematics logic and management science Etc. Software engineering draws lessons from the principles and methods of traditional engineering to improve quality, reduce costs and improve algorithms. Among them, computer science mathematics Used to build models and algorithm Engineering Science It is used to formulate specifications, design paradigms, evaluate costs and determine trade-offs, and management science is used to manage plans, resources, quality, costs, etc.
A more recognized definition holds that software engineering is to study and apply how to develop and maintain software in a systematic, standardized and quantifiable process approach, and how to combine management techniques that have been proven correct by time tests with the best technical methods available at present.
ISO 9000 The definition of the software engineering process is that the software engineering process is a set of interrelated resources and activities whose inputs are transformed into outputs. [2]
Other definitions: 1. When running, it can provide the required function and performance instructions Or a collection of computer programs. 2. The program can handle the information satisfactorily data structure 3. Documents that describe the functional requirements of the program and how the program operates and uses. With the development language as the description language, it can be considered that: software= program + data + file [2]

connotation

1、 Software engineering process refers to the process of obtaining software products from software engineer A series of software engineering activities completed include the following four aspects:
1、P(Plan)—— Software specification Specify the functions of the software and its runtime restrictions.
2、D(DO)—— software development Develop software that meets specifications.
3. C (Check) - software confirmation. Confirm that the developed software can meet the needs of users.
4. A (Action) - software evolution. The software is continuously improved in the running process to meet the new needs of customers.
2、 From the perspective of software development, it is a group of development activities for developing software using appropriate resources (including personnel, software and hardware resources, time, etc.), and at the end of the activity, the input (i.e. user needs) is converted into output (software products that ultimately meet user needs).
Three stages: definition stage: feasibility study Preliminary project plan requirement analysis Development phase: Outline design detailed design , implementation, testing; Operation and maintenance phase: operation, maintenance and abandonment
Principles: 1. Abstract; 2. Information hiding; 3. Modularization; 4. Localization; 5. Certainty; 6. Consistency; 7. Completeness; 8. Verifiability

basic content

Announce
edit
Software engineering principles, software engineering processes Software Engineering Methods Software engineering model , software engineering management, software engineering measurement, software engineering environment, software engineering application, software engineering development and use. Famous software engineering expert B Boehm synthesized the opinions of relevant experts and scholars and summarized the experience of developing software for many years. In 1983, he put forward seven basic principles of software engineering in a paper:
(1) Strictly manage with phased life cycle plan.
(2) Insist on stage review.
(3) Implement strict product control.
(4) Adopt modern programming technology.
(5) The software engineering results shall be clearly reviewed.
(6) The development team should have fewer and better staff.
(7) Recognize the need to continually improve software engineering practices. [2]

developing process

Announce
edit
Software Is created by computer program and Programming The concept of "" evolved from the process of program and program design developing to a certain scale and gradually commercializing. The development of software can be roughly divided into four stages.

No software concept stage (1946-1955)

The characteristics of this stage are: there is no concept of software, and the program design is mainly developed around hardware. It is small in scale, simple in tools, and has no clear division of labor (developers and users). The program design pursues space saving and programming skills, and has no documentation (except for the program list), which is mainly used for scientific calculation. [2]

Pasta stage (1956~1970)

software engineering
The characteristics of this stage are: Hardware The environment is relatively stable, and the development organization form of "software workshop" has emerged. The concept of software was established by beginning to widely use product software (which can be purchased). However, programmers code randomly, and the whole software looks like a bowl of spaghetti. With the expansion of the software system, the quality of software products is not high and the production efficiency is low, which leads to“ Software Crisis ”Generation of.

Software engineering stage (since 1970)

Because of the emergence of "software crisis", people have to study and change the technical means and management methods of software development. Since then, software has entered the era of software engineering. The characteristics of this stage are that the hardware has developed in four directions: giant, miniaturization, networking and intelligence, Database technology It has been mature and widely used, with the emergence of the third and fourth generation languages; First generation software technology: Structured programming has made outstanding achievements in the field of numerical computation; Second generation software technology: Software Testing Technology The method and principle are used in the software production process; Third generation software technology: processing requirements definition technology is used for software requirements analysis and description.

Object oriented stage (since 1990)

In this stage, the concept and method of object orientation are proposed. The idea of object-oriented includes object-oriented analysis (OOA, Object Oriented Analysis), Object oriented design (OOD, Object Oriented Design)、 And object oriented programming (OOP).
Like modular coding, object-oriented programming also requires repeated practice to deepen the understanding and mastery of object-oriented programming.

future

Further integrating resources on the Internet platform to form a huge, efficient, and trusted virtual environment, so that all resources can efficiently and reliably serve all users, has become one of the research hotspots of software technology.
The main research hotspots in the field of software engineering are software reuse and software component technology, which are regarded as a practical and feasible way to solve the "software crisis" and the only way to industrialization of software production. Moreover, software engineering will develop in the direction of open computing, "open computing" that can determine the industry infrastructure, guide industry development and technology integration.

target

Announce
edit
The goal of software engineering is to develop software products that have applicability, effectiveness, modifiability, reliability, understandability, maintainability, reusability, portability, traceability, interoperability and meet user needs under the premise of given cost and schedule. Pursuing these goals will help improve the quality and development efficiency of software products and reduce the difficulty of maintenance.
(1) Applicability : The degree of difficulty for software to meet user requirements under different system constraints.
(2) Effectiveness : The software system can make the most effective use of the computer's time and space resources. All kinds of software regard the time/space overhead of the system as an important technical index to measure software quality. In many cases, there will be conflicts in the pursuit of time effectiveness and space effectiveness. At this time, we have to sacrifice time effectiveness for space effectiveness or sacrifice space effectiveness for time effectiveness. The time/space tradeoff is a frequently used technique.
(3) Modifiability : Allows you to modify the system without increasing the complexity of the original system. It supports software debugging and maintenance, which is a difficult goal to achieve.
(4) reliability : It can prevent software system failure caused by imperfect concept, design and structure, and has the ability to recover software system failure caused by improper operation.
(5) Understandability : The system has a clear structure and can directly reflect the needs of the problem. Understandability helps control systems software Complexity, and support the maintenance, migration or reuse of software.
(6) Maintainability : After the software is delivered for use, it can be modified to correct latent errors, improve performance and other attributes, and make the software product adapt to changes in the environment. Software maintenance costs account for a large proportion of software development costs. Maintainability is a very important goal in software engineering.
(7) Reusability : Define one or a group of related modules with relatively independent concepts or functions as a software component. It can be assembled in any position of the system to reduce the workload.
(8) Portability : Software from a computer system Or how easy it is to move to another computer system or environment.
(9) Traceability : The ability to track software design and program forward according to software requirements, or track software requirements backward according to software design and program.
(10) Interoperability : The ability of multiple software elements to communicate with each other and cooperate to complete tasks. [2]

research field

Announce
edit
Software architecture
Software design method
Software domain modeling
Software Engineering Decision Support
Software engineering education
Automated software design and synthesis
Component-based software engineering
Computer Supported Cooperative Work
Programming languages and software engineering
Information and communication security
artificial intelligence And Identification
embedded software And application
Auto-Control
Research on Database Technology
Computer Aided Design And application technology
Big data analysis and processing

principle

Announce
edit
Since the term "software engineering" was put forward in 1968, experts and scholars studying software engineering have successively put forward more than 100 rules or creeds on software engineering. U.S.A Famous software engineering experts Barry Boehm Barry Boehm synthesized the opinions of these experts, summarized the experience of TRW in developing software for many years, and put forward seven basic principles of software engineering in 1983.
software engineering
Bohm believes that these seven principles are the minimum set of principles to ensure software product quality and development efficiency. They are independent of each other, and are the smallest set that cannot be missed; At the same time, they are quite complete. Of course, people cannot strictly prove that they are a complete set by mathematical methods, but it can be proved that more than 100 software engineering principles that have been proposed before can contain or derive from any combination of these seven principles.
Here are seven principles of software engineering:
With phased life cycle Strict plan management
This article was put forward based on the lessons of our predecessors. Statistics show that more than 50% of failed projects are caused by poor planning. In the long life cycle of software development and maintenance, many tasks with different natures need to be completed. This principle means that Software life cycle It is divided into several stages, and a feasible plan is formulated accordingly, and then the software development and maintenance are managed in strict accordance with the plan.
Bohm believes that six types of plans should be specified and strictly implemented throughout the software life cycle:
Project outline plan
Project control plan
Product control plan
Verification plan
Operation and maintenance plan.
Adhere to stage review
The statistical results show that most errors are caused before coding, accounting for about 63%. The later the errors are found, the greater the cost of correcting them, 2 to 3 orders of magnitude less. Therefore, the software quality assurance work cannot wait until the end of coding, but should insist on strict stage review to find errors as soon as possible.
Implement strict product control
One of the things developers hate most is changing requirements. But practice tells us that changes in requirements are often inevitable. This requires us to adopt scientific product control technology to meet this requirement. That is to say, change control, also known as benchmark configuration management, should be adopted. When the requirements change, the documents or codes of other stages change accordingly to ensure the consistency of the software.
Adopt modern programming technology
From structured software development technology in the 1960s and 1970s to the latest Object oriented technology From the first and second generation languages to the fourth generation languages, people have fully realized that method is more than strength. Using advanced technology can not only improve the efficiency of software development, but also reduce the cost of software maintenance.
The results should be clearly reviewed
Software is invisible and intangible logic Products. The work progress of the software development team is poorly visible and difficult to evaluate and manage. For better management software development The responsibilities of the development team and product standards should be clearly defined as far as possible so that the standards obtained can be clearly reviewed.
The staff of the development team should be few and excellent
The quality and quantity of developers are important factors that affect software quality and development efficiency. They should be few and refined. This is based on two reasons: the efficiency of high-quality developers is higher than that of low-quality developers efficiency It should be several to dozens of times higher, and the mistakes made in the development work should be much less; When the development team is N people, it is possible communication channel It is N (N-1)/2. It can be seen that with the increase of the number of people, the communication cost will increase sharply.
Recognize the need to continually improve software engineering practices
Following the above six basic principles can better realize the engineering production of software. However, they are just a summary of the existing experience, and can not guarantee to catch up with the pace of technological development. Therefore, Bohm proposed that the recognition of the need to continuously improve software engineering practices should be regarded as the seventh principle of software engineering. According to this principle, we should not only actively adopt new software development technologies, but also pay attention to constantly summarizing experience, collecting progress and consumption data, and making statistics on error types and problem reports. These data can be used to evaluate new Software technology It can also be used to indicate the problems that must be focused on and the tools and technologies that should be prioritized for research.

structure

Announce
edit
Software architecture is a certain form of structural elements, that is, a collection of components, including processing components, data components and connection components. The processing component is responsible for processing the data. The data component is the processed information, and the connection component combines and connects the different parts of the architecture. This definition focuses on distinguishing processing components, data components and connection components. This method is basically maintained in other definitions and methods. [1]
The software architecture represents the high-level structure of a software system, and its main features are:
1) Software system structure is a high-level abstraction, which does not involve specific system structure (such as B/S still C/S ), and does not care about the specific implementation.
2) The software architecture must support the functions required by the system, and the dynamic behavior of the system must be considered when designing the software architecture.
3) When designing the software architecture, the existing system compatibility , security and reliability At the same time, consider the future scalability and scalability of the system. Therefore, sometimes decisions must be made in multiple goals in different directions.
Software architecture runs through the whole life cycle of software R&D and has an important impact. This is mainly from the following three aspects: communication between stakeholders, early decisions of system design, and transferable system level abstraction.
At present, there are some aspects about standardized software architecture, such as: ISO Open system interconnection model X Window System, etc.

method

Announce
edit
Foreign big software company And organizations have been studying the concept of software development methods, and have also proposed many practical development methods, such as life cycle method, prototyping method object-oriented Methods, etc. Here are some popular development methods:

Structured approach

The structured development method is developed by E The so-called SASD method proposed by Yourdon and L.L.Constantine can also be called function oriented software development method or function oriented software development method data stream Software development method.
Yourdon method is the most widely used software development method in the 1980s. It first uses Structured analysis (SA) Conduct requirements analysis on software, and then use Structured design (SD) method, and finally Structured programming (SP)。 It gives two typical software structures (transformation type and transaction type), which greatly improves the success rate of software development.

Data structure oriented software development method

software engineering
Jackson method It is the most typical data structure oriented software development method. Jackson method decomposes the problem into the hierarchical structure of each part that can be represented by three basic structural forms. The three basic structural forms are sequence, selection and repetition. The three data structures can be combined to form a complex structure system. This method starts from the input and output of the target system data structure Start with, export the program framework structure, and then add other details, you can get a complete program structure diagram. This method is particularly effective for small and medium-sized systems with clear input and output data structures, such as file table processing in commercial applications. This method can also be combined with other methods for detailed design of modules.

Problem oriented analysis

Software engineering requirements analysis
PAM (Problem Analysis Method) is a software development method proposed by Hitachi in the late 1980s. Its basic idea is to consider the input and output data structures, guide the decomposition of the system, and gradually synthesize under the guidance of system analysis. The specific steps of this method are: export the basic processing box from the input and output data structures; Analyze the order of these processing boxes; Synthesize the boxes step by step according to the sequence until the PAD Diagram This method is essentially a comprehensive bottom-up method, but it has been purposefully decomposed before the gradual synthesis, which is to fully consider the input and output data structures of the system. Another advantage of the PAM approach is the use of PAD diagrams. This is a two-dimensional tree structure diagram, which is one of the best detailed design representation methods so far. Of course, due to the gap between the input and output data structures and the whole system, this method is still only applicable to small and medium-sized problems.

Prototyping method

There are many reasons for the prototype method. With the increase of our system development experience, we also found that not all requirements can be predefined and repeated modification is inevitable. Of course, the prototyping method can be used because of the rapid development of development tools, such as VB DELPHI We can quickly develop a system framework that can be seen and touched by users, so that users who are not very familiar with computers can put forward their own needs according to this template.

development method

Announce
edit
The method of software engineering has many meanings. Including project management, analysis, design, program writing, testing and quality control.
Software design methods can be distinguished into heavyweight methods and lightweight methods. A large number of formal documents are generated in the heavyweight method.
Famous heavyweight development methods include ISO9000 CMM , and Unified software development process (RUP)。
The lightweight development process does not require a large number of formal documents. Well known lightweight development methods include Extreme programming (XP) and Agile Processes.

Software Requirements

Announce
edit
Software requirements include three different levels - business requirements, user requirements and functional requirements.
In addition, each system has various non functional requirements.
Business requirement Represents high-level goals of the organization or customer. Business needs usually come from project investors, customers who buy products, managers of actual users, marketing departments or product planning departments. Business requirements describe why an organization wants to develop a system, that is, what the organization wants to achieve. A vision and scope document is used to record business requirements. This document is sometimes referred to as a project chart or market requirement document.
User requirement It describes the user's goals, or the tasks that the user requires the system to be able to complete. Use cases, scenario descriptions, and event response tables are all effective ways to express user requirements. In other words, user requirements describe what users can do with the system.
Functional requirement Specify the software functions that developers must implement in the product. Users use these functions to complete tasks and meet business requirements. Functional requirements are sometimes called behavioral requirements, because they are always described with "should": "The system should send E-mail To notify the user that his reservation has been accepted. Functional requirement description is what developers need to achieve.
System requirement It is used to describe the top-level requirements of products (i.e. systems) containing multiple subsystems. The system can contain only software systems, or both software and hardware subsystems. People can also be part of the system, so some system functions may be undertaken by people.
Business Rules Including enterprise policies, government regulations, industrial standards, accounting standards and calculation methods. Business plans themselves are not software requirements, as they do not fall within the scope of any particular software system. However, business rules often limit who can execute certain use cases, or stipulate that the system must implement certain functions in order to comply with relevant rules. Sometimes, specific quality attributes in a function (implemented through the function) also originate from business rules. Therefore, when tracing some functional requirements, it will be found that their source is a specific business rule.
functional requirement Recorded on Software Requirements Specification (SRS). SRS completely describes the expected characteristics of the software system. SRS is generally regarded as a document. In fact, SRS can also be a database or spreadsheet containing demand information; Or the information stored in the business requirements management tool; For small projects, it may even be a stack of index cards. Development, testing qa project management SRS is used for other related project functions.
In addition to functional requirements, SRS also includes non functional requirements, including performance indicators and descriptions of quality attributes.
Quality attribute The functional description of the product is supplemented, which describes various characteristics of the product from different aspects. These features include availability Portability , integrity, efficiency, and Robustness They are important to users or developers. Other non functional requirements include the external interface between the system and the external world, as well as the constraints on design and implementation.
Constraint Restricted developers to design and Build system The selection range when.
Industry demand: When recruiting software testers, enterprises mainly focus on the project experience logical thinking Ability, certain technology Ability and comprehensive quality, while the requirements for education, age, gender, work experience, etc. are relatively low. Compared with other positions in the IT industry, software test It's easier to get into the profession.

Engineering and Science

Announce
edit
Whether software development is a science or a project has been debated for a long time. In fact, software development has both characteristics. But that doesn't mean they can be confused with each other. Many people believe that software engineering is based on computer science and information science Just like engineering in the traditional sense Physics and Chemistry Same. In the United States, about 40% of software engineers have computer science degrees. In other parts of the world, the proportion is similar. They may not use computer science knowledge every day, but they will use software engineering knowledge every day.
software engineering
computer science
target
Build software systems that meet user needs under the constraints of time, resources and personnel.
Explore correct calculation and modeling methods to improve the calculation method itself.
Schedule
Software projects have specific schedules
Research projects generally do not have set progress and schedule
product
Software (such as office packs and compilers).
Algorithms (such as Hill's sorting method) and abstract problems (such as philosopher dining problem).
Focus
Software engineering focuses on how to realize value for users.
Software theory focuses on the operating principle of software itself, such as time complexity.
Change degree
With the constant change of technology and user needs, it must be adjusted to meet the current needs.
The correct solution to a particular problem will never change.
Other knowledge required
Knowledge in relevant fields.
mathematics.
Famous explorer and educator
Barry Boehm, David Parnas, etc
Edsger Dijkstra , Gartner, etc
Famous practitioners
John Backus, Tim Berners Lee et al
None.

brief introduction

The major of software engineering is to study the construction and maintenance of effective, practical and high-quality Software Of subject It involves programming languages, data base , software development tools, system platform , Standard, Design Mode And so on. In modern society, software is applied in many aspects. Typical software such as E-mail Embedded system interface , office suite, operating system compiler data base , games, etc. At the same time, almost all industries have computer software applications, such as industry, agriculture, banking, aviation, government departments, etc. These applications have promoted the economic and social development, made people's work more efficient, and improved the quality of life. [2]

Discipline status

Software engineering discipline is a branch of computing discipline abstract , design, and twelve basic concepts, such as binding, complexity of big problems, concept and formal model, consistency and completeness, efficiency, evolution, abstraction level, sorting by space, sorting by time, reuse, security, compromise and decision-making. Mathematical methods and system science methods play an important role in software engineering. In addition, software engineering also attaches great importance to the management process to improve the quality of software products, reduce development costs, and ensure that the project is completed on time. Systematic standard Performance and scalability are also the focus of software engineering.
The theoretical basis of software engineering discipline is mathematics and computer science. The research and practice of software engineering involves the comprehensive management of manpower, technology, capital and schedule, which is the process of carrying out optimal production activities; Software engineering must divide the boundary of the system and give the solution of the system. Therefore, the related disciplines of software engineering include computer science and technology, mathematics, computer engineering, management, systems engineering and ergonomics. [2]

Jobs

Java direction: JAVA junior programmer, JAVA computing programmer, JAVA engineer, J2EE system engineer, etc.
. Net Direction: Net programmer website development engineer Net engineer, etc.
Mobile terminal development: focusing on the development of mobile apps, mainly including iOS terminal development and Android terminal development. With the implementation and application of 5G standard, the development scenarios of mobile terminals in the future will also be further expanded, such as deep integration with the Internet of Things.
Other directions: simple management information system development and maintenance personnel, web page production and client script programming personnel, primary database management and maintenance personnel, database development engineers, system analysis and design engineering, software project configuration administrator, and document writing engineers. [1]