标题：软件开发
开发阶段
计划对所要解决的问题进行总体定义，包括了解用户的要求及现实环境，从技术、经济和社会因素等3个方面研究并论证本软件项目的可行性，编写可行性研究报告，探讨解决问题的方案，并对可供使用的资源（如计算机硬件、系统软件、人力等）成本，可取得的效益和开发进度作出估计。制订完成开发任务的实施计划。分析软件需求分析就是对开发什么样的软件的一个系统的分析与设想。它是一个对用户的需求进行去粗取精、去伪存真、正确理解，然后把它用软件工程开发语言（形式功能规约，即需求规格说明书）表达出来的过程。本阶段的基本任务是和用户一起确定要解决的问题，建立软件的逻辑模型，编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。本阶段的工作是根据需求说明书的要求，设计建立相应的软件系统的体系结构，并将整个系统分解成若干个子系统或模块，定义子系统或模块间的接口关系，对各子系统进行具体设计定义，编写软件概要设计和详细设计说明书，数据库或数据结构设计说明书，组装测试计划。在任何软件或系统开发的初始阶段必须先完全掌握用户需求，以期能将紧随的系统开发过程中哪些功能应该落实、采取何种规格以及设定哪些限制优先加以定位。系统工程师最终将据此完成设计方案，在此基础上对随后的程序开发、系统功能和性能的描述及限制作出定义。设计软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据，也可以是可组合、可分解和可更换的功能单元。模块，然后进行模块设计。概要设计就是结构设计，其主要目标就是给出软件的模块结构，用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构，次要任务就是设计数据库，常用方法还是结构化程序设计方法。编码软件编码是指把软件设计转换成计算机可以接受的程序，即写成以某一程序设计语言表示的"源程序清单"。充分了解软件开发语言、工具的特性和编程风格，有助于开发工具的选择以及保证软件产品的开发质量。
当前软件开发中除在专用场合，已经很少使用二十世纪80年代的高级语言了，取而代之的是面向对象的开发语言。而且面向对象的开发语言和开发环境大都合为一体，大大提高了开发的速度。测试软件测试的目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例（测试数据与功能和预期的输出结果组成了测试用例）。如何才能设计出一套出色的测试用例，关键在于理解测试方法。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法测试对象是源程序，依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误。结构错误包括逻辑、数据流、初始化等错误。用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果。白盒法和黑盒法依据的是软件的功能或软件行为描述，发现软件的接口、功能和结构错误。其中接口错误包括内部/外部接口、资源管理、集成化以及系统错误。黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。维护维护是指在已完成对软件的研制（分析、设计、编码和测试）工作并交付使用以后，对软件产品所进行的一些软件工程的活动。即根据软件运行的情况，对软件进行适当修改，以适应新的要求，以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。
一个中等规模的软件，如果研制阶段需要一年至二年的时间，在它投入使用以后，其运行或工作时间可能持续五年至十年。那么它的维护阶段也是运行的这五年至十年期间。在这段时间，人们几乎需要着手解决研制阶段所遇到的各种问题，同时还要解决某些维护工作本身特有的问题。做好软件维护工作，不仅能排除障碍，使软件能正常工作，而且还可以使它扩展功能，提高性能，为用户带来明显的经济效益。然而遗憾的是，对软件维护工作的重视往往远不如对软件研制工作的重视。而事实上，和软件研制工作相比，软件维护的工作量和成本都要大得多。
在实际开发过程中，软件开发并不是从第一步进行到最后一步，而是在任何阶段，在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计，用户可能会提出一些需要来修改需求说明书等。
开发平台
软件开发平台源于繁琐的实践开发过程中。开发人员在实践中将常用的函数、类、抽象、接口等进行总结、封装，成为了可以重复使用的“中间件”，而随着“中间件”的成熟和通用，功能更强大、更能满足企业级客户需求的——软件开发平台应运而生。 　
平台是一段时间内科研成果的汇聚，也是阶段性平台期的标志，为行业进入新的研发领域提供了基础。由于平台对企业核心竞争力的提升非常明显，目前国内的管理软件市场，软件开发平台的应用已经成为一种趋势。 　
由于开发环境、开发人员、功能定位、行业背景等的不同，不同品牌的平台存在较大差别。
定制开发
随着移动互联网爆发式增长，手机客户端应用已经逐渐成为传统企业进入移动互联网领域最主要的途径，移动互联网已经成为企业展示、营销及业务运营的新的方向。在移动互联网领域，业务的拓展运营是基于客户端应用来展开的，而开发企业本身的客户端应用将必不可少，如何能够通过客户端应用把企业的现有业务及产品营销 信息更充分的展示出来，手机客户端应用的设计及定制至关重要，它可以使企业基于移动互联网这个平台而进行自己的产品营销，可以使企业的已有IT系统向移动 互联网方向平滑扩展。
制作企业自己的手机客户端，展示公司产品和服务及部署公司业务系统到移动互联网，通过客户端应用第一时间把公司资料、产品信息传递给终端客户，让手机客户端应用成为最便捷的企业宣传册，成为企业移动信息化的平台。
思恒信息科技可以为集成商、独立软件提供商、行业渠道商、行业客户、电商网站、终端用户等提供按需定制的手机客户端应用。客户端应用软件对已有软件系统进行平滑扩展，无缝衔接，为客户打造完美、多元化的产品体验，并可同时部署业务覆盖各种类型的智能手机。
可为客户提供界面UI定制服务，包括客户端LOGO、功能项图标等风格界面设计，为客户打造个性化的尊享服务。长期的客户端定制服务，能够满足不断升级的手机操作系统要求；提供从需求分析、UI设计、应用开发、客户端部署、系统维护在内的一条龙服务。
开发环境
软件开发环境在欧洲又叫集成式项目支持环境（Integrated Project Support Environment，IPSE）。软件开发环境的主要组成成分是软件工具。人机界面是软件开发环境与用户之间的一个统一的交互式对话系统，它是软件开发环境的重要质量标志。存储各种软件工具加工所产生的软件产品或半成品（如源代码、测试数据和各种文档资料等）的软件环境数据库是软件开发环境的核心。工具间的联系和相互理解都是通过存储在信息库中的共享数据得以实现的。
软件开发环境数据库是面向软件工作者的知识型信息数据库，其数据对象是多元化、带有智能性质的。软件开发数据库用来支撑各种软件工具，尤其是自动设计工具、编译程序等的主动或被动的工作。
较初级的SDE数据库一般包含通用子程序库、可重组的程序加工信息库、模块描述与接口信息库、软件测试与纠错依据信息库等；较完整的SDE数据库还应包括可行性与需求信息档案、阶段设计详细档案、测试驱动数据库、软件维护档案等。更进一步的要求是面向软件规划到实现、维护全过程的自动进行，这要求SDE数据库系统是具有智能的，其中比较基本的智能结果是软件编码的自动实现和优化、软件工程项目的多方面不同角度的自我分析与总结。这种智能结果还应主动地被重新改造、学习，以丰富SDE数据库的知识、信息和软件积累。这时候，软件开发环境在软件工程人员的恰当的外部控制或帮助下逐步向高度智能与自动化迈进。
软件实现的根据是计算机语言。时至今日，计算机语言发展为算法语言、数据库语言、智能模拟语言等多种门类，在几十种重要的算法语言中，C&C++语言日益成为广大计算机软件工作人员的亲密伙伴，这不仅因为它功能强大、构造灵活，更在于它提供了高度结构化的语法、简单而统一的软件构造方式，使得以它为主构造的SDE数据库的基础成分——子程序库的设计与建设显得异常的方便。
事实上，以C&C++为背景建立的SDE子程序库能为软件工作者提供比较有效、灵活、方便、友好的自动编码基础，尤其是C++的封装等特性，更适合大项目的开发管理和维护。
开发流程
软件设计思路和方法的一般过程，包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。[1]
1、我们在做一个项目之前，首先是要和客户进行交流，和客户交流的目的是什么？就是要了解用户的需要，根据客户的需要做出一个软件要实现的基本功能，这个也称之为客户需要分析。这一步在整个的开发流程中是非常重要的，如果你连客户最基本的需要都搞不清楚，那么你这个软件是不可能使客户满意的。
2、需求分析：这个阶段需要出三样东西，用户视图[2]，数据词典和用户操作手册。用户视图是该软件用户（包括终端用户和管理用户）所能看到的页面样式，这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东，完成了数据词典，数据库的设计就完成了一半多。用户操作手册是指明了操作流程的说明书。
3、概要设计：将系统功能模块初步划分，并给出合理的研发流程和资源要求。作为快速原型设计方法，完成概要设计就可以进入编码阶段了，通常采用这种方法是因为涉及的研发任务属于新领域，技术主管人员一上来无法给出明确的详细设计说明书，但是并不是说详细设计说明书不重要，事实上快速原型法在完成原型代码后，根据评测结果和经验教训的总结，还要重新进行详细设计的步骤。
4、做完概要设计之后，我们还要对其进行详细的说明，对每个功能所包括哪些小功能进行一一说明；这样开发人员在开发过程中才有一个明确的目标，以保障开发工作的合理分配和管理。
5、编码：在规范化的研发流程中，编码工作在整个项目流程里最多不会超过1/2，通常在1/3的时间，所谓磨刀不误砍柴功，设计过程完成的好，编码效率就会极大提高，编码时不同模块之间的进度协调和协作是最需要小心的，也许一个小模块的问题就可能影响了整体进度，让很多程序员因此被迫停下工作等待，这种问题在很多研发过程中都出现过。
6、软件测试阶段，不能认为我们编码完成，软件就结束了，在软件开发过程当中，测试也是相当重要的；测试主要包括使用Junit工具单体测试和结合测试。只有测试才能知道你这个软件有没有Bug，才能知道软件的健壮性。在规范化的研发流程中，编码工作在整个项目流程里最多不会超过1/2，通常在1/3的时间，所谓磨刀不误砍柴功，设计过程完成的好，编码效率就会极大提高，编码时不同模块之间的进度协调和协作是最需要小心的，也许一个小模块的问题就可能影响了整体进度，让很多程序员因此被迫停下工作等待，这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的，对于程序员而言，bug永远存在，你必须永远面对这个问题，大名鼎鼎的微软，可曾有连续三个月不发补丁的时候吗？从来没有！
7、测试编写好的系统。交给用户使用，用户使用后一个一个的确认每个功能，然后验收。能开发出一个好的软件，必需有一个好的开发流程；只有我们遵循流程进行一步一步，脚踏实地做，才能开发出一个好的软件，由此可见，一个好的开发流程是至关重要的。
举个例子来看：
1 某公司想找人订做一套人事管理软件,从某种渠道上得知我们有提供这种服务，所以联系上了我们。
2 我们会派专门的软件工程师到他们那里去了解我们要设计一个什么的东西给他们用，然后回来做个方案给他们，其中方案的内容包括：我们开发出来的软件大概的界面是怎样？方便什么人使用？什么人可以使用什么功能？方便到什么程度？大概的硬件要求是怎样等？
3 他们看了方案后，确定他们就是要做一套这样的软件，我就开始开发这套软件。
4 我们把开发出来的软件交用他们使用，其中在使用的过程中哪里使用不方便或哪里达不到要求，我们会第第一时间修改这些功能，直到他们要求的所有功能都能很完美的解决掉。
开发语言
常见的软件开发语言：JAVA、C/C++/php/JSP/ASP/PB/DELPHI/.NET/C#/vb/等
与应用最关键的需要用到数据库，我们常说的数据库，常见数据库：MySQL/SQLSERVER/ORACLE等。
专业
专业培养软件开发专业主要培养德智体全面发展，具有一定计算机软硬件维护、网络组建、维护管理的高级实用技术型人才。通过本专业的学习，能熟练掌握常用的计算机软件的使用、维护与技巧；在硬件方面学生应了解计算机硬件的发展，熟练掌握计算机组装的方法，能熟练运用应用软件检测计算机性能、故障的范围所在，掌握硬件故障的一般处理方法；在网络方面，学生应掌握目前流行网络的技术特点，掌握网络工程、网络维护、网络安全及应用方面的知识。能胜任一般网络工程方案的设计、组建、网络维护、及简单网站的建设与维护。培养对象本专业学生主要学习计算机基础，接受从事软件应用方面的基本训练，具备应用软件解决实际问题的基本能力。就业方向本专业毕业生适合的工作岗位是计算机程序设计师。适合于熟练地按照工程化的思路进行软件编制、软件测试的工作岗位，能担任各种企事业单位和各级工程建设部门、管理部门的计算机软件和硬件维护、网络的组建、维护等工作，也可从事计算机研究与应用、软件开发等方面的工作。就业范围为：计算机软件公司、具有软件开发能力的大型企业及事业单位、大专院校和科研院所。
开发工具
软件建模工具，用于描述系统的需求，辅助设计。
软件实施工具，用于程序设计，编码和编译，包括程序语言开发环境和集成开发环境。前者主要提供程序语言的预编译，编译，链接的工具，后者包括代码编辑器在内的编辑器，代码生成器，运行环境和调试器。
模拟运行平台，用于模拟系统的实际运行环境。
软件测试工具，用于对系统，子系统，模块或单元进行测试的工具。
软件开发支撑工具，主要是软件配置管理工具。
图书种类
浅显的入门类图书。这类书的标题往往是《XX天精通XXX》、《XXX从入门到精通》、《XX开发实战》等，通常从软件的安装讲起。有人批评这类书为烂 书、毫无价值，这并不公平。至少我曾经从这些书中学到了一些东西。即使是21天系列书，也有适合看的人群。只不过，它一般也就只能看21天而已，过后就可 以扔到废纸堆。这类书只适于还没有入门的初学者，从中学到一些入门招式。在刚起步时一般买一本就够了。如果你善于使用搜索引擎，那几乎没有买这类书的必 要。
国内外高手写的实战类图书。这类书实战性很强，将技术及原理讲得很透彻。比如《Windows环境下32位汇编语言程序设计》、《深入解析MFC》、 《Delphi深度探索》、《深入浅出WPF》、《深入剖析ASP .NET组件设计》等。以前这类书都是从国外翻译或从台湾引进的，现在国内高手越来越多，出自国内作者的图书也越来越多。如果能在学习的每个方向看两三本 这类图书，并通过实践消化掉，那么毫无疑问，你会成为一名优秀的程序员。
国外大牛写的揭露本质、有丰富思想的书。这类书就是所谓的经典书，例如《代码大全》、《编程珠玑》、《设计模式》、《重构》、《代码整洁之道》等。经典书就像一个有深度、有思想的朋友，能给你启发，每次阅读都会有新的收获，这类书具有真正的收藏价值。看经典书永远是正确的选择，它绝不会浪费你的时间，因为 经典书是无数人沙里淘金、帮你挑选出的结果。[2]

优势
企业管理软件可以帮助企业及时、准确、真实、完整的统计企业的业务、财务数据。笔者从事速达企业管理软件的销售、实施、服务多年，目睹了中小企业的管理现状，表面看企业经营红红火火，实际多数企业管理混乱，业务、财务的数据以流水账为主要统计方式，造成业务、财务数据残缺不全，帐实不符严重，潜亏因素多多，管理部门难以为经营者提供有效、准确的数据，致使企业无法面对市场做出正确的决策，也很难发现企业管理的漏洞。通过企业管理软件，有效的解决了这一难题，它不但能准确、及时的统计企业进销存、财务数据，更能生成大量的统计、分析报表，为企业经营管理决策提供可靠的数据支持。
规范企业业务流程，提高工作效率，降低成本。一款好的企业管理软件就是一套科学的管理办法，它促使企业对经营管理进行一次彻底的改革，从业务流程的规范，到财务管理的电算化，大大提高了工作效率，减少不必要的中间环节，降低企业的运营成本。
客户是企业的衣食父母，营销是企业的生命线，管理软件中的“客户关系管理”源于“以客户为中心”的商业模式，通过向企业的销售、市场、服务等部门和人员提供全面及个性化的客户资料，并强化跟踪服务、信息分析能力，从而使企业得以提供更快捷和周到的优质服务，提高客户满意度，吸引和保持更多的客户，从而增加营业额，提供企业经济效益。

行业前景
java就业前景据有关数据显示，目前，我国对软件人才的需求已达20万，并且以每年20%左右的速度增长。在未来5年内，合格软件人才的需求将远大于供给。2010年，我国软件人才的缺口已达43.5万，其中尤以JAVA人才最为缺乏。当前世界各地持有JavaProgrammer证书的人员供需差距极大，迫使企业不得不用高薪聘请Java程序员。因此，JavaProgrammer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家，持有JavaProgrammer认证证书的人年薪均在4-10万美金，而在国内持有JavaProgrammer认证的程序员也有极好的工作机会和很高的薪水。
权威统计机构统计——在所有软件开发类人才的需求中，对 JAVA工程师的需求达到全部需求量的60%~70%。JAVA工程师的薪水相对较高，通常来说，具有3~5年开发经验的工程师，拥有年薪 10万元是很正常的一个薪酬水平。嵌入式就业前景根据业内发布的薪资报告，嵌入式行业初入门的开发人员平均月薪一般都能达到5000元左右，有3年以上经验的人员年薪都在10万元以上，中高级的嵌入式软件工程师月薪平均已超过万元，具有10年工作经验的高级嵌入式软件工程师年薪在30万元左右。Android就业前景随着Android平台的扩张，引发了Android人才荒，2010年移动开发人才需求20万，未来人才需求缺口将达百万。但符合条件的Android工程师屈指可数，企业招聘难度可想而知。我们相信，在未来几年内，Android开发工程师将成为3G行业炙手可热的岗位之一。3G人才全球紧缺，实用人才培养已迫在眉睫!在国内三大运营商如火如荼的3G营销战持续升温，再加上3G的推出对整个行业的巨大推动作用，无疑将引爆3G手机开发工程师这个黄金职位。软件工程就业前景随着世界产业转移的加速，欧美、日本等发达国家将大量的软件开发业务转移到中国、印度等国家。据统计，目前全球软件外包市场规模超过1000亿元，我国软件服务外包产业总收入在未来三年将达260多亿美元，随之而来的是对软件服务外包人才的巨大需求，未来5年，国内服务外包产业人才需求量至少要达到100万。目前软件外包从业人员的薪资水平普遍高于一般软件开发人员，就业前景广阔。
要想有个好的计算机职业,首先得有扎实的技术作为基础;其次,要经常了解计算机方面的最新信息,学习最新的技术;第三,实践经验必不可少,在校期间通过多种渠道积累了实践经验,如暑期有针对性的打工,或通过熟人关系积累实践经验,也可有目的性地参加见习培训,学校安排的实习等等.第四,了解计算机行业有哪些职位,以及这些职位需要什么技术,有针对性地做好就业准备。
手机开发
Mac OS（苹果的），symbian（塞班、主要是诺基亚），Linux（过时的平台、但是很基础，如安卓就是基于他开发的），Palm（最大特色是不能后台），BlackBerry（黑莓）Windows Mobile（WM，不错的系统，）Android（安卓，02年兴起的，很好的系统），还有几个新系统，魅族M8的my phone，N900的maemo。
编程风格
（1）缩进：缩进以 Tab 为单位，一个 Tab 为四个空格大小。全局数据、函数 原型、标题、附加说明、函数说明、标号等均顶格书写。 　（2）空格：数据和函数在其类型，修饰（如 __fastcall 等）名称之间适当空格并据情况对 齐。关键字原则上空一格，不论是否有括号，对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。 　（3）对齐：原则上关系密切的行应对齐，对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多，必要时适当换行。 　（4）空行：程序文件结构各部分之间空两行，若不必要也可只空一行，各函数实现之间一般空两行。 　（5）注释：对注释有以下三点要求： A、必须是有意义； B、必须正确的描述了程序； C、必须是最新的。
签订合同
委托开发软件一般是应用户（委托方）需要，编制适用于其生产或经营特点的软件，这种软件一般在市场上见不到或在市场上买到需经修改后才能使用，但是该用户没有开发或修改软件的能力，必须委托一定软件中其他具有开发、修改软件能力的机构从事该项工作。被委托方虽然是开发软件方面专家，但他可能对委托方所从事的行业或具体的生产或经营特点、方式了解甚少。因此，双方签订的软件合同就有许多事项需要明确。一、委托人注意事项1、合同双方应明确约定受托人对委托人进行项目培训，以及培训费用的支付问题。
2、合同双方应明确约定开发软件的总价款以及各个部分的价格。
3、合同双方应明确约定受托人向委托人提供进度报告的方式和时间。
4、委托人在领受了受托人交付件后，应立即对该交付件进行测试和评估，以确认其是否符合开发软件的功能和规格。
5、委托人应向受托人提供有关信息与资料，特别是有关委托人对开发软件的功能和目标需求方面的信息和资料，明确质量要求。
6、合同双方应明确约定委托人对于委托人提交的有关需求说明、资料和信息所涉及的软件功能、目标、需求构成及相关技术问题向受托人咨询或征求意见的权利。
7、委托方应明确约定受托方向委托方进行软件维护和支持服务的时间和内容。二、受托人的注意事项1、受托人在完成软件开发后，需要增加开发费用时，该怎么处理，应与委托人进行明确约定。
2、应在合同中约定完成软件开发的弹性时间，避免由于委托人计算失误，未能在合同规定的时间内完成软件开发而承担的违约责任。
3、合同双方应明确约定受托人提交需求说明书、概要设计说明书、详细设计说明书的具体时间。
4、合同双方应明确约定委托人在受托人提交进度报告后答复的时间和方式。
5、明确所开发软件的版权归属。
软件版权的归属有两种处理方法：其一是软件版权归委托方；其二是软件版权归被委托方。实践中可采取以下办法解决，即软件版权归委托人，反过来委托人给予被委托人在一定范围内使用软件的许可，如允许被委托人使用例行程序开发其他软件等，由此双方都能各得所需。
6、受托人应约定委托人检验软件后出具书面领受文件或递交缺陷报告及领受或出具缺陷报告时间。三、委托人和受托人的注意事项1、合同双方应明确约定合同项目是否可以分包，如果可以，应写明可分包的范围。
2、合同双方应明确约定软件开发的目的、处理对象、软件的主要功能和目标以及应达到的技术指标。
3、开发进度
①合同双方应明确约定合理的软件系统试运行的时间。
②合同双方应明确约定开发软件的交付时间和进度。
4、知识产权归属
①若合同约定软件系统的知识产权归一方所有时，应明确约定另一方所拥有的使用权及权限范围。
②合同双方应明确约定所开发软件的知识产权的权属，是共同所有还是一方所有。
5、验收
验收对委托开发软件合同双方都非常重要，它关系到如何确认以下几个问题。
①、委托方在收到软件程序以及第一批文档后多长时间内完成对软件的测验，以及在多长时间内委托方有权以软件程序质量未达到合同所规定的技术标准要求为由，要求被委托方对程序进行修改使其达到合同规定的标准。
②、对程序进行修改费用应哪方负责。
③、被委托方应在多长内完成修改程序的工作，并且应在何时、何地以及以何种方式将修改后的软件交会给委托方。
④、委托方收到修改过的软件之后应在多长时间完成第二次测验，并应在多长时间内委托方应将第二次测验的结果通知被委托方。
⑤、如第二次测验计算机程序仍未达到合同规定的技术标准要求，委托方是否有权拒绝拒绝接受程序，交且是否有权要求被委托方按合同规定的索赔条款进行赔偿。
⑥、如果委托方要按期将首次或者第二次测验的结论通知被委托方，是否可以视为委托方已接受被委托方开发的软件。
⑦、如果程序文档分为两次交付，在委托方实际接受软件后多长时间内被委托方应将第二批文档交付给委托方。
因此，应注意以下问题：
①合同双方应明确约定因双方各自的原因导致软件未通过验收，各自应承担的责任。
②合同双方应明确约定软件验收的时间和标准。
6、交付说明书
①合同双方应明确约定交付的文档的形式和内容。
②合同双方应明确约定委托人对受托人提交的各种说明书的审核时间。
③合同双方应明确约定委托人对受托人提交的说明书有异议，双方应如何解决等问题。
合同双方没有明确约定当委托人对受托人提交的说明书有异议时，双方应如何解决。导致合同双方对此发生争议，引起纠纷。
7、证据
①合同签订后，双方应该妥善保管合同书以及主合同、相关凭据、有关会计资料以及其它承诺函、约定书等合同附件。
②对方拒绝接受函件等其他文书时，应当向公证机构或其他部门公证或提存保留证据。
③应严格按照法律法规的规定进行证据的公证和提存保留。
④当事人一方依照约定解除合同或依照法定事项主张解除合同，应保存通知对方解除合同的证据。
8、合同双方应明确约定项目变更的条件。
9、合同双方应明确约定软件开发系统的名称，分属于不同当事人的软件。
10、保密
①保密对象：合同双方应明确约定保密对象，应该对保密对象加以细化，以例举的方式列出，还应约定特定情况下的一些例外事项。
②保密责任：当事人应当明确约定双方对商业秘密都负有保密义务，任何一方都不得擅自泄漏，否则承担相应责任。
③保密期限：应约定对合同中的保密事项的具体保密期限，或只是有个概述而未明确具体的时间段、时间点。
④保密条款的独立性：双方可以约定，不论合同是否变更、解除或终止，合同保密条款不受其限制而继续有效，各方均应继续承担约定的保密义务。
11、合同双方的权利义务是否可以转让。
12、签约细节
①合同中应当说明双方当事人信息。如当事人名称，住所，法定代表人或主要负责人，开户金融机构，帐号，电话，邮政编码，签订合同日期。签订合同地点等。
②双方均应签署清楚无误的签名，当事方是单位的还应加盖公章。
③签订时间：双方应在合同尾部标明清楚无误的签约时间。
④合同用语要力求达到条款明确、具体、措辞确切，防止“基本”、“尽可能”、“如有可能”“应该”“最新”等不确切的条款和字眼在合同中出现。
13、不可抗力
①一方发生不可抗力时应当按照约定及时向对方告知、证明，并应及时采取措施防止损失扩大。
②双方当事人应当明确约定不可抗力的范围、遭遇不可抗力后的通知办法和证明方法、双方可否因不可抗力解除合同、可否因不可抗力造成的履行问题要求赔偿、在何种情况下解除合同等。
③一方发生不可抗力后应依约及时向对方告知、证明时应保存证据。
14、履行过程中双方都应注意相对方主体变更情况，若有变更解散情形的，应注意哪个法人或组织继受其权利义务，并应收集相关证据证明以上事实。
15、争议解决方式
①如约定诉讼管辖法院，只能约定由被告住所地、合同履行地、合同签订地、原告住所地、合同标的物所在地法院管辖，且只能约定其中一个法院管辖。如果约定不明确、选择两个以上法院管辖、或约定上述5个法院以外的法院，或既约定仲裁又约定诉讼的，这样解决争议的条款是无效的。
当事人选择管辖法院时，选择一个以上的法院；或者选择仲裁，却同时约定由法院管辖。 这样解决争议的条款是无效的，可能会增加当事人争议解决成本（时间、金钱），不符合当事人初始意图，不利于争议有效率地解决。
②发生争议后当事人双方可以平等协商达成共识，也可以由人民调解委员会调解或者向人民法院起诉以及依约定申请仲裁。人民法院的裁判、调解以及仲裁机构的裁决、调解都是具有强制力；当事人双方协商达成的共识和人民调解委员会的调解没有强制力但是其效力等同于签订了新的合同。
③如约定仲裁，应当明确约定具体的仲裁机构和仲裁事项。仲裁机构约定明确的标准为：仲裁机构所在地明确，同一地点有两个以上仲裁机构的应当写明约定的仲裁机构的详细名称。
16、合同双方当事人应该在涉外合同中明确约定一旦发生争议应该适用的法律，而且这种约定要切实可行。
17、在诉讼中，应权衡利弊，最大限度要求对方承担所有损失，不能主动放弃任何有利于己方的诉讼请求。
18、受到对方欺诈、胁迫，被人趁人之危签订合同的当事人应当保存好证据并且在一年之内向人民法院起诉或者依约向仲裁机构申请仲裁主张撤销或者变更合同。
19、在签订合同时，应当附带合同使用说明。如：合同的适用范围，条款术语的理解等方面。
20、在合同履行过程中一方违约，另一方应采取措施提请对方注意并与对方进行协商，确定责任的负担。
21、当双方对合同内容协商一致进行变更时应重新订立书面合同或达成书面协议。
22、签约主体
①合同双方应正确区分单位与单位负责人的关系，应明确认识到单位负责人不能以其个人名义代表单位。
②一方当事人与对方当事人的委托代理人签订合同时，应该事先确认代签约的人是否持有对方当事人的授权委托书。
③应对各自内部人员的权限作出规定，禁止无权人员滥用单位公章、签字等与对方履行各项合同事宜，尤其不能作出不符合合同内容和己方利益的意思表示。
④双方当事人应当调查签约对方的签约主体资格。
23、应在合同中写明主合同、相关凭据、有关会计资料以及其它承诺函、约定书等为本合同附件。
24、违约责任
①合同双方应在合同中约定，如一方违反合同约定，另一方可追究违约方的责任，并要求违约方承担违约金或赔偿损失。
② 合同双方只要约定了违约金或赔偿损失的，就要约定具体数额或计算方法。在约定违约金时，数额约定不能过高或过低，约定数额过低，损失得不到补偿，约定数额过高，会因数额过高得不到法律支持无法实现。一般而言，约定的违约金数额不能超出合同标的额，若一方的损失确实超过合同标的，可直接约定赔偿损失。
25、当事人一方依照约定解除合同或依照法定事项主张解除合同的，应当通知对方。合同自通知到达对方时解除。
26、双方在合同中应明确约定合同履行中若一方组织解散，其合同权利义务的承担者。若在合同订立时一方正处于解散的变动期内且能预见其权利义务的继受者，则应在合同中明确约定具体的继受者名称。同时须约定一方发生组织解散情形应及时告知相对方及违反此告知义务的责任。
27、双方在签订合同时，合同用语的一定要准确、清楚，对一些专业性较强的关键性的名词术语要在合同开头作出必要的定义或解释，以免发生歧义或造成理解障碍。
28、双方应在合同中约定，合同未尽事宜依照有关法律法规执行，法律法规未作规定的，双方可另行协商签订书面补充协议作为本合同的附件，补充协议与本合同具有同等法律效力。
29、双方应在合同中明确约定合同生效与终止的条件、时间和事由等。
30、合同双方应约定一方若变更通讯地址，应在变更之日起几日内以书面形式通知对方及未通知对方应承担的责任。
31、合同双方应在合同中明确约定双方的文件往来应采取何种形式。宜采书面形式，包括：书信、传真、电报、当面送交等方式。
32、一方接到另一方解除合同的通知时如有异议，可及时请求人民法院或者仲裁机构确认解除合同的效力。
以上细节问题，双方在签订软件开发合同时，应当加以重视，应严格按照法律规定办理相关手续，从而最大限度规避法律风险。
极大的复杂性
大多数大型软件软件产品由几十甚至几百万行源代码构成，例如：Windows95操作系统由大约1100万行代码组成。每一行代码都可能影响到程序的其它部分，并且各个部分之间都可能互相影响。这样一个错综复杂的巨大系统当中，每一个小小的错误都可能导致整个系统崩溃。有些大型软件，例如Windows，可能是人类曾经建造过的最复杂的事物之一，从古至今最复杂的建筑都无法与之相比。
高度的不确定性
一个软件项目从一开始就存在许多不确定性因素。其一：用户需求很难确定。这是因为软件开发者很难详细了解用户的需求，甚至用户在看到产品之前也不清楚自己到底需要什么，所以从项目开发的自始至终都可能会有新的需求提出，致使系统结构不断修改，最终面目全非。其二：设计不完全可以预测。有时，一个设计时认为可行的方案，在实现时可能行不通，或者最初的设计方案存在很大的缺陷而没有及时发现，或者突然一个设计时没有料到的技术难点阻挡了项目的进度。从设计到实现实际上有着很大的不可预测性。其三：用户需求不断变化，如果最初的用户需求没有了解的很清楚，可能整个项目很快就会陷在不断变化的需求之中不能自拔。其四：客观条件的不确定性。在项目的进展过程中，可能会有人员的流动，可能会有资源的调整，可能会有这样或那样的客观条件的限制而阻挡了项目的正常进行。在这样高度的不确定之中，在较早阶段精确估计一个项目不只是很难地，甚至是不可能的。
开发人员的过分乐观
许多开发人员倾向于一切都会进展顺利，这种盲目的自信对于项目开发来说是不对的。如果按照最乐观的估计，可能绝大多数任务都不能按时完成，因为在软件开发中不确定因素实在太多了。对于任务的复杂性和难度，对于自己能支配的时间，对于可能的突发事件的干扰等没有清楚的认识和估计，即使对自己的时间表作出保证，也可能常常无法按时交货。
来自外部的压力
作为项目的管理者或者客户都希望项目早日结束，因而为项目设置了一个个时间节点。
这些时间节点可能设置的根本就不可能实现或者实现起来会有很大难度，但是开发人员为了按时完工只好加班加点，以最快的速度完成要求的功能，而对于系统结构的考虑就会放到次要的位置上去，这样就为今后程序的维护埋下了隐患。更可怕的是一个个bug会随着压力的增大而产生，最后造成更大量的返工。程序就象程序员的孩子一样，每个人都希望自己的孩子茁壮成长，但是没有办法，多生快生就不能优生。
项目以外事情的干扰
如果一个项目的开发人员经常被项目以外的事情所干扰、牵制，不能全身心地投入到项目开发之中，常常会因此而影响了进度。这种现象在规模较小的软件企业中比较多见，一个开发人员经常身兼多职，甚至同时参与多个项目的开发。如果其它项目急于完工，则该项目只好被拖延。
项目管理的混乱
软件企业内部项目管理的混乱似乎是一个世界性的通病。卡耐基梅隆大学软件工程研究所（SEI）建立了一套标准，用来衡量软件企业从混乱到持续发展的这种状态，这就是就是CMM五级标准。第一级最为混乱，每升高一级情况都有所好转，第五级状况最好。 到2001年1月底，全世界只有1654家软件公司和机构通过了不同级别的认证。从下图可以看出，这是一个金字塔型的分布状态，图上只显示了二级和二级以上的企业，而处在金字塔最低层的那些一级企业的数目不知有多少个1654家！所以从世界范围来看，软件定制管理的总体水平还是很低的。
开发人员的不足
全世界对于人才的竞争可能在IT界表现的最为激烈。一方面人才的绝对数量不足导致了许多企业不能招到自己急需的人才；另一方面人才的流动也导致了企业很容易失去自己的员工。一个项目如果缺少人手或人才频繁流动，将不能保证项目的正常进展。
对不确定性做好充分准备
中国人都对《三国演示》中的赤壁之战非常熟悉，诸葛亮在赤壁埋伏了数路伏兵对曹操进行围追堵截，一招不行，还有下一招，对整个过程做了非常周密的准备和部署，所以大获全胜。软件开发亦是如此，在项目展开的初期就应该对过程中可能会出现各种的情况有所准备，才不至于车到山前无路可走。
立足于产品的灵活性
设计的灵活性是一个软件产品的灵魂。好的设计总是容易维护和升级，而不好的设计却会为今后的维护带来很大的麻烦，甚至整个产品都可能被废弃重来。因此在软件开发的的初期应花很大力气致力于整体设计，而不是急于编码，磨刀不误砍柴工，前期的投入会获得高额回报的。
提高软件管理水平
SO9000质量管理系统的标准系列是建立在这样一个前提上：如果生产和管理系统没有问题，那么其产品和提供的服务也就没有问题，这说明管理水平如何于产品的质量有至关重要的影响。 我认为一个软件企业提高管理水平的最好途径就是为自己制定一个目标，比如实现CMM的级别认证或者ISO9000质量体系认证，在对这些目标努力的过程中会逐渐提高自己的管理水平[3]。