Software engineering is a discipline that studies the construction and maintenance of effective, practical and high-quality software using engineering methods.It involvesProgramming language、data base、Software development tools、system platform 、standard、DesignPieces haveE-mail、Embedded system , man-machine interfaceto work in an officeKitoperating system、compiler、data base、gameEtc.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
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 constructcomputerProcedures and relevant documents necessary for the development, operation and maintenance of these procedures.
IEEE: In software engineering termsassemblyDefinition 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.
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 9000The 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 performanceinstructionsOr a collection of computer programs.2. The program can handle the information satisfactorilydata 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 fromsoftware engineerA 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.
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).
Software engineering principles, software engineering processesSoftware 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 BBoehm 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
SoftwareIs created bycomputer programandProgrammingThe 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:HardwareThe 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 technologyIt 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 TechnologyThe 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 controlsystems softwareComplexity, 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 acomputer systemOr 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]
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.AFamous software engineering expertsBarry 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:
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 thatSoftware life cycleIt 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:
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 latestObject oriented technologyFrom 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 intangiblelogicProducts.The work progress of the software development team is poorly visible and difficult to evaluate and manage.For better managementsoftware developmentThe 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 developersefficiencyIt 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 possiblecommunication 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 newSoftware technologyIt 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 asB/SstillC/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 systemcompatibility, security andreliability。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:ISOOpen system interconnection modelX WindowSystem, etc.
method
Announce
edit
Foreign bigsoftware companyAnd organizations have been studying the concept of software development methods, and have also proposed many practical development methods, such as life cycle method, prototyping methodobject-orientedMethods, etc.Here are some popular development methods:
Structured approach
The structured development method is developed by EThe 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 methoddata streamSoftware development method.
Yourdon method is the most widely used software development method in the 1980s.It first usesStructured analysis(SA) Conduct requirements analysis on software, and then useStructured design(SD) method, and finallyStructured 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 methodIt 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 systemdata structureStart 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 thePAD 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 asVB,DELPHIWe 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.
The lightweight development process does not require a large number of formal documents.Well known lightweight development methods includeExtreme 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 requirementRepresents 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 requirementIt 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 requirementSpecify 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 sendE-mailTo notify the user that his reservation has been accepted.Functional requirement description is what developers need to achieve.
System requirementIt 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 RulesIncluding 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 onSoftware 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, testingqa、project managementSRS 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 attributeThe functional description of the product is supplemented, which describes various characteristics of the product from different aspects.These features include availabilityPortability, integrity, efficiency, andRobustnessThey 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.
ConstraintRestricted developers to design andBuild systemThe selection range when.
Industry demand: When recruiting software testers, enterprises mainly focus on the project experiencelogical thinkingAbility, certaintechnologyAbility 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 andinformation scienceJust like engineering in the traditional sensePhysicsandChemistrySame.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.
The major of software engineering is to study the construction and maintenance of effective, practical and high-qualitySoftwareOfsubject。It involves programming languages,data base, software development tools,system platform , Standard,Design ModeAnd so on.In modern society, software is applied in many aspects.Typical software such asE-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 disciplineabstract, 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.SystematicstandardPerformance 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 engineerNet 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]