软件工程 -开发流程 随笔一

来源:互联网 发布:梦龙软件w8 编辑:程序博客网 时间:2024/06/02 09:01

软件工程的目标: 生产正确,可用及具有经济效益的产品

  1. 正确性: 指软件产品达到预期功能的程度
  2. 可用性: 指软件产品基本结构,实现,文档为用户可用的程度
  3. 具有经济效益:指软件开发运行的整个开销满足用户要求的程度

软件工程活动:

是指生产一个最终满足客户要求且达到工程目标的软件产品所需要的步骤。

  1. 问题定义: 明确要解决的问题,即用户要什么?该阶段是需求采集,确认并和用户达成共识,得到基础的需求文档
  2. 可行性研究: 主要回答所有问题,同时对每一个问题提出可行性的解决办法,在较高的层次上进行分析和设计,要简短,主要是问题是否值得去解决以及是否有可行的解决办法(基于当前的人员配置,技术能力,技术方向等等),并得到一个高层次上的逻辑模型。系统分析师在该阶段进行成本和效益分析,判断是否值得去做该项目的阶段。
  3. 需求分析: 确定为解决该问题,所开发出来的系统应该具备哪些功能,可用数据流图,数据字典和简要的一些算法来描述。要求准群完整的体现客户的要求。一旦确认,必须提供具体的系统逻辑模型,经过用户确认后,才能进入下一个阶段。(具体指在提出一个逻辑模型后,同时经过客户的响应审阅和讨论,正式发布的需求。同时在项目中,以此为准,锁定当前的范围和需求,一旦更改,则需要对工时和人员进行重新评估,影响较大!)
  4. 设计:分为总体设计和详细设计
    a. 总体设计: 即从技术角度,提出多种解决方案,供客户确认,通常书上说3种
        1)低成本的解决方案:即系统完成最必要的工作,不多做一点额外的工作
        2)中等成本的解决方案:即系统不仅能完成预定任务,同时能根据个人经验增加一些附加功能,且在实践中证明是有价值的,有意义的。
        3) 高成本的解决方案: 即具有用户可能希望的所有的功能和特点。
    系统分析人员,分析每个成本和效益,并提供一个较好的方案以供用户选择。
    这个定义和分类是从成本的角度讲,在一定程度上也涵盖了技术的角度,但从更实际,更贴切开发的角度讲也可以按照如下分类进行划分:
        a) 低技术含量的解决方案: 即采用一些基础技术,不使用一些复杂框架进行设计和开发,达到客户要求,无额外工作。
        b) 中的技术含量的解决方案: 即采用一些相对流行的技术和框架,现有一定的资源和技术沉淀的,在性能和实现方式上有所更改和优化的方案,可以达到客户要求,并因为方案的选择,附带一些用户要求之外的功能。
        c) 高技术含量的解决方案: 即采用现阶段最流行的技术能解决当前客户要求,客户需求涵盖较完善的方案。

    打个比方说:客户要求一个站点,有报表功能
        --〉低技术含量的解决方案:完全用asp.net实现整个站点,同时用一些grid view来实现一些报表功能。
              对开发人员素质要求较低,在人员成本上可以得到有效控制,技术上难度小,技术问题发生率小,风险较小,易实现。
         --〉中等技术含量的解决方案: asp.net  + SSRS, 基本功能方面同上,但是在报表服务上进行了有效的提升,增加了客户在报表方面的体验,同时附带了一些SSRS的相应功能。
         --〉高等技术含量的解决方案:SharePoint + BI,同样是站点,应用了SharePoint和BI两种技术结合在用户体验上有极大的提高,客户想不到的都覆盖到,报表功能上提升明显。
    但是显而易见,最终仍然要归纳到成本上,所以我们的出发点和角度不同,但是最终的目的还是同一个。当客户考虑好自己的成品和他究竟想要什么的时候,我们就进入下一个阶段。

    b. 详细设计: 即把解决方案具体化,也就是具体的实现办法。记住是设计,而不是编写。在详细设计文档中,我觉得这个部分应该是我们的技术文档编写部分,在这个部分,我们主要关注一些业务跳转和关键逻辑的实现,而非一些细致的具体的问题处理。
  5. 实现: 关键人物就是问题的具体解决,核心功能快的编写,即写出正确的,容易理解和维护的代码。
  6. 确认: 也就是测试过程,验证我们实现的功能达到了预定效果满足了客户需求。
    分成集成测试和验收测试。集成测试指经过单元测试后,系统进行统一集成测试。验收测试指我们发布到一个环境,交付用户进行验收,在有些情况下,需要给用户提供相应的用户操作手册(如果用户不是很熟悉整个需求和流程。不是提需求的人。)
  7. 支持:就是后期的维护和升级,使系统能够持久的满足用户的需要,通常有4类:
    a. 改正性维护:改bug
    b. 适应性维护:即修改软件以适应环境的变化,举个例子:IE兼容性问题
    c. 完善性维护: 软件的需求改进和扩展
    d. 预防性维护: 修改软件为将来的维护活动预先作准备,举个例子: 需求阶段,对性能考虑不够,导致后续数据量过大,这样就需要做一些调整和维护或是对硬件方面做优化等等。
原创粉丝点击