• 软件工程总结博客



    个人阅读作业

      • 对软件工程M1/M2做一个总结。
      • 我们在学期开始的时候布置了阅读作业,要大家快速阅读,同时提出自己的问题。 现在通过一个学期的学习和实践,请大家写一个博客:

        • 链接到以前提问题的博客
        • 请说明哪些问题现在自己已经清楚了,请阐明一下,是如何通过看书,实践,或者讨论弄清楚的。
        • 哪些问题还不明白,请分析
        • 产生了哪些新的问题,请提出
        • 同时我们还读了8篇软件工程相关的论文或博客,你回头再看看这些文章,有没有新的体会?
        • 软件工程这门学问有很多 “知识点”, 这门课强调 “做中学” - 在实践中学习知识点。
          请问你们在项目的 需求/设计/实现/测试/发布/维护 
        • 阶段(一共6 个阶段)中都学到了什么 “知识点”, 每个阶段只要说明一个知识点就可以。

    M1/M2总结


       一个学期的项目开发将要结束,虽然有效开发时间并没有很多,但是也确确实实让我们感受到了真实的项目团队开发过程,Alpha和Beta阶段迭代,一步步深入总结完善,着实收获丰富。

      我们团队的项目选择的是北航MOOC网站的手机客户端,首先开发的是Android版本,这个本来上一届开发过的项目,原本计划是在原来的基础上继续深入开发完善,但是因为具体文档不完善,相关代码也不好查找,于是我们决定重写这个项目代码。我们在M1阶段开始时就分工好每个人负责的模块,所以在正式开发的时候并没有发生代码冲突的情况,最大的问题就是团队一共6个人,有Android开发经验的有3人,一点经验都没有的也有3人,很不幸,我就是后者之一,于是开始一边学一边写。但是便利之处是因为是团队合作,所以开发的时候有什么问题找到大神们都可以直接解决^^。

      首先,经历过一个学期的开发,我觉得最大的经验教训就是——服务器问题必须要靠谱……因为BUAAMOOC的服务器是学校网站提供的接口,似乎所有大学的网站都不怎么好使,所以我们的开发进度也经常随着服务器的崩溃而崩溃……而且学校只提供测试的接口……所以我们的软件必须要在buaa-wifi下使用,而且登录的账号密码必须是北航mooc内网注册过的账号,所以整个开发过程不能更悲伤……

      但是从M1/M2的开发迭代过程我们也学到很多东西。M1阶段偏重在学习,M2阶段偏重在完善。而且团队合作很重要,每个人都要工作努力才能共同推进项目开发进程,所以一个人拖延都是很浪费时间的。其次,因为开发遇到的问题应该及时提出来,这样大家可以一起帮忙解决,也能够提出自己的想法。我负责的是个人信息页面的设计,包括头像,用户名,个人信息设置,APP设置,我的下载等等功能完善。在这一个多月的合作开发中,团队的六个人虽然也会有一些小问题上的争执,但是总而言之我们的配合还是很默契的。最重要的首先是Android的编程能力,从一无所知到看到自己参与开发的软件出现在自己的手机上,这种惊喜感还是存在的。同时团队合作的能力也是有所提高的。其实就个人而言,我更喜欢一个人写代码,不太擅长和别人沟通,也不太喜欢自己负责的工作和别人都有关系,知道这并不是一件好事情,所以在这一个月的磨砺中也是习惯并且喜欢上这种方式。因为有问题的时候去询问团队的人要比自己一个人默默搜索琢磨可能还是毫无益处好很多。当然我们也是遇到很多的问题。最重要也是最阻碍我们的开发阶段的一个问题就是和MOOC网站的开发人员沟通不便,导致我们拿到服务器接口已经是开始的第三周了。而且目前还只是内网测试的服务器接口,推广是毫无意义的。所以也希望学弟学妹们下学期如果继续开发的话能够解决这个问题,更好的推广北航mooc。


    问题/收获总结


    提问博客:http://www.cnblogs.com/yufisherman/p/4825252.html

    【2、个人疑问:

      (1)我们在做一个软件对软件的质量应该有多高的要求?当我们的代码的规模很大时基本上不可能做到没有bug。很多软件在还未修复调试好的时候就发布使用,虽然基本功能都能完成,但是还是有很多bug,最后会导致修改一些bug成本太大,或者造成的影响太大。但是我们如果一味追求高质量,一直压着修复调试发布太晚也会造成不少的损失。我们应该如何把握好这之前的度,能够较为和平的维持双方关系?

      (2)在团队项目中,工作量如何分配?如果是一个专业成熟的团队,每个人技术都足够优秀,完全可以考虑小组成员平均分配,或者按照个人能力技术问题按比例分工。但是对于我们现在分工的团队,在我们小组分工的时候完全把握不到这个度,甚至都不清楚都需要做什么工作,个人能力的认知上可能也有缺陷。

      (3)关于bug与测试。从最开始接触计算机编程我们就明白不可能有人的程序编的毫无缺陷,bug是一直都会有的。但是怎么判断这些bug的重要程度?怎么确定对某个bug的修改不会影响其他功能?怎么分析这个bug对于整个程序的影响?有没有一种比单元测试更简单快捷的方式来保证所有单元的正确性?即使我们经过了足够的测试,还是不能保证在实际运行中不会出错,尤其是当开发面向对象的网站或者软件时候,因为使用对象的多样性会遇到很多问题 。那么在维护阶段出现bug有没有比打补丁更规范适用的方法?

      (4)我们除了写程序也要学会分析程序,在很多时候分析程序性能要比写程序更重要,书里面也很多介绍了代码模块的执行效率,着重优化耗时长内存大的部分,也因为我们需要优化一些基础代码然后有了数据结构和算法,但是很多时候你不会第一时间就想到一个合适的算法适合这个功能,如何根据测试结果思考一个合适的算法呢?

      (5)书中有一段对话很有意义,大概讲一个新人进入公司看到前辈写的一些程序觉得很垃圾想要推到重写,这时候一个老员工告诉他他现在看到的这些程序也是前辈刚进入公司的时候觉得程序很不好改写的结果,反而还没有原来的好用。我们在前人的基础上去使用这些软件但是不代表我们觉得他不好我们就有能力写的比他好,所以该如何正确对待别人的程序呢?可能有你觉得不好的地方,但是肯定也有你要学习的地方。】

    已解决问题:

    (1)第一个问题:

    实际上因为我们的开发项目目前受限制很大(buaa-wifi环境,内网注册同学),所以即使发布在360这些平台上,有效用户也不会很多。但是你也不能就这样断定说我们的项目完成度太差。因为我们的功能是完善的,只是前提条件很多,而且这个前提条件从某种程度上也不是我们的锅,毕竟北航mooc网站肯提供给我们的服务器接口只有这个,我们也只能这样先做着。M1阶段我们完成了基本的登录、课程查看、视频在线观看、个人信息等等部分的功能,基本上具备发布条件,虽然在360这些平台上发布需要北航授权,但是我们已经可以推广给学弟学妹还有身边的同学使用了。M2阶段我们完成了视频下载的功能,还有课程学习进度功能,以及完善了M1其他功能。但是这些对于M1基本功能的使用并没有很大的影响。

    (2)第二个问题:
    所以我们的课程安排是每个团队有两个发布阶段,团队成员通过 “工作+理论学习+反思” 在每一个阶段成长。 第二个阶段可以尝试新的角色。
    在同学们的这个阶段,每个人都应该写代码,看别人的代码。(感谢问题回答——来自邹欣老师)

    (3)关于你的第三个问题中怎么判断bug的重要程度。
    举个例子,比如你们现在开发了一款手机APP面向中国用户,突然有人说这个软件阿拉伯人没法用啊,因为他们文字的排版是相反的啊,你说这个bug重要吗?我认为不重要,因为你们的定位是中国用户;另一个人说这个软件非常耗电啊,手机一打开电量蹭蹭的往下掉,你说这个bug重要吗?我觉得很重要,因为耗电一直是手机的一个大问题,用户很有可能因为这个电量问题而卸载你们的APP。(感谢问题回答——来自助教学长)

     (5)第五个问题:

    就跟我们的BUAAMOOC项目开发的时候发生的情况一样,最开始看不上学长们写的各种UI,页面跳转,视频播放等等的功能,推倒重做,所以我觉得这是很正常发生的情况,如果下一届的学弟学妹开发我们这个项目,也发现各种他们看不上的设计肯定也会推倒重做。但是这并不是一个恶性循环,因为我们从各个方面把我们的版本和上一个版本进行了对比,不能说做的最好,但是我们是有很大的进步的。因为我们也在某些功能上借鉴了他们的代码。所以我觉得对待别人的代码要有一颗尊敬的心。你可以觉得别人的代码有不足,但是你也要看到别人的代码的优点和亮点,取之精华,弃之糟粕。

    未解决问题:

     (4)第四个问题:

    因为我在这个开发过程中负责的部分并没有涉及到算法问题,所以如何评价一个算法的有效性我并没有尝试过。

    新发现问题:

    (1)团队开发总是会遇到问题,而且团队贡献分的分配总是最纠结的问题。因为分组时候大家都是熟悉的人凑在一起,而且有的时候很难去判断一个工作的难易程度,完成程度,所以团队贡献比例应该怎么估计呢?

    (2)在任务预计的时候我们团队曾经发生争执,我认为估计任务完成时间更合理,唐彬认为估计任务难度更合理。我的理由是每个人的评价标准不一样,而且大家对于开发也不是都是大神,所以我认为很难的你们认为不难,我认为不难的你们说有难度,不好协调。他们给出的理由是你不可能在你预计的时间里一直写这个任务,因为现在时间可变性很大,你不知道什么时候又突然冒出来一件的其他事情,所以不好估计。

    (3)我们团队的项目在两个阶段都没有很完整的做单元测试,直接安装软件进行场景测试,记录使用bug统一修复。单元测试一定要有吗?

    体会/感想:

    原感想体会:http://www.cnblogs.com/yufisherman/p/4948392.html

    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

    我们的团队开发就是每个人负责一个模块的功能,比如我的个人信息,唐彬的课程信息,闫昊的视频播放和学习进度,史烨轩的下载,金哉仁的UI设计等等,大家都是按照各自的项目进行开发推进进度。

    知识点:

    需求/设计/实现/测试/发布/维护 

    需求:需求分析应该从上而下的分析,从全面的用户需要的功能到细致的每个功能的完善需要哪些功能配合。

    设计:任务设计时应该从下而上,每一个细致的任务分析之后然后规划为自己负责的大模块。

    实现:实现阶段要做好成员配合,需要交互的部分要提前沟通。

    测试:测试要从多方面入手,除了单元测试,还需要场景模拟,小规模压力测试等等。

    发布:发布学校相关软件必须获得学校的授权………………

    维护:维护阶段要结合用户反馈信息进行总结,并且完善。

  • 相关阅读:
    重启远程windows计算机
    web.xml文件的作用及基本配置
    DB2编码问题而导致连接不上上数据库
    合理使用表空间
    自动做题
    怎么给二年级小学生讲鸡兔同笼问题
    DB2 性能分析工具介绍:Event Monitor 篇(摘自IBM官方)
    delphi 对应 c# 的一些函数及类型的转换方法(从网络摘录)
    DB2 基础: 使用重定向恢复克隆 DB2 数据库(部分从IBM官方网站引用)
    response.setContentType()的作用及MIME参数详解
  • 原文地址:https://www.cnblogs.com/yufisherman/p/5118193.html
Copyright © 2020-2023  润新知