个人学期总结

一、对第一次实验拟定的五个问题的回答如下:

 1.如何设计出优良的软件设计流程以适应需求,并且能够拥有较长的生命周期和比较好的稳定性?

  答:要想做到一个软件拥有较长的生命周期和较好的稳定性则应该从以下几个方面做起:

1>、问题的定义及规划(可行性分析报告和软件开发计划): 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。 
2>、需求分析(需求分析说明书和初步的用户手册): 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。 
3>、软件设计(概要设计、详细设计): 此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。 
4>、程序编码(提交源程序及清单): 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。 
5>、软件测试(提交软件维护测试报告): 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试(白盒)、集成测试(黑盒,功能测试、强度性能测试)以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 
6>、运行维护(提交软件维护报告): 软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。 

2.在团队开发软件时如何能保障单元测试能够较为全面的进行下去?如何测试才算为全面周密的单元测试?

  答:单元测试的重要性:1.运行单元测试是为了保证代码的行为和我们期望的结果一致。2.写单元测试会增加代码工作量,同时也节约了bug修复时间。3.如果没有写单元测试,没有发现bug的情况下,程序在测试人员测试的时候才发现问题或者在线上环境(正式环境)用户使用才发现问题,在去修复bug。开发会花大量的精力去修复bug和走部署流程,测试也会花大量的时间去做了重复的测试。很不划算。4. 在线上某些场景下bug导致大量的数据丢失,需要花很大精力去修复数据,或者根本没办修复数据导致严重的后果。

单元测试与集成测试区别? 测试粒度不同: 单元测试是程序最小的单元,而集成测试是一个功能,一组功能或者整个系统上。单元测试:程序的最小单元。 集成测试:也叫组装测试或联合测试,是在单元测试的基础上,把所有模块按系统设计要求组装成功能或者系统,实际中程序单元,测试通过了,不能保证程序组装也能正常的工作,程序某些在局部反应不出问题,很有可能在全局或者特殊场景下暴露出问题。单元测试和集成测试很容易混为一谈:因为单元测试和集成测试可以试用相同的工具和框架编写。先写代码还是先写单元测试? 编码前,要先写测试,很多没有写过单元测试的朋友会想,代码都没有,连测试的对象都没有,我怎么写单元测试?

  1. 我们可以通过先话流程图,写伪代码或者建模来解决这个问题,这样让我们站在用户的角色去开发,尽早的发现问题

    2. 避免我们开发完了,某个功能模块遗漏了的情况。

    3. 这样开发出来的程序扩展性、维护性很容易理解。

 3.在敏捷流程这一模块的学习中,定义好任务是什么?如何在计划中体现出依赖关系?

  答:1.尽早并持续地交付有价值的软件以满足顾客需求;敏捷流程欢迎需求的变化,并利用这种变化来提高用户的竞争优势;2.经常发布可用的软件,发布间隔可以从几周到几个月,能短则短;3.业务人员和开发人员在项目开发过程中应该每天共同工作;4.以有进取心的人为项目核心,充分支持信任他们;5.无论团队内外,面对面的交流始终是最有效的沟通方式;6.可用的软件是衡量项目进展的主要指标;7敏捷流程应能保持可持续的发展。领导、团队和用户应该能按照目前的步调持续合作下去;8.只有不断关注技术和设计,才能越来越敏捷;9.保持简明—尽可能简化工作量的技艺—极为重要;10只有能自我管理的团队才能创造优秀的架构、需求和设计,时时总结如何提高团队效率,并付诸行动。

   一个函数只做一件事。我看到过的一些OI程序似乎在“吝啬”地使用函数。也就是说持“能少一个函数就少一个函数”的态度。然而为了减少耦合,我们应该把庞大的、笨重的东西拆成小部件,让每一个小部件和尽量少的外部的东西耦合。另外,单个函数的行数多了会导致出错这也是广泛的共识。2.不要过早在意细节优化。我知道,有些OI程序中有很巧妙的东西,比如说在排序的同时算前缀和之类。可是,真的需要这样做吗?为了少写几次for或者是为了还不清楚的“效率”?效率不是想当然的东西,只有Profile能告诉你真正的效率如何瓶颈在哪里。先用最清楚的逻辑描述出程序的框架,如果真的有时间效率问题那一般来说是算法复杂度的问题,在程序编好且正确之后再考虑细节优化吧。这是耦合度增加的温床。3.减少全局变量的数量。全局变量是耦合的多发地。在软件的开发过程中甚至有些专门对付它们的模式,例如“Singleton”。相信我,你能减少它们。在这一点上我不想说太多。

 4.软件需求目标与用户体验之间的关系是什么?是否完成了软件需求目标就是达到了好的用户体验?

  答:软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。用户体验(User Experience,简称UE/UX)是用户在使用产品过程中建立起来的一种纯主观感受。但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计实验来认识到。软件设计中要注意业务模块之间搭配的灵活性,不能一味要求用户的操作方式。用户在使用计算机及软件时,随着个人习惯和关注点不同,使用方式也各种各样。作者曾经开发过一套工程方面的预算软件。有些用户在使用的时候关注的是最后的造价.还有螳用户关注的是材料设备的使用情况,由于关注重心不同,在使用的时候操作步骤也不完全一致。在开发的前期因为没有预料到这些,因此走了不少路。所以我们在设计软件时,就要注意为用户提供多种操作方式以供选择。

 5.要想做一名优秀的软件工程师如何权衡与他人工作交往?

  答:第一自信:万事开头难.有了第一次,就有下一次.那么第一次的信心从那来呢? 那应该保持一个平常的心,来面对挑战.要相信自己能够做的到.而且一定可以做的到. 第二自学能力:在当今的软件业,技术不断更新,而老的思想,老的逻辑等等, 也不断被新的思想,新的逻辑所代替,所以在这中压力之下。不可能不迫使自己学习更新的技术来提高 自己的能力.使自己学习到更多的知识,经验,技能和创造性思维.这样才不会落后旁人,落后于社会. 第三责任心:责任心.不仅对于软件,而是对于任何一件事,都得有责任心.敢做敢当,是做为男人的基本 素质。 第四沟通:在软件这行沟通主要对两方面。第一点是对客户:我们做的东西都是回绕客户而做的. 通过深入的沟通和交流,能够了解到客户想要什么,不要什么.而不会使我们做的东西另客户觉得不满意,从而得到客户的信任 第一点是对团队成员:通过深入的沟通和交流,产生一种团队和睦精神,能够最大限度地避免完成上面交下来的任务. 第五团队合作精神:任何一个团队,组织都是由众多人组成的协作系统。团队中人与人和睦相处, 相互信任的关系。能够避免成员之间不团结等事情的发生.为此。我们应该真正做到尊敬他人,关心他人, 理解他人正确处理好领导.同事之间的关系.形成和谐的人际关系.是整个团队开发能力,效率不断提高. 第六动手能力:在牛耳的学习过程,学校主要培养我们的动手能力和实践操作能力,我们就应该利用这一点来不断提高自己的动手能力. 在以后的工作当中,我们还可以通过自学能力,来提高自己的理论知识.从而达到更高的水平. 第七细心:细心一般是女孩子的代名词.但是学软件的毕竟还是男的比女的较多.不可能编程序时做个女生做在你旁边吧. 那样也不现实.所以我们要学会细心,才能预防出现N多的BUG,才能编写更高效的代码,还可以给你人生带来意想不到的改变. 第八上进心:应不断认识自我,认识外界日新月异的变化,不断给予自己新的奋斗目标。要勇于挑战过去的成功,不被眼前的一点利益所诱惑。努力的发展自我,超越自我。

新的问题:我们本次团队项目是以快速原型方法进行的,但是在众多的软件工程方法里选择一种适合未来项目的方法呢?

 

二、课程的实践总结和自身的提升:

 1、统计你在软工课程实践中,完成了多少行的代码;

完成了大约一万五千左右行代码。

 2、软工实践的各次作业分别花了多少时间?累计花了多少个小时在软工实践上?平均每周花多少个小时?(做一个列表)

软工作业

花费时间

平均每周花费时间

实验一 软件工程准备

 10

7

实验二 软件工程个人项目

 8

7

实验三 软件工程结对项目

 8

7

实验四 基于原型的软件需求获取

 10

 7

实验五 软件研发团队组建

 5

 7

实验六 团队项目评审与团队项目选题报告

 6

 7

实验七 团队作业3—团队项目的原型设计与开发

 8

 7

实验八 团队作业4—基于原型的团队项目需求调研与分析

 10

 7

实验九 团队作业5—团队项目需求改进与系统设计

 9

 7

实验十 团队作业6—团队项目系统设计改进与详细设计

 10

 7

实验十一  团队作业7—团队项目设计完善&编码测试

 8

 7

实验十二  实验十二 团队作业8—团队项目用户验收评审

9

 7

 3、哪一次作业让你印象最深刻?为什么?

       软件工程作业中团队结对编程使我印象最深刻,这是首次进行团队结对编程尝试,在做每一次的任务之前都会通过讨论将未解决的问题一一解决,换做以前会自己一个人去想问题的解决方式,比较好费时间,但是团队结对编程可以迅速地找到问题本质所在,并且大家能够想到很多可行性的办法和解决方案,切实体会到结对编程提高了写代码的效率,节省了时间。

 4、学习和使用的新软件;

      visio、IntelliJ IDEA

 5、学习和使用的新工具;

       process on、墨刀、石墨文档、mockplus

 6、学习和掌握的新语言、新平台;

       GitHub、博客园

 7、学习和掌握的新方法;

       快速原型方法、白盒测试与黑盒测试、面向对象设计方法

 8、其他方面的提升。

      我在软件工程这门课程发现对编程能力、文档书写能力、团队合作能力、逻辑思维能力有很大帮助。

 三、你认为目前的课程有哪些问题,你有什么更好的建议:

 1、你认为本门课程需要在哪里进行改进,具体措施有哪些,包括:时间进度安排,项目难度等均可;

       翻转课堂确实让我们有很多收获,学习到了很多知识。一学期下来,发现其实老师的时间安排是合理的,这样就可以全面地体会软件工程基本的方法步骤,至少做完理论部分理解很深刻,对我们实践能力也有很大的提升。就是感觉时间稍微有点紧凑,感觉总是时间不够用。

 2、你认为助教/老师哪里做的不足,哪里限制太多等;

      自我感觉无论是助教还是老师,这一学期对我们都很负责任,做得挺好的,都做了应该做得。

 3、你认为每次项目的评分标准存在哪些问题,你认为的合理评分准则是怎样的(个人/结对/团队算三个)

      评分标准这个问题我们班曾经有过讨论,因为每个助教自己的评分标准多多少少会有点差异,后来老师的解决方法是让每个助教每次评不同的人,尽量做到公平。但是老师们尽量都做到了公平客观。

4、在结对项目中你是否真正体会到了结对的好处,是否真正严格进行了结对编程,双方的工作量是否相同;

   结对编程中体会到了结对编程的好处,任务量分下去,每个人只需要负责自己需要负责的那一部分即可,能够腾出更多的时间去完善自己的负责的那一部分代码。在结对编程的时候,双方的工作量是不一样的。

 5、你的团队项目是否成功,如果重来一次你是否还会选择这个团队,为什么成功/失败;

     我的团队项目是成功的,项目顺利地实现了预期效果,内部成员能够积极完成任务,氛围融洽,有疑惑的地方也会积极讨论,每个人都有不同的收获。如果重来一次我还会选择这支团队。

 6、总结一下你们团队在做项目时大家的时间安排情况。

    每个成员在不同的阶段实践安排不一样,当某一阶段负责该部分内容的成员会占用较多时间,其他成员相对而言较少。一般做项目的时间就是除了上课时间以外的时间,一般会集中在下午或者晚上。

7、对下一届软工课实践教学的建议,或者对于开学初的你,对于大一的你,对于开学初的老师,你有什么想建议和告知的呢?对于后来人的期许。

     安排软件工程这门课应该放在大二第二学期或者大三第一学期开设比较为合适,大三下学期就有些晚了,况且大三课业重,时间安排比较紧张。对于下一届上软件工程的小伙伴的几句话:一定要打好坚实的基础,只有打好了基础后面的一切才有能力去做,如果自身能力不足,很多看似美好的东西却无法实现。

四、你还有什么想说得话

       学习软件工程对于个人能力的提升有很大帮助,通过一学期的软件工程的学习,我学到了许多有关项目开发方面的经验以及知识。我们从刚开始的个人项目开始,再到两个人结对项目以及最后的小组项目,是一个成长的过程,我们从最初的无项目经验到最后的能够熟悉项目开发中的每一个流程,真的是收获了许多。老师对我们的耐心指导,我们小组成员之间的分工合作,团结协作,让我们认识到团队合作在项目开发中重要性,非常感谢老师和同学们这学期的陪伴!其次大学期间真的有必要开设这样实践性很强的课程尤其是对于计算机专业而言,没有实践,理论知识相当于纸上谈兵,“纸上得来终觉浅,绝知此事须躬行”说的就是这个道理。

 

posted @ 2018-07-12 21:07  yhy618  阅读(150)  评论(2编辑  收藏  举报