1.1 软件开发概述
在计算机软件中,一般分为系统软件和应用软件,在这里,我们讨论的当然是应用软件范畴。再具体一点,我们使用C#开发应用软件,更多的是为非计算机专业人员使用的。本节的讨论就从这个基本点出发。
1.1.1 开发应用软件
软件开发是一个很大的话题,如果完全覆盖这方面的内容,可能2000页的篇幅也不够。在这里,我们只是简单地讨论一下关于软件的开发与应用方面的问题。
首先,我们必须明白,软件开发是一个过程,在这一个过程当中,作为开发人员需要解决两个关键性的问题:
● 软件开发过程是将用户的实际业务(包括业务流程与数据处理)或虚拟事务(如游戏软件等)转化为计算机软件的过程。软件的使命是能够有效地帮助用户提高工作效率,当然也可以是给用户带来乐趣,但决不应该成为用户的负担。一个优秀的软件,不是让用户总是停留在无聊、生硬,甚至是怪异的操作之中,而是让用户感觉不到软件的存在,或者是让用户乐于使用它。
● 软件开发中,开发人员必须正确地、合理地使用相关的技术和方法。我们不能将软件平台强加于用户,每一种平台和编程语言都有它存在的理由和擅长的领域,我们只有熟悉一种语言后,才能领悟它的本质,而不应该盲目地支持谁或反对谁。选择正确的技术平台后,还需要合理地、正确地使用,才能够最终完成一个高质量的软件产品。
1.1.2 软件开发的一般步骤
我觉得用一句话概括一个软件项目的开发过程非常贴切,那就是“没有一场战役是在毫无计划的前提下取得胜利的,也没有一场战役是完全按照计划取得胜利的。”这不是我说的,是拿破仑说的?。
我们再回过头看看软件开发中需要解决的两个问题:软件实现业务模型和正确使用开发技术。要解决这两个问题,或者说一个高质量软件的开发过程,可以分为如下几个方面:
● 获取正确的需求,并逐步完善和细化。在这一步骤中,不应该出现任何的开发技术方面的语言。获取正确的需求,我们首先必须找到正确的用户,用户必须是其行业或业务方面的专家(至少是非常熟悉),他们知道自己工作的本质和详细流程。作为开发人员,我们必须详细记录、分析和总结出用户方面真正的需求,而不是局限于某个用户喜欢什么颜色、习惯某种字体等这些与业务无关的问题上。
● 正确设计软件架构,并逐步细化设计。当用户的需求确定以后,我们还需要熟悉用户使用计算机的环境,如操作系统、软件平台或者是否拥有内部网络等方面的信息,这样就可以确定软件的运行平台和相关使用环境。然后,结合业务流程进行软件架构的设计,包括基本功能代码库、通用代码库、业务流程代码库、数据管理模式(数据库类型、数据格式设计……)等。
● 编写高质量的代码,坚持持续构建(Build)。高质量的代码一直是高质量软件的基础,本书的重点就在这一阶段。代码的编写包括了基本代码和代码架构两个部分,我们通过深入了解一种编程语言,可以将代码效能发挥到最大化,而使用了设计模式和持续改进,则有可以将整个软件架构的效能发挥到最大化。代码构建的目的就是逐步实现软件架构,从而最终创建真正的高质量的软件。
● 进行完整、有效的测试,并进行高质量的集成。对代码进行严格的编译、构建和测试是高质量代码的有效保证。使用最严格的编译选项、每日构建、单元测试、集成测试等方法都可以有效保证代码能够正确、有序地增长。当多个模块完成后,就可以将这些模块进行集成,并在真实或接近真实的使用环境中进行严格的测试。一个成熟、稳
定的软件就是在这一过程中逐渐成长起来的。
● 保留代码进化记录,可以使用项目文档、代码注释或版本管理系统等工具。一个软件的成长,汇集了大量开发人员的劳动成果。如果需要有效地维护软件,就必须有着明确的记录,可以通过项目文档、版本管理系统,以及在代码中的注释来记录代码的成长过程。这些方法必须是便于使用的,并让参与者能够有效使用的,而不是流于形式,成为软件开发人员额外的负担。
● 项目跟进与代码整理。开发一个软件后,通过代码的整理和重构,我们可以最大限度地对代码优化。请注意,优化并不是软件开发的首要任务,一个稳定的系统可能是用户最需要的,而优化则要建立在能够保证软件的正确性、稳定性和高性能的基础之上,或者说这三条原则也是代码优化的目的所在。
● 模式化相同或相似类型项目的开发,有效提高开发效率。当我们开发适用于某个行业或某种业务的软件后,就应该对业务流程与业务数据的处理有着深刻的认识,这也是我们不断学习和进步的机会。当我们再次进行相关行业软件开发的时候,确认自己能够成为行业中的专家,只有这样才能够快速地“组装”出用户所需的软件,而不是一切从零开始。最后,我们不应该只是一名编写代码的代码工人,而应是能够充分应用基础代码和软件架构来实现高质量和专业化软件的专家。当然,如果你的乐趣就在编写代码,乐在其中也是没有问题的。