`
liyiye
  • 浏览: 423935 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

大项目与小项目区别

阅读更多

在工作之前接触的大多是小项目,而工作之后接触的都是十几万行以上的大中型项目。有了一定经验之后,对于不同规模项目的设计过程也有了一点自己的想法。

    首先,项目的大小不是由代码规模决定的,项目的目标、受众的期望与数量、能产生的经济效益、管理层的重视程度、市场前景等才是项目规模评估的主要依据。然后进行人力、时间、预期目标的平衡。

    在这里我不想谈软件工程方面的问题,而是想说一说对不同规模软件采取怎样的设计思路。

    小型项目讲求的是快速开发,可以由最简单的,能满足用户最低需求的原型开始,然后经过一次或两次迭代(代码重构和功能添加)以完成目标系统。为了避免重构与代码复用的困难,在设计的初期,要尽量采取松散的架构,模块划分的粒度要尽量细一点。由于这种项目大多人员少、工期短,因此在原型阶段可以不做设计,让原型能够跑起来才是重点,而在迭代过程开始的时候,就需要做一些设计工作了,首先将原型的大体结构还原出来,这时可以进行几次项目组内的讨论,调整设计与讨论新功能以及有可能的新需求如何能够低成本的添加到原型中去,可能会加入几个中间层(或叫代理层),分离开功能与界面。这将产生一份初步的设计文档,包含系统架构、业务逻辑、静态结构(模块划分、模块关系、类图等)。在迭代的过程中补充详细设计文档,整理功能测试用例提交给测试人员(如果有的话),直到迭代完成,进行第一次系统测试。

    大中型项目则要在立项初期就要对项目的总体架构进行设计与评估,虽然仍然可以采用原型法,但原型的设计必须依照总体架构进行,这时的原型可能就已经是个庞然大物。系统的总体架构受很多因素的影响。例如用户数量达到一定规模,一些面向少量用户的框架和技术就必须抛弃;数据量达到一定规模,则要考虑数据存储与检索的策略;性能要求苛刻的平台上,则要将设计更加合理的数据结构和算法作为重点;若系统需要跨平台,那么就要考虑如何将操作系统和GUI抽象出来(这里不考虑使用跨平台GUI库的情况)。这样一来系统难免变得繁杂,因此,必须有一个大体的框架图以及若干个越来越细化的框架图,并在系统的设计过程中不断的修正。这个框架必须是优秀的,容易扩展的。在设计的过程中可以通过一些测试代码来验证设计,同时修正设计。在没有可借鉴的设计的情况下,设计迭代是必要的,但一定要在系统的整体框架内进行调整,不然就说明前期的总体框架有问题,项目的风险极大。在良好的、松散的设计框架下,编码的初期会异常的顺利,代码量激增,这时就要考虑系统集成时的风险。系统集成困难往往是模块间接口与通讯方式的设计不足造成的,这需要很多的经验,因此一定不要忽视例如通信协议、线程间通信、数据共享、硬件接口等等问题。大型项目的人员多工期长,大多情况是每人都进行自己模块的设计与编码,由于设计的松散,每人的模块都十分独立,这时定期的设计交流是必要的,在交流的过程中,检查自己的设计,站在整体的角度,在脑海中形成系统运行的大体流程,理解自己模块在其中扮演的角色非常重要,这能在更早的时候发现设计缺陷,并进行及时的修正。

    不管是大型项目还是小型项目,其实都需要投入相当的设计时间,对于程序员来说,对其的重视程度也应当是相当的,不然软件质量很难得到保证。

分享到:
评论

相关推荐

    软考 中级系统集成项目管理工程师

    1. **项目与运营的区别**: - 项目:一次性、目标导向、资源有限、独特成果。 - 运营:持续性、重复性、标准化流程、维持业务运行。 2. **事业环境因素与组织过程资产**: - 事业环境因素:不可控,如法规、市场...

    cpp-用C语言开发小型到大型项目的教程清单

    2. **函数与模块化编程**:随着项目规模的增大,函数的使用变得至关重要。学习如何设计和使用函数,以及如何通过头文件实现模块化编程,可以提高代码的可读性和可维护性。 3. **指针与内存管理**:C语言的精髓之一...

    Java项目使用小知识

    【Java项目使用小知识】 在Java开发中,项目实践中经常遇到一些常见的问题和陷阱,这里我们将探讨几个关键知识点,包括BeanUtils工具类的使用、SSH整合中的错误处理、动态项目报错以及Struts中Action的调用方法。 ...

    互联网+大学生创新创业项目训练计划项目申请书.docx

    项目特色与创新部分,需突出项目的独特性和创新点,展示其区别于其他项目的亮点。 项目经费使用计划则需详细列出资金分配,包括但不限于设备购置、材料费、人员培训、市场调研等各项开支,以确保资金的合理利用。 ...

    适合小白的Java练手项目.zip

    理解它们的区别并能正确声明和使用是Java编程的基础。 2. **控制结构**:包括条件语句(if-else、switch)和循环(for、while、do-while),这些是程序逻辑的核心,用于决定程序执行的顺序。 3. **函数**:Java中...

    php练手小项目

    【PHP练手小项目】是为初学者或即将毕业的学生准备的一系列PHP实践项目,旨在提升编程技能和项目经验。这些项目涵盖了基础到进阶的PHP应用,是理想的自我学习和毕业设计素材。由于项目使用GBK编码,可能会在非GBK...

    燕山大学计算机网络三级项目

    他们还将探讨IP地址分类(A、B、C、D、E类)以及IPv4与IPv6的区别。 通过这个项目,学生不仅能掌握IP数据报的解析技术,还能提升网络故障排查、网络安全分析和网络性能优化的能力。这将为他们未来在IT行业的职业...

    系统项目管理师 WORD版本

    "系统项目管理师 WORD版本" 本文档主要讲解了项目管理的基本概念、项目管理知识领域、项目管理需要的专业知识领域、项目环境理解、管理知识...子项目是指大项目中的小项目。子项目管理需要具备特殊的管理方法和技术。

    项目范围管理 wbs

    #### 二、项目范围与产品范围的区别 为了更好地理解项目范围管理的目的和重要性,我们需要区分两个概念:项目范围与产品范围。 - **项目范围**:指的是为实现项目目标而必须执行的工作量。它是通过对比项目管理...

    CMMI项目实施可交付文档(项目各阶段详细设计)

    基于目前发展广泛,作为项目管理里比较重要的一个认证体系,与ISO认证的区别,相信没有接触过的小伙伴,是“丈二和尚摸不着头脑”,既然它存在一定有他的道理。这里分享的是CMMI 项目实施可交付的文档。包括内容:...

    IT项目管理那些事儿

    1.5.1 大中小型项目管理的区别 1.5.2 系统架构 1.5.3 风险管理 1.5.4 沟通管理 1.5.5 时间、成本、范围和质量的平衡艺术 1.5.6 项目经理自身学习的加强 1.5.7 政治问题 1.6 民营企业IT项目管理之路 1.6.1 完善企业...

    北大青鸟S2阶段JSP小项目BBS

    【北大青鸟S2阶段JSP小项目BBS】是一个基于Web的论坛系统,主要针对北大青鸟S2阶段的学生设计,旨在提升他们的Java Web开发技能。该项目利用了Tomcat 6.0作为Web服务器,这是一个轻量级、高效的开源Java Servlet容器...

    软件项目管理题库

    3. 项目群与项目、项目与子项目之间的关系是包含与被包含的关系,项目群是一组相互关联的项目,子项目是大项目分解后的部分。 4. 软件项目管理包括项目初始、项目计划、项目执行控制和项目结束四个阶段。 【项目与...

    微信小程序-盒马鲜生源码及项目截图

    10. **项目组织与版本控制**:了解如何合理地组织小程序项目的目录结构,以及使用Git进行版本控制,对团队协作至关重要。 通过分析盒马鲜生的源码,开发者不仅可以学习到微信小程序的基本开发技巧,还能借鉴其在...

    《系统集成项目管理工程师》必备100题

    * 职能型组织:便于交流、责权清晰,缺点是职能利益优先于项目、部门间协调难度大 * 项目型组织:结构和目标单一、责权分明,缺点是管理成本高、资源配置效率低、不利于沟通、员工缺乏事业上的连续和保障 * 矩阵型...

    项目融资.pdf

    项目融资与传统融资的主要区别在于: 1. 有限追索或无追索权:在项目融资中,投资者的债务责任有限,而传统融资中,金融机构可以完全追索投资者的个人资产。 2. 风险分散和担保结构复杂:多个金融机构参与,通过风险...

    高中信息技术课程Python教学项目的设计——以两个新冠肺炎疫情项目学习为例.pdf

    在这份关于高中信息技术课程Python教学项目设计的文档中,主要介绍了如何通过两个与新冠肺炎疫情相关的项目来学习编程和疫情知识,旨在帮助学生了解新冠肺炎与普通感冒的区别,培养他们的信息意识、计算思维、数字化...

    java经典小项目集合

    Java经典小项目集合是一个专为初学者设计的学习资源,它涵盖了新手入门Java编程所需的基础知识。这个集合包含了一本或多本书籍,旨在帮助学习者通过实际项目实践来掌握Java语言的核心概念。以下是一些关键的知识点,...

    微信小程序 实例汇总 完整项目源代码

    这个实例汇总包含了一系列完整的项目源代码,旨在帮助开发者深入理解微信小程序的开发流程,掌握其核心技术和实战技巧。 1. 微信小程序架构 微信小程序基于JavaScript、WXML(Weixin Markup Language)和WXSS...

Global site tag (gtag.js) - Google Analytics