- 计算机专业英语(第2版)
- 张强华
- 2485字
- 2021-04-02 04:52:20
Reading Software Development Process
A software development process,also known as a software development life-cycle(SDLC),is a structure imposed on the development of a software product.Similar terms include software life-cycle and software process.It is often considered a subset of systems development life-cycle.There are several models for such processes,each describing approaches to a variety of tasks or activities that take place during the process.Some people consider a life-cycle model a more general term and a software development process a more specific term.For example,there are many specific software development processes that“fit”the spiral life-cycle model.ISO/IEC 12207 is an international standard for software life-cycle processes.It aims to be the standard that defines all the tasks re-quired for developing and maintaining software.
1.Overview
The large and growing body of software development organizations implement process methodol-ogies.Many of them are in the defense industry,which in the U.S.requires a rating based on“process models”to obtain contracts.
The international standard for describing the method of selecting,implementing and monitoring the life cycle for software is ISO/IEC 12207.
A decades-long goal has been to find repeatable,predictable processes that improve productivi-ty and quality.Some try to systematize or formalize the seemingly unruly task of writing software.Others apply project management techniques to writing software.Without effective project manage-ment,software projects can easily be delivered late or over budget.With large numbers of software projects not meeting their expectations in terms of functionality,cost,or delivery schedule,it is ef-fective project management that appears to be lacking.
Organizations may create a Software Engineering Process Group(SEPG),which is the focalpoint for process improvement.Composed of line practitioners who have varied skills,the group is at the center of the collaborative effort of everyone in the organization who is involved with software en-gineering process improvement.
2.Software Development Activities
2.1 Planning
Planning is an objective of each and every activity,where we want to discover things that be-long to the project.An important task in creating a software program is extracting the requirements or requirements analysis.Customers typically have an abstract idea of what they want as an end result,but do not know what software should do.Skilled and experienced software engineers recognize in-complete,ambiguous,or even contradictory requirements at this point.Frequently demonstrating live code may help reduce the risk that the requirements are incorrect.
Once the general requirements are gathered from the client,an analysis of the scope of the de-velopment should be determined and clearly stated.This is often called a scope document.
Certain functionality may be out of scope of the project as a function of cost or as a result of un-clear requirements at the start of development.If the development is done externally,this document can be considered a legal document so that if there are ever disputes,any ambiguity of what was promised to the client can be clarified.
2.2 Implementation,testing and documenting
Implementation is the part of the process where software engineers actually program the code for the project.
Software testing is an integral and important phase of the software development process.This part of the process ensures that defects are recognized as soon as possible.
Documenting the internal design of software for the purpose of future maintenance and enhance-ment is done throughout development.This may also include the writing of an API,be it external or internal.The software engineering process chosen by the developing team will determine how much internal documentation(if any)is necessary.Plan-driven models(e.g.,Waterfall)generally pro-duce more documentation than Agile models.
2.3 Deployment and maintenance
Deployment starts directly after the code is appropriately tested,approved for release,and sold or otherwise distributed into a production environment.This may involve installation,customization(such as by setting parameters to the customer’s values),testing,and possibly an extended period of evaluation.
Software training and support is important,as software is only effective if it is used correctly.
Maintaining and enhancing software to cope with newly discovered faults or requirements can take substantial time and effort,as missed requirements may force redesign of the software.
3.Software Development Models
Several models exist to streamline the development process.Each one has its pros and cons,and it is up to the development team to adopt the most appropriate one for the project.Sometimes a combination of the models may be more suitable.
3.1 Waterfall model
The waterfall model(Fig.2-1)shows a process,where developers are to follow these phases in order:
● Requirements specification(Requirements analysis)
● Software design
● Implementation and Integration
● Testing(or Validation)
● Deployment(or Installation)
● Maintenance
Fig.2-1 The activities of the software development process represented in the waterfall model
In a strict Waterfall model,aft ereach phase is finished,it proceeds to the next one.Reviews may occur before moving to the next phase which allows for the possibility of changes(which may involve a formal change control process).Reviews may also be employed to ensure that the phase is indeed complete;the phase completion criteria are often referred to as a“gate”that the project must pass through to move to the next phase.Waterfall discourages revisiting and revising any prior phase once it’s complete.This“inflexibility”in a pure Waterfall model has been a source of criticism by supporters of other more“flexible”models.
The Waterfall model is also commonly taught with the mnemonic A Dance in the Dark Every Monday,representing Analysis,Design,Implementation,Testing,Documentation and Execution,and Maintenance.
3.2 Spiral model
The key characteristic of a Spiral model(Fig.2-2)is risk management at regular stages in the development cycle.In 1988,Barry Boehm published a formal software system development“spiral model,”which combines some key aspect of the waterfall model and rapid prototyping methodolo-gies,but provided emphasis in a key area many felt had been neglected by other methodologies:de-liberate iterative risk analysis,particularly suited to large-scale complex systems.
Fig.2-2 Spiral model(Boehm,1988)
The Spiral is visualized as a process passing through some number of iterations,with the four quadrant diagram representative of the following activities:
● Formulate plans:to identify software targets,implement the program,clarify the project de-velopment restrictions
● Risk analysis:an analytical assessment of selected programs,to consider how to identify and eliminate risk
● Implementation of the project:the implementation of software development and verification Risk-driven spiral model,emphasizing the conditions of options and constraints in order to sup-port software reuse and software quality,can help as a special goal of integration into the product de-velopment.However,the spiral model has some restrictive conditions,as follows:
● The spiral model emphasizes risk analysis,and thus requires customers to accept this analysis and act on it.This requires both trust in the developer as well as the willingness to spend more to fix the issues,which is the reason why this model is often used for large-scale inter-nal software development.
● If the implementation of risk analysis will greatly affect the profits of the project,the spiral model should not be used.
● Software developers have to actively look for possible risks,and analyze it accurately for the spiral model to work.
The first stage is to formulate a plan to achieve the objectives with these constraints,and then strive to find and remove all potential risks through careful analysis and,if necessary,by construc-ting a prototype.If some risks can not be ruled out,the customer has to decide whether to terminatethe project or to ignore the risks and continue anyway.Finally,the results are evaluated and the de-sign of the next phase begins.
3.3 Iterative and incremental development
The basic idea behind this method is to develop a system through repeated cycles(iterative)and in smaller portions at a time(incremental),allowing software developers to take advantage of what was learned during development of earlier parts or versions of the system.Learning comes from both the development and use of the system,where possible key steps in the process start with a sim-ple implementation of a subset of the software requirements and iteratively enhance the evolving ver-sions until the full system is implemented.At each iteration,design modifications are made and new functional capabilities are added.
The procedure itself consists of the initialization step,the iteration step,and the Project Control List.The initialization step creates a base version of the system.The goal for this initial implementa-tion is to create a product to which the user can react.It should offer a sampling of the key aspects of the problem and provide a solution that is simple enough to understand and implement easily.To guide the iteration process,a project control list is created that contains a record of all tasks that need to be performed.It includes such items as new features to be implemented and areas of rede-sign of the existing solution.The control list is constantly being revised as a result of the analysis phase.
The iteration involves the redesign and implementation of iteration is to be simple,straightfor-ward,and modular,supporting redesign at that stage or as a task added to the project control list.The level of design detail is not dictated by the iterative approach.In a light-weight iterative project the code may represent the major source of documentation of the system;however,in a critical itera-tive project a formal Software Design Document may be used.The analysis of an iteration is based upon user feedback,and the program analysis facilities available.It involves analysis of the struc-ture,modularity,usability,reliability,efficiency,and achievement of goals.The project control list is modified in light of the analysis results.
Fig 2-3 An iterative development model
3.4 Agile development
Agile software development uses iterative development as a basis but advocates a lighter andmore people-centric viewpoint than traditional approaches.Agile processes fundamentally incorporate iteration and the continuous feedback that it provides to successively refine and deliver a software system.
There are many variations of agile processes:
● In extreme programming(XP),the phases are carried out in extremely small(or“continu-ous”)steps compared to the older“batch”processes.The(intentionally incomplete)first pass through the steps might take a day or a week,rather than the months or years of each complete step in the Waterfall model.First,one writes automated tests to provide concrete goals for development.Next is coding(by a pair of programmers),which is complete when all the tests pass,and the programmers can’t think of any more tests that are needed.Design and architecture emerge out of refactoring,and come after coding.The same people who do the coding do design.(Only the last feature—merging design and code—is common to all the other agile processes.)The incomplete but functional system is deployed or demonstrated for(some subset of)the users(at least one of which is on the development team).At this point,the practitioners start again on writing tests for the next most important part of the sys-tem.
● Dynamic systems development method
● Scrum
3.5 Rapid application development
Rapid application development(RAD)is a software development methodology that uses mini-mal planning in favor of rapid prototyping.The“planning”of software developed using RAD is in-terleaved with writing the software itself.The lack of extensive preplanning generally allows software to be written much faster and makes it easier to change requirements.RAD involves methods like it-erative development and software prototyping.According to Whitten,it is a merger of various struc-tured techniques,especially data-driven Information Engineering,with prototyping techniques to ac-celerate software systems development.
Fig 2-4 Rapid Application Development(RAD)Model
In rapid application development,structured techniques and prototyping are especially used to define users’requirements and to design the final system.The development process starts with thedevelopment of preliminary data models and business process models using structured techniques.In the next stage,requirements are verified using prototyping,eventually to refine the data and process models.These stages are repeated iteratively;further development results in“a combined business requirements and technical design statement to be used for constructing new systems”.
3.6 Code and fix
“Code and fix”development is not so much a deliberate strategy as an artifact of naivety and schedule pressure on software developers.Without much of a design in the way,programmers imme-diately begin producing code.At some point,testing begins(often late in the development cycle),and the unavoidable bugs must then be fixed before the product can be shipped.
software development process 软件开发过程
systems development life cycle 系统开发生命周期
project management 项目管理
delivery schedule 交付时间表
requirements analysis 需求分析
software testing 软件测试
plan-driven model 计划驱动模型,基于计划的模型
agile model 敏捷模型
waterfall model 瀑布模型
requirements specification 需求说明书
spiral model 螺旋模型
risk management 风险管理
rapid prototyping methodology 快速原型法
risk-driven spiral model 风险驱动的螺旋模型
iterative and incremental development 迭代和增量开发
light-weight iterative project 轻量级的迭代计划
software design document 软件设计文档
dynamic systems development method 动态系统开发方法
iterative development 迭代开发
data model 数据模型
business process model 业务处理模型
SDLC(Software Development Life-Cycle) 软件开发生命周期
IEC(International Electrotechnical Commission )国际电工委员会
SEPG(Software Engineering Process Group) 软件工程过程组
API(Application Programming Interface) 应用编程接口
XP(eXtreme Programming) 极限编程
RAD(Rapid Application Development) 快速应用软件开发