软件生命周期各阶段
1. 软件开发最初的工作应是问题定义,也就是确定要求解决的问题是什么;
2. 然后要进行可行性研究,决定该问题是否存在一个可行的解决办法;
3. 接下来应该进行需求分析,也就是深入具体地了解用户的要求,在所要开发的系统(不妨称之为目标系统)必须做什么这个问题上和用户取得完全一致的看法;
4. 经过上述软件定义时期的准备工作才能进入开发时期,而在开发时期首先需要对软件进行设计(通常又分为概要设计和详细设计两个阶段);
5. 然后才能进入编写程序的阶段;
6. 程序编写完之后还必须经过大量的
测试工作(需要的工作量通常占软件开发全部工作量的40%~50%)才能最终交付使用。
所以,编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,
编写程序所需的工作量只占软件开发全部工作量的10%~20%。
软件包括程序、文档和数据等成分!
1. 程序是能够完成预定功能和性能的可执行的指令序列;
2. 数据是使程序能够适当地处理信息的数据结构;
3. 文档是
开发、使用和维护程序所需要的图文资料。
程序只是完整的软件产品的一个组成部分,在上述软件生命周期的每个阶段都要得出最终产品的一个或几个组成部分(这些组成部分通常以文档资料的形式存在)。也就是说,一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。必须清除只重视程序而忽视软件配置其余成分的糊涂观念。作好软件定义时期的工作,是降低软件成本提高软件质量的关键。如果软件开发人员在定义时期没有正确全面地理解用户需求,直到测试阶段或软件交付使用后才发现“已完成的”软件不完全符合用户的需要,这时再修改就为时已晚了。
轻视维护是一个最大的错误!
通过上面的论述不难认识到,轻视维护是一个最大的错误。许多软件产品的使用寿命长达10年甚至20年,在这样漫长的时期中不仅必须改正使用过程中发现的每一个潜伏的错误,而且当环境变化时(例如硬件或系统软件更新换代)还必须相应地修改软件以适应新的环境,特别是必须经常改进或扩充原来的软件以满足用户不断变化的需要。所有这些改动都属于维护工作,而且是在软件已经完成之后进行的,因此维护是极端艰巨复杂的工作,需要花费很大代价。统计数据表明,实际上用于软件维护的费用占软件总费用的55%~70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。
软件工程支撑环境
应该开发和使用更好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具可以“放大”人类的智力。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的全过程,则称为软件工程支撑环境。
软件工程意识
更重要的是,必须充分认识到
软件开发不是某种个体劳动的神秘技巧,而
应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。
如何解决软件危机
总之,为了解决软件危机,既要有
技术措施(方法和工具),又要有必要的
组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的。
实战经验
需求及架构设计(在清楚整个系统的功能和性能等的前提下,也就是熟悉此类需求,或者之前有类似项目或产品经验)
1. 商务、技术支持和用户交流,得到原始需求
2. 开发人员根据原始需求,把现有各市场产品、社区开源软件的各种特性(功能、性能、可靠性、稳定性、符合性、易用性、兼容性、安全性、可维护性、可扩展性)做一下对比
3. 比较现有各市场产品、社区开源软件的架构特性(实际使用的各种技术和特性等、是否同业界技术趋势吻合、可扩展性、灵活性、兼容性、实现的方便性、操作系统的支撑性)
4. 给出本需求的架构设计(包括自己认为可行和不可行的架构,自己的认知有限,所以才需要评审)及各架构的特性对比
5. 开发人员组织各部门(本部门主管、上以部门主管、产品主管、产品经理、产品负责人、测试经理、测试负责人、技术支持、商务)进行架构初审,整理领导和各部门同事的问题和建立,以会议纪要的方式 email 参见初审的所有人员,并在 email 中说明对应问题的责任人以及 deadline。
6. 进行调研后 email 所有人员,答复所有问题,所有人反馈后,准备架构复审。(或者直接召开复审会议,据具体情况而定)