软件案例分析
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 班级博客 |
这个作业的要求在哪里 | 作业要求 |
我在这个课程的目标是 | 系统地提升软件工程能力 |
这个作业在哪个具体方面帮助我实现目标 | 通过分析软件理解软件工程的原则的重要性 |
本次作业我选择进行分析的是VS和VS Code,
第一部分 调研, 测评
VS和VS Code平时使用的比较多了,它们的区别和定位也是比较明显的。下面详细说明我在体验过程中发现的这两款软件的区别以及优缺点。
VS
VS是一个大而全的IDE,它具备着开发企业级项目的能力,有着丰富而复杂的功能以及配置选项,可以满足绝大多数需求,并且支持扩展程序开发。它本身提供的功能已经十分完善,能带给开发者完整的项目工作流支持,从版本控制,代码调试,到单元测试以及部署,各种功能一应俱全,而且调试等功能极为强大,最让我喜欢的是Edit and Continue和调试时执行流变更,可以极大的提高调试程序的效率,这是在别的IDE上体验不到的。这些能力让VS被许多人称为“宇宙最强IDE”。
不过相比于其他IDE,VS也有不少让我不喜欢的地方,希望VS能够在未来改进。
首先是它的项目文件管理,经典的VS工程是将项目文件和配置信息都写入.sln等文件中,它的实际项目结构和文件系统中的结构是不同的,这很容易导致项目文件管理混乱,而且VS生成的中间文件也是“到处都是”。 虽然VS后来支持了CMake项目,但是它的配置能力就远不如原生的VS工程强大了,希望VS能够进一步加强对CMake工程的支持。
此外还有版本控制,这一点我认为没有JetBrains的CLion做的好。虽然它们都能在代码变动后用颜色标记出有改动的行,但是CLion可以点击颜色标记并显示出具体的差异内容,对效率有很大提升,而VS没有这样的功能,并且对于颜色的刷新也很不及时,比较令人失望。此外VS的文件编码,换行符,以及Tab键等常用的设置也远不如CLion的方便。
使用VS开发C++程序
VS的bug
VS支持了Linux的远程开发,应该是基于GNU工具链的,但是我在尝试了几个项目后(QuEST,ElmerIce等),发现调试功能对许多项目(主要是复杂的工程)是不能正常使用的,VS只能在控制台报出并不清晰的错误信息。
或许Linux不是VS的重心,但是CLion的远程调试成功率要高得多。
VS Code
VS十分强大,但对于开发小项目和小程序来说可能过于“臃肿”,不过我认为这是它因强大而不能避免的。
在这一方面,就可以用VS Code来代替。VS Code是一个扩展性很强,易用的代码编辑器。
它启动迅速,功能简洁,不但具备一个文本编辑器应有的所有功能,丰富的插件支持让它可以解决各种各样的需求。并且VS Code支持远程编辑,这是我最喜欢的功能,VS Code通过远程服务器实现这一功能,这让它有着原生编辑器的体验,插件基本都可以完美支持,然后打开VS Code的Terminal窗口,上面写代码,下面敲命令调试,真是完美!
VS Code是我用过的所有文本编辑器中最好用的,不过在一些细节上和其他编辑器还有不足。
我遇到最明显的一点是查找和替换功能,相比之下,Notepad++的查找和替换可以自由切换模式,从文本比较到转义模式到正则模式,选择查找范围也更加自由,VS Code的查找和替换虽然也不弱,但在用户体验上就显得比较原始了。
使用VS Code开发C++程序
VS Code的bug
我遇到两种SSH远程编辑不能正常使用的情况:
一种是环境变量冲突。VS Code应该是基于bash程序在远程服务器进行各种操作的,因此在链接建立的过程中会加载用户目录下的.bashrc文件。在一次使用中,我再.bashrc中加载了Intel Parallel Studio的环境变量,导致VS Code的SSH服务器不能正常启动,远程编辑无法使用了。虽然修改.bashrc后可以修复问题,但是VS Code的报错信息比较令人迷惑,定位错误花了不少时间。
此外glibc的版本过旧也会导致无法使用,这一点是比较令人悲伤的,glibc作为Linux系统的核心程序,不能随便升级(否则可能导致sshd等关键程序崩溃,是高危操作),希望VS Code能多支持一些版本吧。
因glibc版本问题无法启动
此外我遇到过远程SSH上安装插件无效的情况,不过重装几次就好了,这次没有复现这个bug。
评价
VS: 好,不错 (4/5)
VS Code:非常推荐(5/5)
评分表(总分满分100,单项满分10分)
类别 | Visual Studio | VS Code | |
---|---|---|---|
功能 | 核心功能 | 9.5 | 9 |
细节 | 8 | 9 | |
用户体验 | 9 | 10 | |
辅助功能 | 9 | 8 | |
差异化功能 | 8 | 7 | |
软件效能 | 5 | 7 | |
体验 | 软件适应性 | 8 | 10 |
成长性 | 7 | 9 | |
用户有控制权 | 8 | 8 | |
便捷性 | 6 | 9 | |
总分 | 77.5 | 86 |
第二部分 分析
项目周期估计(团队人数6人左右,计算机专业大学毕业生,有专业UI支持)
VS
VS的第一个版本发布于1997年,现在已经是一个庞大的软件,我认为6人团队在有限的时间内是不能完成开发的。VS现在稳定两年迭代一个版本,如果6个毕业生完成一个版本迭代的开发,我猜测需要8年以上的时间才能取得同样的进展。
VS Code
VS Code 部分Contributors (来自Github)
从VS Code项目在Github上的统计来看,贡献者中有25个人有1万行以上的代码贡献,其中23个人依然活跃,可以认为VS Code有大约23个核心开发者,考虑VS Code的核心开发者能力高于毕业生水平。猜测6人毕业生在全面指导下需要大约6年时间完成现在程度的VS Code。
软件优劣对比
排名(来自https://pypl.github.io/IDE.html,通过Google下载页面访问量统计)
Rank | IDE | Share | Trend |
---|---|---|---|
1 | Visual Studio | 24.08 % | +1.2 % |
2 | Eclipse | 17.26 % | -4.1 % |
3 | Android Studio | 16.7 % | -0.6 % |
4 | Visual Studio Code | 6.49 % | +2.0 % |
5 | pyCharm | 6.0 % | +1.8 % |
6 | NetBeans | 5.84 % | -0.9 % |
7 | IntelliJ | 5.38 % | +0.6 % |
8 | Xcode | 4.55 % | +1.1 % |
9 | Sublime Text | 3.91 % | -0.1 % |
10 | Atom | 3.34 % | -0.4 % |
通过排名可以发现Visual Studio是使用量最高IDE。它在使用上没有致命的缺陷,同时有着十分强大的功能,而且Community版本免费,相信可以保持着Windows与C++,C#平台的市场占有率。
而代码编辑器中VS Code处于王者地位,并且还在急上升。它既美观又易用,插件丰富扩展性强大,同样有一点很重要的,免费。这些特性让它打败所有的竞争对手。
软件工程方面的建议
VS
在实际使用过程中,VS很容易出现“奇怪”的bug。应该很多同学都遇到过,VS突然就无法编译/无法允许/代码高亮错误/Error信息错误的情况,然后重新新建一个项目就又正常了。
我也遇到过这类情况,但是没有实锤是VS程序层面的bug,因为VS的配置十分复杂,构建流程也相应的比较复杂,可能很多时候因为不知道具体情况而无法通过修改配置来解决问题。
希望VS能够在项目复杂度和开发易用度上建立一条更加平滑的曲线,让更多初学者能够更稳定的学会VS的使用,而不会遇到难以解决的问题。
在第一部分发现的bug,为什么不能修复?
VS Code
VS Code对于SSH有一个troubleshooting的文档,其中介绍了很多种情况的解决办法,主要是依赖于用户通过修改系统的配置或者环境来解决问题。因此我认为这是软件团队有意不修复。
VS Code作为一个MIT协议下的软件,没有义务对使用者提供任何的维护保证和功能性保证。因此我认为,出现一些棘手的但是是由不同运行环境造成的bug,VS Code团队倾向于让用户把自己的环境变得能够运行VS Code,而不是VS Code主动去适应各种各样的环境,这应该是一个开源软件维护团队的成本所限制的。
第三部分 建议和规划
这个软件有很多可以提高的部分,如果你是新上任的项目经理,如何提高从而在竞争中胜出?
-
首先,市场有多大?潜在的用户有多少?
Daxx的分析显示,2023年全球会有2700万的软甲开发者。VS和VS Code作为支持大多数类型项目的开发工具,能够在这个数量级的市场上去竞争潜在用户。
-
目前市场上有什么样的产品了,它们的优势劣势在哪里?和它直接竞争的产品在那里?
与VS竞争的产品:
-
Eclipse
- 优点:对Linux有良好的支持
- 缺点:运行缓慢,编程和配置复杂
-
IntelliJ, PyCharm,Android Studio等JetBrains系IDE
- 优点:代码提示和重构功能更加智能
- 缺点:大型项目启动缓慢(索引缓慢)
-
NetBeans
- 优点:占用系统资源少
- 缺点:代码提升功能较差
-
-
作为新的项目经理,这个产品的核心用户群是什么样的人,典型用户长什么样?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?
核心用户群:软件工程师和相关专业学生。
学历:大学本科及以上
年龄:青年为主
爱好:技术宅,喜欢钻研更多的功能。
收入:较高于平均水平。
表明需求:提高工作效率的软件。
潜在需求:界面美观,操作舒适。
-
功能:你要设计什么样的功能?为何要做这个功能,而不是其他功能?为什么用户会用你的产品/功能?你的创新在哪里?可以用NABCD分析.
内嵌的插件开发套件。
因为使用该软件的大多都是程序员,所以如果有新的需求出现,用户是可以自己开发的。虽然VS和VS Code支持插件开发,但是需要配置额外的开发环境,成本较高。这个功能有助于进一步满足用户的需求,可以提高用户粘性和满意度,如同经久不衰的Vim和Emacs。
- N(Need):定制化的功能
- A(Approach):开发插件或扩展
- B(Benefit):满足用户的独特需求
- C(Competitors):比其他软件更容易满足用户需求,更加易用
- D(Delivery):除日常更新宣传,可以在开发者社区进行宣传