从需求分析看软件开发的挑战

从需求分析看软件开发的挑战

  我们小组的题目是《基于订单的家庭工厂协作系统》,系统目的是帮助一组家庭式工厂通过本系统进行协同配合,共同生产和组装,完成最终订单。项目要求实现基于网页或手机端的系统。就课程当前几个关键的时间任务节点,我想谈一谈我的感悟。

领域分析

  在需求分析之前老师首先让我们进行了领域分析,并完成一个领域分析报告。这个任务是本科时开发系统从来没有经历过的,可以说是第一次进行领域分析的调查。老师的目的是通过领域分析让我们对我们要完成的系统的业务有一个深入的了解,一开始我们并没有意识到领域分析的重要性,觉得和需求分析没有什么区别。但是随着项目的进行,我才意识到领域分析的重要性,因为在项目的说明中只是粗略的说到了系统应该具备的关键功能,需求并不是很详细,因此需要通过领域分析来认识到家庭式工厂是什么,它们应该怎么协作,这对后期我们系统的任务调度功能来说是至关重要的。

  因此为了更好的进行本系统的领域分析,我们小组进行了线下的的讨论会,我们小组五个人有四个人在同一个寝室,因此进行线下讨论还是比较方便的,这相对于其他小组来说可能是个优势把。在讨论的过程中,大家的分歧还是挺大的,经过讨论最后大家也是统一了系统在“协作”这个概念上的认识,但是尽管如此,现在看来当初的领域分析也是不够详尽的,尤其是在任务调度这一块,将商品拆解为零件之后分配给各个工厂进行加工,它们之间的优先级如何,最后装配的顺序又是如何确定,这些问题在我们进行需求分析时又暴露了出来,这也是我们小组当前着重要解决的问题。

第一次需求分析

  第一次需求分析之前我们小组准备了系统的用例图、类图以及几个关键功能的时序图和状态图,但遗憾的是这次需求分析由于时间的问题,并没有轮到我们小组上去讲,因此没有得到老师的反馈,因此我们没有及时意识到我们小组在需求中的问题。 同时我们小组的分工上也出现了老师后来提到的问题——粗略地按图来划分工作,这导致了每个人对系统的整体把握不够,虽然绘图之前我们进行了讨论,绘图之后也进行了线下会议,大家一起来探讨每个图设计上的问题。但是,自己没有亲手参与图的绘制,那对功能以及模块之间联系地认识也只是浅显地。就拿我自己来说,我负责画时序图,但是画好时序图的前提就是画好用例图和类图,尽管看了小组其他成员画的用例图和类图,但是各个用例的关系以及类之间的关系我真的理解到位了吗?扪心自问确实是没有的,如果自己对用例图和类图没有足够深入的理解,那么时序图画出来后肯定会是存在问题的。很遗憾第一次需求分析时没有及时认识到这个问题,也导致在需求评审时我们的展示并不如人意。

需求评审

  在进行需求评审前我们小组组织了线下会议,对需求进行了第二轮的讨论,线下讨论的作用是显而易见的,大家会互相提出自己的意见从而取长补短最终达成一致。第二轮需求分析的产出物也是明确的,那就是对各个功能进行了更详尽的分析,并对数据库进行了设计,这个过程对我个人而言收获是很大的,我对系统的参与者、各个角色的功能都有了深入了解。比如,我们系统的角色总共有三种,分为客户、总经理和家庭工厂负责人,客户这个角色的功能就是类似普通淘宝用户一样,可以查看本系统目前有的商品,并进行下单。家庭工厂负责人负责各个家庭工厂的业务,对于这个角色的功能,大家之间的分歧主要在于系统如何把握各个家庭工厂之间的生产进度,最终我们达成了一致——每个家庭工厂属于小作坊,不可能有完备的生产管理的硬件,因此每个工厂每天的进度都是由家庭工厂负责人进行汇报的。系统中最重要的角色就是总经理,大家的分歧在于总经理究竟要不要对任务的分配进行干预,有的同学觉得任务调度完全由调度模块负责,而我认为所有任务的分配必须经过总经理的同意,总经理可以对系统分配的任务进行调整,这也更符合实际的生活。最后经过激烈的讨论决定采用总经理负责的这种模式。
  需求评审中老师对我们组的系统指出了许多不足,首先是分工有问题——不能简单的面向产出物进行分工,而是每个人都要参与到整个系统的分析中来,从总体上对系统进行把握,再从模块上进行分工,如此才能对各模块功能的细节有更好的实现;其次是比如非功能需求,我们小组的非功能需求明显就是借鉴了其他的非功能需求,并没有深入考虑到我们这个系统中的非功能需求是什么,在哪里需要限制,限制的规模等;最后就是我们系统没有体现出协作这个概念来,老师指出了我们订单分配这个功能——到底各个家庭工厂如何分配,之间的优先级如何,怎么样才能保证最后大家的协作能完成任务。这些我们都没有考虑好,因此如果不及时完善对需求的分析,最后我们的系统可能就会变成一个简单的信息系统,没有体现出协作的概念,这也就失去了这个项目的意义了。

总结

  在上面的分析中我指出了我们小组目前存在的一些问题,这也是我们会继续改进的地方。总的来说,通过大半个学期的学习,我还是收获了很多软件开发的知识,比如团队协作的重要性、领域分析的重要性 ,最重要的就是需求分析——必须立足整个系统,先从全局进行把握,再逐个分解,这样才能设计出好的系统。接下来我们会对系统展开编码工作,尤其是老师提到的任务分配这个功能,我们会再次进行线下会议,明确各个工厂之间应该如何协作。

posted @ 2020-12-12 13:18  SY2006238王泽  阅读(93)  评论(1编辑  收藏  举报