A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service
Preliminary contact with the "Software Engineering" This course, in my opinion: The project is a very challenging, in the agreed time, the entire project team can meet the needs of users and software basic specifications of the situation, the development of stable and reliable software. However, in the process of software development, there are often many non-avoidable risks and unknown situations, such as: The software can not be delivered on time, the cost of software is significantly more than expected, the software does not meet the needs of users, etc. In order to effectively evade the project in the development process of risk, so generally speaking, project management refers to: In accordance with specific norms, within the scope of the budget, the timely completion of designated tasks, the use of efficient and fast method, around the plan to monitor the project, in terms of manpower, costs and time control. As the team leader of the TEAM16 group, in the entire software development process, the actual role is "project manager" task, so let us several sections below to talk about software project management.
Software management involves many factors, such as cost, quality, time, resources, etc., but the actual problem can be attributed to: personnel, problems and processes. When the software engineering development process, encountered a problem: the need for communication between personnel and communication to solve, of course: personnel is the core strength of software engineering development.
At the international level, there are several common criteria:
Software Quality Assurance (Sqa-software Quality assurance) is the establishment of a planned, systematic approach to ensuring that the standards, procedures, practices and methodologies developed by the management are correctly applied to all projects. The purpose of software quality assurance is to make the software process visible to managers. ISO9000 is one of them, which is the "specification" of the product.
Software configuration management (SCM) refers to the discipline of managing the evolution of computer programs during various stages of the development process, as a key element of software engineering. has become an important part of software development and maintenance. SCM provides a structured, orderly, and product-engineered approach to managing software engineering. It covers all areas of the software life cycle and affects all data and processes.
1, the quality requirements of the software
ISO 9001 defines quality as "all the characteristics of a product or service that a customer requires". From the macroscopic point of view, the requirements of software quality can be divided into: the required and implied requirements, defined refers to: the user clearly put forward the needs and needs, and the implied demand refers to: the need for developers to clear the basic needs, such as: Software functions, software, such as the use of the cycle. ISO identifies six software quality features: Functional, reliability, availability, effectiveness, maintainability, portability.
2.ISO Software quality evaluation Model
Since 1985, ISO and IEC have continuously improved the software quality standards, the existing ISO quality standards, the author of ISO/IEC 9126-1 "product quality-quality model", listed the quality of three aspects:
3, the author's understanding
If the software is considered as a collection of programs and software engineering, the quality of the software includes two aspects:
Software quality = Program Quality + Software engineering Quality ^
The quality of the program is biased towards the functional implementation of the code, while the quality of the software engineering is biased toward removing other external components of the code itself.
The quality of software engineering is broadly reflected in the following areas:
a software in the process of development, the most important and practical relevance is: the consumption of human and material resources. The cost includes time and money, although the old saying is "Ten years grinding a sword", but in today's high-speed development of the Internet era, with such a long period of time to develop a software, is clearly utopian fantasy plot.
Software development is actually a collective activity between people (in the understanding of the author), each person will be responsible for the corresponding modules and their own responsibilities, which creates a relationship between people, Of course, these relationships may be affected by a variety of factors under certain conditions, as in the case of "cascading phenomena", for example: the sudden exit of a project member (I have encountered this situation, the results of the project team members of the individual task volume increased, while the project progress is also affected), the development process did not do a good backup (Of course, many software development is based on the GitHub hosting platform, easy to manage and control), the development is too difficult (project in the beginning of the process, the beginning of the expected implementation effect due to the technical and human factors, resulting in a predetermined period of time can not be completed, historically: IBM launched the system/360 Operating system is one example)
4. What do you mean by software testing (PIT)?
Why do you want to do software testing? Because when we set the standard of software quality, the test is: the functional requirements of the software is satisfied with the effective embodiment, at the same time: in the process of testing may also find unknown bugs, help programmers write higher quality code ~
Of course, there is also a voice, such as: Sriram Krishnan (a programmer who worked at Yahoo and Microsoft) said in his blog: "Just look at some of the most successful software development teams from the ancient to the present." Whether it's Facebook today, or the original NT team 30 years ago, many great products come from teams with no or very few testers.
However, this should be divided into two ways: you have to admit that in real life there are a lot of Daniel, people's code is strong, so you can not find any bug (however, after the object-oriented OO This course, the quality of the code has improved a lot), but: on the other hand, Your software has not been fully tested, the introduction of products, then when users continue to use the process to find a variety of problems is that the user's goodwill will be greatly reduced, but now a lot of mobile apps, users and background developers interact a lot, For example: Meizu mobile phone launched a system specifically has a module: User Help (mobile phone users can make bug feedback, and there will be an engineer to reply, the author has responded to the bug and received a reply), the same: Sina Weibo micro-blog Small secretary also has this feature.
Who's going to test it? Is this program code developer or a dedicated tester? If a developer wants to continue with a new feature rather than testing or a dedicated tester, can he understand the full functional intent of the code? Does the developer know that the code is being tested and is responsible for this code?
What is the selection of test methods and use cases during the testing process? In our Oo class, one job is to write test cases, so that the coverage of the branch reached 100%, because at that time their code size is relatively large, so it is not easy to write all the test cases, then: in the process of software development, The test case may not be the same as the author's work of an order of magnitude, then how the number of tests to ensure that the method of automated testing, although desirable but might have some limitations, John Musa (who worked at the T-Bell Laboratory) proposed: by evaluating the number of times each module may be used to reduce the failure rate. The more commonly used components are more rigorously tested. Such a proposal would be considered.
How do I take action when I find a bug? The presence of a bug may hide potentially unknown problems, because: even if you fully reduce the coupling degree of each module, there is a certain correlation between the parts, in such cases, it is very likely to have a domino effect, when the problem is found, should you re-test all the samples? Of course it is not advisable, a method based on estimating errors can be consulted (see Tom Gilb's "Software Metrics").
The author's view:
A good software project behind must be the joint efforts of developers and testers, according to different software projects reckoned to adopt different quality standards and testing methods, on the other hand: Software quality should be a continuous improvement of the iterative process, now on the market software is constantly rolling out the update package, Substance is also in the solution of software use of the bug, so later maintenance and update to a certain extent also reflects the improvement of software quality.
5. about software configuration management
Definition: Software configuration management (SCM) is a universal activity applied throughout the software engineering, and changes occur at any time during the card-making process, and SCM activities are mainly used to: Identify changes, control changes, ensure appropriate implementation changes, and report changes to the person concerned.
The software has 4 main goals in configuration management:
As a result, 5 SCM tasks are defined: Identity, versioning, change control, configuration auditing, and reporting.
Identify configuration items: Using an object-oriented approach, each configuration item is identified to give a unique identifier to all software projects in the software development process, allowing for state control and management.
Version control: stored in the development process, all versions of related data items, and software development and fallback, to avoid the occurrence of: Lost version or unknown version of the problem. It's more convenient to feel hosted on GitHub.
Change control: The change request is assessed by the change applicant, a change report is made, a project Change Order (ECO) is established, the changes are implemented, and the appropriate version and record is established.
Configure auditing and reporting: a complementary means of change control to ensure that a change requirement has been effectively implemented. The task of configuring auditing is to verify that the configuration item is consistent with the configuration identity. The implementation of configuration audit is to ensure the effectiveness of project configuration management, embodies the most basic requirements of configuration management, and does not allow any confusion.
In my opinion, configuration management: The actual process of software development is to make changes in the evaluation, the implementation of the changes are recorded so that they become organized and logical, orderly change control,
Second , the organization mode of software
The main body of software development--team
The subject of software engineering is human activity, and when a group of people with certain collective goals gathers together to cooperate with each other to develop software with certain functions, we call it team. Members within the team, though cooperating with each other, have a specific and definite division of labor.
The traditional team model, presented by Constantine[con93, is four types of "organizational paradigm", as the following table.
Organize groups according to the traditional hierarchy of rights. This group is very effective in developing software similar to what has been done in the past, but it is difficult to innovate in this closed paradigm
Organize groups loosely, and rely on the individual initiative of the group members. When innovation or technological breakthroughs are required, groups that follow this stochastic paradigm have an advantage. But when "sequential execution" is needed to get the job done, the group organization paradigm is in trouble.
We try to organize the group in an innovative way, which has both closed-type control and stochastic paradigm. The implementation of the work combines a large number of communications and decision-making based on group consensus. The Open Paradigm team structure is particularly well suited to solving complex problems, but may not be as efficient as other types of groups
Dependent on the natural division of the problem, the members of the organizational team each solve the problem of the pieces, they do not have any active communication needs
First: "Closed paradigm" more similar to the bureaucratic model, between people exist: the obvious class relationship, this way more like our work in peacetime working relationship, your behavior will be bound by your immediate supervisor, although the rules and order to become better, but in this mode, it is easy to become "boss-driven" Model of work.
The individual thinks that openness is a generic type, which may be a more secure open way, more active than closed, and more restrictive than stochastic, but at the same time it breaks the non-communication and unconstrained characteristics of synchronous generics.
As we have not yet entered into the actual combat mode (to carry out a real software development), so coincides with the teacher Roger (another actual class), so through the 13-level seniors of Bo, summed up the initial sentiment:
From the extreme programming point of:
Extreme Programming (EXtreme PROGRAMMING,XP): In the traditional development process, the typical way to improve communication and communication is through documentation, but XP advocates recommend a more informal way of communication and communication. Instead of writing separate documents, the key software products (such as software code and test data) are strengthened.
In code review (that is, to let others see their code, whether in the framework of "code specification" to solve the problem correctly), through this point, you can find: on the basis of logic, algorithm, potential and regression error, the transfer of experience to each other, on the basis of understanding other people's code also constantly improve their energy levels, Code review is an important point in extreme programming, and below, it leads to our "plays"-pair programming.
What is pair programming?
Pairing programming refers to the development work of a pair of programmers, shoulder-by-side, equal, and complementary. In real life, there are also examples: driving a plane (master driving and copilot). So the specific division of work for these two people is:
1, "Master driving" is responsible for the implementation of specific tasks (driving aircraft, writing procedures).
2, another person is responsible for navigation, advice, maintenance.
One thing to note: In the process of pairing programming: the roles of two people should be exchanged frequently, avoiding the stress caused by long time being watched and the "beauty" fatigue induced by prolonged review.
Why pair programming?
Pair programming: It is the post-software testing and software review of the work moved to the code at the time of writing, the synchronization of the continuous review. And the benefits can be understood this way: let others in the code is nearly finished, and then to do the code test is not as follows: In the code writing phase of code feasibility and logical correctness of the check, on the one hand: Such code is two people have a better ability to complete products (of course, the work of the pair programmer and crystallization), On the other hand: Pairing programming helps: encode on the basis of mutual discussion and cooperation, especially when the lion is in trouble: it can be solved together, which helps to improve efficiency and learn from each other;
Is pairing programming really good?
here to talk about the author's views: The author is a relatively independent when the work of people (do not like and know people sitting together study), based on this kind of character: pair programming has a certain degree of difficulty factor. This transparent programmer's full work details and lifestyle, in two is not very familiar with the situation, it takes a while to run. In addition, the strength gap between the two sides, or basically can not effectively communicate the situation, the effect is not ideal, if the "navigator" did not play to their actual role, then the meaning of the pair is not much.
Pair programming in reality, a lot of big it started with two people, such as Jerry Yang & David (founder of Yahoo!), and: In a sense, pairing is the basis of teamwork, and more importantly: in the process of pairing, two people are equal relations, Communication and feedback, is the core of pairing programming! (words: I seem to be with someone in pairing programming this semester hey: how to find J)
Another team: Agile development
The main processes for agile development are:
The first step: Find out what you need to do to complete the product
Step two: Decide what you want to solve in the current sprint
Step Three: Sprint
Fourth step: Get an incremental version of the software and publish it to the user. And then on the basis of the continuous release of new features
The main features of the Agile team are: self-management (self-reflection and lack of improvement), the organization (to help others after the completion of their own affairs), multi-functional (responsible for many jobs)
It can be seen that agile teams are suitable for teams with higher CMM levels and are a higher level requirement for development technicians.
III. Assessment of Competencies
Software process capability describes the ability of a development organization to develop software to develop high-quality software products, including the quality, efficiency, duration, cost, etc. that can be achieved. The current international standards are mainly two: ISO9000.3 and CMM.
ISO9000.3 is the ISO9000 Quality system certification in the computer software Quality Management and quality assurance standard part.
The CMM (Competency Maturity Model) is a series of methodologies developed by the Software Engineering Institute (CMU/SEI) of Carnacimelon University in 1987 to assess and guide software development project management, using 5 evolving levels to describe software process capabilities.
The common denominator of ISO9000 and CMM is that both emphasize the quality of software products. The difference is that ISO9000 emphasizes the criteria of measurement, but does not tell software developers how to achieve good goals and how to avoid mistakes. CMM provides a complete set of software development project management methods. It tells the software development organization what issues to focus on if it is to raise a level at the original level, which is what improves the software process.
The CMM describes five levels of software process maturity (initial level, repeatable level, defined level, quantitative management level, optimization level), and maturity reflects the size of the software process capability.
The author's view:
The software process capability is more to say: the development of software and the quality of software, quality has been discussed above, and the development of the ability to more people in the team of factors related to a team human capacity.
A team cannot do this simply because: the amount of work a person has, or the length of time it takes, or the height of a person's position. A better method is to use two dimensions to complete the task level and contribution rate, to synthesize the evaluation, get a more neutral result. Personally, the CMM level system is an ever-rising, evolutionary phase.
Software project management, software project is to achieve the goal, must meet the real needs. From the simple several aspects of the software project Management introduced, also please gentlemen read ~
Discussion on software project management
Start building with 50+ products and up to 12 months usage for Elastic Compute Service