软件开发过程
软件开发具体流程及管理制度

软件开发具体流程及管理制度软件开发是一项复杂且需要高度组织和协作的工作,为了确保开发过程的顺利进行,通常需要制定一套具体的流程和管理制度。
下面将详细介绍软件开发的具体流程以及适用于软件开发的管理制度。
软件开发流程:1.需求分析阶段:在这个阶段,开发团队与客户或项目负责人沟通,了解项目的需求和目标。
具体包括明确软件的功能需求、性能需求、安全需求等,以及软件的用户群体和使用场景等。
在需求分析阶段,通常会编写软件需求规格说明书(SRS)来详细记录和确认项目的需求。
2.概要设计阶段:在需求分析阶段结束后,开发团队需要进行概要设计。
概要设计是对软件的整体结构进行设计,包括将需求分解为模块和子模块,并确定模块之间的关系和接口。
概要设计还包括选择适当的开发方法和技术,确定数据库结构等。
3.详细设计阶段:在概要设计阶段确定了软件的整体结构后,开发团队需要进行详细设计。
详细设计阶段对每个模块进行详细的设计,包括数据结构设计、算法设计、界面设计等。
在设计过程中,通常使用UML(统一建模语言)等工具来建立模型,并编写设计文档。
4.编码和单元测试阶段:在详细设计完成后,开发团队开始编写代码,并进行单元测试。
单元测试是对编写的代码进行测试,以确保每个模块的功能正常运行。
单元测试通常由代码编写者完成,并可借助自动化测试工具来提高效率和准确性。
5.综合测试阶段:在单元测试完成后,开发团队会进行综合测试。
综合测试是对软件的整体进行测试,包括模块之间的交互、系统的性能和稳定性等。
综合测试通常由专门的测试团队负责。
6.部署和上线阶段:在软件经过综合测试后,开发团队会将软件部署到生产环境,并进行最后的测试和调优。
一切就绪后,软件正式上线并交付给用户使用。
软件开发管理制度:1.项目管理:在软件开发过程中,需要建立完善的项目管理制度。
包括制定项目计划、资源分配和进度控制等。
项目管理还包括项目风险管理、变更管理、质量管理、沟通管理等。
2.过程管理:设立软件开发过程管理制度,以确保开发过程的规范和可控。
软件开发流程八个步骤及介绍

软件开发流程八个步骤及介绍软件开发是一个缜密而复杂的过程,是全局视觉与技术营造统一概念的艺术,是一种把开发任务组织起来,进行质量管控,实现商业需求的技术活动。
由于软件开发流程涉及的范围不断扩大,软件开发流程的步骤也不断发生改变,整体流程也在不断完善和优化。
大多数开发流程都是由8个步骤组成的,下面就用8个步骤来详细介绍下软件开发流程:第一步,需求分析。
在开发软件前,我们最重要的步骤就是进行需求分析,具体而言,我们要做的是确定客户的需求,并将这些需求转化为功能性要求。
这一步也被称为“需求工程”,是软件开发的核心步骤,是真正开发软件的基础。
第二步,概要设计。
在根据需求分析的结果设计总体框架之前,我们需要对系统的总体结构和架构进行概要设计,以明确系统的功能、业务流程等要求。
这一步可以用文字或是图形说明,是软件开发步骤中重要的一步。
第三步,详细设计。
在概要设计完成后,接下来做的就是详细设计,也就是把概要设计的内容更具体地描述出来。
详细设计涉及到数据库设计、模块设计、流程设计、系统接口设计等,是软件开发过程中非常重要的步骤。
第四步,编码实现。
有了详细设计,就可以开始编码实现。
按照设计文件,将功能模块以程序代码的形式实现出来。
这一步也被称为“系统实施”,是软件开发中比较消耗时间的一步。
第五步,测试验收。
完成编码实现后,就可以进行测试验收,确保系统的一致性,并检验软件符合客户要求的功能和性能。
第六步,部署上线。
通过测试验收,确认软件符合要求后,就可以进入最后一步,即实施部署和上线。
在这一步,我们通过将系统部署到指定的服务器,将软件发布到公司的生产环境中。
第七步,维护和支持。
软件上线后,随着用户的使用,系统运行过程中会出现一些操作类的错误或是功能性的缺陷。
此时,我们就要通过进行维护和支持,分析问题,及时解决问题,以保证软件的稳定性。
第八步,回顾和优化。
在软件开发过程中,多方面的因素会影响着项目的整体执行进度和效果,这就需要我们在完成软件开发后,做个总结,及时对软件开发流程中失误进行纠正,以确保软件开发效率和质量。
软件开发流程的具体内容

软件开发流程的具体内容软件开发是一个复杂而又精细的过程,需要经历多个阶段和环节。
下面将介绍软件开发的具体流程,以便更好地了解软件开发的全貌。
1. 需求分析阶段。
软件开发的第一步是需求分析阶段。
在这个阶段,开发团队与客户进行沟通,了解客户的需求和期望。
通过讨论和调研,确定软件的功能和特性,明确软件的用户群体和使用场景,为后续的开发工作奠定基础。
2. 设计阶段。
在需求分析的基础上,开发团队进行软件的设计工作。
包括系统架构设计、数据库设计、界面设计等。
设计阶段的目标是确定软件的整体结构和各个模块的功能,为后续的编码工作提供指导。
3. 编码阶段。
编码阶段是软件开发的核心阶段,开发团队根据需求和设计文档,进行具体的编码工作。
根据需求文档和设计文档,开发团队使用相应的编程语言和开发工具,编写软件的源代码。
4. 测试阶段。
编码完成后,软件需要进行测试。
测试阶段包括单元测试、集成测试、系统测试等多个环节。
测试人员根据测试计划和测试用例,对软件进行全面的测试,确保软件的质量和稳定性。
5. 部署和维护阶段。
软件通过测试后,进入部署和维护阶段。
开发团队将软件部署到目标环境中,并进行相关的配置和优化。
同时,开发团队需要对软件进行维护和更新,确保软件的稳定性和安全性。
总结。
软件开发流程包括需求分析、设计、编码、测试、部署和维护等多个阶段。
每个阶段都有其独特的任务和目标,需要开发团队的密切合作和高效协调。
只有经过严格的流程管理和质量控制,才能保证软件开发的顺利进行和最终的成功交付。
软件开发的基本过程

软件开发的基本过程
软件开发的基本过程包括以下步骤:
1.需求分析:相关系统分析员向用户初步了解需求,用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
2.概要设计:开发者需要对软件系统进行概要设计,即系统设计。
概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
3.详细设计:在概要设计的基础上,开发者需要进行软件系统的详细设计。
应当保证软件的需求完全分配给整个软件。
详细设计应当足够详细,能够根据详细设计报告进行编码。
4.编码:在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。
5.测试:测试编写好的系统。
交给用户使用,用户使用后一个一个的确认每个功能。
完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算完成。
6.验收:用户验收。
以上就是软件开发的基本过程,不同的公司可能会有自己的一套
流程,但大体上应该是类似的。
软件开发流程八个步骤及介绍

软件开发流程八个步骤及介绍在软件开发领域,软件开发流程是实现各项软件目标、实现软件功能及质量要求的关键。
通过掌握软件开发流程的八个基本步骤,可以有效地控制、实施系统软件的开发过程,提高软件的可靠性,缩短开发周期,节省成本。
下面,我们将对软件开发流程的八个基本步骤进行详细介绍。
第一步,需求分析。
需求分析是整个软件开发流程的第一步,它是为了满足客户需求,确定系统的功能和系统的技术可行性而进行的系统分析练习。
在需求分析的过程中,分析师和客户会进行针对性调查和对话,确定系统的外部接口和内部实现,从而完成系统的软件设计。
第二步,设计基础架构。
在经过需求分析和调研之后,开发人员需要根据系统功能、系统性能和系统实现技术,设计系统的基础架构,即系统的整体结构,定义系统的输入输出模块,及它们之间的连接方式。
第三步,编码实现。
编码实现是软件开发流程中最重要的一步,也是最复杂的一步。
编码要求开发人员必须深入理解客户和分析师提出的需求,根据系统基础架构,编写系统的具体代码。
第四步,软件测试。
为了确保软件的可靠性,软件测试是必不可少的一步。
测试目的是检验软件产品是否满足客户的需求,是否实现了软件设计的要求,是否满足软件的功能、性能及可靠性要求等。
第五步,系统集成。
软件开发完成之后,需要进行系统集成,将各个部分集成在一起,形成一个完整的系统。
第六步,系统部署。
系统集成完成之后,还需要将系统部署到客户的操作环境中,这一步包括部署的硬件、软件等环境的准备和配置。
第七步,系统文档编写。
系统开发完成后,开发人员还需要编写详细的系统文档,以便用户能够较好地使用系统,文档一般包括用户手册和系统开发文档等。
第八步,软件维护。
在系统上线之后,软件的维护也是一个重要环节,它包括软件的日常维护、功能升级和缺陷修复等内容。
以上就是软件开发流程的八个基本步骤及介绍,它们构成了一个完整的软件开发流程,是软件开发的基本思路和过程实施的基础。
正确把握这八个基本流程,有助于控制软件开发的时间、成本和质量,提高软件的可靠性,优化软件开发的效率。
软件开发全过程及经验PPT课件

快速制作软件原型,让 用户直观感受并提出建
议。
如Microsoft Project、 Jira等,用于跟踪和管理
需求变更。
需求规格说明书的编写
01
确定软件的功能需求和 非功能需求。
02
编写清晰、准确、详细 的文档,包括数据流程 图、界面设计图等。
03
确保所有利益相关者对 需求规格说明书达成共 识。
安全编码与漏洞防范
总结词
安全编码的最佳实践
详细描述
为了确保软件的安全性,开发人员需要采取一系列的安全编码措施。这些措施包括输入验证、数据加 密、访问控制、错误处理等。通过遵循这些最佳实践,可以有效地减少软件漏洞和安全隐患。
系统性能优化与调优
总结词
提高系统性能的方法
VS
详细描述
系统性能是软件质量的重要指标之一,优 化和调优可以提高系统的性能。常见的性 能优化方法包括算法优化、数据库优化、 网络优化等。通过合理的调优,可以提升 系统的响应速度和吞吐量,从而提高用户 体验和软件可靠性。
04
定期评审和更新需求规 格说明书,以适应项目 变化。
03
设计与架构
软件设计的基本原则与目标
功能性
确保软件能够满足用户需求, 实现预定的功能。
稳定性
保证软件在运行过程中稳定, 不出现频繁的错误或崩溃。
可扩展性
为软件未来的功能扩展和升级 预留空间,降低后期改造成本 。
易用性
软件界面友好,操作简便,符 合用户习惯,提高用户体验。
软件架构的选择与设计
01
02
03
前端架构
选择适合的前端框架和工 具,如React、Vue等,进 行界面设计和交互开发。
ห้องสมุดไป่ตู้
简述软件开发的过程
简述软件开发的过程
软件开发过程是指从需求分析开始,通过设计、编码、测试等环节,最终将软件交付的一系列步骤。
1. 需求分析:明确软件开发的目标和需求,并与相关人员进行沟通,了解用户的需求和期望。
2. 设计阶段:根据需求分析的结果,确定软件的整体架构和模块设计,包括数据库设计、系统流程设计等。
3. 编码阶段:根据设计阶段确定的规范和需求,进行具体的编码工作,实现软件的各个功能模块。
4. 测试阶段:对编码完成的软件进行测试,包括单元测试、集成测试和系统测试,以验证软件在各种情况下的正确性和稳定性。
5. 部署阶段:将经过测试的软件安装到目标环境中,进行部署和配置,确保软件可以正常运行。
6. 维护阶段:软件交付后,需要进行日常的维护和升级工作,包括bug修复、性能优化等,以确保软件的持续稳定运行。
在整个软件开发过程中,还需要进行项目管理、团队协作和版本控制等工作,以确保软件开发的进度和质量。
软件开发的一般流程
软件开发的一般流程软件开发是指对计算机软件进行开发、制作、安装、测试、维护和更新等系统软件的活动,也称为软件工程。
它包括软件分析、设计、开发、调试及安装等步骤。
软件开发的主要目的是根据客户的需求创建满足客户要求的可用软件。
二、软件开发的一般流程1、分析阶段:软件开发的第一步是对客户的需求进行分析,即根据客户的需求分析需要开发的软件产品,获得软件项目的基本功能和性能,以及满足客户需求的可能技术结构。
2、设计阶段:在软件分析阶段,系统设计阶段主要任务、要点、重点、技术方案等进行具体拟定,确定软件整体结构,各模块的功能构造,技术参数,性能指标,文档组织结构,数据结构,算法等具体内容,并尽可能地规定整个软件工程的实施方案和实施顺序,以便软件开发人员了解客户要求,准备编写程序以及确定实现方式。
3、开发阶段:在设计阶段结束后,才能开始编写软件程序。
软件开发人员根据软件设计阶段的文档,编写软件程序,按照客户要求创建软件产品,完成软件的编写。
4、测试阶段:完成开发阶段的程序编写后,必须进行测试,检验程序在计算机上的正确性和可靠性,确保程序的完善性,测试时,首先要详细分析设计文档,对设计进行审查,并根据设计文档中提出的规范,对软件进行系统测试,然后,根据测试结果,修改软件中的缺陷,直至软件可以满足使用要求为止。
5、安装阶段:完成测试阶段后,即可进行安装。
软件安装包括软件的安装,环境的安装,系统的安装以及客户端的安装等。
6、维护阶段:完成软件产品的安装后,可能还需要维护,维护的内容主要有:软件的错误修改,程序的维护,软件环境的维护,软件升级及安全保护等。
7、更新阶段:软件开发完成后,软件产品可能会进行更新,以满足客户的新需求,更新的内容主要有:扩充新的功能,改善原有功能,改进界面,调整软件性能等。
三、软件开发的重要性软件开发是一个技术性的系统工程,它为计算机的运用、控制和管理提供支持,为用户提供便利,可以提高计算机系统的健壮性和灵活性。
一个完整的软件开发流程
一个完整的软件开发流程软件开发流程指的是将一个软件从概念到最终交付的过程。
该过程包含了需求分析、设计、编码、测试、部署、维护等一系列阶段。
下面将详细介绍一个完整的软件开发流程。
1.需求分析需求分析是确定软件开发所需求的第一步。
在这个阶段,开发团队和客户共同讨论和确定软件的功能需求、性能需求、安全需求等。
这个阶段的重点是了解用户的实际需求,与用户进行充分的沟通和交流,目的是确保对需求有一个准确的理解。
2.概要设计概要设计是在需求分析的基础上,对软件进行整体架构设计。
在这个阶段,开发团队会定义软件的模块划分、模块之间的交互关系,以及整体的数据结构、算法等。
该阶段的输出物通常是一个软件设计文档,包括了系统架构图、功能模块图等。
3.详细设计详细设计是在概要设计的基础上,对软件的各个模块进行详细设计。
在这个阶段,开发团队会定义每个模块的具体实现方式、数据结构、算法等。
该阶段的输出物通常是一个详细设计文档,包括了每个模块的接口定义、函数逻辑等。
4.编码实现在详细设计完成后,开发团队开始进行编码实现。
根据详细设计文档,程序员会编写代码来实现各个模块的功能。
在编码过程中,开发团队要遵循编码规范,确保代码的质量和可维护性。
编码实现阶段通常需要进行代码评审,并进行单元测试。
5.测试在编码实现完成后,测试团队开始进行测试工作。
测试的目的是发现软件中的缺陷和问题,并进行修复。
测试分为单元测试、集成测试、系统测试和验收测试等不同层次。
测试阶段也包括对性能、稳定性、安全性等方面的测试。
测试过程中需要记录、追踪和修复问题。
6.部署与交付经过测试后,如果软件符合要求,则可以进行部署和交付。
在部署过程中,需要将软件安装在目标环境中,并进行配置和调试。
交付指的是将软件交给客户或最终用户使用。
在交付过程中,还需要进行用户培训,确保用户能够正确使用和理解软件。
7.维护与升级软件的生命周期并不止于交付,而是需要进行后续的维护和升级。
在使用过程中,会发现一些问题和改进点,需要进行及时的修复和更新。
大型软件开发流程八个步骤
软件开发八大步骤详解开发软件流程很多人想开发一款手机软件应用基本都是请第三方外包公司或软件工具进行,但是却不知道软件开发需要经过什么样的流程,今天将开发软件流程分三大阶段八大步骤详细给大家讲解下。
第一阶段:确认需求阶段1、市场调研需求市场调研是开发软件的基础。
因为每个项目都是从市场调研,研究用户需求开始的,只有有市场需求,开发才有意义。
2、需求探讨评价当确认有市场需求,就可以找开发公司着手开发,但是在这之前需要和产品经理评估下开发这个app的可行性。
包括功能开发的难度、实际开发的费用和时间等,根据这些制定开发方案。
第二阶段:正式开发阶段3、UI设计这个也是开发很重要的一部分。
UI视觉设计好坏直接影响app留存率。
设计要遵循简洁原则,充分考虑使用人群的喜好及特点。
4、编程开发按照功能设计,分模块、分功能的进行编程开发,编程开发过程中要注意标准和规范,统一开发标准、统一开发规范,注意需要写注释。
开发阶段是整个流程中最需要时间的阶段。
5、调整测试开发完成后最重要的阶段就是测试与试运行,系统部署实施前要做好充分的测试,测试的主要目的就是发现之前未发现的错误,确保系统上线后正常运行。
测试内容包括APP内容测试、APP 性能测试、APP功能测试、APP视觉测试、BUG调试修复。
第三阶段:上线运营阶段6、交付验收测试之后,便可将开发调试环境关闭,在正式的平台的部署实施,域名、服务器、证书等内容要准备好,部署完成后便可以交付给客户进行使用。
7、上线发布将app上线发布到各个应用商店,一般苹果的APP store审查需要一周左右。
Android审查需要三天左右,会更快。
另外,根据个别情况,审查失败,需要修改资料再提交,审查时间会变长。
所以在开发前要先了解并着手准备相关资料,会节省很多时间。
8、后期运营app上传到各大应用商店,用户就可以下载使用了。
可以通过活动营销,社会化推广,自媒体等方式进行宣传推广,前期积累一批种子用户,后期不断改进app功能细节等,拓展更多用户。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件开发过程一. 规范规范应当是从简单到复杂的,我们首先制定的规范并不复杂,只是对如何使用异常机制的一些定义。
要获得这些规范并不困难,大部分介绍异常的技术资料中都给出了很多的建议。
理解并使用它们,仅此而已。
1、对不正常的条件使用异常,尽可能准确的使用预定义的异常。
这一目标来自于Effective Java中的条款39和条款42。
其目的是为了能够正确的使用异常。
使用系统提供的异常能够减少代码,提高代码的可读性(特别是新人不需要了解自定义的异常结构)。
大多数情况下,系统提供的异常已经足够用了。
2、尽可能多的收集异常发生时的上下文信息。
异常之所以比返回码优秀的一个原因就是它能够将错误类型化,提供比错误代码多得多的信息。
因此,我们实在没理由不使用这一功能。
3、正确的使用异常转义,并保留原异常信息。
异常转义的目的是为了让客户端能够得到易于理解的类型。
我们想象一个用户登录的情境,假设用户数据保存在一个文件中,当文件中找不到用户名的相关记录的时候抛出一个RecordNotFoundException异常,系统截获了这个异常,并将其发布给用户,问题在于,用户会觉得非常的奇怪,为什么会是记录没有找到呢?因此,建立一个IllegalUserException异常会更适合于这种情况。
4、针对不同的抽象层次定义不同的异常。
正如我们在第三点中提到的,RecordNotFoundException异常并不适合于用户这个层次。
但是,这个异常对于程序员调试代码就很有意义了。
5、将异常发布到合适的地方。
有计算机的地方就一定有输入和输出。
如果把异常发生时的信息收集看作输入,那么异常的输出是什么呢?可能是错误的提示信息,可能是一个显示错误信息的网页,可能是日志中的记录,可能是一条短信,也可能是一封EMail。
这些就是异常的输出形式。
此外,异常的输出还需要正确的确定对象,对用户来说,异常只要有一个友好的提醒方式就够了,但对于管理者来说,异常需要记录下来,或是通过异步消息进行通知。
这就是规范,你也可以把它称为最佳实践、建议等名词。
当然,它还可以更加的细化,但事情总有个过程,一开始把问题弄得过于复杂未必是一件好事,你说呢?二.技能有了规范是一回事,能否把规范运用起来则取决于人员的技能。
在有一部描述清末的电影中,有这样一个情节,留学归来的知识分子为了提高民众的知识水平,不惜花费巨资免费发放报纸,这一举措大受欢迎,可惜大部分的民众都不识字,他们要报纸的原因只是这东西烧火很方便。
所以其次要解决的问题就是,大部分的程序员没有足够的异常处理经方面的技能。
如果程序员没有这方面的概念,你把一本异常管理最佳实践放在他的面前会有用吗?学会使用异常并不困难,困难的是如何让程序员正确的使用异常。
什么时候使用系统定义的异常。
什么时候使用自定义的异常,自定义异常又该如何设计。
这些都是程序员的技能问题。
基于这种思路,首先做的是培训,而培训的目标是让程序员理解异常的机制,让程序员能够把异常运用到工作中。
培训不等于上课,因为我们的目标是能够影响程序员的行为,单靠上课是无法达成目标的,因此我们把几种方式综合使用。
一般来说,程序员对未知的技术总是有兴趣的,并且会尝试着运用,然后就会慢慢失去兴趣。
这种对新技术的兴趣是可以利用的,但是要在兴趣过去之前将行为稳定下来。
所以我们首先做的是挑选合适的程序员,他们要么就是有使用异常的经验,要么就是热衷于研究新技术,这些人是比较容易说服的。
这些人的作用并不是限于学习,他们的主要职责是将这项技术传播到整个团队中。
管理的本质其实是透过人来做事,而不是自己做事,所以传播知识的职责应该是由一个团队来共同承担,绝对不是一个技术主管上窜下跳的。
我见过很多过于忙碌的技术主管,他们都犯了这个错误。
当我们在讨论会议上取得了对使用异常机制的共识之后。
开始使用第二种方式-训练。
训练分为两个部分,前半部分是讲述异常的机理、如何使用。
这时候还不讲异常的最佳实践,因为大家还没能够熟练的使用异常,讲述最佳实践的效果不好。
后半部分是让原先挑选的程序员辅导其他程序员练习异常的使用。
练习的时间大约维持了3天,我们观察到项目开发的速度并没有受到很大的影响,因为训练并没有占用很多的时间,辅导的时间也是分布到项目开发中,但是我们知道,如果要在项目引入异常,一开始速度是一定会下降的。
在首次训练完毕之后,是第二次的训练,这次主要是介绍异常管理的最佳实践。
有了一定的使用经验之后,团队顺利的接受了这部分的知识。
团队已经开始拥有了这方面的技能了。
三.组织由于是团队协作,因此我们考虑问题必须在团队环境中考虑,这就象多线程,在多线程环境中考虑问题的方式和单线程是截然不同的,任何问题都有基本的解决思路,团队协作中主要的问题包括沟通、信息传递、协作、计划等问题。
所以我们解决问题的思路也是先定义出问题和要达到的目标,然后再来考虑方法。
我们认为,异常在组织中的最大作用是它清晰的定义了类开发者和类调用者之间的契约关系。
所以,我们希望类的开发者清楚的说明一个方法在什么条件下会出现什么样的异常,类调用者则需要保证他的调用对异常有明确、完整的处理。
这个时候,我们需要过程的帮助了。
四.过程为了实现组织一节中定义的目标,我们对过程进行修订:1) 在设计类时,需要同时设计异常类,并编写异常类的说明文档,通过复审。
2) 在给出类和方法的说明时,需要给出异常的定义和触发的条件。
3) 在代码中使用异常,而不是返回值。
4) 对输入参数进行判定,使用参数不正确异常和空指针异常。
5) 测试所有异常。
6) 方法调用时,如果方法中有异常,必须使用try块进行异常处理。
7) 异常需要通过通用的框架发布。
1、2、5三点属于设计的内容,3、4、6、7四点属于编码的内容。
注意到了吗?这种过程的定义是非常具体的,准确的说这类似于作业流程。
很多软件组织都没有做这方面的工作。
抽象的制度是没有意义的,比如这么一条,严谨的做好软件测试。
什么叫严谨?软件测试的基本原理就是你不可能测试所有的情况,那么,严谨到底是测试到什么地步,没人知道。
而我们这里的定义则不一样,方法中抛出的异常都需要测试。
非常的明确,如果你的代码中抛出了3个异常,那么你就需要至少三个测试方法来测试它们。
当然,其实这个过程制度还是不完整的,我们拿第4条来说,它就有几个问题:首没有指明两种异常的使用环境;没有规定异常如何收集上下文环境。
但是,我们认为,制度性的规章不必要定义的如此复杂,你见过法律规定拿匕首杀人定什么罪,拿刀子杀人定什么罪吗?你可能会问,刚才你说制度要定义的细一些,现在又说不要定义的这么细,这不是自相矛盾吗。
不,任何问题的解决方法都是在不同的因素间进行权衡,而我们是在制度的可操作性和抽象性之间权衡。
这也是敏捷思维的一部分。
团队中知识的传递决不是靠一纸规章就能够完成的。
那么应该怎么做?两种方法,一个是靠口头讲述使用方法,另一个是通过我们原先指定的"辅导员们"。
但在这时候,新的问题又产生了。
类设计者如何把异常告诉类使用者呢,他们如何做到第2条呢?,第7条中的通用的框架又该如何设计呢?这时候我们必须求助于工具。
五.工具我们先解决第一个问题。
这个问题的根本在于,类设计者如何编写异常文档。
在Java语言中,我们可以很容易的使用语言本身的功能和JavaDoc工具来解决这个问题。
但是在其它的语言中,我们可能需要第三方的工具,甚至自己编写工具。
第二个问题在Java中同样有比较好的解决思路。
Log4J是Apache组织下的一个优秀的处理日志的开放式框架。
使用它能够很方便的将异常发布到各种途径中,例如Console、Windows日志、邮件、文本。
无疑这正是我们需要的。
至于其它的语言,那就只能靠各位看官发挥自己的能力了。
六.个性我不得不说这是最神秘,最难处理的一点。
更糟糕的是,我发现很难把这个问题描述清楚。
所幸的是,有一件事情让我印象深刻:一次程序员A和程序员B为了一件事情争论。
B编写了用户注册的后端控件,A负责调用。
A的代码大致上是这样的:这样的代码看起来似乎没有什么问题,但是实际上却出错了,问题的现象是在测试重复用户的时候,没有任何现象发生。
在debug的时候,B告诉A,其实对于重复用户的设计是通过返回值的,返回值非0表示有重复用户。
所以正确的调用代码应该是这样的:你认为是哪一位程序员犯错了呢?A有错吗?他的调用方式其实并没有错误,而且,他也并不知道B的设计思路。
那么是B的错吗?B的异常处理思路也没有什么问题,他把异常用在非常的条件中,例如数据库连接失败。
对于用户重复这样的分支,应该看作是一种正常的返回。
那么是过程的问题了,至少B应该提供完整的类使用文档。
话虽如此,但是一个软件组织的资源毕竟是有限的,Sun公司能够为他的Java API提供详尽的文档,你认为有多少公司可以做到呢?而且在团队内部仍然采用这种高成本的沟通方式,其实是不太好的。
我想来想去,这件事情应该属于个性的范畴。
任何一个人都有自己的背景和性格。
你永远无法指望大家能够写出一样的代码。
作为类的编写者B,他无法知道A将会以什么样的方式来调用他的代码,与此对应的,类的使用者A也不清楚B编写的代码的细节,因为根据类的设计原则,类的实现细节不应该透露给外部。
这中间出现错配也是正常的。
这个问题还是有办法解决的-为代码定义统一的风格,也就是固定一种编码风格。
在技术实现上,我比较倾向于程序员A,因为第二种代码要比第一种代码复杂和难读。
一个优秀的类设计人员应该在简化客户端调用上下功夫。
在代码中包含了过多的路径导致类的测试和使用变得困难。
当然,我在很多资料上也看到了很多不同的见解,但不管是哪一种见解,最佳的做法是在组织内统一做法。
所以在我们的组织中,都只使用两种序列,要么正常返回,要么发生有类型异常。
但这是否解决了问题呢?这个问题可能是解决了,但还会有很多类似的问题。
所幸的是,这个错误最终是被发现了,可能软件中还存在大量未被发现的错误,这些才是最可怕的。
其实这个问题的根源在于,程序员之间的沟通不够。
而要解决这个问题,我们认为,只能从文化上去想办法,提倡沟通,提倡协作。
而我们的分析框架中并没有文化这一项。
理由是,文化的主题超出了我们讨论的范畴。
《创建软件工程文化》一书是一本讨论文化的优秀书籍,如果大家有兴趣,可以进一步的阅读。
所以,这里我们可以知道一个道理,软件工程、项目管理其实并没有什么非常难的地方,我们看很多书把很多问题都提到纯理论的高度,反而给读者造成了困扰。
很多读者的来信中,问到一个同样的问题,我希望在我的团队中引入软件工程,有些人说从需求管理开始比较好,有些人说从配置管理开始比较好,到底应该从哪里开始呢?就拿这个例子来说,为什么我们对一个异常管理如此的关心呢?为什么不做需求管理,或是上CMM呢?那该多酷啊!问题就在这里,软件开发是为了给客户带来价值,就像UMLChina的名言,软件以用为本,而不是以酷来衡量的。