软件工程———个人总结

一、回想开学初对于软件工程这门课的期望,总结本课程对你带来的提升:

1.学习和使用的新软件

  • Git
    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
    每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务器。其最大特色就是“分支”及“合并”操作非常快速、简便。
    通过使用Git学会了如何创建自己的项目仓库,创建分支,提交自己的代码至本地仓库,再pull远程仓库,便于团队合作。也学会了如何解决他人代码与自己代码冲突的解决办法。

2.学习和使用的新工具

  • Enterprise Architect
    Enterprise Architect是一个全功能的、基于UML的visual CASE工具,主要用于设计、编写、构建并管理以目标为导向的软件系统。它支持用户案例、商务流程模式以及动态的图表、分类、界面、协作、结构以及物理模型。此外,它还支持C++、Java、Visual Basic、Delphi、C以及VB.Net。
    Enterprise Architect在软件工程课中主要用来画Use case图、类图、顺序图等在工程开发中需要的各种图。
  • Markdown编辑器
    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
    Markdown的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。

3.学习和掌握的新语言、新平台

  • C#
    C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。
    C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
    结对编程时,使用C#编写用户界面比较方便,所以学习这门语言。
  • MVC开发
    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
    MVC的优点是耦合性低、重用性高、生命周期成本低、部署快、可维护性高、有利软件工程化管理。
    因为我们做的项目是基于微信的藏医药平台,所以在网页设计这块选择了MVC进行网页的开发。通过完成这个项目,也学习使用了一般的MVC开发。直到如何建立模型类,建立视图,并通过控制器实现前端页面与数据库的简单交互。

4.完成的代码

大概在2000行左右吧,算上结对编程的计算器以及MVC的网页设计。

5.学习和掌握的新方法

  • 需求分析
    需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
  • 单元测试
    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
    通过单元测试,可以解决减少软件可能会出现的各种bug。这对于提高程序的可执行性有着极大的作用。
  • 白盒测试和黑盒测试
    白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
    黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

总结与展望

1记录自己在软件工程课程上的经验总结

  • 软件开发领域中的知识在于积累。
  • 做软件开发,就类似算数学题和世界杯足球赛一样:重在结果,而不在乎过程。
  • 软件服务于人类,软件是在解决一些生活中的问题和错误,问题决定解决方案。
    遇到问题应该怎么去解决? 
  • 不明白就多问,不要自已一直去琢磨。  
  • 一个问题如果30分钟还没有解决就应该考虑是不是问问别人。
    怎么样才能做好软件开发?
  • 首先要明白解决的问题是什么,理解问题,其次再决定怎么解决这个问题。所以首要的事,需求分析一定要做好。
  • 碰到很复杂的问题,我们就简单想,把问题简单化,细化到能够实现为止。
  • 出了问题,我们要先分析问题,然后知道引起问题的原因,最后并想出问题的解决办法。
    2对于下一届的学弟学妹你有什么建议和告知呢?
  • 对于软件工程这门课程,仅仅学会理论知识是远远不够的,我们要结合实践加深加强对理论的理解。
  • 要做好软件开发,要有一定基础的编程语言基础,所以要在大一学好程序设计基础这门课程。
  • 软件开发不是一个人可以简单完成的事(如果你的项目足够大的话),毕竟一个人的能力是有限的,所以要学会团队合作,发挥着各自的长处,共同完成项目。
    3分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》团队合作的阶段,你们团队经历过么?最后到达了哪一阶段?
    我所处团队的项目是藏医药的微信平台。团队合作之初,我们共同讨论对于项目的需求分析,用户分析,功能主体模块分析。进入开发阶段时,我们确定了团队分工,任务分配。在项目测试阶段,共同对项目功能的实现进行测试。但是其实,在团队分工之后,团队出现了严重的问题,因为各种原因,项目的进度一再延后,主要是一些成员分工未能按时完成,导致最后大家又要去完成他们的分工。团队合作在项目开发中是很重要的,这次的经验教训会总结,在将来的团队合作中避免出现这样的问题。

个人总结补充

对于《构建之法》几个不懂的问题:
  • 问题1:
    (回答内容参考和引用了知乎上的评论)
    https://www.zhihu.com/question/20331201
    https://www.zhihu.com/question/21533684
    (第三章 软件工程师的成长)在看到那个精通魔方的例子时,我想到,我们想在已经学习了C、C++、Java语言的一些基础,我们或许没有可能做到真正意义上的精通各种语言,但是精通一种还是可以做到的。然而在开发项目时,我们可能会用到各种语言编写代码。若是这个项目我们用某种语言编写会相对更加方便一点,但是我们不是特别精通的,使用时可能要一边做,一边学习。而使用精通的语言去写,我们会很熟练,但对于解决项目中的一些问题可能会更多的时间,我们应该怎么做?
    答:在日复一日的编程工作中,作为程序员来说一定要懂得相应的编程语言,但我们是需要掌握一种语言还是多种语言,对于程序员来讲肯定是掌握多种语言更有优势,学习不止一种语言的几大原因:
  • 可以更好地实现用多种方式来解决同样的问题,懂得不同的语言就意味着拥有更多的选择,这也正好应正了那句古语,当你只有锤子的时候,无论你看到什么都像是钉子。
  • 学习和掌握的语言类型越多,就更有竞争力,拥有更多的就业机会,作为程序员的你,应该不难发现,学习了第二门编程语言之后,有时候可以增加一倍你可以胜任职位的数量,但关键还取决于你学习的语言,可无论怎么说,这都会给你增加就业的机会。
  • 这是一个很有趣的过程,在学习新内容或是新东西的过程中可以很好地充实你的大脑,帮助你在一个新的领域当中更好的成长和提高。
  • 能够紧跟当前的技术发展趋势,只要你知道哪个行业处于独领风骚的行列,便可以永远站在潮流的尖端,无论何时你的技能都不会过时。
  • 这个学习过程也可以很好地表明你能够学习新的语言,你的雇主可以更好地了解到你并不是一个死板的程序员。
  • 掌握更多的语言能够帮助你成为一个更好地程序员,同时可以帮助你提高所在语言之间转移的技能。
  • 针对工作需求选用更好的工具,每种语言都有特定的使用环境,言外之意就是说如果知道更多的语言可以再工作需求当中选用更好的工具。
  • 学习的过程同样还表明你是一个快速的学习者,对于接受新知识的能力很强。
  • 问题2:
    (第三章 软件工程师的成长)团队合作时,当面对是承认自己的错误,推迟计划时间去改正还是按计划提交最后影响团队进度时,我们无论如何抉择都会影响整体进度,但我们应该怎样正确地做出选择,以使团队损失降到最小?(Page 57 4—案例)
    答:有错误就应该用于承担,不能因为面子问题而去影响团队。我们承担了错误,才有利于我们引起重视,避免下次再犯。
  • 问题3:
    (第五章 团队与流程)主治医师模式由核心人员负责处理主要的模块,其他团队成员从各个方面从旁协助。在学习中我们也经常有这种需要团队合作的作业,但往往的情况是,在团队成员确定之初,大家都有积极的表现,随着项目的进行,有的成员会无所事事,分配的任务也不能按时完成或是置之不理,这种时候,其他成员不得不接手他的任务,增加工作量。若是任由这种情况发生,会使其他成员不满,可能会出现更多的这种情况。若是就此将他踢出团队,毫无疑问会影响项目的完成计划。所以,这种情况我们应该如何处理?(Page 89)
    答:对于团队中的蛀虫,我们应该采取的态度是绝不容忍,这种人会影响团队的和谐,不利于团队合作。所以即使因为少一个人影响短期进度,我们也不能因此就容忍这种事情发生。
  • 问题4:
    (第八章 需求分析)我们在获取客户需求时,通常是将客户的要求放在第一位的。但是通常要求我们开发软件的客户不是学习我们这个专业的,他们对我们的专业知识所知不多或者是一无所知。因此即使客户提出一个错误的要求并且要求我们一定要做到,我们也要将客户的要求放在第一位吗?
    答:需求分析师项目开发的第一步,是整个项目的指引,所以需求分析我们要做到尽善尽美,对于这种问题,我们应该积极做好和客户的沟通,确保做出正确的需求分析,从而不会影响项目的后期开发。
  • 问题5:
    铱星计划的手机的失败在于他考虑到了用户使用时的各种情况,却把重点放在了少部分用户的特殊情况,从而在更多更广的普通用户方面做得不如其他手机,可以说是因小失大。但是若是我们想要增加的功能不会影响所想要实现的大众功能,且大部分用户可能会用到,但是也可能永远不会用到(比如说洗衣机上的对各种不同衣物的清洗,大部分情况下其实只用到了一种),那么这个功能我们是否有必要去实现?(Page 330 迷思之六)
    答:项目前期做好的需求分析需要我们实现的功能,我们应该把精力集中到这些上面。对于那些不必要的功能,我们可以结合实际情况,再做决定。

你可能感兴趣的:(软件工程———个人总结)